scratch – Blame information for rev 94
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
58 | office | 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 | sk: { |
||
30 | foreColor: 'Farba textu', |
||
31 | backColor: 'Farba pozadia' |
||
32 | }, |
||
33 | zh_cn: { |
||
34 | foreColor: '文字颜色', |
||
35 | backColor: '背景颜色' |
||
36 | } |
||
37 | } |
||
38 | }); |
||
39 | // jshint camelcase:true |
||
40 | |||
41 | |||
42 | function hex(x) { |
||
43 | return ('0' + parseInt(x).toString(16)).slice(-2); |
||
44 | } |
||
45 | |||
46 | function colorToHex(rgb) { |
||
47 | if (rgb.search('rgb') === -1) { |
||
48 | return rgb.replace('#', ''); |
||
49 | } else if (rgb === 'rgba(0, 0, 0, 0)') { |
||
50 | return 'transparent'; |
||
51 | } else { |
||
52 | rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/); |
||
53 | return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); |
||
54 | } |
||
55 | } |
||
56 | |||
57 | function colorTagHandler(element, trumbowyg) { |
||
58 | var tags = []; |
||
59 | |||
60 | if(!element.style){ |
||
61 | return tags; |
||
62 | } |
||
63 | |||
64 | // background color |
||
65 | if (element.style.backgroundColor !== '') { |
||
66 | var backColor = colorToHex(element.style.backgroundColor); |
||
67 | if (trumbowyg.o.plugins.colors.colorList.indexOf(backColor) >= 0) { |
||
68 | tags.push('backColor' + backColor); |
||
69 | } else { |
||
70 | tags.push('backColorFree'); |
||
71 | } |
||
72 | } |
||
73 | |||
74 | // text color |
||
75 | var foreColor; |
||
76 | if (element.style.color !== '') { |
||
77 | foreColor = colorToHex(element.style.color); |
||
78 | } else if (element.hasAttribute('color')) { |
||
79 | foreColor = colorToHex(element.getAttribute('color')); |
||
80 | } |
||
81 | if (foreColor) { |
||
82 | if (trumbowyg.o.plugins.colors.colorList.indexOf(foreColor) >= 0) { |
||
83 | tags.push('foreColor' + foreColor); |
||
84 | } else { |
||
85 | tags.push('foreColorFree'); |
||
86 | } |
||
87 | } |
||
88 | |||
89 | return tags; |
||
90 | } |
||
91 | |||
92 | var defaultOptions = { |
||
93 | 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'] |
||
94 | }; |
||
95 | |||
96 | // Add all colors in two dropdowns |
||
97 | $.extend(true, $.trumbowyg, { |
||
98 | plugins: { |
||
99 | color: { |
||
100 | init: function (trumbowyg) { |
||
101 | trumbowyg.o.plugins.colors = trumbowyg.o.plugins.colors || defaultOptions; |
||
102 | var foreColorBtnDef = { |
||
103 | dropdown: buildDropdown('foreColor', trumbowyg) |
||
104 | }, |
||
105 | backColorBtnDef = { |
||
106 | dropdown: buildDropdown('backColor', trumbowyg) |
||
107 | }; |
||
108 | |||
109 | trumbowyg.addBtnDef('foreColor', foreColorBtnDef); |
||
110 | trumbowyg.addBtnDef('backColor', backColorBtnDef); |
||
111 | }, |
||
112 | tagHandler: colorTagHandler |
||
113 | } |
||
114 | } |
||
115 | }); |
||
116 | |||
117 | function buildDropdown(fn, trumbowyg) { |
||
118 | var dropdown = []; |
||
119 | |||
120 | $.each(trumbowyg.o.plugins.colors.colorList, function (i, color) { |
||
121 | var btn = fn + color, |
||
122 | btnDef = { |
||
123 | fn: fn, |
||
124 | forceCss: true, |
||
125 | param: '#' + color, |
||
126 | style: 'background-color: #' + color + ';' |
||
127 | }; |
||
128 | trumbowyg.addBtnDef(btn, btnDef); |
||
129 | dropdown.push(btn); |
||
130 | }); |
||
131 | |||
132 | var removeColorButtonName = fn + 'Remove', |
||
133 | removeColorBtnDef = { |
||
134 | fn: 'removeFormat', |
||
135 | param: fn, |
||
136 | style: 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);' |
||
137 | }; |
||
138 | trumbowyg.addBtnDef(removeColorButtonName, removeColorBtnDef); |
||
139 | dropdown.push(removeColorButtonName); |
||
140 | |||
141 | // add free color btn |
||
142 | var freeColorButtonName = fn + 'Free', |
||
143 | freeColorBtnDef = { |
||
144 | fn: function () { |
||
145 | trumbowyg.openModalInsert(trumbowyg.lang[fn], |
||
146 | { |
||
147 | color: { |
||
148 | label: fn, |
||
149 | value: '#FFFFFF' |
||
150 | } |
||
151 | }, |
||
152 | // callback |
||
153 | function (values) { |
||
154 | trumbowyg.execCmd(fn, values.color); |
||
155 | return true; |
||
156 | } |
||
157 | ); |
||
158 | }, |
||
159 | text: '#', |
||
160 | // style adjust for displaying the text |
||
161 | style: 'text-indent: 0;line-height: 20px;padding: 0 5px;' |
||
162 | }; |
||
163 | trumbowyg.addBtnDef(freeColorButtonName, freeColorBtnDef); |
||
164 | dropdown.push(freeColorButtonName); |
||
165 | |||
166 | return dropdown; |
||
167 | } |
||
168 | })(jQuery); |