+++ /dev/null
-/* © 2014 Benoît Pin, MINES ParisTech */
-( function() {
-
-var PlinnStylesCombo = function(editor) {
- this.editor = editor;
- this.label = 'Styles';
- this.title = 'CSS Styles';
- this.toolbar = 'styles,10';
- this.panel = {
- css : [CKEDITOR.skin.getPath( 'editor' )].concat(editor.config.contentsCss),
- multiSelect : true,
- attributes : {'aria-label': this.title}
- };
- this.styles = [];
-};
-
-PlinnStylesCombo.prototype.onRender = function() {
- var self = this;
- this.editor.on('selectionChange', function(evt){self.checkSelection(evt);});
-};
-
-PlinnStylesCombo.prototype.checkSelection = function(evt) {
- if (evt.data.selection.getRanges().length > 1) {
- this.disable();
- }
- else {
- this.enable();
- }
-};
-
-PlinnStylesCombo.prototype.loadStyle = function(definition) {
- this.styles.push(definition);
- this.styles[definition.name] = definition;
-};
-
-PlinnStylesCombo.prototype.init = function() {
- var i, style;
- for (i=0 ; i < this.styles.length ; i++) {
- style = this.styles[i];
- this.add(style.name,
- '<div class="' + style.className + '">' +
- style.name +
- '</div>',
- style.name
- );
- }
-};
-
-PlinnStylesCombo.prototype.onClick = function(value) {
- this.editor.focus();
- this.editor.fire('saveSnapshot');
- var style = this.styles[value];
- var className = style.className;
- var ranges = this.editor.getSelection().getRanges();
- var element = this.editor.elementPath().lastElement;
- if(ranges.length === 1) {
- var start = ranges[0].startContainer;
- var end = ranges[0].endContainer;
- if(start.$ !== end.$) {
- // selection is a fragment that need to be wrapped in container to apply style
- element = new CKEDITOR.dom.element('div');
- element.append(ranges[0].cloneContents());
- this.editor.insertElement(element);
- }
- }
- if (element.hasClass(className)) {
- element.removeClass(className);
- }
- else {
- element.addClass(className);
- }
- this.editor.fire('saveSnapshot');
-};
-
-var PlinnStylePlugin = function() {
- this.requires = 'richcombo';
- this.combo = undefined;
-};
-
-PlinnStylePlugin.prototype.init = function(editor) {
- this.combo = new PlinnStylesCombo(editor);
- editor.ui.addRichCombo('PlinnStyles', this.combo);
- var self = this;
- editor.on('stylesSet', function(evt){self.onStylesSet(evt);});
-};
-
-PlinnStylePlugin.prototype.onStylesSet = function(evt) {
- var stylesDefinitions = evt.data.styles;
- if (!stylesDefinitions) { return; }
- var i;
- for(i=0 ; i < stylesDefinitions.length ; i++) {
- this.combo.loadStyle(stylesDefinitions[i]);
- }
-
-};
-
-
-// main
-CKEDITOR.plugins.add( 'plinn_styles', new PlinnStylePlugin());
-
-} ());