image.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <title></title>
  6. <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
  7. <script type="text/javascript" src="../internal.js"></script>
  8. <link rel="stylesheet" href="image.css" type="text/css" />
  9. </head>
  10. <body>
  11. <div class="wrapper">
  12. <div id="imageTab">
  13. <div id="tabHeads" class="tabhead">
  14. <span tabSrc="remote" class="focus"><var id="lang_tab_remote"></var></span>
  15. <span tabSrc="local"><var id="lang_tab_local"></var></span>
  16. </div>
  17. <div id="tabBodys" class="tabbody">
  18. <div id="remote" class="panel">
  19. <table cellpadding="0" cellspacing="0">
  20. <tr>
  21. <td class="label"><label for="url"><var id="lang_input_url"></var></label></td>
  22. <td><input id="url" type="text"/></td>
  23. </tr>
  24. <tr>
  25. <td class="label"><label for="width"><var id="lang_input_width"></var></label></td>
  26. <td><input type="text" id="width"/> px</td>
  27. </tr>
  28. <tr>
  29. <td class="label"><label for="height"><var id="lang_input_height"></var></label></td>
  30. <td><input type="text" id="height"/> px</td>
  31. </tr>
  32. <tr>
  33. <td class="label"><label for="border"><var id="lang_input_border"></var></label></td>
  34. <td><input type="text" id="border"/> px</td>
  35. </tr>
  36. <tr>
  37. <td class="label"><label for="vhSpace"><var id="lang_input_vhspace"></var></label></td>
  38. <td><input type="text" id="vhSpace"/> px</td>
  39. </tr>
  40. <tr>
  41. <td class="label"><label for="title"><var id="lang_input_title"></var></label></td>
  42. <td><input type="text" id="title"/></td>
  43. </tr>
  44. <tr>
  45. <td class="label"><var id="lang_input_remoteAlign"></var></td>
  46. <td id="remoteFloat"></td>
  47. </tr>
  48. </table>
  49. <div id="preview"></div>
  50. <div class="lock"><input id="lock" type="checkbox" checked="checked"></div>
  51. </div>
  52. <div id="local" class="panel">
  53. <div id="flashContainer"></div>
  54. <div><div id="upload" style="display: none" ></div><div id="duiqi"></div><div id="localFloat"></div></div>
  55. <div class="saveDir">
  56. <var id="lang_savePath" ></var><span id="saveDirSelector"><var id="lang_load_savePath"></var></span>
  57. </div>
  58. </div>
  59. <div id="imgManager" class="panel">
  60. <div id="imageList"><var id="lang_imgLoading"></var></div>
  61. </div>
  62. <div id="imgSearch" class="panel">
  63. <table style="margin-top: 5px;">
  64. <tr>
  65. <td width="200"><input id="imgSearchTxt" type="text" /></td>
  66. <td width="65">
  67. <select id="imgType">
  68. <!--具体内容值将由国际化组件动态填充-->
  69. <option value="&s=4&z=0"></option>
  70. <option value="&s=1&z=19"></option>
  71. <option value="&s=2&z=0"></option>
  72. <option value="&s=3&z=0"></option>
  73. </select>
  74. </td>
  75. <td width="80"><input id="imgSearchBtn" type="button" /></td>
  76. <td width="80"><input id="imgSearchReset" type="button" /></td>
  77. </tr>
  78. </table>
  79. <div id="searchList"></div>
  80. </div>
  81. <iframe id="maskIframe" src="about:blank" scrolling="no" frameborder="no"></iframe>
  82. </div>
  83. </div>
  84. </div>
  85. <script type="text/javascript" src="../tangram.js"></script>
  86. <script type="text/javascript" src="image.js"></script>
  87. <script type="text/javascript">
  88. //全局变量
  89. var imageUrls = [], //用于保存从服务器返回的图片信息数组
  90. selectedImageCount = 0, //当前已选择的但未上传的图片数量
  91. savePathComplete = false, //保存目录已经就绪
  92. params = baidu.json.stringify({
  93. "fileNameFormat":editor.options.fileNameFormat
  94. });
  95. editor.setOpt({
  96. imageFieldName:"upfile",
  97. compressSide:0,
  98. maxImageSideLength:900
  99. });
  100. utils.domReady(function(){
  101. var flashOptions = {
  102. container:"flashContainer", //flash容器id
  103. url:editor.options.imageUrl, // 上传处理页面的url地址
  104. ext:params, //可向服务器提交的自定义参数列表
  105. fileType:'{"description":"'+lang.fileType+'", "extension":"*.gif;*.jpeg;*.png;*.jpg"}', //上传文件格式限制
  106. flashUrl:'imageUploader.swf', //上传用的flash组件地址
  107. width:608, //flash的宽度
  108. height:272, //flash的高度
  109. gridWidth:121, // 每一个预览图片所占的宽度
  110. gridHeight:120, // 每一个预览图片所占的高度
  111. picWidth:100, // 单张预览图片的宽度
  112. picHeight:100, // 单张预览图片的高度
  113. uploadDataFieldName:editor.options.imageFieldName, // POST请求中图片数据的key
  114. picDescFieldName:'pictitle', // POST请求中图片描述的key
  115. maxSize:4, // 文件的最大体积,单位M
  116. compressSize:2, // 上传前如果图片体积超过该值,会先压缩,单位M
  117. maxNum:32, // 单次最大可上传多少个文件
  118. compressSide:editor.options.compressSide, //等比压缩的基准,0为按照最长边,1为按照宽度,2为按照高度
  119. compressLength:editor.options.maxImageSideLength //能接受的最大边长,超过该值Flash会自动等比压缩
  120. };
  121. //回调函数集合,支持传递函数名的字符串、函数句柄以及函数本身三种类型
  122. var callbacks = {
  123. // 选择文件的回调
  124. selectFileCallback: function(selectFiles){
  125. utils.each(selectFiles,function(file){
  126. var tmp = {};
  127. tmp.id = file.index;
  128. tmp.data = {};
  129. postConfig.push(tmp);
  130. });
  131. selectedImageCount += selectFiles.length;
  132. if(selectedImageCount) baidu.g("upload").style.display = "";
  133. dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮
  134. },
  135. // 删除文件的回调
  136. deleteFileCallback: function(delFiles){
  137. for(var i = 0,len = delFiles.length;i<len;i++){
  138. var index = delFiles[i].index;
  139. postConfig.splice(index,1);
  140. }
  141. selectedImageCount -= delFiles.length;
  142. if (!selectedImageCount) {
  143. baidu.g("upload").style.display = "none";
  144. dialog.buttons[0].setDisabled(false); //没有选择图片时重新点亮按钮
  145. }
  146. },
  147. // 单个文件上传完成的回调
  148. uploadCompleteCallback: function(data){
  149. try{
  150. var info = eval("(" + data.info + ")");
  151. info && imageUrls.push(info);
  152. selectedImageCount--;
  153. }catch(e){}
  154. },
  155. // 单个文件上传失败的回调,
  156. uploadErrorCallback: function (data){
  157. if(!data.info){
  158. alert(lang.netError);
  159. }
  160. //console && console.log(data);
  161. },
  162. // 全部上传完成时的回调
  163. allCompleteCallback: function(){
  164. dialog.buttons[0].setDisabled(false); //上传完毕后点亮按钮
  165. },
  166. // 文件超出限制的最大体积时的回调
  167. //exceedFileCallback: 'exceedFileCallback',
  168. // 开始上传某个文件时的回调
  169. startUploadCallback: function(){
  170. var config = postConfig.shift();
  171. //也可以在这里更改
  172. //if(config.id==2){ //设置第三张图片的对应参数
  173. // config.data={"myParam":"value"}
  174. // }
  175. flashObj.addCustomizedParams(config.id,config.data);
  176. }
  177. };
  178. initSavePath();
  179. imageUploader.init(flashOptions,callbacks);
  180. $G("upload").onclick = function () {
  181. if ( !savePathComplete ) {
  182. alert('请等待保存目录就绪!')
  183. return;
  184. }
  185. /**
  186. * 接口imageUploader.setPostParams()可以在提交时设置本次上传提交的参数(包括所有图片)
  187. * 参数为json对象{"key1":"value1","key2":"value2"},其中key即为向后台post提交的name,value即为值。
  188. * 其中有一个特殊的保留key值为action,若设置,可以更改本次提交的处理地址
  189. */
  190. var postParams = {
  191. "dir":baidu.g("savePath").value
  192. };
  193. imageUploader.setPostParams(postParams);
  194. flashObj.upload();
  195. this.style.display = "none";
  196. $G("savePath").parentNode.style.display = "none";
  197. };
  198. });
  199. function initSavePath () {
  200. if ( editor.options.savePath && editor.options.savePath.length > 0 ) {
  201. updateSavePath( editor.options.savePath );
  202. } else {
  203. //远程加载
  204. var scriptNode = document.createElement('script'),
  205. reqAddress = editor.options.imageUrl.split( "#" ),
  206. uri = reqAddress[0].split( "?" );
  207. if ( uri.length > 1 ) {
  208. uri = uri[ 0 ] + "?" + uri.slice( 1 ).join("?") + ( !!uri? "&fetch=1" : "fetch=1" );
  209. } else {
  210. uri = uri[ 0 ] + "?fetch=1";
  211. }
  212. if ( reqAddress.length > 1 ) {
  213. uri += "#" + reqAddress.slice( 1 ).join("#");
  214. }
  215. scriptNode.src = uri;
  216. document.body.appendChild( scriptNode );
  217. }
  218. }
  219. function updateSavePath ( pathArr ) {
  220. var selector = $G( "saveDirSelector" ),
  221. htmlStr = [ '<select id="savePath">' ],
  222. dirs = pathArr;
  223. for ( var i = 0, len = dirs.length; i < len; i++ ) {
  224. htmlStr.push( '<option value="'+ dirs[ i ] +'">'+ dirs[ i ] +'</option>' );
  225. }
  226. htmlStr.push( '</select>' );
  227. selector.innerHTML = htmlStr.join( "" );
  228. savePathComplete = true;
  229. }
  230. </script>
  231. </body>
  232. </html>