mediawiki-extensions-Visual.../modules/ve/ui/ve.ui.Inspector.js
Rob Moen dda2c932bd Added MW page suggestion functionality.
Created jQuery plugin MultiSuggest which builds a categorized dropdown
under specified input box.

Revised inspector to no longer be an iframe but to contain an Iframe.
This reduces xbrowser issues with positioning and toggling inspector
container.

Added Inspector overlay element for positioning arbitrary elements
over the iFrame.  This prevents growing the iframe to arbitrary lenghts.

Change-Id: I8efbbd091b0b24a19a4b73aa122d21a329cf97e4
2012-08-17 14:12:26 -07:00

96 lines
2 KiB
JavaScript

/**
* VisualEditor user interface Inspector class.
*
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* Creates an ve.ui.Inspector object.
*
* @class
* @constructor
* @param {ve.ui.Toolbar} toolbar
* @param {String} name
*/
ve.ui.Inspector = function ( toolbar, context ) {
// Inheritance
ve.EventEmitter.call( this );
if ( !toolbar || !context ) {
return;
}
var inspector = this;
// Properties
this.toolbar = toolbar;
this.context = context;
this.$ = $( '<div class="es-inspector"></div>', context.inspectorDoc );
this.$closeButton = $( '<div class="es-inspector-button es-inspector-closeButton"></div>', context.inspectorDoc )
.appendTo( this.$ );
this.$acceptButton = $( '<div class="es-inspector-button es-inspector-acceptButton"></div>', context.inspectorDoc )
.appendTo( this.$ );
this.$form = $( '<form>', context.inspectorDoc ).appendTo( this.$ );
// Inspector Events
this.$closeButton.on( {
'click': function() {
context.closeInspector( false );
}
} );
this.$acceptButton.on( {
'click': function() {
context.closeInspector ( true );
}
} );
this.$form.on( {
'submit': ve.bind( this.onSubmit, this ),
'keydown': ve.bind( this.onKeyDown, this )
} );
};
/* Methods */
ve.ui.Inspector.prototype.onSubmit = function( e ) {
e.preventDefault();
this.context.closeInspector( true );
return false;
};
ve.ui.Inspector.prototype.onKeyDown = function( e ) {
// Escape
if ( e.which === 27 ) {
this.context.closeInspector( false );
e.preventDefault();
return false;
}
};
ve.ui.Inspector.prototype.open = function () {
// Prepare to open
if ( this.prepareOpen ) {
this.prepareOpen();
}
// Show
this.$.show();
this.context.closeMenu();
// Open
if ( this.onOpen ) {
this.onOpen();
}
this.emit( 'open' );
};
ve.ui.Inspector.prototype.close = function ( accept ) {
this.$.hide();
if ( this.onClose ) {
this.onClose( accept );
}
this.emit( 'close' );
};
/* Inheritance */
ve.extendClass( ve.ui.Inspector, ve.EventEmitter );