From 7adcb81e4f83f98c468889aaa5a85558ba88c770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 25 Jan 2016 17:45:33 +0100 Subject: Initial commit --- sources/plugins/panelbutton/plugin.js | 138 ++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 sources/plugins/panelbutton/plugin.js (limited to 'sources/plugins/panelbutton/plugin.js') diff --git a/sources/plugins/panelbutton/plugin.js b/sources/plugins/panelbutton/plugin.js new file mode 100644 index 00000000..7eab829a --- /dev/null +++ b/sources/plugins/panelbutton/plugin.js @@ -0,0 +1,138 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md 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'; -- cgit v1.2.3