cable 0.9.15 → 0.9.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. data/VERSION +1 -1
  2. data/public/javascripts/tinymce/langs/en.js +54 -2
  3. data/public/javascripts/tinymce/plugins/advhr/langs/en_dlg.js +2 -0
  4. data/public/javascripts/tinymce/plugins/advhr/rule.htm +30 -29
  5. data/public/javascripts/tinymce/plugins/advimage/image.htm +34 -31
  6. data/public/javascripts/tinymce/plugins/advimage/js/image.js +4 -2
  7. data/public/javascripts/tinymce/plugins/advimage/langs/en_dlg.js +2 -0
  8. data/public/javascripts/tinymce/plugins/advlink/js/advlink.js +5 -10
  9. data/public/javascripts/tinymce/plugins/advlink/langs/en_dlg.js +4 -2
  10. data/public/javascripts/tinymce/plugins/advlink/link.htm +34 -29
  11. data/public/javascripts/tinymce/plugins/advlist/editor_plugin.js +1 -1
  12. data/public/javascripts/tinymce/plugins/advlist/editor_plugin_src.js +3 -3
  13. data/public/javascripts/tinymce/plugins/autolink/editor_plugin.js +1 -0
  14. data/public/javascripts/tinymce/plugins/autolink/editor_plugin_src.js +169 -0
  15. data/public/javascripts/tinymce/plugins/autosave/editor_plugin.js +1 -1
  16. data/public/javascripts/tinymce/plugins/autosave/editor_plugin_src.js +13 -4
  17. data/public/javascripts/tinymce/plugins/bbcode/editor_plugin.js +1 -1
  18. data/public/javascripts/tinymce/plugins/bbcode/editor_plugin_src.js +1 -1
  19. data/public/javascripts/tinymce/plugins/contextmenu/editor_plugin.js +1 -1
  20. data/public/javascripts/tinymce/plugins/contextmenu/editor_plugin_src.js +23 -14
  21. data/public/javascripts/tinymce/plugins/emotions/emotions.htm +15 -14
  22. data/public/javascripts/tinymce/plugins/fullpage/css/fullpage.css +6 -4
  23. data/public/javascripts/tinymce/plugins/fullpage/editor_plugin.js +1 -1
  24. data/public/javascripts/tinymce/plugins/fullpage/editor_plugin_src.js +53 -8
  25. data/public/javascripts/tinymce/plugins/fullpage/fullpage.htm +2 -2
  26. data/public/javascripts/tinymce/plugins/fullpage/js/fullpage.js +45 -19
  27. data/public/javascripts/tinymce/plugins/fullscreen/editor_plugin.js +1 -1
  28. data/public/javascripts/tinymce/plugins/fullscreen/editor_plugin_src.js +10 -2
  29. data/public/javascripts/tinymce/plugins/inlinepopups/editor_plugin.js +1 -1
  30. data/public/javascripts/tinymce/plugins/inlinepopups/editor_plugin_src.js +76 -15
  31. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/window.css +0 -10
  32. data/public/javascripts/tinymce/plugins/layer/editor_plugin.js +1 -1
  33. data/public/javascripts/tinymce/plugins/layer/editor_plugin_src.js +2 -0
  34. data/public/javascripts/tinymce/plugins/legacyoutput/editor_plugin.js +1 -1
  35. data/public/javascripts/tinymce/plugins/legacyoutput/editor_plugin_src.js +29 -26
  36. data/public/javascripts/tinymce/plugins/lists/editor_plugin.js +1 -0
  37. data/public/javascripts/tinymce/plugins/lists/editor_plugin_src.js +617 -0
  38. data/public/javascripts/tinymce/plugins/media/css/media.css +5 -4
  39. data/public/javascripts/tinymce/plugins/media/editor_plugin.js +1 -1
  40. data/public/javascripts/tinymce/plugins/media/editor_plugin_src.js +652 -296
  41. data/public/javascripts/tinymce/plugins/media/js/media.js +327 -603
  42. data/public/javascripts/tinymce/plugins/media/langs/en_dlg.js +8 -2
  43. data/public/javascripts/tinymce/plugins/media/media.htm +283 -288
  44. data/public/javascripts/tinymce/plugins/media/moxieplayer.swf +0 -0
  45. data/public/javascripts/tinymce/plugins/nonbreaking/editor_plugin.js +1 -1
  46. data/public/javascripts/tinymce/plugins/nonbreaking/editor_plugin_src.js +1 -1
  47. data/public/javascripts/tinymce/plugins/pagebreak/editor_plugin.js +1 -1
  48. data/public/javascripts/tinymce/plugins/pagebreak/editor_plugin_src.js +1 -4
  49. data/public/javascripts/tinymce/plugins/paste/editor_plugin.js +1 -1
  50. data/public/javascripts/tinymce/plugins/paste/editor_plugin_src.js +106 -128
  51. data/public/javascripts/tinymce/plugins/searchreplace/editor_plugin.js +1 -1
  52. data/public/javascripts/tinymce/plugins/searchreplace/editor_plugin_src.js +4 -0
  53. data/public/javascripts/tinymce/plugins/searchreplace/js/searchreplace.js +14 -10
  54. data/public/javascripts/tinymce/plugins/searchreplace/searchreplace.htm +17 -16
  55. data/public/javascripts/tinymce/plugins/spellchecker/editor_plugin.js +1 -1
  56. data/public/javascripts/tinymce/plugins/spellchecker/editor_plugin_src.js +55 -37
  57. data/public/javascripts/tinymce/plugins/style/js/props.js +2 -8
  58. data/public/javascripts/tinymce/plugins/style/langs/en_dlg.js +8 -1
  59. data/public/javascripts/tinymce/plugins/style/props.htm +513 -398
  60. data/public/javascripts/tinymce/plugins/tabfocus/editor_plugin.js +1 -1
  61. data/public/javascripts/tinymce/plugins/tabfocus/editor_plugin_src.js +30 -28
  62. data/public/javascripts/tinymce/plugins/table/cell.htm +12 -12
  63. data/public/javascripts/tinymce/plugins/table/editor_plugin.js +1 -1
  64. data/public/javascripts/tinymce/plugins/table/editor_plugin_src.js +85 -26
  65. data/public/javascripts/tinymce/plugins/table/js/cell.js +9 -11
  66. data/public/javascripts/tinymce/plugins/table/js/row.js +13 -18
  67. data/public/javascripts/tinymce/plugins/table/js/table.js +8 -12
  68. data/public/javascripts/tinymce/plugins/table/langs/en_dlg.js +1 -1
  69. data/public/javascripts/tinymce/plugins/table/merge_cells.htm +11 -11
  70. data/public/javascripts/tinymce/plugins/table/row.htm +10 -8
  71. data/public/javascripts/tinymce/plugins/table/table.htm +54 -53
  72. data/public/javascripts/tinymce/plugins/template/js/template.js +1 -1
  73. data/public/javascripts/tinymce/plugins/visualchars/editor_plugin.js +1 -1
  74. data/public/javascripts/tinymce/plugins/visualchars/editor_plugin_src.js +1 -1
  75. data/public/javascripts/tinymce/plugins/wordcount/editor_plugin.js +1 -1
  76. data/public/javascripts/tinymce/plugins/wordcount/editor_plugin_src.js +35 -19
  77. data/public/javascripts/tinymce/plugins/xhtmlxtras/abbr.htm +6 -5
  78. data/public/javascripts/tinymce/plugins/xhtmlxtras/acronym.htm +6 -5
  79. data/public/javascripts/tinymce/plugins/xhtmlxtras/attributes.htm +6 -5
  80. data/public/javascripts/tinymce/plugins/xhtmlxtras/cite.htm +5 -4
  81. data/public/javascripts/tinymce/plugins/xhtmlxtras/del.htm +9 -8
  82. data/public/javascripts/tinymce/plugins/xhtmlxtras/ins.htm +11 -10
  83. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/attributes.js +0 -1
  84. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/del.js +2 -2
  85. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/element_common.js +3 -5
  86. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/ins.js +4 -3
  87. data/public/javascripts/tinymce/themes/advanced/about.htm +3 -5
  88. data/public/javascripts/tinymce/themes/advanced/anchor.htm +5 -5
  89. data/public/javascripts/tinymce/themes/advanced/charmap.htm +39 -40
  90. data/public/javascripts/tinymce/themes/advanced/color_picker.htm +10 -9
  91. data/public/javascripts/tinymce/themes/advanced/editor_template.js +1 -1
  92. data/public/javascripts/tinymce/themes/advanced/editor_template_src.js +171 -40
  93. data/public/javascripts/tinymce/themes/advanced/image.htm +51 -51
  94. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/flash.gif +0 -0
  95. data/public/javascripts/tinymce/themes/advanced/img/iframe.gif +0 -0
  96. data/public/javascripts/tinymce/{plugins/pagebreak → themes/advanced}/img/pagebreak.gif +0 -0
  97. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/quicktime.gif +0 -0
  98. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/realmedia.gif +0 -0
  99. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/shockwave.gif +0 -0
  100. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/trans.gif +0 -0
  101. data/public/javascripts/tinymce/themes/advanced/img/video.gif +0 -0
  102. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/windowsmedia.gif +0 -0
  103. data/public/javascripts/tinymce/themes/advanced/js/about.js +1 -0
  104. data/public/javascripts/tinymce/themes/advanced/js/anchor.js +5 -0
  105. data/public/javascripts/tinymce/themes/advanced/js/charmap.js +26 -6
  106. data/public/javascripts/tinymce/themes/advanced/js/color_picker.js +108 -32
  107. data/public/javascripts/tinymce/themes/advanced/js/image.js +3 -1
  108. data/public/javascripts/tinymce/themes/advanced/js/link.js +4 -7
  109. data/public/javascripts/tinymce/themes/advanced/js/source_editor.js +1 -1
  110. data/public/javascripts/tinymce/themes/advanced/langs/en.js +8 -2
  111. data/public/javascripts/tinymce/themes/advanced/langs/en_dlg.js +6 -3
  112. data/public/javascripts/tinymce/themes/advanced/link.htm +27 -28
  113. data/public/javascripts/tinymce/themes/advanced/shortcuts.htm +47 -0
  114. data/public/javascripts/tinymce/themes/advanced/skins/default/content.css +11 -0
  115. data/public/javascripts/tinymce/themes/advanced/skins/default/ui.css +4 -4
  116. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/content.css +23 -0
  117. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/dialog.css +105 -0
  118. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/ui.css +101 -0
  119. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/content.css +10 -0
  120. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/dialog.css +1 -0
  121. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui.css +5 -4
  122. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui_black.css +1 -1
  123. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui_silver.css +1 -1
  124. data/public/javascripts/tinymce/themes/advanced/source_editor.htm +3 -3
  125. data/public/javascripts/tinymce/themes/simple/editor_template.js +1 -1
  126. data/public/javascripts/tinymce/themes/simple/editor_template_src.js +1 -2
  127. data/public/javascripts/tinymce/tiny_mce.js +1 -1
  128. data/public/javascripts/tinymce/tiny_mce_popup.js +1 -1
  129. data/public/javascripts/tinymce/tiny_mce_src.js +6383 -4025
  130. data/public/javascripts/tinymce/utils/form_utils.js +14 -4
  131. data/public/javascripts/tinymce/utils/mctabs.js +95 -10
  132. data/public/javascripts/tinymce/utils/validate.js +34 -2
  133. metadata +50 -93
  134. data/public/javascripts/tinymce/plugins/media/css/content.css +0 -6
  135. data/public/javascripts/tinymce/plugins/media/img/flv_player.swf +0 -0
  136. data/public/javascripts/tinymce/plugins/pagebreak/css/content.css +0 -1
  137. data/public/javascripts/tinymce/plugins/pagebreak/img/trans.gif +0 -0
  138. data/public/javascripts/tinymce/plugins/pdw/editor_plugin.js +0 -4
  139. data/public/javascripts/tinymce/plugins/pdw/editor_plugin_src.js +0 -158
  140. data/public/javascripts/tinymce/plugins/pdw/img/toolbars.gif +0 -0
  141. data/public/javascripts/tinymce/plugins/pdw/langs/en.js +0 -3
  142. data/public/javascripts/tinymce/plugins/pdw/langs/nl.js +0 -3
@@ -17,57 +17,57 @@
17
17
 
18
18
  <div class="panel_wrapper">
19
19
  <div id="general_panel" class="panel current">
20
- <table border="0" cellpadding="4" cellspacing="0">
21
- <tr>
22
- <td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
23
- <td><table border="0" cellspacing="0" cellpadding="0">
24
- <tr>
25
- <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
26
- <td id="srcbrowsercontainer">&nbsp;</td>
27
- </tr>
28
- </table></td>
29
- </tr>
30
- <tr>
31
- <td><label for="image_list">{#advanced_dlg.image_list}</label></td>
32
- <td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>
33
- </tr>
34
- <tr>
35
- <td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
36
- <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
37
- </tr>
38
- <tr>
39
- <td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
40
- <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
41
- <option value="">{#not_set}</option>
42
- <option value="baseline">{#advanced_dlg.image_align_baseline}</option>
43
- <option value="top">{#advanced_dlg.image_align_top}</option>
44
- <option value="middle">{#advanced_dlg.image_align_middle}</option>
45
- <option value="bottom">{#advanced_dlg.image_align_bottom}</option>
46
- <option value="text-top">{#advanced_dlg.image_align_texttop}</option>
47
- <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>
48
- <option value="left">{#advanced_dlg.image_align_left}</option>
49
- <option value="right">{#advanced_dlg.image_align_right}</option>
50
- </select></td>
51
- </tr>
52
- <tr>
53
- <td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
54
- <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
55
- x
56
- <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
57
- </tr>
58
- <tr>
59
- <td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
60
- <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
61
- </tr>
62
- <tr>
63
- <td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
64
- <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
65
- </tr>
66
- <tr>
67
- <td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
68
- <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
69
- </tr>
70
- </table>
20
+ <table border="0" cellpadding="4" cellspacing="0">
21
+ <tr>
22
+ <td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
23
+ <td><table border="0" cellspacing="0" cellpadding="0">
24
+ <tr>
25
+ <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
26
+ <td id="srcbrowsercontainer">&nbsp;</td>
27
+ </tr>
28
+ </table></td>
29
+ </tr>
30
+ <tr>
31
+ <td><label for="image_list">{#advanced_dlg.image_list}</label></td>
32
+ <td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>
33
+ </tr>
34
+ <tr>
35
+ <td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
36
+ <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
37
+ </tr>
38
+ <tr>
39
+ <td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
40
+ <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
41
+ <option value="">{#not_set}</option>
42
+ <option value="baseline">{#advanced_dlg.image_align_baseline}</option>
43
+ <option value="top">{#advanced_dlg.image_align_top}</option>
44
+ <option value="middle">{#advanced_dlg.image_align_middle}</option>
45
+ <option value="bottom">{#advanced_dlg.image_align_bottom}</option>
46
+ <option value="text-top">{#advanced_dlg.image_align_texttop}</option>
47
+ <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>
48
+ <option value="left">{#advanced_dlg.image_align_left}</option>
49
+ <option value="right">{#advanced_dlg.image_align_right}</option>
50
+ </select></td>
51
+ </tr>
52
+ <tr>
53
+ <td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
54
+ <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
55
+ x
56
+ <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
57
+ </tr>
58
+ <tr>
59
+ <td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
60
+ <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
61
+ </tr>
62
+ <tr>
63
+ <td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
64
+ <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
65
+ </tr>
66
+ <tr>
67
+ <td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
68
+ <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
69
+ </tr>
70
+ </table>
71
71
  </div>
72
72
  </div>
73
73
 
@@ -66,6 +66,7 @@ function insertHelpIFrame() {
66
66
  html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';
67
67
  document.getElementById('iframecontainer').innerHTML = html;
68
68
  document.getElementById('help_tab').style.display = 'block';
69
+ document.getElementById('help_tab').setAttribute("aria-hidden", "false");
69
70
  }
70
71
  }
71
72
 
@@ -19,6 +19,11 @@ var AnchorDialog = {
19
19
  update : function() {
20
20
  var ed = this.editor, elm, name = document.forms[0].anchorName.value;
21
21
 
22
+ if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) {
23
+ tinyMCEPopup.alert('advanced_dlg.anchor_invalid');
24
+ return;
25
+ }
26
+
22
27
  tinyMCEPopup.restoreSelection();
23
28
 
24
29
  if (this.action != 'update')
@@ -173,7 +173,7 @@ var charmap = [
173
173
  ['&yacute;', '&#253;', true, 'y - acute'],
174
174
  ['&thorn;', '&#254;', true, 'thorn'],
175
175
  ['&yuml;', '&#255;', true, 'y - diaeresis'],
176
- ['&Alpha;', '&#913;', true, 'Alpha'],
176
+ ['&Alpha;', '&#913;', true, 'Alpha'],
177
177
  ['&Beta;', '&#914;', true, 'Beta'],
178
178
  ['&Gamma;', '&#915;', true, 'Gamma'],
179
179
  ['&Delta;', '&#916;', true, 'Delta'],
@@ -258,8 +258,8 @@ var charmap = [
258
258
  ['&rfloor;', '&#8971;', false,'right floor'],
259
259
  ['&lang;', '&#9001;', false,'left-pointing angle bracket'],
260
260
  ['&rang;', '&#9002;', false,'right-pointing angle bracket'],
261
- ['&loz;', '&#9674;', true,'lozenge'],
262
- ['&spades;', '&#9824;', false,'black spade suit'],
261
+ ['&loz;', '&#9674;', true, 'lozenge'],
262
+ ['&spades;', '&#9824;', true, 'black spade suit'],
263
263
  ['&clubs;', '&#9827;', true, 'black club suit'],
264
264
  ['&hearts;', '&#9829;', true, 'black heart suit'],
265
265
  ['&diams;', '&#9830;', true, 'black diamond suit'],
@@ -275,19 +275,38 @@ var charmap = [
275
275
 
276
276
  tinyMCEPopup.onInit.add(function() {
277
277
  tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
278
+ addKeyboardNavigation();
278
279
  });
279
280
 
281
+ function addKeyboardNavigation(){
282
+ var tableElm, cells, settings;
283
+
284
+ cells = tinyMCEPopup.dom.select(".charmaplink", "charmapgroup");
285
+
286
+ settings ={
287
+ root: "charmapgroup",
288
+ items: cells
289
+ };
290
+
291
+ tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);
292
+ }
293
+
280
294
  function renderCharMapHTML() {
281
295
  var charsPerRow = 20, tdWidth=20, tdHeight=20, i;
282
- var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';
296
+ var html = '<div id="charmapgroup" aria-labelledby="charmap_label" tabindex="0" role="listbox">'+
297
+ '<table role="presentation" border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) +
298
+ '"><tr height="' + tdHeight + '">';
283
299
  var cols=-1;
284
300
 
285
301
  for (i=0; i<charmap.length; i++) {
302
+ var previewCharFn;
303
+
286
304
  if (charmap[i][2]==true) {
287
305
  cols++;
306
+ previewCharFn = 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');';
288
307
  html += ''
289
308
  + '<td class="charmap">'
290
- + '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
309
+ + '<a class="charmaplink" role="button" onmouseover="'+previewCharFn+'" onfocus="'+previewCharFn+'" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
291
310
  + charmap[i][1]
292
311
  + '</a></td>';
293
312
  if ((cols+1) % charsPerRow == 0)
@@ -301,7 +320,8 @@ function renderCharMapHTML() {
301
320
  html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';
302
321
  }
303
322
 
304
- html += '</tr></table>';
323
+ html += '</tr></table></div>';
324
+ html = html.replace(/<tr height="20"><\/tr>/g, '');
305
325
 
306
326
  return html;
307
327
  }
@@ -1,6 +1,6 @@
1
1
  tinyMCEPopup.requireLangPack();
2
2
 
3
- var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;
3
+ var detail = 50, strhex = "0123456789ABCDEF", i, isMouseDown = false, isMouseOver = false;
4
4
 
5
5
  var colors = [
6
6
  "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",
@@ -33,37 +33,41 @@ var colors = [
33
33
  ];
34
34
 
35
35
  var named = {
36
- '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
37
- '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',
38
- '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',
39
- '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',
40
- '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',
41
- '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',
42
- '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',
43
- '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',
44
- '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',
45
- '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',
46
- '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',
47
- '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',
48
- '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',
49
- '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',
50
- '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',
51
- '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',
52
- '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',
53
- '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',
54
- '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',
55
- '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',
56
- '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',
57
- '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',
58
- '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'
36
+ '#F0F8FF':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
37
+ '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown',
38
+ '#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue',
39
+ '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod',
40
+ '#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green',
41
+ '#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue',
42
+ '#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue',
43
+ '#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green',
44
+ '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey',
45
+ '#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory',
46
+ '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue',
47
+ '#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green',
48
+ '#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey',
49
+ '#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',
50
+ '#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue',
51
+ '#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin',
52
+ '#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid',
53
+ '#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff',
54
+ '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue',
55
+ '#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver',
56
+ '#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green',
57
+ '#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',
58
+ '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green'
59
59
  };
60
60
 
61
+ var namedLookup = {};
62
+
61
63
  function init() {
62
- var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));
64
+ var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value;
63
65
 
64
66
  tinyMCEPopup.resizeToInnerSize();
65
67
 
66
68
  generatePicker();
69
+ generateWebColors();
70
+ generateNamedColors();
67
71
 
68
72
  if (inputColor) {
69
73
  changeFinalColor(inputColor);
@@ -73,6 +77,45 @@ function init() {
73
77
  if (col)
74
78
  updateLight(col.r, col.g, col.b);
75
79
  }
80
+
81
+ for (key in named) {
82
+ value = named[key];
83
+ namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase();
84
+ }
85
+ }
86
+
87
+ function toHexColor(color) {
88
+ var matches, red, green, blue, toInt = parseInt;
89
+
90
+ function hex(value) {
91
+ value = parseInt(value).toString(16);
92
+
93
+ return value.length > 1 ? value : '0' + value; // Padd with leading zero
94
+ };
95
+
96
+ color = color.replace(/[\s#]+/g, '').toLowerCase();
97
+ color = namedLookup[color] || color;
98
+ matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)|([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})|([a-f0-9])([a-f0-9])([a-f0-9])$/.exec(color);
99
+
100
+ if (matches) {
101
+ if (matches[1]) {
102
+ red = toInt(matches[1]);
103
+ green = toInt(matches[2]);
104
+ blue = toInt(matches[3]);
105
+ } else if (matches[4]) {
106
+ red = toInt(matches[4], 16);
107
+ green = toInt(matches[5], 16);
108
+ blue = toInt(matches[6], 16);
109
+ } else if (matches[7]) {
110
+ red = toInt(matches[7] + matches[7], 16);
111
+ green = toInt(matches[8] + matches[8], 16);
112
+ blue = toInt(matches[9] + matches[9], 16);
113
+ }
114
+
115
+ return '#' + hex(red) + hex(green) + hex(blue);
116
+ }
117
+
118
+ return '';
76
119
  }
77
120
 
78
121
  function insertAction() {
@@ -81,7 +124,7 @@ function insertAction() {
81
124
  tinyMCEPopup.restoreSelection();
82
125
 
83
126
  if (f)
84
- f(color);
127
+ f(toHexColor(color));
85
128
 
86
129
  tinyMCEPopup.close();
87
130
  }
@@ -91,7 +134,7 @@ function showColor(color, name) {
91
134
  document.getElementById("colorname").innerHTML = name;
92
135
 
93
136
  document.getElementById("preview").style.backgroundColor = color;
94
- document.getElementById("color").value = color.toLowerCase();
137
+ document.getElementById("color").value = color.toUpperCase();
95
138
  }
96
139
 
97
140
  function convertRGBToHex(col) {
@@ -153,23 +196,40 @@ function generateWebColors() {
153
196
  if (el.className == 'generated')
154
197
  return;
155
198
 
156
- h += '<table border="0" cellspacing="1" cellpadding="0">'
199
+ // TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby.
200
+ h += '<div role="listbox" aria-labelledby="webcolors_title" tabindex="0"><table role="presentation" border="0" cellspacing="1" cellpadding="0">'
157
201
  + '<tr>';
158
202
 
159
203
  for (i=0; i<colors.length; i++) {
160
204
  h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'
161
- + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">'
162
- + '</a></td>';
205
+ + '<a href="javascript:insertAction();" role="option" tabindex="-1" aria-labelledby="web_colors_' + i + '" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">';
206
+ if (tinyMCEPopup.editor.forcedHighContrastMode) {
207
+ h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';
208
+ }
209
+ h += '<span class="mceVoiceLabel" style="display:none;" id="web_colors_' + i + '">' + colors[i].toUpperCase() + '</span>';
210
+ h += '</a></td>';
163
211
  if ((i+1) % 18 == 0)
164
212
  h += '</tr><tr>';
165
213
  }
166
214
 
167
- h += '</table>';
215
+ h += '</table></div>';
168
216
 
169
217
  el.innerHTML = h;
170
218
  el.className = 'generated';
219
+
220
+ paintCanvas(el);
221
+ enableKeyboardNavigation(el.firstChild);
171
222
  }
172
223
 
224
+ function paintCanvas(el) {
225
+ tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) {
226
+ var context;
227
+ if (canvas.getContext && (context = canvas.getContext("2d"))) {
228
+ context.fillStyle = canvas.getAttribute('data-color');
229
+ context.fillRect(0, 0, 10, 10);
230
+ }
231
+ });
232
+ }
173
233
  function generateNamedColors() {
174
234
  var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;
175
235
 
@@ -178,11 +238,27 @@ function generateNamedColors() {
178
238
 
179
239
  for (n in named) {
180
240
  v = named[n];
181
- h += '<a href="javascript:insertAction();" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '"><!-- IE --></a>'
241
+ h += '<a href="javascript:insertAction();" role="option" tabindex="-1" aria-labelledby="named_colors_' + i + '" onfocus="showColor(\'' + n + '\',\'' + v + '\');" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '">';
242
+ if (tinyMCEPopup.editor.forcedHighContrastMode) {
243
+ h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';
244
+ }
245
+ h += '<span class="mceVoiceLabel" style="display:none;" id="named_colors_' + i + '">' + v + '</span>';
246
+ h += '</a>';
247
+ i++;
182
248
  }
183
249
 
184
250
  el.innerHTML = h;
185
251
  el.className = 'generated';
252
+
253
+ paintCanvas(el);
254
+ enableKeyboardNavigation(el);
255
+ }
256
+
257
+ function enableKeyboardNavigation(el) {
258
+ tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {
259
+ root: el,
260
+ items: tinyMCEPopup.dom.select('a', el)
261
+ }, tinyMCEPopup.dom);
186
262
  }
187
263
 
188
264
  function dechex(n) {
@@ -77,7 +77,7 @@ var ImageDialog = {
77
77
  args.style = this.styleVal;
78
78
 
79
79
  tinymce.extend(args, {
80
- src : f.src.value,
80
+ src : f.src.value.replace(/ /g, '%20'),
81
81
  alt : f.alt.value,
82
82
  width : f.width.value,
83
83
  height : f.height.value
@@ -87,6 +87,8 @@ var ImageDialog = {
87
87
 
88
88
  if (el && el.nodeName == 'IMG') {
89
89
  ed.dom.setAttribs(el, args);
90
+ tinyMCEPopup.editor.execCommand('mceRepaint');
91
+ tinyMCEPopup.editor.focus();
90
92
  } else {
91
93
  ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});
92
94
  ed.dom.setAttribs('__mce_tmp', args);