openrat-cms

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

trumbowyg.colors.js (6598B)


      1 /* ===========================================================
      2  * trumbowyg.colors.js v1.2
      3  * Colors picker plugin for Trumbowyg
      4  * http://alex-d.github.com/Trumbowyg
      5  * ===========================================================
      6  * Author : Alexandre Demode (Alex-D)
      7  *          Twitter : @AlexandreDemode
      8  *          Website : alex-d.fr
      9  */
     10 
     11 (function ($) {
     12     'use strict';
     13 
     14     $.extend(true, $.trumbowyg, {
     15         langs: {
     16             // jshint camelcase:false
     17             cs: {
     18                 foreColor: 'Barva textu',
     19                 backColor: 'Barva pozadí'
     20             },
     21             en: {
     22                 foreColor: 'Text color',
     23                 backColor: 'Background color'
     24             },
     25             fr: {
     26                 foreColor: 'Couleur du texte',
     27                 backColor: 'Couleur de fond'
     28             },
     29             nl: {
     30                 foreColor: 'Tekstkleur',
     31                 backColor: 'Achtergrondkleur'
     32             },
     33             sk: {
     34                 foreColor: 'Farba textu',
     35                 backColor: 'Farba pozadia'
     36             },
     37             zh_cn: {
     38                 foreColor: '文字颜色',
     39                 backColor: '背景颜色'
     40             },
     41             ru: {
     42                 foreColor: 'Цвет текста',
     43                 backColor: 'Цвет выделения текста'
     44             },
     45             ja: {
     46                 foreColor: '文字色',
     47                 backColor: '背景色'
     48             },
     49             tr: {
     50                 foreColor: 'Yazı rengi',
     51                 backColor: 'Arkaplan rengi'
     52             }
     53         }
     54     });
     55 
     56     // jshint camelcase:true
     57 
     58 
     59     function hex(x) {
     60         return ('0' + parseInt(x).toString(16)).slice(-2);
     61     }
     62 
     63     function colorToHex(rgb) {
     64         if (rgb.search('rgb') === -1) {
     65             return rgb.replace('#', '');
     66         } else if (rgb === 'rgba(0, 0, 0, 0)') {
     67             return 'transparent';
     68         } else {
     69             rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
     70             return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
     71         }
     72     }
     73 
     74     function colorTagHandler(element, trumbowyg) {
     75         var tags = [];
     76 
     77         if (!element.style) {
     78             return tags;
     79         }
     80 
     81         // background color
     82         if (element.style.backgroundColor !== '') {
     83             var backColor = colorToHex(element.style.backgroundColor);
     84             if (trumbowyg.o.plugins.colors.colorList.indexOf(backColor) >= 0) {
     85                 tags.push('backColor' + backColor);
     86             } else {
     87                 tags.push('backColorFree');
     88             }
     89         }
     90 
     91         // text color
     92         var foreColor;
     93         if (element.style.color !== '') {
     94             foreColor = colorToHex(element.style.color);
     95         } else if (element.hasAttribute('color')) {
     96             foreColor = colorToHex(element.getAttribute('color'));
     97         }
     98         if (foreColor) {
     99             if (trumbowyg.o.plugins.colors.colorList.indexOf(foreColor) >= 0) {
    100                 tags.push('foreColor' + foreColor);
    101             } else {
    102                 tags.push('foreColorFree');
    103             }
    104         }
    105 
    106         return tags;
    107     }
    108 
    109     var defaultOptions = {
    110         colorList: ['ffffff', '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646', 'ffff00', 'f2f2f2', '7f7f7f', 'ddd9c3', 'c6d9f0', 'dbe5f1', 'f2dcdb', 'ebf1dd', 'e5e0ec', 'dbeef3', 'fdeada', 'fff2ca', 'd8d8d8', '595959', 'c4bd97', '8db3e2', 'b8cce4', 'e5b9b7', 'd7e3bc', 'ccc1d9', 'b7dde8', 'fbd5b5', 'ffe694', 'bfbfbf', '3f3f3f', '938953', '548dd4', '95b3d7', 'd99694', 'c3d69b', 'b2a2c7', 'b7dde8', 'fac08f', 'f2c314', 'a5a5a5', '262626', '494429', '17365d', '366092', '953734', '76923c', '5f497a', '92cddc', 'e36c09', 'c09100', '7f7f7f', '0c0c0c', '1d1b10', '0f243e', '244061', '632423', '4f6128', '3f3151', '31859b', '974806', '7f6000']
    111     };
    112 
    113     // Add all colors in two dropdowns
    114     $.extend(true, $.trumbowyg, {
    115         plugins: {
    116             color: {
    117                 init: function (trumbowyg) {
    118                     trumbowyg.o.plugins.colors = trumbowyg.o.plugins.colors || defaultOptions;
    119                     var foreColorBtnDef = {
    120                             dropdown: buildDropdown('foreColor', trumbowyg)
    121                         },
    122                         backColorBtnDef = {
    123                             dropdown: buildDropdown('backColor', trumbowyg)
    124                         };
    125 
    126                     trumbowyg.addBtnDef('foreColor', foreColorBtnDef);
    127                     trumbowyg.addBtnDef('backColor', backColorBtnDef);
    128                 },
    129                 tagHandler: colorTagHandler
    130             }
    131         }
    132     });
    133 
    134     function buildDropdown(fn, trumbowyg) {
    135         var dropdown = [];
    136 
    137         $.each(trumbowyg.o.plugins.colors.colorList, function (i, color) {
    138             var btn = fn + color,
    139                 btnDef = {
    140                     fn: fn,
    141                     forceCss: true,
    142                     param: '#' + color,
    143                     style: 'background-color: #' + color + ';'
    144                 };
    145             trumbowyg.addBtnDef(btn, btnDef);
    146             dropdown.push(btn);
    147         });
    148 
    149         var removeColorButtonName = fn + 'Remove',
    150             removeColorBtnDef = {
    151                 fn: 'removeFormat',
    152                 param: fn,
    153                 style: 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);'
    154             };
    155         trumbowyg.addBtnDef(removeColorButtonName, removeColorBtnDef);
    156         dropdown.push(removeColorButtonName);
    157 
    158         // add free color btn
    159         var freeColorButtonName = fn + 'Free',
    160             freeColorBtnDef = {
    161                 fn: function () {
    162                     trumbowyg.openModalInsert(trumbowyg.lang[fn],
    163                         {
    164                             color: {
    165                                 label: fn,
    166                                 value: '#FFFFFF'
    167                             }
    168                         },
    169                         // callback
    170                         function (values) {
    171                             trumbowyg.execCmd(fn, values.color);
    172                             return true;
    173                         }
    174                     );
    175                 },
    176                 text: '#',
    177                 // style adjust for displaying the text
    178                 style: 'text-indent: 0;line-height: 20px;padding: 0 5px;'
    179             };
    180         trumbowyg.addBtnDef(freeColorButtonName, freeColorBtnDef);
    181         dropdown.push(freeColorButtonName);
    182 
    183         return dropdown;
    184     }
    185 })(jQuery);