diff options
Diffstat (limited to 'maintenance/jsduck')
-rw-r--r-- | maintenance/jsduck/MetaTags.rb | 69 | ||||
-rw-r--r-- | maintenance/jsduck/categories.json | 63 | ||||
-rw-r--r-- | maintenance/jsduck/config.json | 27 | ||||
-rw-r--r-- | maintenance/jsduck/eg-iframe.html | 88 | ||||
-rw-r--r-- | maintenance/jsduck/external.js | 44 |
5 files changed, 291 insertions, 0 deletions
diff --git a/maintenance/jsduck/MetaTags.rb b/maintenance/jsduck/MetaTags.rb new file mode 100644 index 00000000..83cc0884 --- /dev/null +++ b/maintenance/jsduck/MetaTags.rb @@ -0,0 +1,69 @@ +# See also: +# - https://github.com/senchalabs/jsduck/wiki/Tags +# - https://github.com/senchalabs/jsduck/wiki/Custom-tags +require 'jsduck/meta_tag' + +class SourceTag < JsDuck::MetaTag + def initialize + # This defines the name of the @tag + @name = 'source' + end + + # Generate HTML output for this tag. + # One can make use of the #format method to easily support + # Markdown and {@link} tags inside the contents of the tag. + # + # @param tags All matches of this tag on one class. + def to_html(tags) + '<h3 class="pa">Source</h3>' + tags.map {|tag| format(tag) }.join("\n") + end +end + +class ContextTag < JsDuck::MetaTag + def initialize + @name = 'context' + end + + # @param tags All matches of this tag on one class. + def to_html(tags) + return '<h3 class="pa">Context</h3>' + render_long_context(tags.last) + end + + def render_long_context(tag) + if tag =~ /\A([^\s]+)/m + name = $1 + return format("`this` : {@link #{name}}") + end + end +end + +class SeeTag < JsDuck::MetaTag + def initialize + @name = 'see' + @multiline = true + end + + # @param tags All matches of this tag on one class. + def to_html(tags) + doc = [] + doc << '<h3 class="pa">Related</h3>' + doc << [ + '<ul>', + tags.map {|tag| render_long_see(tag) }, + '</ul>', + ] + doc + end + + def render_long_see(tag) + if tag =~ /\A([^\s]+)( .*)?\Z/m + name = $1 + doc = $2 ? ': ' + $2 : '' + return [ + '<li>', + format("{@link #{name}} #{doc}"), + '</li>' + ] + end + end +end diff --git a/maintenance/jsduck/categories.json b/maintenance/jsduck/categories.json new file mode 100644 index 00000000..f96902d8 --- /dev/null +++ b/maintenance/jsduck/categories.json @@ -0,0 +1,63 @@ +[ + { + "name": "MediaWiki", + "groups": [ + { + "name": "Base", + "classes": [ + "mw", + "mw.Map", + "mw.Message", + "mw.loader", + "mw.log", + "mw.html", + "mw.html.Cdata", + "mw.html.Raw", + "mw.hook" + ] + }, + { + "name": "General", + "classes": [ + "mw.Title", + "mw.inspect", + "mw.inspect.reports", + "mw.notification", + "mw.user", + "mw.util", + "mw.plugin.*" + ] + }, + { + "name": "Actions", + "classes": ["mw.toolbar"] + }, + { + "name": "API", + "classes": ["mw.Api*"] + } + ] + }, + { + "name": "jQuery", + "groups": [ + { + "name": "Plugins", + "classes": ["jQuery.plugin.*"] + } + ] + }, + { + "name": "Upstream", + "groups": [ + { + "name": "jQuery", + "classes": ["jQuery", "jQuery.Event", "jQuery.Callbacks", "jQuery.Promise", "jQuery.Deferred", "jQuery.jqXHR", "QUnit"] + }, + { + "name": "JavaScript", + "classes": ["Array", "Boolean", "Date", "Function", "Number", "Object", "RegExp", "String"] + } + ] + } +] diff --git a/maintenance/jsduck/config.json b/maintenance/jsduck/config.json new file mode 100644 index 00000000..e6e0f658 --- /dev/null +++ b/maintenance/jsduck/config.json @@ -0,0 +1,27 @@ +{ + "--title": "MediaWiki core - Documentation", + "--footer": "Documentation for MediaWiki core. Generated on {DATE} by {JSDUCK} {VERSION}.", + "--categories": "./categories.json", + "--meta-tags": "./MetaTags.rb", + "--eg-iframe": "./eg-iframe.html", + "--warnings": ["-no_doc"], + "--builtin-classes": true, + "--output": "../../docs/js", + "--": [ + "./external.js", + "../../resources/mediawiki/mediawiki.js", + "../../resources/mediawiki/mediawiki.log.js", + "../../resources/mediawiki/mediawiki.util.js", + "../../resources/mediawiki/mediawiki.Title.js", + "../../resources/mediawiki/mediawiki.inspect.js", + "../../resources/mediawiki/mediawiki.notify.js", + "../../resources/mediawiki/mediawiki.notification.js", + "../../resources/mediawiki/mediawiki.user.js", + "../../resources/mediawiki.action/mediawiki.action.edit.js", + "../../resources/mediawiki.action/mediawiki.action.view.postEdit.js", + "../../resources/mediawiki.page/mediawiki.page.startup.js", + "../../resources/mediawiki.api", + "../../resources/jquery/jquery.localize.js", + "../../resources/jquery/jquery.spinner.js" + ] +} diff --git a/maintenance/jsduck/eg-iframe.html b/maintenance/jsduck/eg-iframe.html new file mode 100644 index 00000000..86eae4b6 --- /dev/null +++ b/maintenance/jsduck/eg-iframe.html @@ -0,0 +1,88 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>MediaWiki Code Example</title> + <script src="modules/startup.js"></script> + <script> + function startUp() { + mw.config = new mw.Map(); + } + </script> + <script src="modules/jquery/jquery.js"></script> + <script src="modules/mediawiki/mediawiki.js"></script> + <style> + .mw-jsduck-log { + position: relative; + min-height: 3em; + margin-top: 2em; + background: #f7f7f7; + border: 1px solid #e4e4e4; + } + + .mw-jsduck-log::after { + position: absolute; + bottom: 100%; + right: -1px; + padding: 0.5em; + background: #fff; + border: 1px solid #e4e4e4; + border-bottom: 0; + border-radius: 0.5em 0.5em 0 0; + font: normal 0.5em sans-serif; + content: 'console'; + } + + .mw-jsduck-log-line { + padding: 0.2em 0.5em; + white-space: pre-wrap; + } + + .mw-jsduck-log-line:nth-child(odd) { + background: #fff; + } + </style> +</head> +<body> + <script> + /** + * Basic log console for the example iframe in documentation pages. + */ + ( function () { + var pre; + mw.log = function () { + var str, i, len, line; + if ( !pre ) { + pre = document.createElement( 'pre' ); + pre.className = 'mw-jsduck-log'; + document.body.appendChild( pre ); + } + str = []; + for ( i = 0, len = arguments.length; i < len; i++ ) { + str.push( String( arguments[ i ] ) ); + } + line = document.createElement( 'div' ); + line.className = 'mw-jsduck-log-line'; + line.appendChild( + document.createTextNode( str.join( ' , ' ) + '\n' ) + ); + pre.appendChild( line ); + }; + }() ); + + /** + * Method called by jsduck to execute the example code. + */ + function loadInlineExample( code, options, callback ) { + try { + eval( code ); + callback && callback( true ); + } catch (e) { + mw.log( 'Uncaught exception: ' + e ); + callback && callback( false, e ); + throw e; + } + } + </script> +</body> +</html> diff --git a/maintenance/jsduck/external.js b/maintenance/jsduck/external.js new file mode 100644 index 00000000..4bb83694 --- /dev/null +++ b/maintenance/jsduck/external.js @@ -0,0 +1,44 @@ +/** + * @class jQuery + * @source <http://api.jquery.com/> + */ + +/** + * @method ajax + * @static + * @source <http://api.jquery.com/jQuery.ajax/> + * @return {jqXHR} + */ + +/** + * @class jQuery.Event + * @source <http://api.jquery.com/Types/#Event> + */ + +/** + * @class jQuery.Callbacks + * @source <http://api.jquery.com/jQuery.Callbacks/> + */ + +/** + * @class jQuery.Promise + * @source <http://api.jquery.com/Types/#Promise> + */ + +/** + * @class jQuery.Deferred + * @mixins jQuery.Promise + * @source <http://api.jquery.com/jQuery.Deferred/> + */ + +/** + * @class jQuery.jqXHR + * @source <http://api.jquery.com/Types/#jqXHR> + * @alternateClassName jqXHR + */ + + +/** + * @class QUnit + * @source <http://api.qunitjs.com/> + */ |