diff --git a/scripts/config.json b/scripts/config.json index dd051dc14..3ea0d4e91 100644 --- a/scripts/config.json +++ b/scripts/config.json @@ -1,5 +1,6 @@ { "sitePath": "../ionic-site", "v2DocsDir": "docs/v2/native", - "docsDest": "../ionic-site/content/docs/v2/native" + "docsDest": "../ionic-site/content/docs/v2/native", + "pluginDir": "src/@ionic-native/plugins" } diff --git a/scripts/docs/dgeni-config.js b/scripts/docs/dgeni-config.js index d79ca7faa..de4ed1c10 100644 --- a/scripts/docs/dgeni-config.js +++ b/scripts/docs/dgeni-config.js @@ -120,7 +120,7 @@ module.exports = function(currentVersion) { readTypeScriptModules.basePath = path.resolve(path.resolve(__dirname, '../..')); readTypeScriptModules.sourceFiles = [ - 'src/index.ts' + './src/@ionic-native/plugins/**/*.ts' ]; }) @@ -148,7 +148,7 @@ module.exports = function(currentVersion) { // Configure file writing .config(function(writeFilesProcessor) { - writeFilesProcessor.outputFolder = config.sitePath; + writeFilesProcessor.outputFolder = './src/@ionic-native/plugins2/'; }) // Configure rendering diff --git a/scripts/docs/dgeni-readmes-config.js b/scripts/docs/dgeni-readmes-config.js new file mode 100644 index 000000000..cdeb1d5bb --- /dev/null +++ b/scripts/docs/dgeni-readmes-config.js @@ -0,0 +1,184 @@ +var Package = require('dgeni').Package; +var jsdocPackage = require('dgeni-packages/jsdoc'); +var nunjucksPackage = require('dgeni-packages/nunjucks'); +var typescriptPackage = require('./typescript-package'); +var linksPackage = require('./links-package'); +var gitPackage = require('dgeni-packages/git'); +var path = require('path'); +var semver = require('semver'); +var fs = require('fs'); +var _ = require('lodash'); +var config = require('../config.json'); +var projectPackage = require('../../package.json'); + +// jscs:disable validateIndentation + +// Define the dgeni package for generating the docs +module.exports = function(currentVersion) { + + return new Package('ionic-v2-docs', + [jsdocPackage, nunjucksPackage, typescriptPackage, + linksPackage, gitPackage]) + +// .processor(require('./processors/latest-version')) +.processor(require('./processors/jekyll')) +.processor(require('./processors/remove-private-members')) +.processor(require('./processors/hide-private-api')) +.processor(require('./processors/collect-inputs-outputs')) + +// for debugging docs +// .processor(function test(){ +// return { +// +// $runBefore: ['rendering-docs'], +// $process: function(docs){ +// docs.forEach(function(doc){ +// if (doc.name == "Camera"){ +// +// // console.log(doc.tags); +// // doc.tags.forEach(function(tag){ +// // if(tag.tagName == 'classes'){ +// // +// // } +// // }); +// +// // doc.moduleDoc.exports.forEach(function(d,i){ +// // if(d.name === 'CameraOptions') { +// // console.log('Name: ' + d.name); +// // console.log('Type: ' + d.docType); +// // console.log('First member: ', d.members[0]); +// // } +// // }); +// +// +// // var exports = doc.exportSymbol.parent.exports; +// // for(var p in exports) { +// // if(p == 'CameraOptions') +// // { +// // var x = exports[p]; +// // console.log(x.members.quality); +// // } +// // } +// // doc.members.forEach(function(method){ +// // if (method.name === "getPicture") { +// // console.log(method); +// // } +// // }) +// } +// }) +// } +// } +// }) +.config(function(log) { + log.level = 'error'; //'silly', 'debug', 'info', 'warn', 'error' +}) + +.config(function(renderDocsProcessor, computePathsProcessor, versionInfo) { + + versions = []; + // new version, add it to the versions list + if (currentVersion != 'nightly' && !_.includes(versions, currentVersion)) { + versions.unshift(currentVersion); + } + //First semver valid version is latest + var latestVersion = _.find(versions, semver.valid); + versions = versions.map(function(version) { + // We don't separate by versions so always put the docs in the root + var folder = ''; + return { + href: '/' + config.v2DocsDir.replace('content/', ''), + folder: folder, + name: version + }; + }); + + var versionData = { + list: versions, + current: _.find(versions, {name: currentVersion}), + latest: _.find(versions, {name: latestVersion}) || _.first(versions) + }; + + renderDocsProcessor.extraData.version = versionData; + renderDocsProcessor.extraData.versionInfo = versionInfo; + computePathsProcessor.pathTemplates = [{ + docTypes: ['class', 'var', 'function', 'let'], + getOutputPath: function(doc) { + return doc.originalModule.replace(config.pluginDir + '/', '') + .replace('/index', '') + '/README.md'; + } + }]; +}) + +//configure file reading +.config(function(readFilesProcessor, readTypeScriptModules) { + + // Don't run unwanted processors since we are not using the normal file reading processor + readFilesProcessor.$enabled = false; + readFilesProcessor.basePath = path.resolve(__dirname, '../..'); + + readTypeScriptModules.basePath = path.resolve(path.resolve(__dirname, + '../..')); + readTypeScriptModules.sourceFiles = [ + './src/@ionic-native/plugins/**/*.ts' + ]; +}) + +.config(function(parseTagsProcessor) { + parseTagsProcessor.tagDefinitions = parseTagsProcessor.tagDefinitions + .concat(require('./tag-defs/tag-defs')); +}) + +// .config(function(parseTagsProcessor) { +// // We actually don't want to parse param docs in this package as we are +// // getting the data out using TS +// parseTagsProcessor.tagDefinitions.forEach(function(tagDef) { +// console.log(tagDef); +// if (tagDef.name === 'param') { +// tagDef.docProperty = 'paramData'; +// tagDef.transforms = []; +// } +// }); +// }) + +// Configure links +.config(function(getLinkInfo) { + getLinkInfo.useFirstAmbiguousLink = false; +}) + +// Configure file writing +.config(function(writeFilesProcessor) { + writeFilesProcessor.outputFolder = './' + config.pluginDir; +}) + +// Configure rendering +.config(function(templateFinder, templateEngine) { + + // Nunjucks and Angular conflict in their template bindings so change the Nunjucks + // Also conflict with Jekyll + templateEngine.config.tags = { + variableStart: '<$', + variableEnd: '$>', + blockStart: '<@', + blockEnd: '@>', + commentStart: '<#', + commentEnd: '#>' + }; + + // add custom filters to nunjucks + templateEngine.filters.push( + require('./filters/capital'), + require('./filters/code'), + require('./filters/dump') + ); + + templateFinder.templateFolders.unshift(path.resolve(__dirname, 'templates')); + + // Specify how to match docs to templates. + templateFinder.templatePatterns = [ + '${ doc.template }', + '${ doc.docType }.template.md', + 'common.template.html' + ]; +}); + +}; diff --git a/scripts/docs/gulp-tasks.js b/scripts/docs/gulp-tasks.js index 19d246581..58a3a8a69 100644 --- a/scripts/docs/gulp-tasks.js +++ b/scripts/docs/gulp-tasks.js @@ -7,7 +7,23 @@ module.exports = function(gulp) { try { var ionicPackage = require('./dgeni-config')(projectPackage.version); var dgeni = new Dgeni([ionicPackage]); - return dgeni.generate(); + return dgeni.generate().then(function(docs) { + console.log(docs.length + ' docs generated'); + }); + } catch (err) { + console.log(err.stack); + } + }); + + gulp.task('readmes', [], function() { + var Dgeni = require('dgeni'); + var semver = require('semver'); + try { + var ionicPackage = require('./dgeni-readmes-config')(projectPackage.version); + var dgeni = new Dgeni([ionicPackage]); + return dgeni.generate().then(function(docs) { + console.log(docs.length + ' README files generated'); + }); } catch (err) { console.log(err.stack); }