ueditor_rails 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. data/README.markdown +2 -2
  2. data/app/assets/images/ueditor_rails/dialogs/scrawl/addimg.png +0 -0
  3. data/app/assets/images/ueditor_rails/dialogs/scrawl/brush.png +0 -0
  4. data/app/assets/images/ueditor_rails/dialogs/scrawl/delimg.png +0 -0
  5. data/app/assets/images/ueditor_rails/dialogs/scrawl/delimgH.png +0 -0
  6. data/app/assets/images/ueditor_rails/dialogs/scrawl/empty.png +0 -0
  7. data/app/assets/images/ueditor_rails/dialogs/scrawl/emptyH.png +0 -0
  8. data/app/assets/images/ueditor_rails/dialogs/scrawl/eraser.png +0 -0
  9. data/app/assets/images/ueditor_rails/dialogs/scrawl/redo.png +0 -0
  10. data/app/assets/images/ueditor_rails/dialogs/scrawl/redoH.png +0 -0
  11. data/app/assets/images/ueditor_rails/dialogs/scrawl/scale.png +0 -0
  12. data/app/assets/images/ueditor_rails/dialogs/scrawl/scaleH.png +0 -0
  13. data/app/assets/images/ueditor_rails/dialogs/scrawl/size.png +0 -0
  14. data/app/assets/images/ueditor_rails/dialogs/scrawl/undo.png +0 -0
  15. data/app/assets/images/ueditor_rails/dialogs/scrawl/undoH.png +0 -0
  16. data/app/assets/javascripts/ueditor_rails/_config.js.erb +28 -24
  17. data/app/assets/javascripts/ueditor_rails/dialogs/scrawl.js +655 -0
  18. data/app/assets/javascripts/ueditor_rails/dialogs/wordimage.js +154 -0
  19. data/app/assets/stylesheets/ueditor_rails/dialogs/scrawl.css.erb +72 -0
  20. data/app/controllers/ueditor_rails/dialogs_controller.rb +8 -0
  21. data/app/controllers/ueditor_rails/libs_controller.rb +14 -1
  22. data/app/helpers/ueditor_rails/application_helper.rb +23 -0
  23. data/app/views/ueditor_rails/dialogs/attachment.html.erb +3 -3
  24. data/app/views/ueditor_rails/dialogs/image.html.erb +2 -2
  25. data/app/views/ueditor_rails/dialogs/scrawl.html.erb +96 -0
  26. data/app/views/ueditor_rails/dialogs/wordimage.html.erb +155 -0
  27. data/config/routes.rb +2 -2
  28. data/lib/generators/ueditor_rails/templates/ueditor_config.js.erb +33 -21
  29. data/lib/ueditor_rails.rb +7 -0
  30. data/lib/ueditor_rails/util.rb +1 -1
  31. data/lib/ueditor_rails/version.rb +1 -1
  32. data/test/dummy/config/application.rb +2 -0
  33. data/test/dummy/log/development.log +594 -0
  34. data/test/dummy/tmp/cache/assets/C81/610/sprockets%2F74551592340adfb31d564a6f0780986a +0 -0
  35. data/test/dummy/tmp/cache/assets/C81/680/sprockets%2F05f48503b0539542bae58cd42890287d +0 -0
  36. data/test/dummy/tmp/cache/assets/C92/A50/sprockets%2Fb8ab434fa9743f8545988223229ef813 +0 -0
  37. data/test/dummy/tmp/cache/assets/CA9/8D0/sprockets%2F430c458f24b93f37143e610b7af710d8 +0 -0
  38. data/test/dummy/tmp/cache/assets/CDD/110/sprockets%2F201786630fb75920fef0b95a7ba8e404 +0 -0
  39. data/test/dummy/tmp/cache/assets/CF8/FC0/sprockets%2Fe181c7f625e3797eaa44e044c77e9688 +0 -0
  40. data/test/dummy/tmp/cache/assets/CFC/560/sprockets%2Fbc63d027b162a565426fdbb4611619ab +0 -0
  41. data/test/dummy/tmp/cache/assets/D05/3A0/sprockets%2F8362a0d2c101ef1148d5efcb53e34893 +0 -0
  42. data/test/dummy/tmp/cache/assets/D05/570/sprockets%2Fca8368b2f01a1645dfe894d41152f2c0 +0 -0
  43. data/test/dummy/tmp/cache/assets/D16/E70/sprockets%2Ffcc7289ae3530fcff4500f35990533f4 +0 -0
  44. data/test/dummy/tmp/cache/assets/D2D/F70/sprockets%2F1db6dd5b1f0887b130386d6bc20d13e2 +0 -0
  45. data/test/dummy/tmp/cache/assets/D31/7D0/sprockets%2Fe9f71394f8e86a70e9431c3d83fb86f9 +0 -0
  46. data/test/dummy/tmp/cache/assets/D39/B00/sprockets%2F84ac6151984303fcaec0d48651b6d7ca +0 -0
  47. data/test/dummy/tmp/cache/assets/D40/280/sprockets%2Fc564b6fa3f835a246df0355a83058fcd +0 -0
  48. data/test/dummy/tmp/cache/assets/D41/C00/sprockets%2F0f88cb64779d212943bbab3f5ac483d4 +0 -0
  49. data/test/dummy/tmp/cache/assets/D4A/CF0/sprockets%2F78a5eda44e97ab212ce37b889470c4d7 +0 -0
  50. data/test/dummy/tmp/cache/assets/D4D/060/sprockets%2Fdf8071fd9e383d72ba1f17b5d5e98516 +0 -0
  51. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  52. data/test/dummy/tmp/cache/assets/D55/1F0/sprockets%2F978d1a29569eb1c8ca9883b64ffb91b3 +0 -0
  53. data/test/dummy/tmp/cache/assets/D70/B70/sprockets%2F6ebaed371aa715b95667e416378cba4d +0 -0
  54. data/test/dummy/tmp/cache/assets/D75/2B0/sprockets%2F7a4cbc3862aa0d6f1ec9e7518fa55838 +0 -0
  55. data/test/dummy/tmp/cache/assets/DCD/870/sprockets%2Fd5daf18cb49181ab0ba896acfd8c8334 +0 -0
  56. data/test/dummy/tmp/cache/assets/DD7/600/sprockets%2F0cec2cc545e1d3bd889d195f68dea4b7 +0 -0
  57. data/test/dummy/tmp/cache/assets/DDB/C20/sprockets%2F46613f4acf7d7cc09f5190f2d8bbdf9f +0 -0
  58. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  59. data/test/dummy/tmp/cache/assets/DFE/FF0/sprockets%2F9d2bcad3ae0c53ee9a4685b5aac1887f +0 -0
  60. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  61. data/test/dummy/tmp/cache/assets/E34/9F0/sprockets%2F2dbdbaffe3f466f85cee37cee4331f34 +0 -0
  62. data/test/dummy/tmp/cache/assets/E3A/DA0/sprockets%2Ffd736ded1575dfbcf2d45ad5eb4e28d9 +0 -0
  63. data/vendor/assets/javascripts/ueditor/dialogs/anchor/anchor.html.erb +57 -0
  64. data/vendor/assets/javascripts/ueditor/dialogs/background/background.css +24 -0
  65. data/vendor/assets/javascripts/ueditor/dialogs/background/background.html.erb +55 -0
  66. data/vendor/assets/javascripts/ueditor/dialogs/background/background.js +348 -0
  67. data/vendor/assets/javascripts/ueditor/dialogs/emotion/emotion.css.erb +0 -1
  68. data/vendor/assets/javascripts/ueditor/dialogs/emotion/emotion.html.erb +41 -41
  69. data/vendor/assets/javascripts/ueditor/dialogs/gmap/gmap.html.erb +89 -0
  70. data/vendor/assets/javascripts/ueditor/dialogs/help/help.html.erb +72 -70
  71. data/vendor/assets/javascripts/ueditor/dialogs/highlightcode/highlightcode.html.erb +131 -0
  72. data/vendor/assets/javascripts/ueditor/dialogs/insertframe/insertframe.html.erb +98 -0
  73. data/vendor/assets/javascripts/ueditor/dialogs/link/link.html.erb +122 -107
  74. data/vendor/assets/javascripts/ueditor/dialogs/map/map.html.erb +105 -0
  75. data/vendor/assets/javascripts/ueditor/dialogs/music/music.css +30 -0
  76. data/vendor/assets/javascripts/ueditor/dialogs/music/music.html.erb +32 -0
  77. data/vendor/assets/javascripts/ueditor/dialogs/music/music.js +192 -0
  78. data/vendor/assets/javascripts/ueditor/dialogs/searchreplace/searchreplace.html.erb +74 -0
  79. data/vendor/assets/javascripts/ueditor/dialogs/searchreplace/searchreplace.js +160 -0
  80. data/vendor/assets/javascripts/ueditor/dialogs/snapscreen/snapscreen.html.erb +91 -0
  81. data/vendor/assets/javascripts/ueditor/dialogs/spechars/spechars.html.erb +2 -2
  82. data/vendor/assets/javascripts/ueditor/dialogs/table/edittable.html.erb +46 -45
  83. data/vendor/assets/javascripts/ueditor/dialogs/table/edittd.html.erb +40 -39
  84. data/vendor/assets/javascripts/ueditor/dialogs/table/edittip.html.erb +21 -21
  85. data/vendor/assets/javascripts/ueditor/dialogs/template/config.js +42 -0
  86. data/vendor/assets/javascripts/ueditor/dialogs/template/images/bg.gif +0 -0
  87. data/vendor/assets/javascripts/ueditor/dialogs/template/images/pre0.png +0 -0
  88. data/vendor/assets/javascripts/ueditor/dialogs/template/images/pre1.png +0 -0
  89. data/vendor/assets/javascripts/ueditor/dialogs/template/images/pre2.png +0 -0
  90. data/vendor/assets/javascripts/ueditor/dialogs/template/images/pre3.png +0 -0
  91. data/vendor/assets/javascripts/ueditor/dialogs/template/images/pre4.png +0 -0
  92. data/vendor/assets/javascripts/ueditor/dialogs/template/template.css +18 -0
  93. data/vendor/assets/javascripts/ueditor/dialogs/template/template.html.erb +26 -0
  94. data/vendor/assets/javascripts/ueditor/dialogs/template/template.js +53 -0
  95. data/vendor/assets/javascripts/ueditor/dialogs/video/video.html.erb +64 -53
  96. data/vendor/assets/javascripts/ueditor/dialogs/video/video.js.erb +409 -0
  97. data/vendor/assets/javascripts/ueditor/dialogs/webapp/webapp.html.erb +64 -0
  98. data/vendor/assets/javascripts/ueditor/editor_all.js.erb +17209 -15783
  99. data/vendor/assets/javascripts/ueditor/third-party/SyntaxHighlighter/shCore.js +3655 -0
  100. data/vendor/assets/javascripts/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css +316 -0
  101. data/vendor/assets/javascripts/ueditor/third-party/fClipboard_ueditor.swf +0 -0
  102. data/vendor/assets/javascripts/ueditor/third-party/snapscreen/UEditorSnapscreen.exe +0 -0
  103. data/vendor/assets/javascripts/ueditor/uparse.js +3 -13
  104. metadata +77 -3
  105. data/vendor/assets/javascripts/ueditor/dialogs/video/video.js +0 -402
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Created with JetBrains PhpStorm.
3
+ * User: xuheng
4
+ * Date: 12-8-8
5
+ * Time: 下午2:09
6
+ * To change this template use File | Settings | File Templates.
7
+ */
8
+ (function () {
9
+ var me = editor,
10
+ preview = $G( "preview" ),
11
+ preitem = $G( "preitem" ),
12
+ tmps = templates,
13
+ currentTmp;
14
+ var initPre = function () {
15
+ var str = "";
16
+ for ( var i = 0, tmp; tmp = tmps[i++]; ) {
17
+ str += '<div class="preitem" onclick="pre(' + i + ')"><img src="' + "images/" + tmp.pre + '" ' + (tmp.title ? "alt=" + tmp.title + " title=" + tmp.title + "" : "") + '></div>';
18
+ }
19
+ preitem.innerHTML = str;
20
+ };
21
+ var pre = function ( n ) {
22
+ var tmp = tmps[n - 1];
23
+ currentTmp = tmp;
24
+ clearItem();
25
+ domUtils.setStyles( preitem.childNodes[n - 1], {
26
+ "background-color":"lemonChiffon",
27
+ "border":"#ccc 1px solid"
28
+ } );
29
+ preview.innerHTML = tmp.preHtml ? tmp.preHtml : "";
30
+ };
31
+ var clearItem = function () {
32
+ var items = preitem.children;
33
+ for ( var i = 0, item; item = items[i++]; ) {
34
+ domUtils.setStyles( item, {
35
+ "background-color":"",
36
+ "border":"white 1px solid"
37
+ } );
38
+ }
39
+ };
40
+ dialog.onok = function () {
41
+ if ( !$G( "issave" ).checked ){
42
+ me.execCommand( "cleardoc" );
43
+ }
44
+ var obj = {
45
+ html:currentTmp && currentTmp.html
46
+ };
47
+ me.execCommand( "template", obj );
48
+ };
49
+ initPre();
50
+ window.pre = pre;
51
+ pre(2)
52
+
53
+ })();
@@ -2,66 +2,77 @@
2
2
  "http://www.w3.org/TR/html4/loose.dtd">
3
3
  <html>
4
4
  <head>
5
- <title></title>
6
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
7
- <script type="text/javascript" src="<%= asset_path 'ueditor/dialogs/internal.js' %>"></script>
8
- <link rel="stylesheet" type="text/css" href="<%= asset_path 'ueditor/dialogs/video/video.css' %>" />
5
+ <title></title>
6
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
7
+ <%= stylesheet_link_tag 'ueditor/dialogs/video/video.css' %>
9
8
  </head>
10
9
  <body>
11
10
  <div class="wrapper">
12
- <div id="videoTab">
13
- <div id="tabHeads" class="tabhead">
14
- <span tabSrc="video" class="focus"><var id="lang_tab_insertV"></var></span>
15
- <span tabSrc="videoSearch"><var id="lang_tab_searchV"></var></span>
16
- </div>
17
- <div id="tabBodys" class="tabbody">
18
- <div id="video" class="panel">
19
- <table><tr><td><label for="videoUrl" class="url"><var id="lang_video_url"></var></label></td><td><input id="videoUrl" type="text"></td></tr></table>
20
- <div id="preview"></div>
21
- <div id="videoInfo">
22
- <fieldset>
23
- <legend><var id="lang_video_size"></var></legend>
24
- <table>
25
- <tr><td><label for="videoWidth"><var id="lang_videoW"></var></label></td><td><input class="txt" id="videoWidth" type="text"/></td></tr>
26
- <tr><td><label for="videoHeight"><var id="lang_videoH"></var></label></td><td><input class="txt" id="videoHeight" type="text"/></td></tr>
27
- </table>
28
- </fieldset>
29
- <fieldset>
30
- <legend><var id="lang_alignment"></var></legend>
31
- <div id="videoFloat"></div>
32
- </fieldset>
33
- </div>
34
- </div>
35
- <div id="videoSearch" class="panel" style="display: none">
36
- <table style="margin-top: 5px;">
37
- <tr>
38
- <td><input id="videoSearchTxt" type="text" /></td>
39
- <td>
40
- <select id="videoType">
41
- <option value="0"></option>
42
- <option value="29"></option>
43
- <option value="1"></option>
44
- <option value="5"></option>
45
- <option value="15"></option>
46
- <option value="21"></option>
47
- <option value="31"></option>
48
- </select>
49
- </td>
50
- <td><input id="videoSearchBtn" type="button"/></td>
51
- <td><input id="videoSearchReset" type="button" /></td>
52
- </tr>
53
- </table>
54
- <div id="searchList"></div>
55
- </div>
11
+ <div id="videoTab">
12
+ <div id="tabHeads" class="tabhead">
13
+ <span tabSrc="video" class="focus"><var id="lang_tab_insertV"></var></span>
14
+ <span tabSrc="videoSearch"><var id="lang_tab_searchV"></var></span>
15
+ </div>
16
+ <div id="tabBodys" class="tabbody">
17
+ <div id="video" class="panel">
18
+ <table>
19
+ <tr>
20
+ <td><label for="videoUrl" class="url"><var id="lang_video_url"></var></label></td>
21
+ <td><input id="videoUrl" type="text"></td>
22
+ </tr>
23
+ </table>
24
+ <div id="preview"></div>
25
+ <div id="videoInfo">
26
+ <fieldset>
27
+ <legend><var id="lang_video_size"></var></legend>
28
+ <table>
29
+ <tr>
30
+ <td><label for="videoWidth"><var id="lang_videoW"></var></label></td>
31
+ <td><input class="txt" id="videoWidth" type="text"/></td>
32
+ </tr>
33
+ <tr>
34
+ <td><label for="videoHeight"><var id="lang_videoH"></var></label></td>
35
+ <td><input class="txt" id="videoHeight" type="text"/></td>
36
+ </tr>
37
+ </table>
38
+ </fieldset>
39
+ <fieldset>
40
+ <legend><var id="lang_alignment"></var></legend>
41
+ <div id="videoFloat"></div>
42
+ </fieldset>
56
43
  </div>
44
+ </div>
45
+ <div id="videoSearch" class="panel" style="display: none">
46
+ <table style="margin-top: 5px;">
47
+ <tr>
48
+ <td><input id="videoSearchTxt" type="text"/></td>
49
+ <td>
50
+ <select id="videoType">
51
+ <option value="0"></option>
52
+ <option value="29"></option>
53
+ <option value="1"></option>
54
+ <option value="5"></option>
55
+ <option value="15"></option>
56
+ <option value="21"></option>
57
+ <option value="31"></option>
58
+ </select>
59
+ </td>
60
+ <td><input id="videoSearchBtn" type="button"/></td>
61
+ <td><input id="videoSearchReset" type="button"/></td>
62
+ </tr>
63
+ </table>
64
+ <div id="searchList"></div>
65
+ </div>
57
66
  </div>
67
+ </div>
58
68
  </div>
59
- <script type="text/javascript" src="<%= asset_path 'ueditor/dialogs/video/video.js' %>"></script>
69
+ <%= javascript_include_tag 'ueditor/dialogs/internal.js' %>
70
+ <%= javascript_include_tag 'ueditor/dialogs/video/video.js' %>
60
71
  <script type="text/javascript">
61
- window.onload = function(){
62
- video.init();
63
- $focus($G("videoUrl"));
64
- };
72
+ window.onload = function () {
73
+ video.init();
74
+ $focus($G("videoUrl"));
75
+ };
65
76
  </script>
66
77
  </body>
67
78
  </html>
@@ -0,0 +1,409 @@
1
+ /**
2
+ * Created by JetBrains PhpStorm.
3
+ * User: taoqili
4
+ * Date: 12-2-20
5
+ * Time: 上午11:19
6
+ * To change this template use File | Settings | File Templates.
7
+ */
8
+ var video = {};
9
+
10
+ (function () {
11
+ video.align_directions = {
12
+ center: "<%= asset_path 'ueditor/dialogs/video/images/center_focus.jpg' %>",
13
+ left: "<%= asset_path 'ueditor/dialogs/video/images/left_focus.jpg' %>",
14
+ none: "<%= asset_path 'ueditor/dialogs/video/images/none_focus.jpg' %>",
15
+ right: "<%= asset_path 'ueditor/dialogs/video/images/right_focus.jpg' %>"
16
+ };
17
+ video.init = function () {
18
+ switchTab("videoTab");
19
+ createAlignButton(["videoFloat"]);
20
+ addUrlChangeListener($G("videoUrl"));
21
+ addOkListener();
22
+ addSearchListener();
23
+
24
+ //编辑视频时初始化相关信息
25
+ (function () {
26
+ var img = editor.selection.getRange().getClosedNode(), url;
27
+ if (img && img.className == "edui-faked-video") {
28
+ $G("videoUrl").value = url = img.getAttribute("_url");
29
+ $G("videoWidth").value = img.width;
30
+ $G("videoHeight").value = img.height;
31
+ var align = domUtils.getComputedStyle(img, "float"),
32
+ parentAlign = domUtils.getComputedStyle(img.parentNode, "text-align");
33
+ updateAlignButton(parentAlign === "center" ? "center" : align);
34
+ }
35
+ createPreviewVideo(url);
36
+ })();
37
+ };
38
+ /**
39
+ * 监听确认和取消两个按钮事件,用户执行插入或者清空正在播放的视频实例操作
40
+ */
41
+ function addOkListener() {
42
+ dialog.onok = function () {
43
+ $G("preview").innerHTML = "";
44
+ var currentTab = findFocus("tabHeads", "tabSrc");
45
+ switch (currentTab) {
46
+ case "video":
47
+ return insertSingle();
48
+ break;
49
+ case "videoSearch":
50
+ return insertSearch("searchList");
51
+ break;
52
+ }
53
+ };
54
+ dialog.oncancel = function () {
55
+ $G("preview").innerHTML = "";
56
+ };
57
+ }
58
+
59
+ function selectTxt(node) {
60
+ if (node.select) {
61
+ node.select();
62
+ } else {
63
+ var r = node.createTextRange && node.createTextRange();
64
+ r.select();
65
+ }
66
+ }
67
+
68
+ /**
69
+ * 依据传入的align值更新按钮信息
70
+ * @param align
71
+ */
72
+ function updateAlignButton(align) {
73
+ var aligns = $G("videoFloat").children;
74
+ for (var i = 0, ci; ci = aligns[i++];) {
75
+ if (ci.getAttribute("name") == align) {
76
+ if (ci.className != "focus") {
77
+ ci.className = "focus";
78
+ }
79
+ } else {
80
+ if (ci.className == "focus") {
81
+ ci.className = "";
82
+ }
83
+ }
84
+ }
85
+ }
86
+
87
+ /**
88
+ * 将单个视频信息插入编辑器中
89
+ */
90
+ function insertSingle() {
91
+ var width = $G("videoWidth"),
92
+ height = $G("videoHeight"),
93
+ url = $G('videoUrl').value,
94
+ align = findFocus("videoFloat", "name");
95
+ if (!url) return false;
96
+ if (!checkNum([width, height])) return false;
97
+ editor.execCommand('insertvideo', {
98
+ url: convert_url(url),
99
+ width: width.value,
100
+ height: height.value,
101
+ align: align
102
+ });
103
+ }
104
+
105
+ /**
106
+ * 将元素id下的所有代表视频的图片插入编辑器中
107
+ * @param id
108
+ */
109
+ function insertSearch(id) {
110
+ var imgs = domUtils.getElementsByTagName($G(id), "img"),
111
+ videoObjs = [];
112
+ for (var i = 0, img; img = imgs[i++];) {
113
+ if (img.getAttribute("selected")) {
114
+ videoObjs.push({
115
+ url: img.getAttribute("ue_video_url"),
116
+ width: 420,
117
+ height: 280,
118
+ align: "none"
119
+ });
120
+ }
121
+ }
122
+ editor.execCommand('insertvideo', videoObjs);
123
+ }
124
+
125
+ /**
126
+ * 找到id下具有focus类的节点并返回该节点下的某个属性
127
+ * @param id
128
+ * @param returnProperty
129
+ */
130
+ function findFocus(id, returnProperty) {
131
+ var tabs = $G(id).children,
132
+ property;
133
+ for (var i = 0, ci; ci = tabs[i++];) {
134
+ if (ci.className == "focus") {
135
+ property = ci.getAttribute(returnProperty);
136
+ break;
137
+ }
138
+ }
139
+ return property;
140
+ }
141
+
142
+ function convert_url(s) {
143
+ return s.replace(/http:\/\/www\.tudou\.com\/programs\/view\/([\w\-]+)\/?/i, "http://www.tudou.com/v/$1")
144
+ .replace(/http:\/\/www\.youtube\.com\/watch\?v=([\w\-]+)/i, "http://www.youtube.com/v/$1")
145
+ .replace(/http:\/\/v\.youku\.com\/v_show\/id_([\w\-=]+)\.html/i, "http://player.youku.com/player.php/sid/$1")
146
+ .replace(/http:\/\/www\.56\.com\/u\d+\/v_([\w\-]+)\.html/i, "http://player.56.com/v_$1.swf")
147
+ .replace(/http:\/\/www.56.com\/w\d+\/play_album\-aid\-\d+_vid\-([^.]+)\.html/i, "http://player.56.com/v_$1.swf")
148
+ .replace(/http:\/\/v\.ku6\.com\/.+\/([^.]+)\.html/i, "http://player.ku6.com/refer/$1/v.swf");
149
+ }
150
+
151
+ /**
152
+ * 检测传入的所有input框中输入的长宽是否是正数
153
+ * @param nodes input框集合,
154
+ */
155
+ function checkNum(nodes) {
156
+ for (var i = 0, ci; ci = nodes[i++];) {
157
+ var value = ci.value;
158
+ if (!isNumber(value) && value) {
159
+ alert(lang.numError);
160
+ ci.value = "";
161
+ ci.focus();
162
+ return false;
163
+ }
164
+ }
165
+ return true;
166
+ }
167
+
168
+ /**
169
+ * 数字判断
170
+ * @param value
171
+ */
172
+ function isNumber(value) {
173
+ return /(0|^[1-9]\d*$)/.test(value);
174
+ }
175
+
176
+ /**
177
+ * tab切换
178
+ * @param tabParentId
179
+ * @param keepFocus 当此值为真时,切换按钮上会保留focus的样式
180
+ */
181
+ function switchTab(tabParentId, keepFocus) {
182
+ var tabElements = $G(tabParentId).children,
183
+ tabHeads = tabElements[0].children,
184
+ tabBodys = tabElements[1].children;
185
+ for (var i = 0, length = tabHeads.length; i < length; i++) {
186
+ var head = tabHeads[i];
187
+ domUtils.on(head, "click", function () {
188
+ //head样式更改
189
+ for (var k = 0, len = tabHeads.length; k < len; k++) {
190
+ if (!keepFocus)tabHeads[k].className = "";
191
+ }
192
+ this.className = "focus";
193
+ //body显隐
194
+ var tabSrc = this.getAttribute("tabSrc");
195
+ for (var j = 0, length = tabBodys.length; j < length; j++) {
196
+ var body = tabBodys[j],
197
+ id = body.getAttribute("id");
198
+
199
+ if (id == tabSrc) {
200
+ body.style.display = "";
201
+ if (id == "videoSearch") {
202
+ selectTxt($G("videoSearchTxt"));
203
+ }
204
+ if (id == "video") {
205
+ selectTxt($G("videoUrl"));
206
+ }
207
+
208
+ } else {
209
+ body.style.display = "none";
210
+ }
211
+ }
212
+ });
213
+ }
214
+ }
215
+
216
+ /**
217
+ * 创建图片浮动选择按钮
218
+ * @param ids
219
+ */
220
+ function createAlignButton(ids) {
221
+ for (var i = 0, ci; ci = ids[i++];) {
222
+ var floatContainer = $G(ci),
223
+ nameMaps = {"none": lang['default'], "left": lang.floatLeft, "right": lang.floatRight, "center": lang.block};
224
+ for (var j in nameMaps) {
225
+ var div = document.createElement("div");
226
+ div.setAttribute("name", j);
227
+ if (j == "none") div.className = "focus";
228
+ div.style.cssText = "background:url(" + video.align_directions[j] + ");";
229
+ div.setAttribute("title", nameMaps[j]);
230
+ floatContainer.appendChild(div);
231
+ }
232
+ switchSelect(ci);
233
+ }
234
+ }
235
+
236
+ /**
237
+ * 选择切换
238
+ * @param selectParentId
239
+ */
240
+ function switchSelect(selectParentId) {
241
+ var selects = $G(selectParentId).children;
242
+ for (var i = 0, ci; ci = selects[i++];) {
243
+ domUtils.on(ci, "click", function () {
244
+ for (var j = 0, cj; cj = selects[j++];) {
245
+ cj.className = "";
246
+ cj.removeAttribute && cj.removeAttribute("class");
247
+ }
248
+ this.className = "focus";
249
+ })
250
+ }
251
+ }
252
+
253
+ /**
254
+ * 监听url改变事件
255
+ * @param url
256
+ */
257
+ function addUrlChangeListener(url) {
258
+ if (browser.ie) {
259
+ url.onpropertychange = function () {
260
+ createPreviewVideo(this.value);
261
+ }
262
+ } else {
263
+ url.addEventListener("input", function () {
264
+ createPreviewVideo(this.value);
265
+ }, false);
266
+ }
267
+ }
268
+
269
+ /**
270
+ * 根据url生成视频预览
271
+ * @param url
272
+ */
273
+ function createPreviewVideo(url) {
274
+
275
+ if (!url)return;
276
+ var matches = url.match(/youtu.be\/(\w+)$/) || url.match(/youtube\.com\/watch\?v=(\w+)/) || url.match(/youtube.com\/v\/(\w+)/),
277
+ youku = url.match(/youku\.com\/v_show\/id_(\w+)/),
278
+ youkuPlay = /player\.youku\.com/ig.test(url);
279
+ if (!youkuPlay) {
280
+ if (matches) {
281
+ url = "https://www.youtube.com/v/" + matches[1] + "?version=3&feature=player_embedded";
282
+ } else if (youku) {
283
+ url = "http://player.youku.com/player.php/sid/" + youku[1] + "/v.swf"
284
+ } else if (!endWith(url, [".swf", ".flv", ".wmv"])) {
285
+ $G("preview").innerHTML = lang.urlError;
286
+ return;
287
+ }
288
+ } else {
289
+ url = url.replace(/\?f=.*/, "");
290
+ }
291
+ $G("preview").innerHTML = '<embed type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"' +
292
+ ' src="' + url + '"' +
293
+ ' width="' + 420 + '"' +
294
+ ' height="' + 280 + '"' +
295
+ ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" ></embed>';
296
+ }
297
+
298
+ /**
299
+ * 末尾字符检测
300
+ * @param str
301
+ * @param endStrArr
302
+ */
303
+ function endWith(str, endStrArr) {
304
+ for (var i = 0, len = endStrArr.length; i < len; i++) {
305
+ var tmp = endStrArr[i];
306
+ if (str.length - tmp.length < 0) return false;
307
+
308
+ if (str.substring(str.length - tmp.length) == tmp) {
309
+ return true;
310
+ }
311
+ }
312
+ return false;
313
+ }
314
+
315
+ /**
316
+ * ajax获取视频信息
317
+ */
318
+ function getMovie() {
319
+ var keywordInput = $G("videoSearchTxt");
320
+ if (!keywordInput.getAttribute("hasClick") || !keywordInput.value) {
321
+ selectTxt(keywordInput);
322
+ return;
323
+ }
324
+ $G("searchList").innerHTML = lang.loading;
325
+ var keyword = keywordInput.value,
326
+ type = $G("videoType").value,
327
+ str = "";
328
+ ajax.request(editor.options.getMovieUrl, {
329
+ searchKey: keyword,
330
+ videoType: type,
331
+ onsuccess: function (xhr) {
332
+ try {
333
+ var info = eval("(" + xhr.responseText + ")");
334
+ } catch (e) {
335
+ return;
336
+ }
337
+
338
+ var videos = info.multiPageResult.results;
339
+ var html = ["<table width='530'>"];
340
+ for (var i = 0, ci; ci = videos[i++];) {
341
+ html.push(
342
+ "<tr>" +
343
+ "<td><img title='" + lang.clickToSelect + "' ue_video_url='" + ci.outerPlayerUrl + "' alt='" + ci.tags + "' width='106' height='80' src='" + ci.picUrl + "' /> </td>" +
344
+ "<td>" +
345
+ "<p><a target='_blank' title='" + lang.goToSource + "' href='" + ci.itemUrl + "'>" + ci.title.substr(0, 30) + "</a></p>" +
346
+ "<p style='height: 62px;line-height: 20px' title='" + ci.description + "'> " + ci.description.substr(0, 95) + " </p>" +
347
+ "</td>" +
348
+ "</tr>"
349
+ );
350
+ }
351
+ html.push("</table>");
352
+ $G("searchList").innerHTML = str = html.length == 2 ? lang.noVideo : html.join("");
353
+ var imgs = domUtils.getElementsByTagName($G("searchList"), "img");
354
+ if (!imgs)return;
355
+ for (var i = 0, img; img = imgs[i++];) {
356
+ domUtils.on(img, "click", function () {
357
+ changeSelected(this);
358
+ })
359
+ }
360
+ }
361
+ });
362
+ }
363
+
364
+ /**
365
+ * 改变对象o的选中状态
366
+ * @param o
367
+ */
368
+ function changeSelected(o) {
369
+ if (o.getAttribute("selected")) {
370
+ o.removeAttribute("selected");
371
+ o.style.cssText = "filter:alpha(Opacity=100);-moz-opacity:1;opacity: 1;border: 2px solid #fff";
372
+ } else {
373
+ o.setAttribute("selected", "true");
374
+ o.style.cssText = "filter:alpha(Opacity=50);-moz-opacity:0.5;opacity: 0.5;border:2px solid blue;";
375
+ }
376
+ }
377
+
378
+ /**
379
+ * 视频搜索相关注册事件
380
+ */
381
+ function addSearchListener() {
382
+ domUtils.on($G("videoSearchBtn"), "click", getMovie);
383
+ domUtils.on($G("videoSearchTxt"), "click", function () {
384
+ if (this.value == lang.static.videoSearchTxt.value) {
385
+ this.value = "";
386
+ }
387
+ this.setAttribute("hasClick", "true");
388
+ selectTxt(this);
389
+ });
390
+ $G("videoSearchTxt").onkeyup = function () {
391
+ this.setAttribute("hasClick", "true");
392
+ this.onkeyup = null;
393
+ };
394
+ domUtils.on($G("videoSearchReset"), "click", function () {
395
+ var txt = $G("videoSearchTxt");
396
+ txt.value = "";
397
+ selectTxt(txt);
398
+ $G("searchList").innerHTML = "";
399
+ });
400
+ domUtils.on($G("videoType"), "change", getMovie);
401
+ domUtils.on($G("videoSearchTxt"), "keyup", function (evt) {
402
+ if (evt.keyCode == 13) {
403
+ getMovie();
404
+ }
405
+ })
406
+ }
407
+
408
+
409
+ })();