PageRenderTime 47ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/upload/res/js/dev/windeditor/plugins/insertTao/plugin.js

https://gitlab.com/wuhang2003/phpwind
JavaScript | 211 lines | 172 code | 21 blank | 18 comment | 11 complexity | 94576e845cb431be44baaf2f0a61be71 MD5 | raw file
  1. /*
  2. * PHPWind WindEditor Plugin
  3. * @Copyright : Copyright 2011, phpwind.com
  4. * @Descript : 商品导购插件
  5. * @Author : dongyong.ydy@alibaba-inc.com
  6. * @Depend : jquery.js(1.7 or later)
  7. * $Id: windeditor.js 4472 2012-02-19 10:41:01Z chris.chencq $ :
  8. */
  9. ;(function ( $, window, undefined ) {
  10. var WindEditor = window.WindEditor;
  11. var pluginName = 'insertTao',
  12. dialog = $('\
  13. <div class="edit_menu">\
  14. <div class="edit_menu_music">\
  15. <div class="edit_menu_top"><a href="" class="edit_menu_close">关闭</a><strong>推广位</strong></div>\
  16. <div class="edit_menu_cont">\
  17. <dl class="cc">\
  18. <dt>文字</dt>\
  19. <dd><input type="text" class="input length_5" id="J_input_tao_title"></dd>\
  20. </dl>\
  21. <dl class="cc">\
  22. <dt>类型</dt>\
  23. <dd>\
  24. <label><input name="button_type" type="radio" value="购买" checked="checked">购买</label>\
  25. <label><input name="button_type" type="radio" value="下载">下载</label>\
  26. <label><input name="button_type" type="radio" value="去看看">去看看</label>\
  27. <label><input name="button_type" type="radio" value="抢"></label>\
  28. </dd>\
  29. </dl>\
  30. <dl class="cc">\
  31. <dt>价格</dt>\
  32. <dd><input type="text" class="input length_3" id="J_input_tao_price" placeholder="例如:¥50、免费、等等。"></dd>\
  33. </dl>\
  34. <dl class="cc">\
  35. <dt>链接</dt>\
  36. <dd><input type="text" class="input length_5" id="J_input_tao_link"></dd>\
  37. </dl>\
  38. <dl class="cc">\
  39. <dt>图片</dt>\
  40. <dd><canvas id="imgBrowser" width="160" height="160" style="display:none" />\
  41. <input type="file" style="display:none" accept="image/png,image/jpeg" onchange="fileSelectEventHandle(event,\'imgBrowser\')" name="Filename" id="Filename" /><input type="button" onclick="Filename.click()" value="选择文件" />(160*160)</dd>\
  42. </dl>\
  43. </div>\
  44. <div class="edit_menu_bot">\
  45. <button type="button" class="edit_menu_btn">确定</button><button class="edit_btn_cancel" type="button">取消</button>\
  46. </div>\
  47. </div>\
  48. </div>');
  49. WindEditor.plugin(pluginName,function() {
  50. var _self = this;
  51. var editorDoc = _self.editorDoc = _self.iframe[0].contentWindow.document,
  52. plugin_icon = $('<div class="wind_icon" data-control="'+ pluginName +'"><span class="'+ pluginName +'" title="插入推广"></span></div>').appendTo( _self.pluginsContainer );
  53. plugin_icon.on('click',function() {
  54. if($(this).hasClass('disabled')) {
  55. return;
  56. }
  57. if(!$.contains(document.body,dialog[0]) ) {
  58. dialog.appendTo( document.body );
  59. }
  60. _self.showDialog(dialog);
  61. });
  62. dialog.find()
  63. //弹窗的关闭事件
  64. dialog.find('a.edit_menu_close,button.edit_btn_cancel').on('click',function(e) {
  65. e.preventDefault();
  66. _self.hideDialog();
  67. });
  68. var img_path = _self.options.editor_path + 'themes/' + _self.options.theme + '/';
  69. //插入
  70. dialog.find('.edit_menu_btn').on('click',function(e) {
  71. e.preventDefault();
  72. var title = $('#J_input_tao_title').val().replace(/,/g,'');
  73. var link = $('#J_input_tao_link').val();
  74. var price = $('#J_input_tao_price').val().replace(/,/g,'');
  75. if( title.length<2 ) {
  76. alert('文字内容不能为空!');
  77. return;
  78. }
  79. if( price.length<1 ){
  80. alert('价格不能为空!');
  81. return;
  82. }
  83. if( link.indexOf('http://')!== 0 ) {
  84. alert('地址不正确,请重新输入');
  85. return;
  86. }
  87. if( $("#Filename").val()=="" ){
  88. alert('请选择文件');
  89. return;
  90. }
  91. var button_type=$("input[name=button_type]:checked").val();
  92. //first upload image
  93. var formData = new FormData();
  94. formData["enctype"]="multipart/form-data";
  95. formData.append('fid',IMAGE_CONFIG.postData.fid);
  96. formData.append('uid',IMAGE_CONFIG.postData.uid);
  97. formData.append('Filedata', new Blob([btoa('.')],{type:'image/jpeg'}),'t.jpg');
  98. formData.append('Filename', document.getElementById("imgBrowser").toDataURL('image/jpeg') );
  99. $.ajax({
  100. url:ATTACH_CONFIG.uploadUrl.replace('a=dorun','a=dotao'),
  101. type:'post',
  102. dataType:'json',
  103. timeout: 3000,
  104. data:formData,
  105. processData:false,
  106. contentType:false,
  107. cache:false
  108. }).done(function(ret){
  109. //console.log(ret)
  110. if( ret.state=='success' ){
  111. var _html='<dl class="taobaoCanvas">\
  112. <dt><img src="'+ret.data.path+'" /></dt>\
  113. <dd class="title">'+title+'</dd>\
  114. <dd class="price">'+price+'</dd>\
  115. <dd><span class="go"><a href="'+link+'">'+button_type+'</a></span></dd>\
  116. <dd style="clear:both;"></dd>\
  117. </dl>';
  118. //$('#mainForm').append('<input type="hidden" name="flashatt['+ret.data.aid+'][desc]" />');
  119. //
  120. _self.insertHTML(_html);
  121. _self.hideDialog();
  122. }else{
  123. alert(ret.message[0]);
  124. _self.hideDialog();
  125. }
  126. });
  127. });
  128. function wysiwyg() {
  129. var reg = /\[tao=([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)\]\[\/tao\]/ig;
  130. var html = $(editorDoc.body).html();
  131. html = html.replace(reg,function(all, $1, $2, $3, $4, $5) {
  132. return '<dl class="taobaoCanvas">\
  133. <dt><img src="'+decodeURIComponent($5)+'" /></dt>\
  134. <dd class="title">'+$1+'</dd>\
  135. <dd class="price">'+$3+'</dd>\
  136. <dd><span class="go"><a href="'+decodeURIComponent($2)+'">'+$4+'</a></span></dd>\
  137. <dd style="clear:both;"></dd>\
  138. </dl>';
  139. });
  140. $(editorDoc.body).html(html);
  141. }
  142. //加载插件时把ubb转换成可见即所得
  143. $(_self).on('ready',function() {
  144. wysiwyg();
  145. });
  146. $(_self).on('afterSetContent.' + pluginName,function(event,viewMode) {
  147. wysiwyg();
  148. });
  149. //切换成代码模式或者提交时
  150. $(_self).on('beforeGetContent.' + pluginName,function() {
  151. $(editorDoc.body).find('.taobaoCanvas').each(function() {
  152. var img = $(this).children('dt').children('img').attr('src');
  153. var title = $(this).children('.title').text().replace(/,/g,'');
  154. var price = $(this).children('.price').text().replace(/,/g,'');
  155. var link = $(this).children('dd').children('.go').children('a').attr('href');
  156. var btn = $(this).children('dd').children('.go').children('a').text();
  157. $(this).replaceWith('[tao='+title+','+encodeURIComponent(link)+','+price+','+btn+','+encodeURIComponent(img)+'][/tao]');
  158. });
  159. });
  160. });
  161. })( jQuery, window);
  162. function fileSelectEventHandle(e, canvasId){
  163. if( window.File && window.FileList && window.FileReader && window.Blob ){
  164. var reader = new FileReader();
  165. reader.onload = function(event){
  166. var canvas = document.getElementById(canvasId);
  167. canvas.style.display = 'inline';
  168. var context = canvas.getContext('2d');
  169. var imageObj = new Image();
  170. imageObj.onload = function() {
  171. // draw cropped image
  172. var sourceX = 0;
  173. var sourceY = 0;
  174. var sourceWidth = imageObj.width;
  175. var sourceHeight = imageObj.height;
  176. var scale = imageObj.width>imageObj.height?imageObj.height/canvas.height:imageObj.width/canvas.width;
  177. var destWidth = sourceWidth/scale;
  178. var destHeight = sourceHeight/scale;
  179. var destX = 0;
  180. var destY = 0;
  181. context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
  182. };
  183. imageObj.src = event.target.result;
  184. }
  185. reader.readAsDataURL(e.target.files[0]);
  186. }else{
  187. alert('不支持html5,此功能不能使用,请升级浏览器。');
  188. }
  189. }
  190. //end