diff options
Diffstat (limited to 'plugins/panelbutton/plugin.js')
| -rw-r--r-- | plugins/panelbutton/plugin.js | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/plugins/panelbutton/plugin.js b/plugins/panelbutton/plugin.js new file mode 100644 index 0000000..14f6498 --- /dev/null +++ b/plugins/panelbutton/plugin.js @@ -0,0 +1,138 @@ +/**
+ * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.add( 'panelbutton', {
+ requires: 'button',
+ onLoad: function() {
+ function clickFn( editor ) {
+ var _ = this._;
+
+ if ( _.state == CKEDITOR.TRISTATE_DISABLED )
+ return;
+
+ this.createPanel( editor );
+
+ if ( _.on ) {
+ _.panel.hide();
+ return;
+ }
+
+ _.panel.showBlock( this._.id, this.document.getById( this._.id ), 4 );
+ }
+
+ /**
+ * @class
+ * @extends CKEDITOR.ui.button
+ * @todo class and methods
+ */
+ CKEDITOR.ui.panelButton = CKEDITOR.tools.createClass({
+ base: CKEDITOR.ui.button,
+
+ /**
+ * Creates a panelButton class instance.
+ *
+ * @constructor
+ */
+ $: function( definition ) {
+ // We don't want the panel definition in this object.
+ var panelDefinition = definition.panel || {};
+ delete definition.panel;
+
+ this.base( definition );
+
+ this.document = ( panelDefinition.parent && panelDefinition.parent.getDocument() ) || CKEDITOR.document;
+
+ panelDefinition.block = {
+ attributes: panelDefinition.attributes
+ };
+ panelDefinition.toolbarRelated = true;
+
+ this.hasArrow = true;
+
+ this.click = clickFn;
+
+ this._ = {
+ panelDefinition: panelDefinition
+ };
+ },
+
+ statics: {
+ handler: {
+ create: function( definition ) {
+ return new CKEDITOR.ui.panelButton( definition );
+ }
+ }
+ },
+
+ proto: {
+ createPanel: function( editor ) {
+ var _ = this._;
+
+ if ( _.panel )
+ return;
+
+ var panelDefinition = this._.panelDefinition,
+ panelBlockDefinition = this._.panelDefinition.block,
+ panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),
+ panel = this._.panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),
+ block = panel.addBlock( _.id, panelBlockDefinition ),
+ me = this;
+
+ panel.onShow = function() {
+ if ( me.className )
+ this.element.addClass( me.className + '_panel' );
+
+ me.setState( CKEDITOR.TRISTATE_ON );
+
+ _.on = 1;
+
+ me.editorFocus && editor.focus();
+
+ if ( me.onOpen )
+ me.onOpen();
+ };
+
+ panel.onHide = function( preventOnClose ) {
+ if ( me.className )
+ this.element.getFirst().removeClass( me.className + '_panel' );
+
+ me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
+
+ _.on = 0;
+
+ if ( !preventOnClose && me.onClose )
+ me.onClose();
+ };
+
+ panel.onEscape = function() {
+ panel.hide( 1 );
+ me.document.getById( _.id ).focus();
+ };
+
+ if ( this.onBlock )
+ this.onBlock( panel, block );
+
+ block.onHide = function() {
+ _.on = 0;
+ me.setState( CKEDITOR.TRISTATE_OFF );
+ };
+ }
+ }
+ });
+
+ },
+ beforeInit: function( editor ) {
+ editor.ui.addHandler( CKEDITOR.UI_PANELBUTTON, CKEDITOR.ui.panelButton.handler );
+ }
+});
+
+/**
+ * Button UI element.
+ *
+ * @readonly
+ * @property {String} [='panelbutton']
+ * @member CKEDITOR
+ */
+CKEDITOR.UI_PANELBUTTON = 'panelbutton';
|
