mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-18 19:21:34 +08:00
chore(): begin adding ionic components to mono-repo.
This commit is contained in:
@ -0,0 +1,75 @@
|
||||
module.exports = function collectInputsOutputs() {
|
||||
return {
|
||||
|
||||
$runBefore: ['rendering-docs'],
|
||||
$process: function(docs) {
|
||||
docs.forEach(function(doc) {
|
||||
|
||||
if (doc.members && doc.members.length) {
|
||||
var members = [];
|
||||
var inputs = [];
|
||||
var outputs = [];
|
||||
|
||||
memberLoop:
|
||||
for (var i in doc.members) {
|
||||
|
||||
// identify properties to differentiate from methods
|
||||
if (typeof doc.members[i].parameters == 'undefined') {
|
||||
doc.members[i].isProperty = true;
|
||||
}
|
||||
|
||||
if (doc.members[i].decorators && doc.members[i].decorators.length) {
|
||||
|
||||
decoratorLoop:
|
||||
for (var ii in doc.members[i].decorators) {
|
||||
|
||||
if (doc.members[i].decorators[ii].name == 'Input') {
|
||||
inputs.push(parseMember(doc.members[i]));
|
||||
continue memberLoop;
|
||||
}
|
||||
if (doc.members[i].decorators[ii].name == 'Output') {
|
||||
outputs.push(parseMember(doc.members[i]));
|
||||
continue memberLoop;
|
||||
}
|
||||
}
|
||||
// not an input or output, must be a plain member
|
||||
members.push(doc.members[i]);
|
||||
} else {
|
||||
members.push(doc.members[i]);
|
||||
};
|
||||
}
|
||||
|
||||
// update doc with pruned members list and add inputs and outputs
|
||||
doc.members = members.sort(alphabetize);
|
||||
doc.inputs = inputs.sort(alphabetize);
|
||||
doc.outputs = outputs.sort(alphabetize);
|
||||
}
|
||||
|
||||
function alphabetize(a, b) {
|
||||
if (!a.name) {
|
||||
return 1;
|
||||
} else if (!b.name) {
|
||||
return -1;
|
||||
} else if (a.name < b.name) {
|
||||
return -1;
|
||||
} else if (a.name > b.name) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function parseMember(member) {
|
||||
member.type = member.content.substring(
|
||||
member.content.indexOf('{') + 1,
|
||||
member.content.indexOf('}')
|
||||
);
|
||||
member.description = member.content.substring(
|
||||
member.content.indexOf('}') + 1,
|
||||
member.content.length
|
||||
);
|
||||
return member;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
@ -0,0 +1,19 @@
|
||||
module.exports = function removePrivateApi() {
|
||||
return {
|
||||
name: 'remove-private-api',
|
||||
description: 'Prevent the private apis from being rendered',
|
||||
$runAfter: ['paths-computed'],
|
||||
$runBefore: ['rendering-docs'],
|
||||
$process: function(docs) {
|
||||
var publicDocs = [];
|
||||
docs.forEach(function(doc){
|
||||
if (!doc.private && (!doc.tags || !doc.tags.tagsByName.get('hidden'))){
|
||||
publicDocs.push(doc);
|
||||
return doc
|
||||
}
|
||||
})
|
||||
docs = publicDocs;
|
||||
return docs;
|
||||
}
|
||||
}
|
||||
};
|
26
packages/ionic-angular/scripts/docs/processors/index-page.js
Normal file
26
packages/ionic-angular/scripts/docs/processors/index-page.js
Normal file
@ -0,0 +1,26 @@
|
||||
module.exports = function indexPage(renderDocsProcessor) {
|
||||
return {
|
||||
name: 'index-page',
|
||||
description: 'Create documentation index page',
|
||||
$runAfter: ['adding-extra-docs'],
|
||||
$runBefore: ['extra-docs-added'],
|
||||
$process: function(docs) {
|
||||
//TODO(tlancina): move versionData into its own service
|
||||
var versionData = renderDocsProcessor.extraData.version;
|
||||
var currentVersion = versionData.current.name;
|
||||
var latestVersion = versionData.latest.name;
|
||||
|
||||
// var versionPath = currentVersion == 'nightly' ? '' : currentVersion;
|
||||
// If latest and not initial build, set path to docs root
|
||||
var versionPath = (currentVersion == latestVersion) && !versionData.initialVersionBuild ? '' : currentVersion;
|
||||
|
||||
docs.push({
|
||||
docType: 'index-page',
|
||||
id: 'index-page',
|
||||
currentVersion: currentVersion,
|
||||
template: 'api_index.template.html',
|
||||
outputPath: 'content/docs/' + versionPath + '/api/index.md'
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
58
packages/ionic-angular/scripts/docs/processors/jekyll.js
Normal file
58
packages/ionic-angular/scripts/docs/processors/jekyll.js
Normal file
@ -0,0 +1,58 @@
|
||||
module.exports = function jekyll(renderDocsProcessor) {
|
||||
return {
|
||||
name: 'jekyll',
|
||||
description: 'Create jekyll includes',
|
||||
$runAfter: ['paths-computed'],
|
||||
$runBefore: ['rendering-docs'],
|
||||
$process: function(docs) {
|
||||
var currentVersion = renderDocsProcessor.extraData.version.current.name;
|
||||
|
||||
// pretty up and sort the docs object for menu generation
|
||||
docs = docs.filter(function(doc) {
|
||||
return (!!doc.name && !!doc.outputPath) || doc.docType === 'index-page';
|
||||
});
|
||||
docs.sort(function(a, b) {
|
||||
textA = a.name ? a.name.toUpperCase() : '';
|
||||
textB = b.name ? b.name.toUpperCase() : '';
|
||||
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
|
||||
});
|
||||
docs.forEach(function(doc, i) {
|
||||
docs[i].URL = doc.outputPath.replace('docs//', 'docs/')
|
||||
.replace('/index.md', '')
|
||||
.replace('//home/ubuntu/ionic/src', '')
|
||||
.replace('//', '/')
|
||||
.replace('content/', '');
|
||||
if (docs[i].relativePath) {
|
||||
docs[i].relativePath = doc.relativePath
|
||||
.replace('/home/ubuntu/ionic', '');
|
||||
}
|
||||
if (docs[i].href) {
|
||||
docs[i].href = doc.href.replace('content/', '');
|
||||
}
|
||||
});
|
||||
|
||||
docs.push({
|
||||
docType: 'api-menu',
|
||||
id: 'api-menu',
|
||||
template: 'api_menu.template.html',
|
||||
outputPath: 'content/_includes/fluid/api_menu.html'
|
||||
});
|
||||
docs.push({
|
||||
docType: 'api-menu-flat-version',
|
||||
id: 'api-menu-flat-version',
|
||||
template: 'api_menu_flat_version.template.html',
|
||||
outputPath: 'content/_includes/fluid/api_menu_flat_' + currentVersion +
|
||||
'.html'
|
||||
});
|
||||
docs.push({
|
||||
docType: 'api-version-select',
|
||||
id: 'api-version-select',
|
||||
template: 'api_version_select.template.html',
|
||||
outputPath: 'content/_includes/fluid/api_version_select.html'
|
||||
});
|
||||
|
||||
// returning docs will replace docs object in the next process
|
||||
return docs;
|
||||
}
|
||||
};
|
||||
};
|
@ -0,0 +1,33 @@
|
||||
var copy = require('cpr').cpr;
|
||||
var mkdirp = require('mkdirp');
|
||||
var path = require('canonical-path');
|
||||
var q = require('q');
|
||||
var fs = require('fs');
|
||||
|
||||
module.exports = function latestVersion(renderDocsProcessor) {
|
||||
return {
|
||||
name: 'latest-version',
|
||||
$runAfter: ['files-written'],
|
||||
description: 'Copy the latest version (that was compiled to docs/) into docs/versionName',
|
||||
$process: function(docs) {
|
||||
var versionData = renderDocsProcessor.extraData.version;
|
||||
|
||||
var docsBase = 'dist/ionic-site/content/docs/';
|
||||
var versionDir = path.resolve(docsBase, versionData.latest.name);
|
||||
var latestDir = path.resolve(docsBase, 'api');
|
||||
|
||||
var deferred = q.defer();
|
||||
|
||||
mkdirp(versionDir, function() {
|
||||
copy(latestDir, path.join(versionDir, 'api'), {
|
||||
deleteFirst: true,
|
||||
overwrite: true
|
||||
}, function(err, files) {
|
||||
deferred.resolve(docs);
|
||||
});
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
}
|
||||
};
|
@ -0,0 +1,21 @@
|
||||
module.exports = function parseOptional() {
|
||||
return {
|
||||
$runBefore: ['rendering-docs'],
|
||||
$process: function(docs) {
|
||||
docs.forEach(function(doc) {
|
||||
if(doc.members && doc.members.length) {
|
||||
for (var i in doc.members) {
|
||||
if(doc.members[i].params && doc.members[i].params.length) {
|
||||
for (var ii in doc.members[i].params) {
|
||||
if(doc.members[i].params[ii].optional){
|
||||
doc.members[i].params[ii].description += '<strong class="tag">Optional</strong>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return docs;
|
||||
}
|
||||
}
|
||||
};
|
@ -0,0 +1,50 @@
|
||||
module.exports = function parseReturnsObject() {
|
||||
|
||||
/*
|
||||
* This processor assumes the format:
|
||||
* @returns {object} object general description
|
||||
* {number} objectName.propertyName property description
|
||||
* {number} objectName.propertyName objectName.propertyName
|
||||
* ...
|
||||
*
|
||||
*/
|
||||
return {
|
||||
name: 'parse-returns-object',
|
||||
description: 'If a method returns an object, and the values are listed ' +
|
||||
'out, parse them in to anobject that can be iterated by dgeni',
|
||||
$runBefore: ['rendering-docs'],
|
||||
$process: function(docs) {
|
||||
var publicDocs = [];
|
||||
docs.forEach(function(doc, i) {
|
||||
if (doc.members) {
|
||||
docs[i].members.forEach(function(member, ii) {
|
||||
if (member.returns && member.returns.typeExpression == 'object') {
|
||||
var params = docs[i].members[ii].returns.description.split('\n{');
|
||||
docs[i].members[ii].returns.description = params.shift();
|
||||
if (params.length) {
|
||||
docs[i].members[ii].returns.description = docs[i].members[ii]
|
||||
.returns.description
|
||||
.replace(/^(\w+)/, '<span class="fixed-width">$1</span>');
|
||||
docs[i].members[ii].returnsObjectParams = parseReturn(params);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return docs;
|
||||
|
||||
function parseReturn(lineArray) {
|
||||
var params = [];
|
||||
lineArray.forEach(function(line, l) {
|
||||
params.push({
|
||||
type: line.substr(0, line.indexOf('} ')),
|
||||
key: line.substr(line.indexOf('} ') + 2,
|
||||
line.indexOf(' ') - line.indexOf('} ') - 2),
|
||||
description: line.substr(line.indexOf(' ') + 2)
|
||||
});
|
||||
});
|
||||
return params;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
170
packages/ionic-angular/scripts/docs/processors/parse-sass.js
Normal file
170
packages/ionic-angular/scripts/docs/processors/parse-sass.js
Normal file
@ -0,0 +1,170 @@
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var Q = require('q');
|
||||
var sassdoc = require('sassdoc');
|
||||
|
||||
module.exports = function parseSass () {
|
||||
return {
|
||||
$runBefore: ['rendering-docs'],
|
||||
$process: function (docs) {
|
||||
|
||||
var folders = [];
|
||||
var docsByComponent = [];
|
||||
var promises = [];
|
||||
var returnPromise = Q.defer();
|
||||
|
||||
// for each doc, check if new folder(component)
|
||||
// if yes, get styles promises
|
||||
docs.forEach( function(doc, index) {
|
||||
if (doc.fileInfo) {
|
||||
var folder = doc.fileInfo.filePath
|
||||
.split('/')
|
||||
.filter( function (item, index, self) {
|
||||
return index !== self.length - 1;
|
||||
})
|
||||
.join('/');
|
||||
if(folders.indexOf(folder) === -1) {
|
||||
folders.push(folder);
|
||||
docsByComponent.push([doc]);
|
||||
promises.push( getStyles(folder, docsByComponent.length - 1) );
|
||||
} else {
|
||||
docsByComponent[folders.indexOf(folder)].push(doc);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// when all promises are completed, add sass info
|
||||
Q.allSettled(promises).spread( function () {
|
||||
var folders = Array.prototype.map.bind(arguments)(function (item) {
|
||||
return item.value;
|
||||
});
|
||||
appendStyles(folders, docsByComponent);
|
||||
returnPromise.resolve(docs);
|
||||
}).catch( function (error) {
|
||||
console.log('SASS ERROR: ' + error);
|
||||
returnPromise.resolve(docs);
|
||||
});
|
||||
|
||||
return returnPromise.promise;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function appendStyles(folders, docsByComponent) {
|
||||
folders.forEach( function (folder) {
|
||||
|
||||
var styles = formatStyles(folder);
|
||||
|
||||
if (styles.length) {
|
||||
docsByComponent[folder.index].forEach( function (doc) {
|
||||
doc.sassVariables = styles;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function formatStyles (folder) {
|
||||
|
||||
// container for holding styles by platform
|
||||
var concatenatedStyles = {};
|
||||
|
||||
// extract styles
|
||||
folder.styles.filter( function (file) {
|
||||
return file.data && file.data.length;
|
||||
}).forEach( function (file) {
|
||||
|
||||
var props = file.data.filter( function (item) {
|
||||
return item.property && item.property.length;
|
||||
}).map( function (item) {
|
||||
|
||||
var property = item.property[0];
|
||||
|
||||
return {
|
||||
name: item.context.name || '',
|
||||
default: item.context.value || '',
|
||||
description: property.description || '',
|
||||
};
|
||||
});
|
||||
|
||||
if( concatenatedStyles[file.platform] ) {
|
||||
concatenatedStyles[file.platform] = concatenatedStyles[file.platform].concat(props);
|
||||
} else {
|
||||
concatenatedStyles[file.platform] = props;
|
||||
}
|
||||
});
|
||||
|
||||
// place in Array
|
||||
var formattedStyles = [];
|
||||
|
||||
['base', 'ios', 'md', 'wp'].forEach( function (platform) {
|
||||
if ( concatenatedStyles[platform] ) {
|
||||
formattedStyles.push({
|
||||
platform: platform,
|
||||
props: concatenatedStyles[platform]
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return formattedStyles;
|
||||
}
|
||||
|
||||
function getStyles (folder, docIndex) {
|
||||
|
||||
var returnPromise = Q.defer();
|
||||
|
||||
// generate file names to check
|
||||
var extension = 'scss';
|
||||
|
||||
var allFiles = fs.readdirSync(folder);
|
||||
|
||||
var removeNonSass = function (filename) {
|
||||
return filename.split('.').pop() === extension;
|
||||
};
|
||||
|
||||
var toFileObject = function (filename) {
|
||||
// determine platform
|
||||
var platform = filename.split('.')[1];
|
||||
|
||||
if ( ['ios', 'md', 'wp'].indexOf(platform) === -1 ) {
|
||||
platform = 'base';
|
||||
}
|
||||
|
||||
return {
|
||||
platform: platform,
|
||||
path: path.join(folder, filename)
|
||||
};
|
||||
};
|
||||
|
||||
var files = allFiles.filter(removeNonSass).map(toFileObject);
|
||||
|
||||
// for each file, fetch styles
|
||||
var promises = files.map( function (file) {
|
||||
return Q.promise( function (resolve, reject) {
|
||||
fs.access(file.path, function (err) {
|
||||
if (!err) {
|
||||
sassdoc.parse(file.path )
|
||||
.then( function (data) {
|
||||
resolve( { platform: file.platform, data: data });
|
||||
}).catch( function (error) {
|
||||
reject(error);
|
||||
});
|
||||
} else {
|
||||
// file doesn't exist
|
||||
resolve({ platform: file.platform, data: null });
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// when all promises are finished, return the results
|
||||
Q.allSettled(promises).then( function (results) {
|
||||
var styles = results.map( function (style) {
|
||||
return style.value;
|
||||
});
|
||||
returnPromise.resolve({ index: docIndex, styles: styles });
|
||||
}).catch( function (error) {
|
||||
returnPromise.reject(error);
|
||||
});
|
||||
|
||||
return returnPromise.promise;
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
module.exports = function removePrivateMembers() {
|
||||
return {
|
||||
name: 'remove-private-members',
|
||||
description: 'Remove member docs with @private tags',
|
||||
$runAfter: ['tags-parsed'],
|
||||
$runBefore: ['rendering-docs'],
|
||||
$process: function(docs) {
|
||||
docs.forEach(function(doc) {
|
||||
if (doc.members) {
|
||||
doc.members = doc.members.filter(function(member) {
|
||||
return !member.tags.tagsByName.get('hidden') && !member.tags.tagsByName.get('internal');
|
||||
});
|
||||
}
|
||||
if (doc.statics) {
|
||||
doc.statics = doc.statics.filter(function(staticMethod) {
|
||||
return !staticMethod.tags.tagsByName.get('hidden') && !staticMethod.tags.tagsByName.get('internal')
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return docs;
|
||||
}
|
||||
};
|
||||
};
|
@ -0,0 +1,52 @@
|
||||
// var _ = require('lodash');
|
||||
// var fs = require('fs');
|
||||
// var semver = require('semver');
|
||||
// var path = require('canonical-path');
|
||||
//
|
||||
// module.exports = {
|
||||
// name: 'version-data',
|
||||
// runBefore: ['reading-files'],
|
||||
// description: 'Expose version data to templates',
|
||||
// process: function(extraData, config) {
|
||||
// var basePath = config.get('basePath');
|
||||
// var outputFolder = config.get('rendering.outputFolder');
|
||||
// var currentVersion = config.get('currentVersion');
|
||||
//
|
||||
// var docsBaseFolder = path.resolve(basePath, outputFolder, 'docs');
|
||||
//
|
||||
// var versions;
|
||||
// try {
|
||||
// versions = fs.readdirSync(docsBaseFolder)
|
||||
// .filter(semver.valid)
|
||||
// .sort(semver.rcompare);
|
||||
// } catch(e) {
|
||||
// versions = [];
|
||||
// }
|
||||
//
|
||||
// !_.contains(versions, currentVersion) && versions.unshift(currentVersion);
|
||||
// !_.contains(versions, 'nightly') && versions.unshift('nightly');
|
||||
//
|
||||
// //First semver valid version is latest
|
||||
// var latestVersion = _.find(versions, semver.valid);
|
||||
// versions = versions.map(function(version) {
|
||||
// //Latest version is in docs root
|
||||
// var folder = version == latestVersion ? '' : version;
|
||||
// return {
|
||||
// href: path.join('/', config.get('versionFolderBase') || '', folder),
|
||||
// folder: folder,
|
||||
// name: version
|
||||
// };
|
||||
// });
|
||||
//
|
||||
// var versionData = {
|
||||
// list: versions,
|
||||
// current: _.find(versions, { name: currentVersion }),
|
||||
// latest: _.find(versions, {name: latestVersion}) || _.first(versions)
|
||||
// };
|
||||
//
|
||||
// config.set('rendering.contentsFolder',
|
||||
// path.join(config.get('versionFolderBase') || '', versionData.current.folder || ''));
|
||||
// config.set('versionData', versionData);
|
||||
// extraData.version = versionData;
|
||||
// }
|
||||
// };
|
Reference in New Issue
Block a user