123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- /* ===========================================================
- * trumbowyg.colors.js v1.2
- * Colors picker plugin for Trumbowyg
- * http://alex-d.github.com/Trumbowyg
- * ===========================================================
- * Author : Alexandre Demode (Alex-D)
- * Twitter : @AlexandreDemode
- * Website : alex-d.fr
- */
- (function ($) {
- 'use strict';
- $.extend(true, $.trumbowyg, {
- langs: {
- // jshint camelcase:false
- cs: {
- foreColor: 'Barva textu',
- backColor: 'Barva pozadí'
- },
- en: {
- foreColor: 'Text color',
- backColor: 'Background color'
- },
- fr: {
- foreColor: 'Couleur du texte',
- backColor: 'Couleur de fond'
- },
- nl: {
- foreColor: 'Tekstkleur',
- backColor: 'Achtergrondkleur'
- },
- sk: {
- foreColor: 'Farba textu',
- backColor: 'Farba pozadia'
- },
- zh_cn: {
- foreColor: '文字颜色',
- backColor: '背景颜色'
- },
- ru: {
- foreColor: 'Цвет текста',
- backColor: 'Цвет выделения текста'
- },
- ja: {
- foreColor: '文字色',
- backColor: '背景色'
- },
- tr: {
- foreColor: 'Yazı rengi',
- backColor: 'Arkaplan rengi'
- }
- }
- });
- // jshint camelcase:true
- function hex(x) {
- return ('0' + parseInt(x).toString(16)).slice(-2);
- }
- function colorToHex(rgb) {
- if (rgb.search('rgb') === -1) {
- return rgb.replace('#', '');
- } else if (rgb === 'rgba(0, 0, 0, 0)') {
- return 'transparent';
- } else {
- rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
- return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
- }
- }
- function colorTagHandler(element, trumbowyg) {
- var tags = [];
- if (!element.style) {
- return tags;
- }
- // background color
- if (element.style.backgroundColor !== '') {
- var backColor = colorToHex(element.style.backgroundColor);
- if (trumbowyg.o.plugins.colors.colorList.indexOf(backColor) >= 0) {
- tags.push('backColor' + backColor);
- } else {
- tags.push('backColorFree');
- }
- }
- // text color
- var foreColor;
- if (element.style.color !== '') {
- foreColor = colorToHex(element.style.color);
- } else if (element.hasAttribute('color')) {
- foreColor = colorToHex(element.getAttribute('color'));
- }
- if (foreColor) {
- if (trumbowyg.o.plugins.colors.colorList.indexOf(foreColor) >= 0) {
- tags.push('foreColor' + foreColor);
- } else {
- tags.push('foreColorFree');
- }
- }
- return tags;
- }
- var defaultOptions = {
- 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']
- };
- // Add all colors in two dropdowns
- $.extend(true, $.trumbowyg, {
- plugins: {
- color: {
- init: function (trumbowyg) {
- trumbowyg.o.plugins.colors = trumbowyg.o.plugins.colors || defaultOptions;
- var foreColorBtnDef = {
- dropdown: buildDropdown('foreColor', trumbowyg)
- },
- backColorBtnDef = {
- dropdown: buildDropdown('backColor', trumbowyg)
- };
- trumbowyg.addBtnDef('foreColor', foreColorBtnDef);
- trumbowyg.addBtnDef('backColor', backColorBtnDef);
- },
- tagHandler: colorTagHandler
- }
- }
- });
- function buildDropdown(fn, trumbowyg) {
- var dropdown = [];
- $.each(trumbowyg.o.plugins.colors.colorList, function (i, color) {
- var btn = fn + color,
- btnDef = {
- fn: fn,
- forceCss: true,
- param: '#' + color,
- style: 'background-color: #' + color + ';'
- };
- trumbowyg.addBtnDef(btn, btnDef);
- dropdown.push(btn);
- });
- var removeColorButtonName = fn + 'Remove',
- removeColorBtnDef = {
- fn: 'removeFormat',
- param: fn,
- style: 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);'
- };
- trumbowyg.addBtnDef(removeColorButtonName, removeColorBtnDef);
- dropdown.push(removeColorButtonName);
- // add free color btn
- var freeColorButtonName = fn + 'Free',
- freeColorBtnDef = {
- fn: function () {
- trumbowyg.openModalInsert(trumbowyg.lang[fn],
- {
- color: {
- label: fn,
- value: '#FFFFFF'
- }
- },
- // callback
- function (values) {
- trumbowyg.execCmd(fn, values.color);
- return true;
- }
- );
- },
- text: '#',
- // style adjust for displaying the text
- style: 'text-indent: 0;line-height: 20px;padding: 0 5px;'
- };
- trumbowyg.addBtnDef(freeColorButtonName, freeColorBtnDef);
- dropdown.push(freeColorButtonName);
- return dropdown;
- }
- })(jQuery);
|