angelovcom.net

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

plugin.js (11310B)


      1 (function () {
      2 var textcolor = (function () {
      3     'use strict';
      4 
      5     var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
      6 
      7     var getCurrentColor = function (editor, format) {
      8       var color;
      9       editor.dom.getParents(editor.selection.getStart(), function (elm) {
     10         var value;
     11         if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {
     12           color = color ? color : value;
     13         }
     14       });
     15       return color;
     16     };
     17     var mapColors = function (colorMap) {
     18       var i;
     19       var colors = [];
     20       for (i = 0; i < colorMap.length; i += 2) {
     21         colors.push({
     22           text: colorMap[i + 1],
     23           color: '#' + colorMap[i]
     24         });
     25       }
     26       return colors;
     27     };
     28     var applyFormat = function (editor, format, value) {
     29       editor.undoManager.transact(function () {
     30         editor.focus();
     31         editor.formatter.apply(format, { value: value });
     32         editor.nodeChanged();
     33       });
     34     };
     35     var removeFormat = function (editor, format) {
     36       editor.undoManager.transact(function () {
     37         editor.focus();
     38         editor.formatter.remove(format, { value: null }, null, true);
     39         editor.nodeChanged();
     40       });
     41     };
     42     var TextColor = {
     43       getCurrentColor: getCurrentColor,
     44       mapColors: mapColors,
     45       applyFormat: applyFormat,
     46       removeFormat: removeFormat
     47     };
     48 
     49     var register = function (editor) {
     50       editor.addCommand('mceApplyTextcolor', function (format, value) {
     51         TextColor.applyFormat(editor, format, value);
     52       });
     53       editor.addCommand('mceRemoveTextcolor', function (format) {
     54         TextColor.removeFormat(editor, format);
     55       });
     56     };
     57     var Commands = { register: register };
     58 
     59     var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
     60 
     61     var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
     62 
     63     var defaultColorMap = [
     64       '000000',
     65       'Black',
     66       '993300',
     67       'Burnt orange',
     68       '333300',
     69       'Dark olive',
     70       '003300',
     71       'Dark green',
     72       '003366',
     73       'Dark azure',
     74       '000080',
     75       'Navy Blue',
     76       '333399',
     77       'Indigo',
     78       '333333',
     79       'Very dark gray',
     80       '800000',
     81       'Maroon',
     82       'FF6600',
     83       'Orange',
     84       '808000',
     85       'Olive',
     86       '008000',
     87       'Green',
     88       '008080',
     89       'Teal',
     90       '0000FF',
     91       'Blue',
     92       '666699',
     93       'Grayish blue',
     94       '808080',
     95       'Gray',
     96       'FF0000',
     97       'Red',
     98       'FF9900',
     99       'Amber',
    100       '99CC00',
    101       'Yellow green',
    102       '339966',
    103       'Sea green',
    104       '33CCCC',
    105       'Turquoise',
    106       '3366FF',
    107       'Royal blue',
    108       '800080',
    109       'Purple',
    110       '999999',
    111       'Medium gray',
    112       'FF00FF',
    113       'Magenta',
    114       'FFCC00',
    115       'Gold',
    116       'FFFF00',
    117       'Yellow',
    118       '00FF00',
    119       'Lime',
    120       '00FFFF',
    121       'Aqua',
    122       '00CCFF',
    123       'Sky blue',
    124       '993366',
    125       'Red violet',
    126       'FFFFFF',
    127       'White',
    128       'FF99CC',
    129       'Pink',
    130       'FFCC99',
    131       'Peach',
    132       'FFFF99',
    133       'Light yellow',
    134       'CCFFCC',
    135       'Pale green',
    136       'CCFFFF',
    137       'Pale cyan',
    138       '99CCFF',
    139       'Light sky blue',
    140       'CC99FF',
    141       'Plum'
    142     ];
    143     var getTextColorMap = function (editor) {
    144       return editor.getParam('textcolor_map', defaultColorMap);
    145     };
    146     var getForeColorMap = function (editor) {
    147       return editor.getParam('forecolor_map', getTextColorMap(editor));
    148     };
    149     var getBackColorMap = function (editor) {
    150       return editor.getParam('backcolor_map', getTextColorMap(editor));
    151     };
    152     var getTextColorRows = function (editor) {
    153       return editor.getParam('textcolor_rows', 5);
    154     };
    155     var getTextColorCols = function (editor) {
    156       return editor.getParam('textcolor_cols', 8);
    157     };
    158     var getForeColorRows = function (editor) {
    159       return editor.getParam('forecolor_rows', getTextColorRows(editor));
    160     };
    161     var getBackColorRows = function (editor) {
    162       return editor.getParam('backcolor_rows', getTextColorRows(editor));
    163     };
    164     var getForeColorCols = function (editor) {
    165       return editor.getParam('forecolor_cols', getTextColorCols(editor));
    166     };
    167     var getBackColorCols = function (editor) {
    168       return editor.getParam('backcolor_cols', getTextColorCols(editor));
    169     };
    170     var getColorPickerCallback = function (editor) {
    171       return editor.getParam('color_picker_callback', null);
    172     };
    173     var hasColorPicker = function (editor) {
    174       return typeof getColorPickerCallback(editor) === 'function';
    175     };
    176     var Settings = {
    177       getForeColorMap: getForeColorMap,
    178       getBackColorMap: getBackColorMap,
    179       getForeColorRows: getForeColorRows,
    180       getBackColorRows: getBackColorRows,
    181       getForeColorCols: getForeColorCols,
    182       getBackColorCols: getBackColorCols,
    183       getColorPickerCallback: getColorPickerCallback,
    184       hasColorPicker: hasColorPicker
    185     };
    186 
    187     var global$3 = tinymce.util.Tools.resolve('tinymce.util.I18n');
    188 
    189     var getHtml = function (cols, rows, colorMap, hasColorPicker) {
    190       var colors, color, html, last, x, y, i, count = 0;
    191       var id = global$1.DOM.uniqueId('mcearia');
    192       var getColorCellHtml = function (color, title) {
    193         var isNoColor = color === 'transparent';
    194         return '<td class="mce-grid-cell' + (isNoColor ? ' mce-colorbtn-trans' : '') + '">' + '<div id="' + id + '-' + count++ + '"' + ' data-mce-color="' + (color ? color : '') + '"' + ' role="option"' + ' tabIndex="-1"' + ' style="' + (color ? 'background-color: ' + color : '') + '"' + ' title="' + global$3.translate(title) + '">' + (isNoColor ? '&#215;' : '') + '</div>' + '</td>';
    195       };
    196       colors = TextColor.mapColors(colorMap);
    197       colors.push({
    198         text: global$3.translate('No color'),
    199         color: 'transparent'
    200       });
    201       html = '<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>';
    202       last = colors.length - 1;
    203       for (y = 0; y < rows; y++) {
    204         html += '<tr>';
    205         for (x = 0; x < cols; x++) {
    206           i = y * cols + x;
    207           if (i > last) {
    208             html += '<td></td>';
    209           } else {
    210             color = colors[i];
    211             html += getColorCellHtml(color.color, color.text);
    212           }
    213         }
    214         html += '</tr>';
    215       }
    216       if (hasColorPicker) {
    217         html += '<tr>' + '<td colspan="' + cols + '" class="mce-custom-color-btn">' + '<div id="' + id + '-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" ' + 'role="button" tabindex="-1" aria-labelledby="' + id + '-c" style="width: 100%">' + '<button type="button" role="presentation" tabindex="-1">' + global$3.translate('Custom...') + '</button>' + '</div>' + '</td>' + '</tr>';
    218         html += '<tr>';
    219         for (x = 0; x < cols; x++) {
    220           html += getColorCellHtml('', 'Custom color');
    221         }
    222         html += '</tr>';
    223       }
    224       html += '</tbody></table>';
    225       return html;
    226     };
    227     var ColorPickerHtml = { getHtml: getHtml };
    228 
    229     var setDivColor = function setDivColor(div, value) {
    230       div.style.background = value;
    231       div.setAttribute('data-mce-color', value);
    232     };
    233     var onButtonClick = function (editor) {
    234       return function (e) {
    235         var ctrl = e.control;
    236         if (ctrl._color) {
    237           editor.execCommand('mceApplyTextcolor', ctrl.settings.format, ctrl._color);
    238         } else {
    239           editor.execCommand('mceRemoveTextcolor', ctrl.settings.format);
    240         }
    241       };
    242     };
    243     var onPanelClick = function (editor, cols) {
    244       return function (e) {
    245         var buttonCtrl = this.parent();
    246         var value;
    247         var currentColor = TextColor.getCurrentColor(editor, buttonCtrl.settings.format);
    248         var selectColor = function (value) {
    249           editor.execCommand('mceApplyTextcolor', buttonCtrl.settings.format, value);
    250           buttonCtrl.hidePanel();
    251           buttonCtrl.color(value);
    252         };
    253         var resetColor = function () {
    254           editor.execCommand('mceRemoveTextcolor', buttonCtrl.settings.format);
    255           buttonCtrl.hidePanel();
    256           buttonCtrl.resetColor();
    257         };
    258         if (global$1.DOM.getParent(e.target, '.mce-custom-color-btn')) {
    259           buttonCtrl.hidePanel();
    260           var colorPickerCallback = Settings.getColorPickerCallback(editor);
    261           colorPickerCallback.call(editor, function (value) {
    262             var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0];
    263             var customColorCells, div, i;
    264             customColorCells = global$2.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function (elm) {
    265               return elm.firstChild;
    266             });
    267             for (i = 0; i < customColorCells.length; i++) {
    268               div = customColorCells[i];
    269               if (!div.getAttribute('data-mce-color')) {
    270                 break;
    271               }
    272             }
    273             if (i === cols) {
    274               for (i = 0; i < cols - 1; i++) {
    275                 setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color'));
    276               }
    277             }
    278             setDivColor(div, value);
    279             selectColor(value);
    280           }, currentColor);
    281         }
    282         value = e.target.getAttribute('data-mce-color');
    283         if (value) {
    284           if (this.lastId) {
    285             global$1.DOM.get(this.lastId).setAttribute('aria-selected', 'false');
    286           }
    287           e.target.setAttribute('aria-selected', true);
    288           this.lastId = e.target.id;
    289           if (value === 'transparent') {
    290             resetColor();
    291           } else {
    292             selectColor(value);
    293           }
    294         } else if (value !== null) {
    295           buttonCtrl.hidePanel();
    296         }
    297       };
    298     };
    299     var renderColorPicker = function (editor, foreColor) {
    300       return function () {
    301         var cols = foreColor ? Settings.getForeColorCols(editor) : Settings.getBackColorCols(editor);
    302         var rows = foreColor ? Settings.getForeColorRows(editor) : Settings.getBackColorRows(editor);
    303         var colorMap = foreColor ? Settings.getForeColorMap(editor) : Settings.getBackColorMap(editor);
    304         var hasColorPicker = Settings.hasColorPicker(editor);
    305         return ColorPickerHtml.getHtml(cols, rows, colorMap, hasColorPicker);
    306       };
    307     };
    308     var register$1 = function (editor) {
    309       editor.addButton('forecolor', {
    310         type: 'colorbutton',
    311         tooltip: 'Text color',
    312         format: 'forecolor',
    313         panel: {
    314           role: 'application',
    315           ariaRemember: true,
    316           html: renderColorPicker(editor, true),
    317           onclick: onPanelClick(editor, Settings.getForeColorCols(editor))
    318         },
    319         onclick: onButtonClick(editor)
    320       });
    321       editor.addButton('backcolor', {
    322         type: 'colorbutton',
    323         tooltip: 'Background color',
    324         format: 'hilitecolor',
    325         panel: {
    326           role: 'application',
    327           ariaRemember: true,
    328           html: renderColorPicker(editor, false),
    329           onclick: onPanelClick(editor, Settings.getBackColorCols(editor))
    330         },
    331         onclick: onButtonClick(editor)
    332       });
    333     };
    334     var Buttons = { register: register$1 };
    335 
    336     global.add('textcolor', function (editor) {
    337       Commands.register(editor);
    338       Buttons.register(editor);
    339     });
    340     function Plugin () {
    341     }
    342 
    343     return Plugin;
    344 
    345 }());
    346 })();