diff --git a/Gruntfile.js b/Gruntfile.js index 7eb55d0..36db404 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -25,6 +25,7 @@ module.exports = function ( grunt ) { '*.{less,css}', '**/*.{less,css}', '!node_modules/**', + '!docs/**', '!skinStyles/jquery.ui/**', '!vendor/**' ] diff --git a/jsdoc.json b/jsdoc.json new file mode 100644 index 0000000..e3f183f --- /dev/null +++ b/jsdoc.json @@ -0,0 +1,18 @@ +{ + "opts": { + "destination": "docs/js", + "package": "package.json", + "pedantic": true, + "readme": "README.md", + "recurse": true + }, + "source": { + "include": [ "resources" ] + }, + "templates": { + "cleverLinks": true, + "default": { + "useLongnameInNav": true + } + } +} diff --git a/jsduck.json b/jsduck.json deleted file mode 100644 index 2545a29..0000000 --- a/jsduck.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "--title": "Vector skin - Documentation", - "--output": "docs", - "--processes": "0", - "--warnings-exit-nonzero": true, - "--warnings": ["-nodoc(class,public)"], - "--": [ - "./resources/skins.vector.js/collapsibleTabs.js" - ] -} diff --git a/package-lock.json b/package-lock.json index ebf35ae..88b52c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3213,6 +3213,15 @@ "dev": true, "optional": true }, + "catharsis": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", + "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, "ccount": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", @@ -7636,12 +7645,60 @@ "esprima": "^4.0.0" } }, + "js2xmlparser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", + "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", + "dev": true, + "requires": { + "xmlcreate": "^2.0.3" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "jsdoc": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.3.tgz", + "integrity": "sha512-Yf1ZKA3r9nvtMWHO1kEuMZTlHOF8uoQ0vyo5eH7SQy5YeIiHM+B0DgKnn+X6y6KDYZcF7G2SPkKF+JORCXWE/A==", + "dev": true, + "requires": { + "@babel/parser": "^7.4.4", + "bluebird": "^3.5.4", + "catharsis": "^0.8.11", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.0", + "klaw": "^3.0.0", + "markdown-it": "^8.4.2", + "markdown-it-anchor": "^5.0.2", + "marked": "^0.7.0", + "mkdirp": "^0.5.1", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.0.1", + "taffydb": "2.6.2", + "underscore": "~1.9.1" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -7825,6 +7882,15 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -8031,6 +8097,25 @@ "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", "dev": true }, + "markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "markdown-it-anchor": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.2.5.tgz", + "integrity": "sha512-xLIjLQmtym3QpoY9llBgApknl7pxAcN3WDRc2d3rwpl+/YvDZHPmKscGs+L6E05xf2KrCXPBvosWt7MZukwSpQ==", + "dev": true + }, "markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", @@ -8047,6 +8132,12 @@ "unquote": "^1.1.0" } }, + "marked": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "dev": true + }, "mathml-tag-names": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz", @@ -8073,6 +8164,12 @@ "unist-util-visit": "^1.1.0" } }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -10523,6 +10620,15 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, + "requizzle": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, "resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", @@ -12131,6 +12237,12 @@ } } }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -12498,6 +12610,12 @@ "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", "dev": true }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, "uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", @@ -12516,6 +12634,12 @@ } } }, + "underscore": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", + "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", + "dev": true + }, "underscore.string": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", @@ -13257,6 +13381,12 @@ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", "dev": true }, + "xmlcreate": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", + "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index f4d4666..f7962f2 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,10 @@ "private": true, "scripts": { "storybook": "./dev-scripts/setup-storybook.sh && start-storybook -p 6006", - "test": "grunt test && npm run build-storybook", - "doc": "jsduck && npm run build-storybook", - "build-storybook": "./dev-scripts/setup-storybook.sh && build-storybook -o docs/" + "test": "grunt test && npm run doc", + "jsdoc": "jsdoc -c jsdoc.json", + "doc": "npm run jsdoc && npm run build-storybook", + "build-storybook": "./dev-scripts/setup-storybook.sh && build-storybook -o docs/ui" }, "devDependencies": { "@babel/core": "7.7.7", @@ -15,6 +16,7 @@ "grunt-banana-checker": "0.8.1", "grunt-eslint": "22.0.0", "grunt-stylelint": "0.13.0", + "jsdoc": "3.6.3", "less": "3.8.1", "less-loader": "4.1.0", "mustache": "3.0.1", diff --git a/resources/skins.vector.js/collapsibleTabs.js b/resources/skins.vector.js/collapsibleTabs.js index 9800856..42665ce 100644 --- a/resources/skins.vector.js/collapsibleTabs.js +++ b/resources/skins.vector.js/collapsibleTabs.js @@ -1,30 +1,18 @@ -/** - * Collapsible Tabs for the Vector skin. - * - * @class jQuery.plugin.collapsibleTabs - */ ( function () { var boundEvent, isRTL = document.documentElement.dir === 'rtl', rAF = window.requestAnimationFrame || setTimeout; /** - * @event beforeTabCollapse - */ - - /** - * @event afterTabCollapse - */ - - /** + * A jQuery plugin that makes collapsible tabs for the Vector skin. + * + * @class jQuery.plugin.collapsibleTabs * @param {Object} [options] - * @param {string} [options.expandedContainer="#p-views ul"] List of tabs - * @param {string} [options.collapsedContainer="#p-cactions ul"] List of menu items - * @param {string} [options.collapsible="li.collapsible"] Match tabs that are collapsible + * @param {string} [options.expandedContainer=#p-views ul] List of tabs + * @param {string} [options.collapsedContainer=#p-cactions ul] List of menu items + * @param {string} [options.collapsible=li.collapsible] Match tabs that are collapsible * @param {Function} [options.expandCondition] * @param {Function} [options.collapseCondition] - * @return {jQuery} - * @chainable */ $.fn.collapsibleTabs = function ( options ) { // Merge options into the defaults @@ -105,8 +93,14 @@ // if the two navigations are colliding if ( $el.children( data.collapsible ).length && data.collapseCondition() ) { + /** + * Fired before tabs are moved to "collapsedContainer". + * + * @event beforeTabCollapse + * @memberof jQuery.plugin.collapsibleTabs + */ $el.trigger( 'beforeTabCollapse' ); - // move the element to the dropdown menu + // Move the element to the dropdown menu. $.collapsibleTabs.moveToCollapsed( $el.children( data.collapsible ).last() ); } @@ -119,7 +113,12 @@ $.collapsibleTabs.getSettings( $tab ).expandedWidth ) ) { - // move the element from the dropdown to the tab + /** + * Fired before tabs are moved to "expandedContainer". + * + * @event beforeTabExpand + * @memberof jQuery.plugin.collapsibleTabs + */ $el.trigger( 'beforeTabExpand' ); $.collapsibleTabs.moveToExpanded( $tab ); } @@ -222,10 +221,4 @@ return rightStart - leftEnd; } }; - - /** - * @class jQuery - * @mixins jQuery.plugin.collapsibleTabs - */ - }() );