JSDuck: Generated code documentation!
See CODING.md for how to run it.
Mistakes fixed:
* Warning: Unknown type function
-> Function
* Warning: Unknown type DOMElement
-> HTMLElement
* Warning: Unknown type DOM Node
-> HTMLElement
* Warning: Unknown type Integer
-> Mixed
* Warning: Unknown type Command
-> ve.Command
* Warning: Unknown type any
-> number
* Warning: Unknown type ve.Transaction
-> ve.dm.Transaction
* Warning: Unknown type ve.dm.AnnotationSet
-> ve.AnnotationSet
* Warning: Unknown type false
-> boolean
* Warning: Unknown type ve.dm.AlienNode
ve.dm doesn't have a generic AlienNode like ve.ce
-> Unknown type ve.dm.AlienInlineNode|ve.dm.AlienBlockNode
* Warning: Unknown type ve.ve.Surface
-> ve.ce.Surface
* ve.example.lookupNode:
-> Last @param should be @return
* ve.dm.Transaction.prototype.pushReplace:
-> @param {Array] should be @param {Array}
* Warning: ve.BranchNode.js:27: {@link ve.Node#hasChildren} links to non-existing member
-> (removed)
* Warning: ve.LeafNode.js:21: {@link ve.Node#hasChildren} links to non-existing member
-> (removed)
Differences fixed:
* Variadic arguments are like @param {Type...} [name]
instead of @param {Type} [name...]
* Convert all file headers from /** to /*! because JSDuck tries
to parse all /** blocks and fails to parse with all sorts of
errors for "Global property", "Unnamed property", and
"Duplicate property".
Find: \/\*\*([^@]+)(@copyright)
Replace: /*!$1$2
* Indented blocks are considered code examples.
A few methods had documentation with numbered lists that were
indented, which have now been updated to not be intended.
* The free-form text descriptions are parsed with Markdown,
which requires lists to be separated from paragraphs by an
empty line.
And we should use `backticks` instead of {braces} for inline
code in text paragraphs.
* Doc blocks for classes and their constructor have to be
in the correct order (@constructor, @param, @return must be
before @class, @abstract, @extends etc.)
* `@extends Class` must not have Class {wrapped}
* @throws must start with a {Type}
* @example means something else. It is used for an inline demo
iframe, not code block. For that simply indent with spaces.
* @member means something else.
Non-function properties are marked with @property, not @member.
* To create a link to a class or member, in most cases the name
is enough to create a link. E.g. Foo, Foo.bar, Foo.bar#quux,
where a hash stands for "instance member", so Foo.bar#quux,
links to Foo.bar.prototype.quux (the is not supported, as
"prototype" is considered an implementation detail, it only
indexes class name and method name).
If the magic linker doesn't work for some case, the
verbose syntax is {@link #target label}.
* @property can't have sub-properties (nested @param and @return
values are supported, only @static @property can't be nested).
We only have one case of this, which can be worked around by
moving those in a new virtual class. The code is unaltered
(only moved down so that it isn't with the scope of the main
@class block). ve.dm.TransactionProcessor.processors.
New:
* @mixins: Classes mixed into the current class.
* @event: Events that can be emitted by a class. These are also
inherited by subclasses. (+ @param, @return and @preventable).
So ve.Node#event-attach is inherited to ve.dm.BreakNode,
just like @method is.
* @singleton: Plain objects such as ve, ve.dm, ve.ce were missing
documentation causing a tree error. Documented those as a
JSDuck singleton, which they but just weren't documented yet.
NB: Members of @singleton don't need @static (if present,
triggers a compiler warning).
* @chainable: Shorthand for "@return this". We were using
"@return {classname}" which is ambiguous (returns the same
instance or another instance?), @chainable is specifically
for "@return this". Creates proper labels in the generated
HTML pages.
Removed:
* @mixin: (not to be confused with @mixins). Not supported by
JSDuck. Every class is standalone anyway. Where needed marked
them @class + @abstract instead.
Change-Id: I6a7c9e8ee8f995731bc205d666167874eb2ebe23
2013-01-04 08:54:17 +00:00
|
|
|
/*!
|
2013-01-15 23:38:49 +00:00
|
|
|
* VisualEditor ContentEditable AlienNode class.
|
2012-11-15 23:33:09 +00:00
|
|
|
*
|
2013-02-19 23:37:34 +00:00
|
|
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
2012-11-15 23:33:09 +00:00
|
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
2013-01-15 23:38:49 +00:00
|
|
|
* ContentEditable alien node.
|
2012-11-15 23:33:09 +00:00
|
|
|
*
|
|
|
|
* @class
|
2013-04-13 21:22:26 +00:00
|
|
|
* @abstract
|
2013-04-03 18:21:10 +00:00
|
|
|
* @extends ve.ce.GeneratedContentNode
|
2012-11-15 23:33:09 +00:00
|
|
|
* @constructor
|
2013-03-20 17:03:27 +00:00
|
|
|
* @param {ve.dm.AlienNode} model Model to observe
|
2012-11-15 23:33:09 +00:00
|
|
|
*/
|
2013-03-06 22:44:18 +00:00
|
|
|
ve.ce.AlienNode = function VeCeAlienNode( model ) {
|
2012-11-15 23:33:09 +00:00
|
|
|
// Parent constructor
|
2013-04-03 18:21:10 +00:00
|
|
|
ve.ce.GeneratedContentNode.call( this, model );
|
2012-11-15 23:33:09 +00:00
|
|
|
|
|
|
|
// DOM Changes
|
|
|
|
this.$.addClass( 've-ce-alienNode' );
|
|
|
|
|
|
|
|
// Events
|
2012-12-21 23:20:15 +00:00
|
|
|
this.addListenerMethod( this, 'live', 'onLive' );
|
|
|
|
this.$.on( 'mouseenter', ve.bind( this.onMouseEnter, this ) );
|
2012-11-15 23:33:09 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Inheritance */
|
|
|
|
|
2013-04-03 18:21:10 +00:00
|
|
|
ve.inheritClass( ve.ce.AlienNode, ve.ce.GeneratedContentNode );
|
2012-11-15 23:33:09 +00:00
|
|
|
|
2013-03-06 22:44:18 +00:00
|
|
|
/* Static Properties */
|
|
|
|
|
|
|
|
ve.ce.AlienNode.static.name = 'alien';
|
|
|
|
|
2012-11-15 23:33:09 +00:00
|
|
|
/* Methods */
|
|
|
|
|
2013-01-15 23:38:49 +00:00
|
|
|
/**
|
|
|
|
* Handle mouse enter events.
|
|
|
|
*
|
|
|
|
* @method
|
Major UI refactoring and improvements
Objective:
Refactor UI widgets, improve usability and accessibility of menus, general cleanup and style improvements.
Extras:
Fixed documentation in a few other files to make descriptions of jQuery event arguments more consistent, classes inherit correctly, and made use of the @cfg functionality in jsduck.
Changes:
.docs/config.json
* Added window, HTMLDocument, HTMLElement, DocumentFragment and XMLHttpRequest to externals, so jsduck doesn't throw warnings when they are used
demos/ve/index.php, modules/ve/test/index.php, VisualEditor.php
* Moved widgets above tools (since tools use widgets)
demos/ve/index.php
* Refactored widget initialization to use options
* Renamed variables to match widget names
ve.init.mw.ViewPageTarget.css
* Adjusted text sizes to make widgets work normally
* Added margins for buttons in toolbar (since button widgets
don't have any)
* Removed styles for init buttons (button widgets now)
ve.init.mw.ViewPageTarget.js
* Switched to using button widgets (involved moving things around
a bit)
ve.ui.LinkInspector.js, ve.ui.MWLinkInspector.js
* Renamed static property "inputWidget" to
"linkTargetInputWidget" to better reflect the required base class
for the properties value
icons.ai, check.png, check.svg
* Added "check" icon, used in menu right now to show which item
is selected
ve.ui.Icons-raster.css, ve.ui.Icons-vector.css
* Added check icon
* Removed :before pseudo selectors from most of the icon classes (not need by button tool anymore, makes them more reusable now)
ve.ui.Tool.css
* Adjusted drop down tool styles so menu appears below, instead
of on top, of the label
* Adjusted paragraph font size to better match actual content
* Updated class names to still work with menu widget changes
(items are their own widgets now)
* Updated selectors as per changes in the structure of button tools
ve.ui.Widget.css
* Added styles for buttons and menu items
* Adjusted menu styles
ve.ui.*ButtonTool.js
* Added config options argument passthrough
ve.ui.ButtonTool.js
* Moved var statement to the top inside constructor
* Switched to using "a" tag to get cross-browser :active support
* Added icon to inside of button to make icon styles more reusable
* Removed disabled support (now provided by widget parent class)
ve.ui.FormatDropDownTool.js
* Updated options initialization to construct menu item objects
* Modified handling of items to account for changes in menu and
item classes
* Optimized onUpdateState method a bit, adding early exit to
inner loop
ve.ui.ButtonTool.js, ve.ui.DropdownTool.js, ve.ui.Context.js,
ve.ui.Frame, ve.ui.Tool.js, ve.ui.Widget.js
* Added chain ability to non-getter methods
ve.ui.DropdownTool.js
* Removed items argument to constructor
* Updated code as per changes in menu class
* Fixed inconsistent naming of event handler methods
* Removed item event handling (now handled by items directly)
* Made use of this.$$ to ensure tool works in other frames
ve.ui.Tool.js
* Made tools inherit from widget
* Moved trigger registry event handler to a method
ve.ui.Context.js
* Switched from using menu to contain toolbar to a simple wrapper
ve.ui.js
* Added get$$ method, a convenience function for binding jQuery
to a specific document context
ve.ui.*Widget.js
* Switched to using a config options object instead of individual arguments
* Added options
* Factored out flags and labels into their own classes
* Refactored value setting methods for inputs
ve.ui.MenuWidget.js, ve.ui.MenuItemWidget.js
* Broke items out into their own classes
* Redesigned API
* Updated code that uses these classes
* Added support for keyboard interaction
* Made items flash when selected (delaying the hiding of the menu for 200ms)
ve.ui.LinkTargetInputWidget.js, ve.ui.MWLinkTargetInputWidget
* Refactored annotation setting methods
Change-Id: I7769bd5a5b79f1ab36f258ef9f2be583ca503ce6
2013-02-20 23:25:12 +00:00
|
|
|
* @param {jQuery.Event} e Mouse enter event
|
2013-01-15 23:38:49 +00:00
|
|
|
*/
|
2012-12-21 23:20:15 +00:00
|
|
|
ve.ce.AlienNode.prototype.onMouseEnter = function () {
|
2013-01-17 22:21:34 +00:00
|
|
|
var $phantoms = $( [] ),
|
2012-12-21 23:20:15 +00:00
|
|
|
$phantomTemplate = ve.ce.Surface.static.$phantomTemplate,
|
|
|
|
surface = this.root.getSurface();
|
2013-03-08 22:18:01 +00:00
|
|
|
if ( surface.dragging ) {
|
|
|
|
return;
|
|
|
|
}
|
2012-12-21 23:20:15 +00:00
|
|
|
this.$.find( '.ve-ce-node-shield' ).each( function () {
|
2013-01-17 22:21:34 +00:00
|
|
|
var $shield = $( this ),
|
2012-12-21 23:20:15 +00:00
|
|
|
offset = $shield.offset();
|
|
|
|
$phantoms = $phantoms.add(
|
|
|
|
$phantomTemplate.clone().css( {
|
|
|
|
'top': offset.top,
|
|
|
|
'left': offset.left,
|
|
|
|
'height': $shield.height(),
|
|
|
|
'width': $shield.width(),
|
|
|
|
'background-position': -offset.left + 'px ' + -offset.top + 'px'
|
|
|
|
} )
|
|
|
|
);
|
|
|
|
} );
|
2013-01-18 01:02:02 +00:00
|
|
|
surface.replacePhantoms( $phantoms );
|
2013-02-21 22:59:08 +00:00
|
|
|
surface.$.on({
|
|
|
|
'mousemove.phantoms': ve.bind( this.onSurfaceMouseMove, this ),
|
|
|
|
'mouseout.phantoms': ve.bind( this.onSurfaceMouseOut, this )
|
|
|
|
});
|
2012-12-21 23:20:15 +00:00
|
|
|
};
|
|
|
|
|
2013-01-15 23:38:49 +00:00
|
|
|
/**
|
|
|
|
* Handle live events.
|
|
|
|
*
|
|
|
|
* @method
|
|
|
|
*/
|
2012-12-21 23:20:15 +00:00
|
|
|
ve.ce.AlienNode.prototype.onLive = function () {
|
2013-03-20 22:35:05 +00:00
|
|
|
if ( this.live === true ) {
|
2012-12-21 23:20:15 +00:00
|
|
|
var $shieldTemplate = this.constructor.static.$shieldTemplate;
|
|
|
|
this.$.add( this.$.find( '*' ) ).each( function () {
|
|
|
|
var $this = $( this );
|
|
|
|
if ( this.nodeType === Node.ELEMENT_NODE ) {
|
|
|
|
if (
|
|
|
|
( $this.css( 'float' ) === 'none' || $this.css( 'float' ) === '' ) &&
|
|
|
|
!$this.hasClass( 've-ce-alienNode' )
|
|
|
|
) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
$this.append( $shieldTemplate.clone() );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2012-11-15 23:33:09 +00:00
|
|
|
ve.ce.AlienNode.prototype.onUpdate = function () {
|
|
|
|
this.$.html( this.model.getAttribute( 'html' ) );
|
|
|
|
};
|
|
|
|
|
2013-01-15 23:38:49 +00:00
|
|
|
/**
|
|
|
|
* Handle surface mouse move events.
|
|
|
|
*
|
|
|
|
* @method
|
Major UI refactoring and improvements
Objective:
Refactor UI widgets, improve usability and accessibility of menus, general cleanup and style improvements.
Extras:
Fixed documentation in a few other files to make descriptions of jQuery event arguments more consistent, classes inherit correctly, and made use of the @cfg functionality in jsduck.
Changes:
.docs/config.json
* Added window, HTMLDocument, HTMLElement, DocumentFragment and XMLHttpRequest to externals, so jsduck doesn't throw warnings when they are used
demos/ve/index.php, modules/ve/test/index.php, VisualEditor.php
* Moved widgets above tools (since tools use widgets)
demos/ve/index.php
* Refactored widget initialization to use options
* Renamed variables to match widget names
ve.init.mw.ViewPageTarget.css
* Adjusted text sizes to make widgets work normally
* Added margins for buttons in toolbar (since button widgets
don't have any)
* Removed styles for init buttons (button widgets now)
ve.init.mw.ViewPageTarget.js
* Switched to using button widgets (involved moving things around
a bit)
ve.ui.LinkInspector.js, ve.ui.MWLinkInspector.js
* Renamed static property "inputWidget" to
"linkTargetInputWidget" to better reflect the required base class
for the properties value
icons.ai, check.png, check.svg
* Added "check" icon, used in menu right now to show which item
is selected
ve.ui.Icons-raster.css, ve.ui.Icons-vector.css
* Added check icon
* Removed :before pseudo selectors from most of the icon classes (not need by button tool anymore, makes them more reusable now)
ve.ui.Tool.css
* Adjusted drop down tool styles so menu appears below, instead
of on top, of the label
* Adjusted paragraph font size to better match actual content
* Updated class names to still work with menu widget changes
(items are their own widgets now)
* Updated selectors as per changes in the structure of button tools
ve.ui.Widget.css
* Added styles for buttons and menu items
* Adjusted menu styles
ve.ui.*ButtonTool.js
* Added config options argument passthrough
ve.ui.ButtonTool.js
* Moved var statement to the top inside constructor
* Switched to using "a" tag to get cross-browser :active support
* Added icon to inside of button to make icon styles more reusable
* Removed disabled support (now provided by widget parent class)
ve.ui.FormatDropDownTool.js
* Updated options initialization to construct menu item objects
* Modified handling of items to account for changes in menu and
item classes
* Optimized onUpdateState method a bit, adding early exit to
inner loop
ve.ui.ButtonTool.js, ve.ui.DropdownTool.js, ve.ui.Context.js,
ve.ui.Frame, ve.ui.Tool.js, ve.ui.Widget.js
* Added chain ability to non-getter methods
ve.ui.DropdownTool.js
* Removed items argument to constructor
* Updated code as per changes in menu class
* Fixed inconsistent naming of event handler methods
* Removed item event handling (now handled by items directly)
* Made use of this.$$ to ensure tool works in other frames
ve.ui.Tool.js
* Made tools inherit from widget
* Moved trigger registry event handler to a method
ve.ui.Context.js
* Switched from using menu to contain toolbar to a simple wrapper
ve.ui.js
* Added get$$ method, a convenience function for binding jQuery
to a specific document context
ve.ui.*Widget.js
* Switched to using a config options object instead of individual arguments
* Added options
* Factored out flags and labels into their own classes
* Refactored value setting methods for inputs
ve.ui.MenuWidget.js, ve.ui.MenuItemWidget.js
* Broke items out into their own classes
* Redesigned API
* Updated code that uses these classes
* Added support for keyboard interaction
* Made items flash when selected (delaying the hiding of the menu for 200ms)
ve.ui.LinkTargetInputWidget.js, ve.ui.MWLinkTargetInputWidget
* Refactored annotation setting methods
Change-Id: I7769bd5a5b79f1ab36f258ef9f2be583ca503ce6
2013-02-20 23:25:12 +00:00
|
|
|
* @param {jQuery.Event} e Mouse move event
|
2013-01-15 23:38:49 +00:00
|
|
|
*/
|
|
|
|
ve.ce.AlienNode.prototype.onSurfaceMouseMove = function ( e ) {
|
2013-02-21 22:59:08 +00:00
|
|
|
var $target = $( e.target );
|
2012-11-15 23:33:09 +00:00
|
|
|
if (
|
2013-01-16 21:06:05 +00:00
|
|
|
!$target.hasClass( 've-ce-surface-phantom' ) &&
|
2012-11-15 23:33:09 +00:00
|
|
|
$target.closest( '.ve-ce-alienNode' ).length === 0
|
|
|
|
) {
|
2013-02-21 22:59:08 +00:00
|
|
|
this.clearPhantoms();
|
2012-11-15 23:33:09 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2013-02-21 22:59:08 +00:00
|
|
|
/**
|
|
|
|
* Handle surface mouse out events.
|
|
|
|
*
|
|
|
|
* @method
|
|
|
|
* @param {jQuery.Event} e
|
|
|
|
*/
|
|
|
|
ve.ce.AlienNode.prototype.onSurfaceMouseOut = function ( e ) {
|
|
|
|
if ( e.toElement === null) {
|
|
|
|
this.clearPhantoms();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Clears all phantoms and unbinds .phantoms namespace event handlers
|
|
|
|
*
|
|
|
|
* @method
|
|
|
|
*/
|
|
|
|
ve.ce.AlienNode.prototype.clearPhantoms = function() {
|
|
|
|
var surface = this.root.getSurface();
|
|
|
|
surface.replacePhantoms( null );
|
|
|
|
surface.$.unbind( '.phantoms' );
|
|
|
|
};
|
|
|
|
|
2013-04-13 21:22:26 +00:00
|
|
|
/* Concrete subclasses */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ContentEditable alien block node.
|
|
|
|
*
|
|
|
|
* @class
|
|
|
|
* @extends ve.ce.AlienNode
|
|
|
|
* @constructor
|
|
|
|
* @param {ve.dm.AlienBlockNode} model Model to observe
|
|
|
|
*/
|
|
|
|
ve.ce.AlienBlockNode = function VeCeAlienBlockNode( model ) {
|
|
|
|
// Parent constructor
|
|
|
|
ve.ce.AlienNode.call( this, model );
|
|
|
|
|
|
|
|
// DOM Changes
|
|
|
|
this.$.addClass( 've-ce-alienBlockNode' );
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Inheritance */
|
|
|
|
|
|
|
|
ve.inheritClass( ve.ce.AlienBlockNode, ve.ce.AlienNode );
|
|
|
|
|
|
|
|
/* Static Properties */
|
|
|
|
|
|
|
|
ve.ce.AlienBlockNode.static.name = 'alienBlock';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ContentEditable alien inline node.
|
|
|
|
*
|
|
|
|
* @class
|
|
|
|
* @extends ve.ce.AlienNode
|
|
|
|
* @constructor
|
|
|
|
* @param {ve.dm.AlienInlineNode} model Model to observe
|
|
|
|
*/
|
|
|
|
ve.ce.AlienInlineNode = function VeCeAlienInlineNode( model ) {
|
|
|
|
// Parent constructor
|
|
|
|
ve.ce.AlienNode.call( this, model );
|
|
|
|
|
|
|
|
// DOM Changes
|
|
|
|
this.$.addClass( 've-ce-alienInlineNode' );
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Inheritance */
|
|
|
|
|
|
|
|
ve.inheritClass( ve.ce.AlienInlineNode, ve.ce.AlienNode );
|
|
|
|
|
|
|
|
/* Static Properties */
|
|
|
|
|
|
|
|
ve.ce.AlienInlineNode.static.name = 'alienInline';
|
|
|
|
|
2012-11-15 23:33:09 +00:00
|
|
|
/* Registration */
|
|
|
|
|
2013-03-06 22:44:18 +00:00
|
|
|
ve.ce.nodeFactory.register( ve.ce.AlienNode );
|
2013-04-13 21:22:26 +00:00
|
|
|
ve.ce.nodeFactory.register( ve.ce.AlienBlockNode );
|
|
|
|
ve.ce.nodeFactory.register( ve.ce.AlienInlineNode );
|