summaryrefslogtreecommitdiff
path: root/maintenance/jsduck
diff options
context:
space:
mode:
Diffstat (limited to 'maintenance/jsduck')
-rw-r--r--maintenance/jsduck/MetaTags.rb69
-rw-r--r--maintenance/jsduck/categories.json63
-rw-r--r--maintenance/jsduck/config.json27
-rw-r--r--maintenance/jsduck/eg-iframe.html88
-rw-r--r--maintenance/jsduck/external.js44
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/>
+ */