portal_diy.js 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086
  1. /*
  2. [Discuz!] (C)2001-2099 Comsenz Inc.
  3. This is NOT a freeware, use is subject to license terms
  4. $Id: portal_diy.js 31093 2012-07-16 03:54:34Z zhangguosheng $
  5. */
  6. var drag = new Drag();
  7. drag.extend({
  8. 'getBlocksTimer' : '',
  9. 'blocks' : [],
  10. 'blockDefaultClass' : [{'key':'选择样式','value':''},{'key':'无边框且无边距','value':'cl_block_bm'},{'key':'样式1','value':'xbs_1'},{'key':'样式2','value':'xbs xbs_2'},{'key':'样式3','value':'xbs xbs_3'},{'key':'样式4','value':'xbs xbs_4'},{'key':'样式5','value':'xbs xbs_5'},{'key':'样式6','value':'xbs xbs_6'},{'key':'样式7','value':'xbs xbs_7'}],
  11. 'frameDefaultClass' : [{'key':'选择样式','value':''},{'key':'无边框且无边距','value':'cl_frame_bm'},{'key':'无边框框架','value':'xfs xfs_nbd'},{'key':'样式1','value':'xfs xfs_1'},{'key':'样式2','value':'xfs xfs_2'},{'key':'样式3','value':'xfs xfs_3'},{'key':'样式4','value':'xfs xfs_4'},{'key':'样式5','value':'xfs xfs_5'}],
  12. setDefalutMenu : function () {
  13. this.addMenu('default','标题','drag.openTitleEdit(event)');
  14. this.addMenu('default','样式','drag.openStyleEdit(event)');
  15. this.addMenu('default', '删除', 'drag.removeBlock(event)');
  16. this.addMenu('block', '属性', 'drag.openBlockEdit(event)');
  17. this.addMenu('block', '数据', 'drag.openBlockEdit(event,"data")');
  18. this.addMenu('block', '更新', 'drag.blockForceUpdate(event)');
  19. this.addMenu('frame', '导出', 'drag.frameExport(event)');
  20. this.addMenu('tab', '导出', 'drag.frameExport(event)');
  21. },
  22. setSampleMenu : function () {
  23. this.addMenu('block', '属性', 'drag.openBlockEdit(event)');
  24. this.addMenu('block', '数据', 'drag.openBlockEdit(event,"data")');
  25. this.addMenu('block', '更新', 'drag.blockForceUpdate(event)');
  26. },
  27. openBlockEdit : function (e,op) {
  28. e = Util.event(e);
  29. op = (op=='data') ? 'data' : 'block';
  30. var bid = e.aim.id.replace('cmd_portal_block_','');
  31. this.removeMenu();
  32. showWindow('showblock', 'portal.php?mod=portalcp&ac=block&op='+op+'&bid='+bid+'&tpl='+document.diyform.template.value, 'get', -1);
  33. },
  34. getDiyClassName : function (id,index) {
  35. var obj = this.getObjByName(id);
  36. var ele = $(id);
  37. var eleClassName = ele.className.replace(/ {2,}/g,' ');
  38. var className = '',srcClassName = '';
  39. if (obj instanceof Block) {
  40. className = eleClassName.split(this.blockClass+' ');
  41. srcClassName = this.blockClass;
  42. } else if(obj instanceof Tab) {
  43. className = eleClassName.split(this.tabClass+' ');
  44. srcClassName = this.tabClass;
  45. } else if(obj instanceof Frame) {
  46. className = eleClassName.split(this.frameClass+' ');
  47. srcClassName = this.frameClass;
  48. }
  49. if (index != null && index<className.length) {
  50. className = className[index].replace(/^ | $/g,'');
  51. } else {
  52. className.push(srcClassName);
  53. }
  54. return className;
  55. },
  56. getOption : function (arr,value) {
  57. var html = '';
  58. for (var i in arr) {
  59. if (typeof arr[i] == 'function') continue;
  60. var selected = arr[i]['value'] == value ? ' selected="selected"' : '';
  61. html += '<option value="'+arr[i]['value']+'"'+selected+'>'+arr[i]['key']+'</option>';
  62. }
  63. return html;
  64. },
  65. getRule : function (selector,attr) {
  66. selector = spaceDiy.checkSelector(selector);
  67. var value = (!selector || !attr) ? '' : spaceDiy.styleSheet.getRule(selector, attr);
  68. return value;
  69. },
  70. openStyleEdit : function (e) {
  71. e = Util.event(e);
  72. var id = e.aim.id.replace('cmd_','');
  73. var obj = this.getObjByName(id);
  74. var objType = obj instanceof Block ? 1 : 0;
  75. var bgcolor = '',bgimage = '',bgrepeat = '',html = '',diyClassName = '',fontcolor = '',fontsize = '',linkcolor = '',linkfontsize = '';
  76. var bdtstyle = '',bdtwidth = '',bdtcolor = '',bdrstyle = '',bdrwidth = '',bdrcolor = '',bdbstyle = '',bdbwidth = '',bdbcolor = '',bdlstyle = '',bdlwidth = '',bdlcolor = '';
  77. var margint = '',marginr = '',marginb = '',marginl = '',cmargint = '',cmarginr = '',cmarginb = '',cmarginl ='';
  78. var selector = '#'+id;
  79. bgcolor = this.getRule(selector, 'backgroundColor');
  80. bgimage = this.getRule(selector, 'backgroundImage');
  81. bgrepeat = this.getRule(selector, 'backgroundRepeat');
  82. bgimage = bgimage && bgimage != 'none' ? Util.trimUrl(bgimage) : '';
  83. fontcolor = this.getRule(selector+' .'+this.contentClass, 'color');
  84. fontsize = this.getRule(selector+' .'+this.contentClass, 'fontSize').replace('px','');
  85. var linkSelector = spaceDiy.checkSelector(selector+ ' .'+this.contentClass+' a');
  86. linkcolor = this.getRule(linkSelector, 'color');
  87. linkfontsize = this.getRule(linkSelector, 'fontSize').replace('px','');
  88. fontcolor = Util.formatColor(fontcolor);
  89. linkcolor = Util.formatColor(linkcolor);
  90. bdtstyle = this.getRule(selector, 'borderTopStyle');
  91. bdrstyle = this.getRule(selector, 'borderRightStyle');
  92. bdbstyle = this.getRule(selector, 'borderBottomStyle');
  93. bdlstyle = this.getRule(selector, 'borderLeftStyle');
  94. bdtwidth = this.getRule(selector, 'borderTopWidth');
  95. bdrwidth = this.getRule(selector, 'borderRightWidth');
  96. bdbwidth = this.getRule(selector, 'borderBottomWidth');
  97. bdlwidth = this.getRule(selector, 'borderLeftWidth');
  98. bdtcolor = this.getRule(selector, 'borderTopColor');
  99. bdrcolor = this.getRule(selector, 'borderRightColor');
  100. bdbcolor = this.getRule(selector, 'borderBottomColor');
  101. bdlcolor = this.getRule(selector, 'borderLeftColor');
  102. bgcolor = Util.formatColor(bgcolor);
  103. bdtcolor = Util.formatColor(bdtcolor);
  104. bdrcolor = Util.formatColor(bdrcolor);
  105. bdbcolor = Util.formatColor(bdbcolor);
  106. bdlcolor = Util.formatColor(bdlcolor);
  107. margint = this.getRule(selector, 'marginTop').replace('px','');
  108. marginr = this.getRule(selector, 'marginRight').replace('px','');
  109. marginb = this.getRule(selector, 'marginBottom').replace('px','');
  110. marginl = this.getRule(selector, 'marginLeft').replace('px','');
  111. if (objType == 1) {
  112. selector = selector + ' .'+this.contentClass;
  113. cmargint = this.getRule(selector, 'marginTop').replace('px','');
  114. cmarginr = this.getRule(selector, 'marginRight').replace('px','');
  115. cmarginb = this.getRule(selector, 'marginBottom').replace('px','');
  116. cmarginl = this.getRule(selector, 'marginLeft').replace('px','');
  117. }
  118. diyClassName = this.getDiyClassName(id,0);
  119. var widtharr = [];
  120. for (var k=0;k<11;k++) {
  121. var key = k+'px';
  122. widtharr.push({'key':key,'value':key});
  123. }
  124. var bigarr = [];
  125. for (var k=0;k<31;k++) {
  126. key = k+'px';
  127. bigarr.push({'key':key,'value':key});
  128. }
  129. var repeatarr = [{'key':'平铺','value':'repeat'},{'key':'不平铺','value':'no-repeat'},{'key':'横向平铺','value':'repeat-x'},{'key':'纵向平铺','value':'repeat-y'}];
  130. var stylearr = [{'key':'无样式','value':'none'},{'key':'实线','value':'solid'},{'key':'点线','value':'dotted'},{'key':'虚线','value':'dashed'}];
  131. var table = '<table class="tfm">';
  132. table += '<tr><th>字体</th><td><input type="text" id="fontsize" class="px p_fre vm" value="'+fontsize+'" size="2" />px <input type="text" id="fontcolor" class="px p_fre vm" value="'+fontcolor+'" size="2" />';
  133. table += getColorPalette(id+'_fontPalette', 'fontcolor' ,fontcolor)+'</td></tr>';
  134. table += '<tr><th>链接</th><td><input type="text" id="linkfontsize" class="px p_fre vm" value="'+linkfontsize+'" size="2" />px <input type="text" id="linkcolor" class="px p_fre vm" value="'+linkcolor+'" size="2" />';
  135. table += getColorPalette(id+'_linkPalette', 'linkcolor' ,linkcolor)+'</td></tr>';
  136. var ulclass = 'borderul', opchecked = '';
  137. if (bdtwidth != '' || bdtcolor != '' ) {
  138. ulclass = 'borderula';
  139. opchecked = ' checked="checked"';
  140. }
  141. table += '<tr><th>边框</th><td><ul id="borderul" class="'+ulclass+'">';
  142. table += '<li><label>上</label><select class="ps vm" id="bdtwidth" ><option value="">大小</option>'+this.getOption(widtharr,bdtwidth)+'</select>';
  143. table += ' <select class="ps vm" id="bdtstyle" ><option value="">样式</option>'+this.getOption(stylearr,bdtstyle)+'</select>';
  144. table += ' 颜色 <input type="text" id="bdtcolor" class="px p_fre vm" value="'+bdtcolor+'" size="7" />';
  145. table += getColorPalette(id+'_bdtPalette', 'bdtcolor' ,bdtcolor)+'</li>';
  146. table += '<li class="bordera mtn"><label>右</label><select class="ps vm" id="bdrwidth" ><option value="">大小</option>'+this.getOption(widtharr,bdrwidth)+'</select>';
  147. table += ' <select class="ps vm" id="bdrstyle" ><option value="">样式</option>'+this.getOption(stylearr,bdrstyle)+'</select>';
  148. table += ' 颜色 <input type="text" id="bdrcolor" class="px p_fre vm" value="'+bdrcolor+'" size="7" />';
  149. table += getColorPalette(id+'_bdrPalette', 'bdrcolor' ,bdrcolor)+'</li>';
  150. table += '<li class="bordera mtn"><label>下</label><select class="ps vm" id="bdbwidth" ><option value="">大小</option>'+this.getOption(widtharr,bdbwidth)+'</select>';
  151. table += ' <select class="ps vm" id="bdbstyle" ><option value="">样式</option>'+this.getOption(stylearr,bdbstyle)+'</select>';
  152. table += ' 颜色 <input type="text" id="bdbcolor" class="px p_fre vm" value="'+bdbcolor+'" size="7" />';
  153. table += getColorPalette(id+'_bdbPalette', 'bdbcolor' ,bdbcolor)+'</li>';
  154. table += '<li class="bordera mtn"><label>左</label><select class="ps vm" id="bdlwidth" ><option value="">大小</option>'+this.getOption(widtharr,bdlwidth)+'</select>';
  155. table += ' <select class="ps vm" id="bdlstyle" ><option value="">样式</option>'+this.getOption(stylearr,bdlstyle)+'</select>';
  156. table += ' 颜色 <input type="text" id="bdlcolor" class="px p_fre vm" value="'+bdlcolor+'" size="7" />';
  157. table += getColorPalette(id+'_bdlPalette', 'bdlcolor' ,bdlcolor)+'</li>';
  158. table += '</ul><p class="ptm"><label><input id="borderop" type="checkbox" value="1" class="pc"'+opchecked+' onclick="$(\'borderul\').className = $(\'borderul\').className == \'borderul\' ? \'borderula\' : \'borderul\'">分别设置</label></p></td></tr>';
  159. bigarr = [];
  160. for (k=-20;k<31;k++) {
  161. key = k+'px';
  162. bigarr.push({'key':key,'value':key});
  163. }
  164. ulclass = 'borderul', opchecked = '';
  165. if (margint != '') {
  166. ulclass = 'borderula';
  167. opchecked = ' checked="checked"';
  168. }
  169. table += '<tr><th>外边距</th><td><div id="margindiv" class="'+ulclass+'"><span><label>上</label> <input type="text" id="margint" class="px p_fre vm" value="'+margint+'" size="1"/>px </span>';
  170. table += '<span class="bordera"><label>右</label> <input type="text" id="marginr" class="px p_fre vm" value="'+marginr+'" size="1" />px </span>';
  171. table += '<span class="bordera"><label>下</label> <input type="text" id="marginb" class="px p_fre vm" value="'+marginb+'" size="1" />px </span>';
  172. table += '<span class="bordera"><label>左</label> <input type="text" id="marginl" class="px p_fre vm" value="'+marginl+'" size="1" />px</span>';
  173. table += '</div><p class="ptm"><label><input id="marginop" type="checkbox" value="1" class="pc"'+opchecked+' onclick="$(\'margindiv\').className = $(\'margindiv\').className == \'borderul\' ? \'borderula\' : \'borderul\'">分别设置</label></p></td></tr>';
  174. if (objType == 1) {
  175. ulclass = 'borderul', opchecked = '';
  176. if (cmargint != '') {
  177. ulclass = 'borderula';
  178. opchecked = ' checked="checked"';
  179. }
  180. table += '<tr><th>内边距</th><td><div id="cmargindiv" class="'+ulclass+'"><span><label>上</label> <input class="px p_fre" id="cmargint" value="'+cmargint+'" size="1" />px </span>';
  181. table += '<span class="bordera"><label>右</label> <input class="px p_fre" id="cmarginr" value="'+cmarginr+'" size="1" />px </span>';
  182. table += '<span class="bordera"><label>下</label> <input class="px p_fre" id="cmarginb" value="'+cmarginb+'" size="1" />px </span>';
  183. table += '<span class="bordera"><label>左</label> <input class="px p_fre" id="cmarginl" value="'+cmarginl+'" size="1" />px </span>';
  184. table += '</div><p class="ptm"><label><input id="cmarginop" type="checkbox" value="1" class="pc"'+opchecked+' onclick="$(\'cmargindiv\').className = $(\'cmargindiv\').className == \'borderul\' ? \'borderula\' : \'borderul\'"> 分别设置</label></p></td></tr>';
  185. }
  186. table += '<tr><th>背景颜色</th><td><input type="text" id="bgcolor" class="px p_fre vm" value="'+bgcolor+'" size="4" />';
  187. table += getColorPalette(id+'_bgcPalette', 'bgcolor' ,bgcolor)+'</td></tr>';
  188. table += '<tr><th>背景图片</th><td><input type="text" id="bgimage" class="px p_fre vm" value="'+bgimage+'" size="25" /> <select class="ps vm" id="bgrepeat" >'+this.getOption(repeatarr,bgrepeat)+'</select></td></tr>';
  189. var classarr = objType == 1 ? this.blockDefaultClass : this.frameDefaultClass;
  190. table += '<tr><th>指定class</th><td><input type="text" id="diyClassName" class="px p_fre" value="'+diyClassName+'" size="8" /> <select class="ps vm" id="bgrepeat" onchange="$(\'diyClassName\').value=this.value;" >'+this.getOption(classarr, diyClassName)+'</select></td></tr>';
  191. table += '</table>';
  192. var wname = objType ? '模块' : '框架';
  193. html = '<div class="c diywin" style="width:450px;position:relative;">'+table+'</div>';
  194. var h = '<h3 class="flb"><em>编辑'+wname+'样式</em><span><a href="javascript:;" class="flbc" onclick="drag.closeStyleEdit(\''+id+'\');return false;" title="关闭">\n\
  195. 关闭</a></span></h3>';
  196. var f = '<p class="o pns"><button onclick="drag.saveStyle(\''+id+'\');drag.closeStyleEdit(\''+id+'\');" class="pn pnc" value="true">\n\
  197. <strong>确定</strong></button><button onclick="drag.closeStyleEdit(\''+id+'\')" class="pn" value="true"><strong>取消</strong></button></p>';
  198. this.removeMenu(e);
  199. showWindow('eleStyle',h + html + f, 'html', 0);
  200. },
  201. closeStyleEdit : function (id) {
  202. this.deleteFrame([id+'_bgcPalette',id+'_bdtPalette',id+'_bdrPalette',id+'_bdbPalette',id+'_bdlPalette',id+'_fontPalette',id+'_linkPalette']);
  203. hideWindow('eleStyle');
  204. },
  205. saveStyle : function (id) {
  206. var className = this.getDiyClassName(id);
  207. var diyClassName = $('diyClassName').value;
  208. $(id).className = diyClassName+' '+className[2]+' '+className[1];
  209. var obj = this.getObjByName(id);
  210. var objType = obj instanceof Block ? 1 : 0;
  211. if (objType == 1) this.saveBlockClassName(id,diyClassName);
  212. var selector = '#'+id;
  213. var random = Math.random();
  214. spaceDiy.setStyle(selector, 'background-color', $('bgcolor').value, random);
  215. var bgimage = $('bgimage').value && $('bgimage') != 'none' ? Util.url($('bgimage').value) : '';
  216. var bgrepeat = bgimage ? $('bgrepeat').value : '';
  217. if ($('bgcolor').value != '' && bgimage == '') bgimage = 'none';
  218. spaceDiy.setStyle(selector, 'background-image', bgimage, random);
  219. spaceDiy.setStyle(selector, 'background-repeat', bgrepeat, random);
  220. spaceDiy.setStyle(selector+' .'+this.contentClass, 'color', $('fontcolor').value, random);
  221. spaceDiy.setStyle(selector+' .'+this.contentClass, 'font-size', this.formatValue('fontsize'), random);
  222. spaceDiy.setStyle(spaceDiy.checkSelector(selector+' .'+this.contentClass+' a'), 'color', $('linkcolor').value, random);
  223. var linkfontsize = parseInt($('linkfontsize').value);
  224. linkfontsize = isNaN(linkfontsize) ? '' : linkfontsize+'px';
  225. spaceDiy.setStyle(spaceDiy.checkSelector(selector+' .'+this.contentClass+' a'), 'font-size', this.formatValue('linkfontsize'), random);
  226. if ($('borderop').checked) {
  227. var bdtwidth = $('bdtwidth').value,bdrwidth = $('bdrwidth').value,bdbwidth = $('bdbwidth').value,bdlwidth = $('bdlwidth').value;
  228. var bdtstyle = $('bdtstyle').value,bdrstyle = $('bdrstyle').value,bdbstyle = $('bdbstyle').value,bdlstyle = $('bdlstyle').value;
  229. var bdtcolor = $('bdtcolor').value,bdrcolor = $('bdrcolor').value,bdbcolor = $('bdbcolor').value,bdlcolor = $('bdlcolor').value;
  230. } else {
  231. bdlwidth = bdbwidth = bdrwidth = bdtwidth = $('bdtwidth').value;
  232. bdlstyle = bdbstyle = bdrstyle = bdtstyle = $('bdtstyle').value;
  233. bdlcolor = bdbcolor = bdrcolor = bdtcolor = $('bdtcolor').value;
  234. }
  235. spaceDiy.setStyle(selector, 'border', '', random);
  236. spaceDiy.setStyle(selector, 'border-top-width', bdtwidth, random);
  237. spaceDiy.setStyle(selector, 'border-right-width', bdrwidth, random);
  238. spaceDiy.setStyle(selector, 'border-bottom-width', bdbwidth, random);
  239. spaceDiy.setStyle(selector, 'border-left-width', bdlwidth, random);
  240. spaceDiy.setStyle(selector, 'border-top-style', bdtstyle, random);
  241. spaceDiy.setStyle(selector, 'border-right-style', bdrstyle, random);
  242. spaceDiy.setStyle(selector, 'border-bottom-style', bdbstyle, random);
  243. spaceDiy.setStyle(selector, 'border-left-style', bdlstyle, random);
  244. spaceDiy.setStyle(selector, 'border-top-color', bdtcolor, random);
  245. spaceDiy.setStyle(selector, 'border-right-color', bdrcolor, random);
  246. spaceDiy.setStyle(selector, 'border-bottom-color', bdbcolor, random);
  247. spaceDiy.setStyle(selector, 'border-left-color', bdlcolor, random);
  248. if ($('marginop').checked) {
  249. var margint = this.formatValue('margint'),marginr = this.formatValue('marginr'), marginb = this.formatValue('marginb'), marginl = this.formatValue('marginl');
  250. } else {
  251. marginl = marginb = marginr = margint = this.formatValue('margint');
  252. }
  253. spaceDiy.setStyle(selector, 'margin-top',margint, random);
  254. spaceDiy.setStyle(selector, 'margin-right', marginr, random);
  255. spaceDiy.setStyle(selector, 'margin-bottom', marginb, random);
  256. spaceDiy.setStyle(selector, 'margin-left', marginl, random);
  257. if (objType == 1) {
  258. if ($('cmarginop').checked) {
  259. var cmargint = this.formatValue('cmargint'),cmarginr = this.formatValue('cmarginr'), cmarginb = this.formatValue('cmarginb'), cmarginl = this.formatValue('cmarginl');
  260. } else {
  261. cmarginl = cmarginb = cmarginr = cmargint = this.formatValue('cmargint');
  262. }
  263. selector = selector + ' .'+this.contentClass;
  264. spaceDiy.setStyle(selector, 'margin-top', cmargint, random);
  265. spaceDiy.setStyle(selector, 'margin-right', cmarginr, random);
  266. spaceDiy.setStyle(selector, 'margin-bottom', cmarginb, random);
  267. spaceDiy.setStyle(selector, 'margin-left', cmarginl, random);
  268. }
  269. this.setClose();
  270. },
  271. formatValue : function(id) {
  272. var value = '';
  273. if ($(id)) {
  274. value = parseInt($(id).value);
  275. value = isNaN(value) ? '' : value+'px';
  276. }
  277. return value;
  278. },
  279. saveBlockClassName : function(id,className){
  280. if (!$('saveblockclassname')){
  281. var dom = document.createElement('div');
  282. dom.innerHTML = '<form id="saveblockclassname" method="post" action=""><input type="hidden" name="classname" value="" />\n\
  283. <input type="hidden" name="formhash" value="'+document.diyform.formhash.value+'" /><input type="hidden" name="saveclassnamesubmit" value="true"/></form>';
  284. $('append_parent').appendChild(dom.childNodes[0]);
  285. }
  286. $('saveblockclassname').action = 'portal.php?mod=portalcp&ac=block&op=saveblockclassname&bid='+id.replace('portal_block_','');
  287. document.forms.saveblockclassname.classname.value = className;
  288. ajaxpost('saveblockclassname','ajaxwaitid');
  289. },
  290. closeTitleEdit : function (fid) {
  291. this.deleteFrame(fid+'bgPalette_0');
  292. for (var i = 0 ; i<=10; i++) {
  293. this.deleteFrame(fid+'Palette_'+i);
  294. }
  295. hideWindow('frameTitle');
  296. },
  297. openTitleEdit : function (e) {
  298. if (typeof e == 'object') {
  299. e = Util.event(e);
  300. var fid = e.aim.id.replace('cmd_','');
  301. } else {
  302. fid = e;
  303. }
  304. var obj = this.getObjByName(fid);
  305. var titlename = obj instanceof Block ? '模块' : '框架';
  306. var repeatarr = [{'key':'平铺','value':'repeat'},{'key':'不平铺','value':'no-repeat'},{'key':'横向平铺','value':'repeat-x'},{'key':'纵向平铺','value':'repeat-y'}];
  307. var len = obj.titles.length;
  308. var bgimage = obj.titles.style && obj.titles.style['background-image'] ? obj.titles.style['background-image'] : '';
  309. bgimage = bgimage != 'none' ? Util.trimUrl(bgimage) : '';
  310. var bgcolor = obj.titles.style && obj.titles.style['background-color'] ? obj.titles.style['background-color'] : '';
  311. bgcolor = Util.formatColor(bgcolor);
  312. var bgrepeat = obj.titles.style && obj.titles.style['background-repeat'] ? obj.titles.style['background-repeat'] : '';
  313. var common = '<table class="tfm">';
  314. common += '<tr><th>背景图片:</th><td><input type="text" id="titleBgImage" class="px p_fre" value="'+bgimage+'" /> <select class="ps vm" id="titleBgRepeat" >'+this.getOption(repeatarr,bgrepeat)+'</select></td></tr>';
  315. common += '<tr><th>背景颜色:</th><td><input type="text" id="titleBgColor" class="px p_fre" value="'+bgcolor+'" size="7" />';
  316. common += getColorPalette(fid+'bgPalette_0', 'titleBgColor' ,bgcolor)+'</td></tr>';
  317. if (obj instanceof Tab) {
  318. var switchArr = [{'key':'点击','value':'click'},{'key':'滑过','value':'mouseover'}];
  319. var switchType = obj.titles['switchType'] ? obj.titles['switchType'][0] : 'click';
  320. common += '<tr><th>切换类型:</th><td><select class="ps" id="switchType" >'+this.getOption(switchArr,switchType)+'</select></td></tr>';
  321. }
  322. common += '</table><hr class="l">';
  323. var li = '';
  324. li += '<div id="titleInput_0"><table class="tfm"><tr><th>'+titlename+'标题:</th><td><input type="text" id="titleText_0" class="px p_fre" value="`title`" /></td></tr>';
  325. li += '<tr><th>链接:</th><td><input type="text" id="titleLink_0" class="px p_fre" value="`link`" /></td></tr>';
  326. li += '<tr><th>图片:</th><td><input type="text" id="titleSrc_0" class="px p_fre" value="`src`" /></td></tr>';
  327. li += '<tr><th>位置:</th><td><select id="titleFloat_0" class="ps vm"><option value="" `left`>居左</option><option value="right" `right`>居右</option></select>';
  328. li += '&nbsp;&nbsp;偏移量: <input type="text" id="titleMargin_0" class="px p_fre vm" value="`margin`" size="2" />px</td></tr>';
  329. li += '<tr><th>字体:</th><td><select class="ps vm" id="titleSize_0" ><option value="">大小</option>`size`</select>';
  330. li += '&nbsp;&nbsp;颜色: <input type="text" id="titleColor_0" class="px p_fre vm" value="`color`" size="4" />';
  331. li += getColorPalette(fid+'Palette_0', 'titleColor_0' ,'`color`');
  332. li += '</td></tr><tr><td colspan="2"><hr class="l"></td></tr></table></div>';
  333. var html = '';
  334. if (obj.titles['first']) {
  335. html = this.getTitleHtml(obj, 'first', li);
  336. }
  337. for (var i = 0; i < len; i++ ) {
  338. html += this.getTitleHtml(obj, i, li);
  339. }
  340. if (!html) {
  341. var bigarr = [];
  342. for (var k=7;k<27;k++) {
  343. var key = k+'px';
  344. bigarr.push({'key':key,'value':key});
  345. }
  346. var ssize = this.getOption(bigarr,ssize);
  347. html = li.replace('`size`', ssize).replace(/`\w+`/g, '');
  348. }
  349. var c = len + 1;
  350. html = '<div class="c diywin" style="width:450px;height:400px; overflow:auto;"><table cellspacing="0" cellpadding="0" class="tfm pns"><tr><th></th><td><button type="button" id="addTitleInput" class="pn" onclick="drag.addTitleInput('+c+');"><em>添加新标题</em></button></td></tr></table><div id="titleEdit">'+html+common+'</div></div>';
  351. var h = '<h3 class="flb"><em>编辑'+titlename+'标题</em><span><a href="javascript:;" class="flbc" onclick="drag.closeTitleEdit(\''+fid+'\');return false;" title="关闭">\n\
  352. 关闭</a></span></h3>';
  353. var f = '<p class="o pns"><button onclick="drag.saveTitleEdit(\''+fid+'\');drag.closeTitleEdit(\''+fid+'\');" class="pn pnc" value="true">\n\
  354. <strong>确定</strong></button><button onclick="drag.closeTitleEdit(\''+fid+'\')" class="pn" value="true"><strong>取消</strong></button></p>';
  355. this.removeMenu(e);
  356. showWindow('frameTitle',h + html + f, 'html', 0);
  357. },
  358. getTitleHtml : function (obj, i, li) {
  359. var shtml = '',stitle = '',slink = '',sfloat = '',ssize = '',scolor = '',margin = '',src = '';
  360. var c = i == 'first' ? '0' : i+1;
  361. stitle = obj.titles[i]['text'] ? obj.titles[i]['text'] : '';
  362. slink = obj.titles[i]['href'] ? obj.titles[i]['href'] : '';
  363. sfloat = obj.titles[i]['float'] ? obj.titles[i]['float'] : '';
  364. margin = obj.titles[i]['margin'] ? obj.titles[i]['margin'] : '';
  365. ssize = obj.titles[i]['font-size'] ? obj.titles[i]['font-size']+'px' : '';
  366. scolor = obj.titles[i]['color'] ? obj.titles[i]['color'] : '';
  367. src = obj.titles[i]['src'] ? obj.titles[i]['src'] : '';
  368. var bigarr = [];
  369. for (var k=7;k<27;k++) {
  370. var key = k+'px';
  371. bigarr.push({'key':key,'value':key});
  372. }
  373. ssize = this.getOption(bigarr,ssize);
  374. shtml = li.replace(/_0/g, '_' + c).replace('`title`', stitle).replace('`link`', slink).replace('`size`', ssize).replace('`src`',src);
  375. var left = sfloat == '' ? 'selected' : '';
  376. var right = sfloat == 'right' ? 'selected' : '';
  377. scolor = Util.formatColor(scolor);
  378. shtml = shtml.replace(/`color`/g, scolor).replace('`left`', left).replace('`right`', right).replace('`margin`', margin);
  379. return shtml;
  380. },
  381. addTitleInput : function (c) {
  382. if (c > 10) return false;
  383. var pre = $('titleInput_'+(c-1));
  384. var dom = document.createElement('div');
  385. dom.className = 'tfm';
  386. var exp = new RegExp('_'+(c-1), 'g');
  387. dom.id = 'titleInput_'+c;
  388. dom.innerHTML = pre.innerHTML.replace(exp, '_'+c);
  389. Util.insertAfter(dom, pre);
  390. $('addTitleInput').onclick = function () {drag.addTitleInput(c+1)};
  391. },
  392. saveTitleEdit : function (fid) {
  393. var obj = this.getObjByName(fid);
  394. var ele = $(fid);
  395. var children = ele.childNodes;
  396. var title = first = '';
  397. var hastitle = 0;
  398. var c = 0;
  399. for (var i in children) {
  400. if (typeof children[i] == 'object' && Util.hasClass(children[i], this.titleClass)) {
  401. title = children[i];
  402. break;
  403. }
  404. }
  405. if (title) {
  406. var arrDel = [];
  407. for (var i in title.childNodes) {
  408. if (typeof title.childNodes[i] == 'object' && Util.hasClass(title.childNodes[i], this.titleTextClass)) {
  409. first = title.childNodes[i];
  410. this._createTitleHtml(first, c);
  411. if (first.innerHTML != '') hastitle = 1;
  412. } else if (typeof title.childNodes[i] == 'object' && !Util.hasClass(title.childNodes[i], this.moveableObject)) {
  413. arrDel.push(title.childNodes[i]);
  414. }
  415. }
  416. for (var i = 0; i < arrDel.length; i++) {
  417. title.removeChild(arrDel[i]);
  418. }
  419. } else {
  420. var titleClassName = '';
  421. if(obj instanceof Tab) {
  422. titleClassName = 'tab-';
  423. } else if(obj instanceof Frame) {
  424. titleClassName = 'frame-';
  425. } else if(obj instanceof Block) {
  426. titleClassName = 'block';
  427. }
  428. title = document.createElement('div');
  429. title.className = titleClassName + 'title' + ' '+ this.titleClass;
  430. ele.insertBefore(title,ele.firstChild);
  431. }
  432. if (!first) {
  433. var first = document.createElement('span');
  434. first.className = this.titleTextClass;
  435. this._createTitleHtml(first, c);
  436. if (first.innerHTML != '') {
  437. title.insertBefore(first, title.firstChild);
  438. hastitle = 1;
  439. }
  440. }
  441. while ($('titleText_'+(++c))) {
  442. var dom = document.createElement('span');
  443. dom.className = 'subtitle';
  444. this._createTitleHtml(dom, c);
  445. if (dom.innerHTML != '') {
  446. if (dom.innerHTML) Util.insertAfter(dom, first);
  447. first = dom;
  448. hastitle = 1;
  449. }
  450. }
  451. var titleBgImage = $('titleBgImage').value;
  452. titleBgImage = titleBgImage && titleBgImage != 'none' ? Util.url(titleBgImage) : '';
  453. if ($('titleBgColor').value != '' && titleBgImage == '') titleBgImage = 'none';
  454. title.style['backgroundImage'] = titleBgImage;
  455. if (titleBgImage) {
  456. title.style['backgroundRepeat'] = $('titleBgRepeat').value;
  457. }
  458. title.style['backgroundColor'] = $('titleBgColor').value;
  459. if ($('switchType')) {
  460. title.switchType = [];
  461. title.switchType[0] = $('switchType').value ? $('switchType').value : 'click';
  462. title.setAttribute('switchtype',title.switchType[0]);
  463. }
  464. obj.titles = [];
  465. if (hastitle == 1) {
  466. this._initTitle(obj,title);
  467. } else {
  468. if (!(obj instanceof Tab)) title.parentNode.removeChild(title);
  469. title = '';
  470. this.initPosition();
  471. }
  472. if (obj instanceof Block) this.saveBlockTitle(fid,title);
  473. this.setClose();
  474. },
  475. _createTitleHtml : function (ele,tid) {
  476. var html = '',img = '';
  477. tid = '_' + tid ;
  478. var ttext = $('titleText'+tid).value;
  479. var tlink = $('titleLink'+tid).value;
  480. var tfloat = $('titleFloat'+tid).value;
  481. var tmargin_ = tfloat != '' ? tfloat : 'left';
  482. var tmargin = $('titleMargin'+tid).value;
  483. var tsize = $('titleSize'+tid).value;
  484. var tcolor = $('titleColor'+tid).value;
  485. var src = $('titleSrc'+tid).value;
  486. var divStyle = 'float:'+tfloat+';margin-'+tmargin_+':'+tmargin+'px;font-size:'+tsize;
  487. var aStyle = 'color:'+tcolor+' !important;';
  488. if (src) {
  489. img = '<img class="vm" src="'+src+'" alt="'+ttext+'" />';
  490. }
  491. if (ttext || img) {
  492. if (tlink) {
  493. Util.setStyle(ele, divStyle);
  494. html = '<a href='+tlink+' target="_blank" style="'+aStyle+'">'+img+ttext+'</a>';
  495. } else {
  496. Util.setStyle(ele, divStyle+';'+aStyle);
  497. html = img+ttext;
  498. }
  499. }
  500. ele.innerHTML = html;
  501. return true;
  502. },
  503. saveBlockTitle : function (id,title) {
  504. if (!$('saveblocktitle')){
  505. var dom = document.createElement('div');
  506. dom.innerHTML = '<form id="saveblocktitle" method="post" action=""><input type="hidden" name="title" value="" />\n\
  507. <input type="hidden" name="formhash" value="'+document.diyform.formhash.value+'" /><input type="hidden" name="savetitlesubmit" value="true"/></form>';
  508. $('append_parent').appendChild(dom.childNodes[0]);
  509. }
  510. $('saveblocktitle').action = 'portal.php?mod=portalcp&ac=block&op=saveblocktitle&bid='+id.replace('portal_block_','');
  511. var html = !title ? '' : title.outerHTML;
  512. document.forms.saveblocktitle.title.value = html;
  513. ajaxpost('saveblocktitle','ajaxwaitid');
  514. },
  515. removeBlock : function (e, flag) {
  516. if ( typeof e !== 'string') {
  517. e = Util.event(e);
  518. var id = e.aim.id.replace('cmd_','');
  519. } else {
  520. var id = e;
  521. }
  522. if ($(id) == null) return false;
  523. var obj = this.getObjByName(id);
  524. if (!flag) {
  525. if (!confirm('您确实要删除吗,删除以后将不可恢复')) return false;
  526. }
  527. if (obj instanceof Block) {
  528. this.delBlock(id);
  529. } else if (obj instanceof Frame) {
  530. this.delFrame(obj);
  531. }
  532. $(id).parentNode.removeChild($(id));
  533. var content = $(id+'_content');
  534. if(content) {
  535. content.parentNode.removeChild(content);
  536. }
  537. this.setClose();
  538. this.initPosition();
  539. this.initChkBlock();
  540. },
  541. delBlock : function (bid) {
  542. spaceDiy.removeCssSelector('#'+bid);
  543. this.stopSlide(bid);
  544. },
  545. delFrame : function (frame) {
  546. spaceDiy.removeCssSelector('#'+frame.name);
  547. for (var i in frame['columns']) {
  548. if (frame['columns'][i] instanceof Column) {
  549. var children = frame['columns'][i]['children'];
  550. for (var j in children) {
  551. if (children[j] instanceof Frame) {
  552. this.delFrame(children[j]);
  553. } else if (children[j] instanceof Block) {
  554. this.delBlock(children[j]['name']);
  555. }
  556. }
  557. }
  558. }
  559. this.setClose();
  560. },
  561. initChkBlock : function (data) {
  562. if (typeof name == 'undefined' || data == null ) data = this.data;
  563. if ( data instanceof Frame) {
  564. this.initChkBlock(data['columns']);
  565. } else if (data instanceof Block) {
  566. var el = $('chk'+data.name);
  567. if (el != null) el.checked = true;
  568. } else if (typeof data == 'object') {
  569. for (var i in data) {
  570. this.initChkBlock(data[i]);
  571. }
  572. }
  573. },
  574. getBlockData : function (blockname) {
  575. var bid = this.dragObj.id;
  576. var eleid = bid;
  577. if (bid.indexOf('portal_block_') != -1) {
  578. eleid = 0;
  579. }else {
  580. bid = 0;
  581. }
  582. showWindow('showblock', 'portal.php?mod=portalcp&ac=block&op=block&classname='+blockname+'&bid='+bid+'&eleid='+eleid+'&tpl='+document.diyform.template.value,'get',-1);
  583. drag.initPosition();
  584. this.fn = '';
  585. return true;
  586. },
  587. stopSlide : function (id) {
  588. if (typeof slideshow == 'undefined' || typeof slideshow.entities == 'undefined') return false;
  589. var slidebox = $C('slidebox',$(id));
  590. if(slidebox && slidebox.length > 0) {
  591. if(slidebox[0].id) {
  592. var timer = slideshow.entities[slidebox[0].id].timer;
  593. if(timer) clearTimeout(timer);
  594. slideshow.entities[slidebox[0].id] = '';
  595. }
  596. }
  597. },
  598. blockForceUpdate : function (e,all) {
  599. if ( typeof e !== 'string') {
  600. e = Util.event(e);
  601. var id = e.aim.id.replace('cmd_','');
  602. } else {
  603. var id = e;
  604. }
  605. if ($(id) == null) return false;
  606. var bid = id.replace('portal_block_', '');
  607. var bcontent = $(id+'_content');
  608. if (!bcontent) {
  609. bcontent = document.createElement('div');
  610. bcontent.id = id+'_content';
  611. bcontent.className = this.contentClass;
  612. }
  613. this.stopSlide(id);
  614. var height = Util.getFinallyStyle(bcontent, 'height');
  615. bcontent.style.lineHeight = height == 'auto' ? '' : (height == '0px' ? '20px' : height);
  616. var boldcontent = bcontent.innerHTML;
  617. bcontent.innerHTML = '<center>正在加载内容...</center>';
  618. var x = new Ajax();
  619. x.get('portal.php?mod=portalcp&ac=block&op=getblock&forceupdate=1&inajax=1&bid='+bid+'&tpl='+document.diyform.template.value, function(s) {
  620. if(s.indexOf('errorhandle_') != -1) {
  621. bcontent.innerHTML = boldcontent;
  622. runslideshow();
  623. showDialog('抱歉,您没有权限添加或编辑模块', 'alert');
  624. doane();
  625. } else {
  626. var obj = document.createElement('div');
  627. obj.innerHTML = s;
  628. bcontent.parentNode.removeChild(bcontent);
  629. $(id).innerHTML = obj.childNodes[0].innerHTML;
  630. evalscript(s);
  631. if(s.indexOf('runslideshow()') != -1) {runslideshow();}
  632. drag.initPosition();
  633. if (all) {drag.getBlocks();}
  634. }
  635. });
  636. },
  637. frameExport : function (e) {
  638. var flag = true;
  639. if (drag.isChange) {
  640. flag = confirm('您已经做过修改,请保存后再做导出,否则导出的数据将不包括您这次所做的修改。');
  641. }
  642. if (flag) {
  643. if ( typeof e == 'object') {
  644. e = Util.event(e);
  645. var frame = e.aim.id.replace('cmd_','');
  646. } else {
  647. frame = e == undefined ? '' : e;
  648. }
  649. if (!$('frameexport')){
  650. var dom = document.createElement('div');
  651. dom.innerHTML = '<form id="frameexport" method="post" action="" target="_blank"><input type="hidden" name="frame" value="" />\n\
  652. <input type="hidden" name="tpl" value="'+document.diyform.template.value+'" />\n\
  653. <input type="hidden" name="tpldirectory" value="'+document.diyform.tpldirectory.value+'" />\n\
  654. <input type="hidden" name="diysign" value="'+document.diyform.diysign.value+'" />\n\
  655. <input type="hidden" name="formhash" value="'+document.diyform.formhash.value+'" /><input type="hidden" name="exportsubmit" value="true"/></form>';
  656. $('append_parent').appendChild(dom.childNodes[0]);
  657. }
  658. $('frameexport').action = 'portal.php?mod=portalcp&ac=diy&op=export';
  659. document.forms.frameexport.frame.value = frame;
  660. document.forms.frameexport.submit();
  661. }
  662. doane();
  663. },
  664. openFrameImport : function (type) {
  665. type = type || 0;
  666. showWindow('showimport','portal.php?mod=portalcp&ac=diy&op=import&tpl='+document.diyform.template.value+'&tpldirectory='+document.diyform.tpldirectory.value+'&diysign='+document.diyform.diysign.value+'&type='+type, 'get');
  667. },
  668. endBlockForceUpdateBatch : function () {
  669. if($('allupdate')) {
  670. $('allupdate').innerHTML = '已操作完成。';
  671. $('fwin_dialog_submit').style.display = '';
  672. $('fwin_dialog_cancel').style.display = 'none';
  673. }
  674. this.initPosition();
  675. },
  676. getBlocks : function () {
  677. if (this.blocks.length == 0) {
  678. this.endBlockForceUpdateBatch();
  679. }
  680. if (this.blocks.length > 0) {
  681. var cur = this.blocksLen - this.blocks.length;
  682. if($('allupdate')) {
  683. $('allupdate').innerHTML = '共<span style="color:blue">'+this.blocksLen+'</span>个模块,正在更新第<span style="color:red">'+cur+'</span>个,已完成<span style="color:red">'+(parseInt(cur / this.blocksLen * 100)) + '%</span>';
  684. var bid = 'portal_block_'+this.blocks.pop();
  685. this.blockForceUpdate(bid,true);
  686. }
  687. }
  688. },
  689. blockForceUpdateBatch : function (blocks) {
  690. if (blocks) {
  691. this.blocks = blocks;
  692. } else {
  693. this.initPosition();
  694. this.blocks = this.allBlocks;
  695. }
  696. this.blocksLen = this.blocks.length;
  697. showDialog('<div id="allupdate" style="width:350px;line-height:28px;">开始更新...</div>','confirm','更新模块数据', '', true, 'drag.endBlockForceUpdateBatch()');
  698. var wait = function() {
  699. if($('fwin_dialog_submit')) {
  700. $('fwin_dialog_submit').style.display = 'none';
  701. $('fwin_dialog_cancel').className = 'pn pnc';
  702. setTimeout(function(){drag.getBlocks()},500);
  703. } else {
  704. setTimeout(wait,100);
  705. }
  706. };
  707. wait();
  708. doane();
  709. },
  710. clearAll : function () {
  711. if (confirm('您确实要清空页面上所在DIY数据吗,清空以后将不可恢复')) {
  712. for (var i in this.data) {
  713. for (var j in this.data[i]) {
  714. if (typeof(this.data[i][j]) == 'object' && this.data[i][j].name.indexOf('_temp')<0) {
  715. this.delFrame(this.data[i][j]);
  716. $(this.data[i][j].name).parentNode.removeChild($(this.data[i][j].name));
  717. }
  718. }
  719. }
  720. this.initPosition();
  721. this.setClose();
  722. }
  723. doane();
  724. },
  725. createObj : function (e,objType,contentType) {
  726. if (objType == 'block' && !this.checkHasFrame()) {alert("提示:未找到框架,请先添加框架。");spaceDiy.getdiy('frame');return false;}
  727. e = Util.event(e);
  728. if(e.which != 1 ) {return false;}
  729. var html = '',offWidth = 0;
  730. if (objType == 'frame') {
  731. html = this.getFrameHtml(contentType);
  732. offWidth = 600;
  733. } else if (objType == 'block') {
  734. html = this.getBlockHtml(contentType);
  735. offWidth = 200;
  736. this.fn = function (e) {drag.getBlockData(contentType);};
  737. } else if (objType == 'tab') {
  738. html = this.getTabHtml(contentType);
  739. offWidth = 300;
  740. }
  741. var ele = document.createElement('div');
  742. ele.innerHTML = html;
  743. ele = ele.childNodes[0];
  744. document.body.appendChild(ele);
  745. this.dragObj = this.overObj = ele;
  746. if (!this.getTmpBoxElement()) return false;
  747. var scroll = Util.getScroll();
  748. this.dragObj.style.position = 'absolute';
  749. this.dragObj.style.left = e.clientX + scroll.l - 60 + "px";
  750. this.dragObj.style.top = e.clientY + scroll.t - 10 + "px";
  751. this.dragObj.style.width = offWidth + 'px';
  752. this.dragObj.style.cursor = 'move';
  753. this.dragObj.lastMouseX = e.clientX;
  754. this.dragObj.lastMouseY = e.clientY;
  755. Util.insertBefore(this.tmpBoxElement,this.overObj);
  756. Util.addClass(this.dragObj,this.moving);
  757. this.dragObj.style.zIndex = 500 ;
  758. this.scroll = Util.getScroll();
  759. this.newFlag = true;
  760. var _method = this;
  761. document.onscroll = function(){Drag.prototype.resetObj.call(_method, e);};
  762. window.onscroll = function(){Drag.prototype.resetObj.call(_method, e);};
  763. document.onmousemove = function (e){Drag.prototype.drag.call(_method, e);};
  764. document.onmouseup = function (e){Drag.prototype.dragEnd.call(_method, e);};
  765. },
  766. getFrameHtml : function (type) {
  767. var id = 'frame'+Util.getRandom(6);
  768. var className = [this.frameClass,this.moveableObject].join(' ');
  769. className = className + ' cl frame-' + type;
  770. var str = '<div id="'+id+'" class="'+className+'">';
  771. str += '<div id="'+id+'_title" class="'+this.titleClass+' '+this.frameTitleClass+'"><span class="'+this.titleTextClass+'">'+type+'框架</span></div>';
  772. var cols = type.split('-');
  773. var clsl='',clsc='',clsr='';
  774. clsl = ' frame-'+type+'-l';
  775. clsc = ' frame-'+type+'-c';
  776. clsr = ' frame-'+type+'-r';
  777. var len = cols.length;
  778. if (len == 1) {
  779. str += '<div id="'+id+'_left" class="'+this.moveableColumn+clsc+'"></div>';
  780. } else if (len == 2) {
  781. str += '<div id="'+id+'_left" class="'+this.moveableColumn+clsl+ '"></div>';
  782. str += '<div id="'+id+'_center" class="'+this.moveableColumn+clsr+ '"></div>';
  783. } else if (len == 3) {
  784. str += '<div id="'+id+'_left" class="'+this.moveableColumn+clsl+'"></div>';
  785. str += '<div id="'+id+'_center" class="'+this.moveableColumn+clsc+'"></div>';
  786. str += '<div id="'+id+'_right" class="'+this.moveableColumn+clsr+'"></div>';
  787. }
  788. str += '</div>';
  789. return str;
  790. },
  791. getTabHtml : function () {
  792. var id = 'tab'+Util.getRandom(6);
  793. var className = [this.tabClass,this.moveableObject].join(' ');
  794. className = className + ' cl';
  795. var titleClassName = [this.tabTitleClass, this.titleClass, this.moveableColumn, 'cl'].join(' ');
  796. var str = '<div id="'+id+'" class="'+className+'">';
  797. str += '<div id="'+id+'_title" class="'+titleClassName+'"><span class="'+this.titleTextClass+'">tab标签</span></div>';
  798. str += '<div id="'+id+'_content" class="'+this.tabContentClass+'"></div>';
  799. str += '</div>';
  800. return str;
  801. },
  802. getBlockHtml : function () {
  803. var id = 'block'+Util.getRandom(6);
  804. var str = '<div id="'+id+'" class="block move-span"></div>';
  805. str += '</div>';
  806. return str;
  807. },
  808. setClose : function () {
  809. if(this.sampleMode) {
  810. return true;
  811. } else {
  812. if (!this.isChange) {
  813. window.onbeforeunload = function() {
  814. return '您的数据已经修改,退出将无法保存您的修改。';
  815. };
  816. }
  817. this.isChange = true;
  818. spaceDiy.enablePreviewButton();
  819. }
  820. },
  821. clearClose : function () {
  822. this.isChange = false;
  823. this.isClearClose = true;
  824. window.onbeforeunload = function () {};
  825. },
  826. goonDIY : function () {
  827. if ($('prefile').value == '1') {
  828. showDialog('<div style="line-height:28px;">按继续按钮将打开暂存数据并DIY,<br />按删除按钮将删除暂存数据。</div>','confirm','是否继续暂存数据的DIY?', function(){location.replace(location.href+'&preview=yes');}, true, 'spaceDiy.cancelDIY()', '', '继续', '删除');
  829. } else if (location.search.indexOf('preview=yes') > -1) {
  830. spaceDiy.enablePreviewButton();
  831. } else {
  832. spaceDiy.disablePreviewButton();
  833. }
  834. setInterval(function(){spaceDiy.save('savecache', 1);},180000);
  835. }
  836. });
  837. var spaceDiy = new DIY();
  838. spaceDiy.extend({
  839. save : function (optype,rejs) {
  840. optype = typeof optype == 'undefined' ? '' : optype;
  841. if (optype == 'savecache' && !drag.isChange) {return false;}
  842. var tplpre = document.diyform.template.value.split(':');
  843. if (!optype) {
  844. if (['portal/portal_topic_content', 'portal/list', 'portal/view'].indexOf(tplpre[0]) == -1) {
  845. if (document.diyform.template.value.indexOf(':') > -1 && !document.selectsave) {
  846. var schecked = '',dchecked = '';
  847. if (document.diyform.savemod.value == '1') {
  848. dchecked = ' checked';
  849. } else {
  850. schecked = ' checked';
  851. }
  852. showDialog('<form name="selectsave" action="" method="get"><label><input type="radio" value="0" name="savemod"'+schecked+' />应用于此类全部页面</label>\n\
  853. <label><input type="radio" value="1" name="savemod"'+dchecked+' />只应用于本页面</label></form>','notice', '', spaceDiy.save);
  854. return false;
  855. }
  856. if (document.selectsave) {
  857. if (document.selectsave.savemod[0].checked) {
  858. document.diyform.savemod.value = document.selectsave.savemod[0].value;
  859. } else {
  860. document.diyform.savemod.value = document.selectsave.savemod[1].value;
  861. }
  862. }
  863. } else {
  864. document.diyform.savemod.value = 1;
  865. }
  866. } else if (optype == 'savecache') {
  867. if (!drag.isChange) return false;
  868. this.checkPreview_form();
  869. document.diyform.rejs.value = rejs ? 0 : 1;
  870. } else if (optype =='preview') {
  871. if (drag.isChange) {
  872. optype = 'savecache';
  873. } else {
  874. this.checkPreview_form();
  875. $('preview_form').submit();
  876. return false;
  877. }
  878. }
  879. document.diyform.action = document.diyform.action.replace(/[&|\?]inajax=1/, '');
  880. document.diyform.optype.value = optype;
  881. document.diyform.spacecss.value = spaceDiy.getSpacecssStr();
  882. document.diyform.style.value = spaceDiy.style;
  883. document.diyform.layoutdata.value = drag.getPositionStr();
  884. document.diyform.gobackurl.value = spaceDiy.cancelDiyUrl();
  885. drag.clearClose();
  886. if (optype == 'savecache') {
  887. document.diyform.handlekey.value = 'diyform';
  888. ajaxpost('diyform','ajaxwaitid','ajaxwaitid','onerror');
  889. } else {
  890. saveUserdata('diy_advance_mode', '');
  891. document.diyform.submit();
  892. }
  893. },
  894. checkPreview_form : function () {
  895. if (!$('preview_form')) {
  896. var dom = document.createElement('div');
  897. var search = '';
  898. var sarr = location.search.replace('?','').split('&');
  899. for (var i = 0;i<sarr.length;i++){
  900. var kv = sarr[i].split('=');
  901. if (kv.length>1 && kv[0] != 'diy') {
  902. search += '<input type="hidden" value="'+kv[1]+'" name="'+kv[0]+'" />';
  903. }
  904. }
  905. search += '<input type="hidden" value="yes" name="preview" />';
  906. dom.innerHTML = '<form action="'+location.href+'" target="_bloak" method="get" id="preview_form">'+search+'</form>';
  907. var form = dom.getElementsByTagName('form');
  908. $('append_parent').appendChild(form[0]);
  909. }
  910. },
  911. cancelDiyUrl : function () {
  912. return location.href.replace(/[\?|\&]diy\=yes/g,'').replace(/[\?|\&]preview=yes/,'');
  913. },
  914. cancel : function () {
  915. saveUserdata('diy_advance_mode', '');
  916. if (drag.isClearClose) {
  917. showDialog('<div style="line-height:28px;">是否保留暂存数据?<br />按确定按钮将保留暂存数据,按取消按钮将删除暂存数据。</div>','confirm','保留暂存数据', function(){location.href = spaceDiy.cancelDiyUrl();}, true, function(){window.onunload=function(){spaceDiy.cancelDIY()};location.href = spaceDiy.cancelDiyUrl();});
  918. } else {
  919. location.href = this.cancelDiyUrl();
  920. }
  921. },
  922. recover : function() {
  923. if (confirm('您确定要恢复到上一版本保存的结果吗?')) {
  924. drag.clearClose();
  925. document.diyform.recover.value = '1';
  926. document.diyform.gobackurl.value = location.href.replace(/(\?diy=yes)|(\&diy=yes)/,'').replace(/[\?|\&]preview=yes/,'');
  927. document.diyform.submit();
  928. }
  929. doane();
  930. },
  931. enablePreviewButton : function () {
  932. if ($('preview')){
  933. $('preview').className = '';
  934. if(drag.isChange) {
  935. $('diy_preview').onclick = function () {spaceDiy.save('savecache');return false;};
  936. } else {
  937. $('diy_preview').onclick = function () {spaceDiy.save('preview');return false;};
  938. }
  939. Util.show($('savecachemsg'))
  940. }
  941. },
  942. disablePreviewButton : function () {
  943. if ($('preview')) {
  944. $('preview').className = 'unusable';
  945. $('diy_preview').onclick = function () {return false;};
  946. }
  947. },
  948. cancelDIY : function () {
  949. this.disablePreviewButton();
  950. document.diyform.optype.value = 'canceldiy';
  951. var x = new Ajax();
  952. x.post($('diyform').action+'&inajax=1','optype=canceldiy&diysubmit=1&template='+document.diyform.template.value+'&savemod='+document.diyform.savemod.value+'&formhash='+document.diyform.formhash.value+'&tpldirectory='+document.diyform.tpldirectory.value+'&diysign='+document.diyform.diysign.value,function(s){});
  953. },
  954. switchBlockclass : function(blockclass) {
  955. var navs = $('contentblockclass_nav').getElementsByTagName('a');
  956. var contents = $('contentblockclass').getElementsByTagName('ul');
  957. for(var i=0; i<navs.length; i++) {
  958. if(navs[i].id=='bcnav_'+blockclass) {
  959. navs[i].className = 'a';
  960. } else {
  961. navs[i].className = '';
  962. }
  963. }
  964. for(var i=0; i<contents.length; i++) {
  965. if(contents[i].id=='contentblockclass_'+blockclass) {
  966. contents[i].style.display = '';
  967. } else {
  968. contents[i].style.display = 'none';
  969. }
  970. }
  971. },
  972. getdiy : function (type) {
  973. if (type) {
  974. var nav = $('controlnav').children;
  975. for (var i in nav) {
  976. if (nav[i].className == 'current') {
  977. nav[i].className = '';
  978. var contentid = 'content'+nav[i].id.replace('nav', '');
  979. if ($(contentid)) $(contentid).style.display = 'none';
  980. }
  981. }
  982. $('nav'+type).className = 'current';
  983. if (type == 'start' || type == 'frame') {
  984. $('content'+type).style.display = 'block';
  985. return true;
  986. }
  987. if(type == 'blockclass' && $('content'+type).innerHTML !='') {
  988. $('content'+type).style.display = 'block';
  989. return true;
  990. }
  991. var para = '&op='+type;
  992. if (arguments.length > 1) {
  993. for (var i = 1; i < arguments.length; i++) {
  994. para += '&' + arguments[i] + '=' + arguments[++i];
  995. }
  996. }
  997. var ajaxtarget = type == 'diy' ? 'diyimages' : '';
  998. var x = new Ajax();
  999. x.showId = ajaxtarget;
  1000. x.get('portal.php?mod=portalcp&ac=diy'+para+'&inajax=1&ajaxtarget='+ajaxtarget,function(s, x) {
  1001. if (s) {
  1002. if (typeof cpb_frame == 'object' && !BROWSER.ie) {delete cpb_frame;}
  1003. if (!$('content'+type)) {
  1004. var dom = document.createElement('div');
  1005. dom.id = 'content'+type;
  1006. $('controlcontent').appendChild(dom);
  1007. }
  1008. $('content'+type).innerHTML = s;
  1009. $('content'+type).style.display = 'block';
  1010. if (type == 'diy') {
  1011. spaceDiy.setCurrentDiy(spaceDiy.currentDiy);
  1012. if (spaceDiy.styleSheet.rules.length > 0) {
  1013. Util.show('recover_button');
  1014. }
  1015. }
  1016. var evaled = false;
  1017. if(s.indexOf('ajaxerror') != -1) {
  1018. evalscript(s);
  1019. evaled = true;
  1020. }
  1021. if(!evaled && (typeof ajaxerror == 'undefined' || !ajaxerror)) {
  1022. if(x.showId) {
  1023. ajaxupdateevents($(x.showId));
  1024. }
  1025. }
  1026. if(!evaled) evalscript(s);
  1027. }
  1028. });
  1029. }
  1030. }
  1031. });
  1032. spaceDiy.init(1);
  1033. function succeedhandle_diyform (url, message, values) {
  1034. if (values['rejs'] == '1') {
  1035. document.diyform.rejs.value = '';
  1036. parent.$('preview_form').submit();
  1037. }
  1038. spaceDiy.enablePreviewButton();
  1039. return false;
  1040. }