1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780 |
- /*
- [Discuz!] (C)2001-2099 Comsenz Inc.
- This is NOT a freeware, use is subject to license terms
- $Id: editor.js 34614 2014-06-12 02:48:35Z nemohou $
- */
- var editorcurrentheight = 400, editorminheight = 400, savedataInterval = 30, editbox = null, editwin = null, editdoc = null, editcss = null, savedatat = null, savedatac = 0, autosave = 1, framemObj = null, cursor = -1, stack = [], initialized = false, postSubmited = false, editorcontroltop = false, editorcontrolwidth = false, editorcontrolheight = false, editorisfull = 0, fulloldheight = 0, savesimplodemode = null;
- EXTRAFUNC['keydown'] = [];
- EXTRAFUNC['keyup'] = [];
- EXTRAFUNC['mouseup'] = [];
- EXTRAFUNC['showEditorMenu'] = [];
- var EXTRASELECTION = '', EXTRASEL = null;
- function newEditor(mode, initialtext) {
- wysiwyg = parseInt(mode);
- if(!(BROWSER.ie || BROWSER.firefox || (BROWSER.opera >= 9 || BROWSER.rv))) {
- allowswitcheditor = wysiwyg = 0;
- }
- if(!allowswitcheditor) {
- $(editorid + '_switcher').style.display = 'none';
- }
- if(wysiwyg) {
- if($(editorid + '_iframe')) {
- editbox = $(editorid + '_iframe');
- } else {
- var iframe = document.createElement('iframe');
- iframe.frameBorder = '0';
- iframe.tabIndex = 2;
- iframe.hideFocus = true;
- iframe.style.display = 'none';
- editbox = textobj.parentNode.appendChild(iframe);
- editbox.id = editorid + '_iframe';
- }
- editwin = editbox.contentWindow;
- editdoc = editwin.document;
- writeEditorContents(isUndefined(initialtext) ? textobj.value : initialtext);
- } else {
- editbox = editwin = editdoc = textobj;
- if(!isUndefined(initialtext)) {
- writeEditorContents(initialtext);
- }
- addSnapshot(textobj.value);
- }
- setEditorEvents();
- initEditor();
- }
- function setEditorTip(s) {
- $(editorid + '_tip').innerHTML = ' ' + s;
- }
- function initEditor() {
- if(BROWSER.other) {
- $(editorid + '_controls').style.display = 'none';
- return;
- }
- var buttons = $(editorid + '_controls').getElementsByTagName('a');
- initesbar();
- for(var i = 0; i < buttons.length; i++) {
- if(buttons[i].id.indexOf(editorid + '_') != -1) {
- buttons[i].href = 'javascript:;';
- if(buttons[i].id.substr(buttons[i].id.indexOf('_') + 1) == 'fullswitcher') {
- buttons[i].innerHTML = !editorisfull ? '全屏' : '返回';
- buttons[i].onmouseover = function(e) {setEditorTip(editorisfull ? '恢复编辑器大小' : '全屏方式编辑');};
- buttons[i].onclick = function(e) {editorfull();doane();}
- } else if(buttons[i].id.substr(buttons[i].id.indexOf('_') + 1) == 'simple') {
- buttons[i].innerHTML = !simplodemode ? '常用' : '高级';
- buttons[i].onclick = function(e) {editorsimple();doane();}
- } else {
- _attachEvent(buttons[i], 'mouseover', function(e) {setEditorTip(BROWSER.ie ? window.event.srcElement.title : e.target.title);});
- if(buttons[i].id.substr(buttons[i].id.indexOf('_') + 1) == 'url') {
- buttons[i].onclick = function(e) {discuzcode('unlink');discuzcode('url');doane();};
- } else {
- if(!buttons[i].getAttribute('init')) {
- buttons[i].onclick = function(e) {discuzcode(this.id.substr(this.id.indexOf('_') + 1));doane();};
- }
- }
- }
- buttons[i].onmouseout = function(e) {setEditorTip('');};
- }
- }
- setUnselectable($(editorid + '_controls'));
- if(editorcontroltop === false && (BROWSER.ie && BROWSER.ie > 6 || !BROWSER.ie)) {
- seteditorcontrolpos();
- var obj = wysiwyg ? editwin.document.body.parentNode : $(editorid + '_textarea');
- editorcontrolwidth = $(editorid + '_controls').clientWidth - 8;
- ctrlmObj = document.createElement('div');
- ctrlmObj.style.display = 'none';
- ctrlmObj.style.height = $(editorid + '_controls').clientHeight + 'px';
- ctrlmObj.id = editorid + '_controls_mask';
- $(editorid + '_controls').parentNode.insertBefore(ctrlmObj, $(editorid + '_controls'));
- _attachEvent(window, 'scroll', function () { editorcontrolpos(); }, document);
- }
- if($(editorid + '_fullswitcher') && BROWSER.ie && BROWSER.ie < 7) {
- $(editorid + '_fullswitcher').onclick = function () {
- showDialog('您的浏览器不支持此功能,请升级浏览器版本', 'notice', '友情提示');
- };
- $(editorid + '_fullswitcher').className = 'xg1';
- }
- if($(editorid + '_svdsecond') && savedatat === null) {
- savedatac = savedataInterval;
- autosave = !getcookie('editorautosave_' + editorid) || getcookie('editorautosave_' + editorid) == 1 ? 1 : 0;
- savedataTime();
- savedatat = setInterval("savedataTime()", 10000);
- }
- checkFocus();
- }
- function initesbar() {
- if(!$(editorid + '_adv_s3')) {
- return;
- }
- var buttons = $(editorid + '_adv_s3').getElementsByTagName('A');
- var s = '';
- for(i = 0;i < buttons.length;i++) {
- if(i/2 == parseInt(i/2)) {
- s += '<p>';
- }
- s += buttons[i].outerHTML;
- }
- $(editorid + '_adv_s3').innerHTML = s;
- for(var i = 0; i < buttons.length; i++) {
- if(buttons[i].id.indexOf(editorid + '_') != -1) {
- buttons[i].href = 'javascript:;';
- if(buttons[i].id.substr(buttons[i].id.indexOf('_') + 1) == 'fullswitcher') {
- } else if(buttons[i].id.substr(buttons[i].id.indexOf('_') + 1) == 'simple') {
- } else {
- _attachEvent(buttons[i], 'mouseover', function(e) {setEditorTip(BROWSER.ie ? window.event.srcElement.title : e.target.title);});
- if(buttons[i].id.substr(buttons[i].id.indexOf('_') + 1) == 'url') {
- buttons[i].onclick = function(e) {discuzcode('unlink');discuzcode('url');doane();};
- } else {
- if(!buttons[i].getAttribute('init')) {
- buttons[i].onclick = function(e) {discuzcode(this.id.substr(this.id.indexOf('_') + 1));doane();};
- }
- }
- }
- buttons[i].onmouseout = function(e) {setEditorTip('');};
- }
- }
- }
- function savedataTime() {
- if(!autosave) {
- $(editorid + '_svdsecond').innerHTML = '<a title="点击开启自动保存" href="javascript:;" onclick="setAutosave()">开启自动保存</a> ';
- return;
- }
- if(!savedatac) {
- savedatac = savedataInterval;
- saveData();
- d = new Date();
- var h = d.getHours();
- var m = d.getMinutes();
- h = h < 10 ? '0' + h : h;
- m = m < 10 ? '0' + m : m;
- setEditorTip('数据已于 ' + h + ':' + m + ' 保存');
- }
- $(editorid + '_svdsecond').innerHTML = '<a title="点击关闭自动保存" href="javascript:;" onclick="setAutosave()">' + savedatac + ' 秒后保存</a> ';
- savedatac -= 10;
- }
- function setAutosave() {
- autosave = !autosave;
- setEditorTip(autosave ? '数据自动保存已开启' : '数据自动保存已关闭');
- setcookie('editorautosave_' + editorid, autosave ? 1 : -1, 2592000);
- savedataTime();
- }
- function unloadAutoSave() {
- if(autosave) {
- saveData();
- }
- }
- function seteditorcontrolpos() {
- var objpos = fetchOffset($(editorid + '_controls'));
- editorcontroltop = objpos['top'];
- }
- function editorcontrolpos() {
- if(editorisfull) {
- return;
- }
- var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
- if(scrollTop > editorcontroltop && editorcurrentheight > editorminheight) {
- $(editorid + '_controls').style.position = 'fixed';
- $(editorid + '_controls').style.top = '0px';
- $(editorid + '_controls').style.width = editorcontrolwidth + 'px';
- $(editorid + '_controls_mask').style.display = '';
- } else {
- $(editorid + '_controls').style.position = $(editorid + '_controls').style.top = $(editorid + '_controls').style.width = '';
- $(editorid + '_controls_mask').style.display = 'none';
- }
- }
- function editorsize(op, v) {
- var obj = wysiwyg ? editwin.document.body.parentNode : $(editorid + '_textarea');
- var editorheight = obj.clientHeight;
- if(!v) {
- if(op == '+') {
- editorheight += 200;
- } else{
- editorheight -= 200;
- }
- } else {
- editorheight = v;
- }
- editorcurrentheight = editorheight > editorminheight ? editorheight : editorminheight;
- if($(editorid + '_iframe')) {
- $(editorid + '_iframe').style.height = $(editorid + '_iframe').contentWindow.document.body.style.height = editorcurrentheight + 'px';
- }
- if(framemObj) {
- framemObj.style.height = editorcurrentheight + 'px';
- }
- $(editorid + '_textarea').style.height = editorcurrentheight + 'px';
- }
- var editorsizepos = [];
- function editorresize(e, op) {
- op = !op ? 1 : op;
- e = e ? e : window.event;
- if(op == 1) {
- if(wysiwyg) {
- var objpos = fetchOffset($(editorid + '_iframe'));
- framemObj = document.createElement('div');
- framemObj.style.width = $(editorid + '_iframe').clientWidth + 'px';
- framemObj.style.height = $(editorid + '_iframe').clientHeight + 'px';
- framemObj.style.position = 'absolute';
- framemObj.style.left = objpos['left'] + 'px';
- framemObj.style.top = objpos['top'] + 'px';
- $('append_parent').appendChild(framemObj);
- } else {
- framemObj = null;
- }
- editorsizepos = [e.clientY, editorcurrentheight, framemObj];
- document.onmousemove = function(e) {try{editorresize(e, 2);}catch(err){}};
- document.onmouseup = function(e) {try{editorresize(e, 3);}catch(err){}};
- doane(e);
- }else if(op == 2 && editorsizepos !== []) {
- var dragnow = e.clientY;
- editorsize('', editorsizepos[1] + dragnow - editorsizepos[0]);
- doane(e);
- }else if(op == 3) {
- if(wysiwyg) {
- $('append_parent').removeChild(editorsizepos[2]);
- }
- editorsizepos = [];
- document.onmousemove = null;
- document.onmouseup = null;
- }
- }
- function editorfull(op) {
- var op = !op ? 0 : op, control = $(editorid + '_controls'), area = $(editorid + '_textarea').parentNode, bbar = $(editorid + '_bbar'), iswysiwyg = wysiwyg;
- if(op) {
- var editorheight = document.documentElement.clientHeight - control.offsetHeight - bbar.offsetHeight - parseInt(getCurrentStyle(area, 'paddingTop', 'padding-top')) - parseInt(getCurrentStyle(area, 'paddingBottom', 'padding-bottom'));
- area.style.position = 'fixed';
- area.style.top = control.offsetHeight + 'px';
- area.style.height = editorheight + 'px';
- editorsize('', editorheight);
- bbar.style.position = 'fixed';
- bbar.style.top = (document.documentElement.clientHeight - bbar.offsetHeight) + 'px';
- return;
- }
- if(!editorisfull) {
- savesimplodemode = 0;
- if(simplodemode) {
- savesimplodemode = 1;
- editorsimple();
- }
- $(editorid + '_simple').style.visibility = 'hidden';
- fulloldheight = editorcurrentheight;
- document.body.style.overflow = 'hidden';
- document.body.scroll = 'no';
- control.style.position = 'fixed';
- control.style.top = '0px';
- control.style.left = '0px';
- control.style.width = '100%';
- control.style.minWidth = '800px';
- area.style.backgroundColor = $(editorid + '_textarea') ? getCurrentStyle($(editorid + '_textarea'), 'backgroundColor', 'background-color') : '#fff';
- $(editorid + '_switcher').style.paddingRight = '10px';
- var editorheight = document.documentElement.clientHeight - control.offsetHeight - bbar.offsetHeight - parseInt(getCurrentStyle(area, 'paddingTop', 'padding-top')) - parseInt(getCurrentStyle(area, 'paddingBottom', 'padding-bottom'));
- area.style.position = 'fixed';
- area.style.top = control.offsetHeight + 'px';
- area.style.left = '0px';
- area.style.width = '100%';
- area.style.height = editorheight + 'px';
- editorsize('', editorheight);
- bbar.style.position = 'fixed';
- bbar.style.top = (document.documentElement.clientHeight - bbar.offsetHeight) + 'px';
- bbar.style.left = '0px';
- bbar.style.width = '100%';
- control.style.zIndex = '500';
- area.style.zIndex = bbar.style.zIndex = '200';
- if($(editorid + '_resize')) {
- $(editorid + '_resize').style.display = 'none';
- }
- window.onresize = function() { editorfull(1); };
- editorisfull = 1;
- } else {
- if(savesimplodemode) {
- editorsimple();
- }
- $(editorid + '_simple').style.visibility = 'visible';
- window.onresize = null;
- document.body.style.overflow = 'auto';
- document.body.scroll = 'yes';
- control.style.position = control.style.top = control.style.left = control.style.width = control.style.minWidth = control.style.zIndex =
- area.style.position = area.style.top = area.style.left = area.style.width = area.style.height = area.style.zIndex =
- bbar.style.position = bbar.style.top = bbar.style.left = bbar.style.width = bbar.style.zIndex = '';
- editorheight = fulloldheight;
- $(editorid + '_switcher').style.paddingRight = '0px';
- editorsize('', editorheight);
- if($(editorid + '_resize')) {
- $(editorid + '_resize').style.display = '';
- }
- editorisfull = 0;
- editorcontrolpos();
- }
- $(editorid + '_fullswitcher').innerHTML = editorisfull ? '返回' : '全屏';
- initesbar();
- }
- function editorsimple() {
- if($(editorid + '_body').className == 'edt') {
- v = 'none';
- $(editorid + '_simple').innerHTML = '高级';
- $(editorid + '_body').className = 'edt simpleedt';
- $(editorid + '_adv_s1').className = 'b2r';
- $(editorid + '_adv_s2').className = 'b2r nbl';
- if(allowswitcheditor) {
- $(editorid + '_switcher').style.display = 'none';
- }
- $(editorid + '_adv_s3').className = 'b2r esbs';
- simplodemode = 1;
- } else {
- v = '';
- $(editorid + '_simple').innerHTML = '常用';
- $(editorid + '_body').className = 'edt';
- $(editorid + '_adv_s1').className = 'b1r';
- $(editorid + '_adv_s2').className = 'b2r nbr nbl';
- if(allowswitcheditor) {
- $(editorid + '_switcher').style.display = '';
- }
- $(editorid + '_adv_s3').className = 'b2r esb';
- simplodemode = 0;
- }
- setcookie('editormode_' + editorid, simplodemode ? 1 : -1, 2592000);
- for(i = 1;i <= 9;i++) {
- if($(editorid + '_adv_' + i)) {
- $(editorid + '_adv_' + i).style.display = v;
- }
- }
- var btns = $(editorid + '_adv_s3').getElementsByTagName('A');
- for(i = 0;i < btns.length;i++) {
- if(btns[i].getAttribute('adv')) {
- btns[i].style.display = v;
- }
- }
- }
- function pasteWord(str) {
- var mstest = /<\w[^>]* class="?[MsoNormal|xl]"?/gi;
- if(mstest.test(str)){
- str = str.replace(/<!--\[if[\s\S]+?<!\[endif\]-->/gi, "");
- str = str.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");
- str = str.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, function ($1, $2, $3, $4) {
- var style = '';
- re = new RegExp('(^|[;\\s])color:\\s*([^;]+);?', 'ig');
- match = re.exec($3);
- if(match != null) {
- style += 'color:' + match[2] + ';';
- }
- re = new RegExp('(^|[;\\s])text-indent:\\s*([^;]+);?', 'ig');
- match = re.exec($3);
- if(match != null) {
- style += 'text-indent:' + parseInt(parseInt(match[2]) / 10) + 'em;';
- }
- re = new RegExp('(^|[;\\s])font-size:\\s*([^;]+);?', 'ig');
- match = re.exec($3);
- if(match != null) {
- style += 'font-size:' + match[2] + ';';
- }
- if(style) {
- style = ' style="' + style + '"';
- }
- return '<' + $2 + style + $4;
- });
- str = str.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
- str = str.replace(/<\\?\?xml[^>]*>/gi, "");
- str = str.replace(/<\/?\w+:[^>]*>/gi, "");
- str = str.replace(/ /, " ");
- var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)", 'ig');
- str = str.replace(re, "<div$2</div>");
- if(!wysiwyg) {
- str = html2bbcode(str);
- }
- insertText(str, str.length, 0);
- }
- }
- var ctlent_enable = {8:1,9:1,13:1};
- function ctlent(event) {
- if(postSubmited == false && (event.ctrlKey && event.keyCode == 13) || (event.altKey && event.keyCode == 83) && editorsubmit) {
- if(in_array(editorsubmit.name, ['topicsubmit', 'replysubmit', 'editsubmit']) && !validate(editorform)) {
- doane(event);
- return;
- }
- postSubmited = true;
- editorsubmit.disabled = true;
- editorform.submit();
- return;
- }
- if(ctlent_enable[9] && event.keyCode == 9) {
- if(!wysiwyg) {
- insertText('\t', 1, 0);
- }
- doane(event);
- }
- if(ctlent_enable[8] && event.keyCode == 8 && wysiwyg) {
- var sel = getSel();
- if(sel) {
- insertText('', sel.length - 1, 0);
- doane(event);
- }
- }
- }
- function keyBackspace() {
- if(!wysiwyg) {
- return;
- }
- if(BROWSER.ie) {
- sel = editdoc.selection.createRange();
- sel.moveStart('character', -1);
- sel.moveEnd('character', 0);
- sel.select();
- editdoc.selection.clear();
- } else {
- editdoc.execCommand('delete', false, true);
- }
- }
- function keyMenu(code, func) {
- var km = 'kM' + Math.random();
- var hs = '<span id="' + km + '">' + code + '</span>';
- if(BROWSER.ie) {
- var range = document.selection.createRange();
- range.pasteHTML(hs);
- range.moveToElementText(editdoc.getElementById(km));
- range.moveStart("character");
- range.select();
- } else {
- var selection = editwin.getSelection();
- var range = selection.getRangeAt(0);
- var fragment = range.createContextualFragment(hs);
- range.insertNode(fragment);
- var tmp = editdoc.getElementById(km).firstChild;
- range.setStart(tmp, 1);
- range.setEnd(tmp, 1);
- selection.removeAllRanges();
- selection.addRange(range);
- }
- keyMenuObj = editdoc.getElementById(km);
- var b = fetchOffset(editbox);
- var o = fetchOffset(keyMenuObj);
- var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
- func(b.left + o.left, b.top + o.top - scrollTop);
- }
- function checkFocus() {
- if(wysiwyg) {
- if(BROWSER.rv) {
- return;
- }
- try {
- editwin.focus();
- } catch(e) {
- editwin.document.body.focus();
- }
- } else {
- textobj.focus();
- }
- }
- function checklength(theform) {
- var message = wysiwyg ? html2bbcode(getEditorContents()) : (!theform.parseurloff.checked ? parseurl(theform.message.value) : theform.message.value);
- showDialog('当前长度: ' + mb_strlen(message) + ' 字节,' + (postmaxchars != 0 ? '系统限制: ' + postminchars + ' 到 ' + postmaxchars + ' 字节。' : ''), 'notice', '字数检查');
- }
- function setUnselectable(obj) {
- if(BROWSER.ie && BROWSER.ie > 4 && typeof obj.tagName != 'undefined') {
- if(obj.hasChildNodes()) {
- for(var i = 0; i < obj.childNodes.length; i++) {
- setUnselectable(obj.childNodes[i]);
- }
- }
- if(obj.tagName != 'INPUT') {
- obj.unselectable = 'on';
- }
- }
- }
- function writeEditorContents(text) {
- if(wysiwyg) {
- if(text == '' && (BROWSER.firefox || BROWSER.opera)) {
- text = '<p></p>';
- }
- if(initialized && !(BROWSER.firefox && BROWSER.firefox >= '3' || BROWSER.opera)) {
- editdoc.body.innerHTML = text;
- } else {
- text = '<!DOCTYPE html PUBLIC "-/' + '/W3C/' + '/DTD XHTML 1.0 Transitional/' + '/EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' +
- '<html><head id="editorheader"><meta http-equiv="Content-Type" content="text/html; charset=' + charset + '" />' +
- (BROWSER.ie && BROWSER.ie > 7 ? '<meta http-equiv="X-UA-Compatible" content="IE=7" />' : '' ) +
- '<link rel="stylesheet" type="text/css" href="misc.php?css=' + STYLEID + '_wysiwyg&' + VERHASH + '" />' +
- (BROWSER.ie ? '<script>window.onerror = function() { return true; }</script>' : '') +
- '</head><body>' + text + '</body></html>';
- editdoc.designMode = allowhtml ? 'on' : 'off';
- editdoc = editwin.document;
- editdoc.open('text/html', 'replace');
- editdoc.write(text);
- editdoc.close();
- if(!BROWSER.ie) {
- var scriptNode = document.createElement("script");
- scriptNode.type = "text/javascript";
- scriptNode.text = 'window.onerror = function() { return true; }';
- editdoc.getElementById('editorheader').appendChild(scriptNode);
- }
- editdoc.body.contentEditable = true;
- editdoc.body.spellcheck = false;
- initialized = true;
- if(BROWSER.safari) {
- editdoc.onclick = safariSel;
- }
- }
- if(BROWSER.ie && BROWSER.ie <= 8) {
- checkpostbg = /<style[^>]+name="editorpostbg"[^>]*>body{background-image:url\("([^\[\<\r\n;'\"\?\(\)]+?)"\);}<\/style>/ig;
- var matches = checkpostbg.exec(text);
- if(matches != null) {
- editdoc.body.innerHTML += '<style type="text/css" name="editorpostbg">body{background-image:url("'+matches[1]+'");}</style>';
- }
- }
- } else {
- textobj.value = text;
- }
- setEditorStyle();
- }
- function safariSel(e) {
- e = e.target;
- if(e.tagName.match(/(img|embed)/i)) {
- var sel = editwin.getSelection(),rng= editdoc.createRange(true);
- rng.selectNode(e);
- sel.removeAllRanges();
- sel.addRange(rng);
- }
- }
- function getEditorContents() {
- return wysiwyg ? editdoc.body.innerHTML : editdoc.value;
- }
- function setEditorStyle() {
- if(wysiwyg) {
- textobj.style.display = 'none';
- editbox.style.display = '';
- editbox.className = textobj.className;
- if(BROWSER.ie) {
- editdoc.body.style.border = '0px';
- editdoc.body.addBehavior('#default#userData');
- try{$('subject').focus();} catch(e) {editwin.focus();}
- }
- if($(editorid + '_iframe')) {
- $(editorid + '_iframe').style.height = $(editorid + '_iframe').contentWindow.document.body.style.height = editorcurrentheight + 'px';
- }
- } else {
- var iframe = textobj.parentNode.getElementsByTagName('iframe')[0];
- if(iframe) {
- textobj.style.display = '';
- iframe.style.display = 'none';
- }
- if(BROWSER.ie) {
- try{
- $('subject').focus();
- } catch(e) {}
- }
- }
- if($('at_menu')) {
- $('at_menu').style.display = 'none';
- }
- }
- function setEditorEvents() {
- if(BROWSER.firefox || BROWSER.opera) {
- editdoc.addEventListener('mouseup', function(e) {mouseUp(e)}, true);
- editdoc.addEventListener('keyup', function(e) {keyUp(e)}, true);
- editwin.addEventListener('keydown', function(e) {keyDown(e)}, true);
- } else if(editdoc.attachEvent) {
- try{
- editdoc.attachEvent('onmouseup', mouseUp);
- editdoc.attachEvent('onkeyup', keyUp);
- editdoc.attachEvent('onkeydown', keyDown);
- } catch(e) {}
- }
- }
- function mouseUp(event) {
- if(wysiwyg) {
- setContext();
- }
- for(i in EXTRAFUNC['mouseup']) {
- EXTRAEVENT = event;
- try {
- eval(EXTRAFUNC['mouseup'][i] + '()');
- } catch(e) {}
- }
- }
- function keyUp(event) {
- if(wysiwyg) {
- setContext();
- }
- for(i in EXTRAFUNC['keyup']) {
- EXTRAEVENT = event;
- try {
- eval(EXTRAFUNC['keyup'][i] + '()');
- } catch(e) {}
- }
- }
- function keyDown(event) {
- ctlent(event);
- for(i in EXTRAFUNC['keydown']) {
- EXTRAEVENT = event;
- try {
- eval(EXTRAFUNC['keydown'][i] + '()');
- } catch(e) {}
- }
- }
- function wrapTags(tagname, useoption, selection) {
- if(isUndefined(selection)) {
- var selection = getSel();
- if(selection === false) {
- selection = '';
- } else {
- selection += '';
- }
- }
- if(useoption !== false) {
- var opentag = '[' + tagname + '=' + useoption + ']';
- } else {
- var opentag = '[' + tagname + ']';
- }
- var closetag = '[/' + tagname + ']';
- var text = opentag + selection + closetag;
- insertText(text, strlen(opentag), strlen(closetag), in_array(tagname, ['code', 'quote', 'free', 'hide']) ? true : false);
- }
- function applyFormat(cmd, dialog, argument) {
- if(wysiwyg) {
- editdoc.execCommand(cmd, (isUndefined(dialog) ? false : dialog), (isUndefined(argument) ? true : argument));
- return;
- }
- switch(cmd) {
- case 'bold':
- case 'italic':
- case 'underline':
- case 'strikethrough':
- wrapTags(cmd.substr(0, 1), false);
- break;
- case 'inserthorizontalrule':
- insertText('[hr]', 4, 0);
- break;
- case 'justifyleft':
- case 'justifycenter':
- case 'justifyright':
- wrapTags('align', cmd.substr(7));
- break;
- case 'fontname':
- wrapTags('font', argument);
- break;
- case 'fontsize':
- wrapTags('size', argument);
- break;
- case 'forecolor':
- wrapTags('color', argument);
- break;
- case 'hilitecolor':
- case 'backcolor':
- wrapTags('backcolor', argument);
- break;
- }
- }
- function isEmail(email) {
- return email.length > 6 && /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/.test(email);
- }
- function insertAttachTag(aid) {
- var txt = '[attach]' + aid + '[/attach]';
- if(wysiwyg) {
- insertText(txt, false);
- } else {
- insertText(txt, strlen(txt), 0);
- }
- }
- function insertAttachimgTag(aid) {
- if(wysiwyg) {
- insertText('<img src="' + $('image_' + aid).src + '" border="0" aid="attachimg_' + aid + '" alt="" />', false);
- } else {
- var txt = '[attachimg]' + aid + '[/attachimg]';
- insertText(txt, strlen(txt), 0);
- }
- }
- function insertSmiley(smilieid) {
- checkFocus();
- var src = $('smilie_' + smilieid).src;
- var code = $('smilie_' + smilieid).alt;
- if(wysiwyg && allowsmilies && (!$('smileyoff') || $('smileyoff').checked == false)) {
- insertText('<img src="' + src + '" border="0" smilieid="' + smilieid + '" alt="" />', false);
- } else {
- code += ' ';
- insertText(code, strlen(code), 0);
- }
- hideMenu();
- }
- function discuzcode(cmd, arg) {
- if(cmd != 'redo') {
- addSnapshot(getEditorContents());
- }
- checkFocus();
- if(in_array(cmd, ['sml', 'inserthorizontalrule', 'url', 'quote', 'code', 'free', 'hide', 'aud', 'vid', 'fls', 'beginning', 'attach', 'image', 'pasteword', 'index', 'postbg', 'password']) || typeof EXTRAFUNC['showEditorMenu'][cmd] != 'undefined' || cmd == 'tbl' || in_array(cmd, ['fontname', 'fontsize', 'forecolor', 'backcolor']) && !arg) {
- showEditorMenu(cmd);
- return;
- } else if(cmd.substr(0, 3) == 'cst') {
- showEditorMenu(cmd.substr(5), cmd.substr(3, 1));
- return;
- } else if(cmd == 'page') {
- if(wysiwyg) {
- str = '<br /><p>[page]</p>';
- } else {
- str = '\n\n[page]';
- }
- insertText(str, strlen(str), 0);
- } else if(cmd == 'autotypeset') {
- autoTypeset();
- return;
- } else if(!wysiwyg && cmd == 'removeformat') {
- var simplestrip = new Array('b', 'i', 'u');
- var complexstrip = new Array('font', 'color', 'backcolor', 'size');
- var str = getSel();
- if(str === false) {
- return;
- }
- for(var tag in simplestrip) {
- str = stripSimple(simplestrip[tag], str);
- }
- for(var tag in complexstrip) {
- str = stripComplex(complexstrip[tag], str);
- }
- insertText(str);
- } else if(cmd == 'undo') {
- addSnapshot(getEditorContents());
- moveCursor(-1);
- if((str = getSnapshot()) !== false) {
- if(wysiwyg) {
- editdoc.body.innerHTML = str;
- } else {
- editdoc.value = str;
- }
- }
- } else if(cmd == 'redo') {
- moveCursor(1);
- if((str = getSnapshot()) !== false) {
- if(wysiwyg) {
- editdoc.body.innerHTML = str;
- } else {
- editdoc.value = str;
- }
- }
- } else if(!wysiwyg && in_array(cmd, ['insertorderedlist', 'insertunorderedlist'])) {
- var listtype = cmd == 'insertorderedlist' ? '1' : '';
- var opentag = '[list' + (listtype ? ('=' + listtype) : '') + ']\n';
- var closetag = '[/list]';
- if(txt = getSel()) {
- var regex = new RegExp('([\r\n]+|^[\r\n]*)(?!\\[\\*\\]|\\[\\/?list)(?=[^\r\n])', 'gi');
- txt = opentag + trim(txt).replace(regex, '$1[*]') + '\n' + closetag;
- insertText(txt, strlen(txt), 0);
- } else {
- insertText(opentag + closetag, opentag.length, closetag.length);
- while(listvalue = prompt('输入一个列表项目.\r\n留空或者点击取消完成此列表.', '')) {
- if(BROWSER.opera > 8) {
- listvalue = '\n' + '[*]' + listvalue;
- insertText(listvalue, strlen(listvalue) + 1, 0);
- } else {
- listvalue = '[*]' + listvalue + '\n';
- insertText(listvalue, strlen(listvalue), 0);
- }
- }
- }
- } else if(!wysiwyg && cmd == 'unlink') {
- var sel = getSel();
- sel = stripSimple('url', sel);
- sel = stripComplex('url', sel);
- insertText(sel);
- } else if(cmd == 'floatleft' || cmd == 'floatright') {
- var arg = cmd == 'floatleft' ? 'left' : 'right';
- if(wysiwyg) {
- if(txt = getSel()) {
- argm = arg == 'left' ? 'right' : 'left';
- insertText('<br style="clear: both"><table class="float" style="float: ' + arg + '; margin-' + argm + ': 5px;"><tbody><tr><td>' + txt + '</td></tr></tbody></table>', true);
- }
- } else {
- var opentag = '[float=' + arg + ']';
- var closetag = '[/float]';
- if(txt = getSel()) {
- txt = opentag + txt + closetag;
- insertText(txt, strlen(txt), 0);
- } else {
- insertText(opentag + closetag, opentag.length, closetag.length);
- }
- }
- } else if(cmd == 'rst') {
- loadData();
- setEditorTip('数据已恢复');
- } else if(cmd == 'svd') {
- saveData();
- setEditorTip('数据已保存');
- } else if(cmd == 'chck') {
- checklength(editorform);
- } else if(cmd == 'tpr') {
- if(confirm('您确认要清除所有内容吗?')) {
- clearContent();
- }
- } else if(cmd == 'downremoteimg') {
- showDialog('<div id="remotedowninfo"><p class="mbn">正在下载远程附件,请稍等……</p><p><img src="' + STATICURL + 'image/common/uploading.gif" alt="" /></p></div>', 'notice', '', null, 1);
- var message = wysiwyg ? html2bbcode(getEditorContents()) : (!editorform.parseurloff.checked ? parseurl(editorform.message.value) : editorform.message.value);
- var oldValidate = editorform.onsubmit;
- var oldAction = editorform.action;
- editorform.onsubmit = '';
- editorform.action = 'forum.php?mod=ajax&action=downremoteimg&inajax=1&fid='+fid+'&wysiwyg='+(wysiwyg ? 1 : 0);
- editorform.target = "ajaxpostframe";
- editorform.message.value = message;
- editorform.submit();
- editorform.onsubmit = oldValidate;
- editorform.action = oldAction;
- editorform.target = "";
- } else {
- var formatcmd = cmd == 'backcolor' && !BROWSER.ie ? 'hilitecolor' : cmd;
- try {
- var ret = applyFormat(formatcmd, false, (isUndefined(arg) ? true : arg));
- } catch(e) {
- var ret = false;
- }
- }
- if(cmd != 'undo') {
- addSnapshot(getEditorContents());
- }
- if(wysiwyg) {
- setContext(cmd);
- }
- if(in_array(cmd, ['bold', 'italic', 'underline', 'strikethrough', 'fontname', 'fontsize', 'forecolor', 'backcolor', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'floatleft', 'floatright', 'removeformat', 'unlink', 'undo', 'redo'])) {
- hideMenu();
- }
- doane();
- return ret;
- }
- function setContext(cmd) {
- var cmd = !cmd ? '' : cmd;
- var contextcontrols = new Array('bold', 'italic', 'underline', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist');
- for(var i in contextcontrols) {
- var controlid = contextcontrols[i];
- var obj = $(editorid + '_' + controlid);
- if(obj != null) {
- if(cmd == 'clear') {
- obj.className = '';
- continue;
- }
- try {
- var state = editdoc.queryCommandState(contextcontrols[i]);
- } catch(e) {
- var state = false;
- }
- if(isUndefined(obj.state)) {
- obj.state = false;
- }
- if(obj.state != state) {
- obj.state = state;
- buttonContext(obj, state ? 'mouseover' : 'mouseout');
- }
- }
- }
- try {
- var fs = editdoc.queryCommandValue('fontname');
- } catch(e) {
- fs = null;
- }
- if(fs == '' && !BROWSER.ie && window.getComputedStyle) {
- fs = editdoc.body.style.fontFamily;
- } else if(fs == null) {
- fs = '';
- }
- fs = fs && cmd != 'clear' ? fs : '字体';
- if(fs != $(editorid + '_font').fontstate) {
- thingy = fs.indexOf(',') > 0 ? fs.substr(0, fs.indexOf(',')) : fs;
- $(editorid + '_font').innerHTML = thingy;
- $(editorid + '_font').fontstate = fs;
- }
- try {
- var ss = editdoc.queryCommandValue('fontsize');
- if(ss == null || ss == '' || cmd == 'clear') {
- ss = formatFontsize(editdoc.body.style.fontSize);
- } else {
- var ssu = ss.substr(-2);
- if(ssu == 'px' || ssu == 'pt') {
- ss = formatFontsize(ss);
- }
- }
- } catch(e) {
- ss = '大小';
- }
- if(ss != $(editorid + '_size').sizestate) {
- if($(editorid + '_size').sizestate == null) {
- $(editorid + '_size').sizestate = '';
- }
- $(editorid + '_size').innerHTML = ss;
- $(editorid + '_size').sizestate = ss;
- }
- }
- function buttonContext(obj, state) {
- if(state == 'mouseover') {
- obj.style.cursor = 'pointer';
- var mode = obj.state ? 'down' : 'hover';
- if(obj.mode != mode) {
- obj.mode = mode;
- obj.className = 'hover';
- }
- } else {
- var mode = obj.state ? 'selected' : 'normal';
- if(obj.mode != mode) {
- obj.mode = mode;
- obj.className = mode == 'selected' ? 'hover' : '';
- }
- }
- }
- function formatFontsize(csssize) {
- switch(csssize) {
- case '7.5pt':
- case '10px': return 1;
- case '13px':
- case '10pt': return 2;
- case '16px':
- case '12pt': return 3;
- case '18px':
- case '14pt': return 4;
- case '24px':
- case '18pt': return 5;
- case '32px':
- case '24pt': return 6;
- case '48px':
- case '36pt': return 7;
- default: return '大小';
- }
- }
- function showEditorMenu(tag, params) {
- var sel, selection;
- var str = '', strdialog = 0, stitle = '';
- var ctrlid = editorid + (params ? '_cst' + params + '_' : '_') + tag;
- var opentag = '[' + tag + ']';
- var closetag = '[/' + tag + ']';
- var menu = $(ctrlid + '_menu');
- var pos = [0, 0];
- var menuwidth = 270;
- var menupos = '43!';
- var menutype = 'menu';
- try {
- sel = wysiwyg ? (editdoc.selection.createRange() ? editdoc.selection.createRange() : editdoc.getSelection().getRangeAt(0)) : document.selection.createRange();
- } catch(e) {}
- selection = sel ? (wysiwyg ? sel.htmlText : sel.text) : getSel();
- if(BROWSER.rv) {
- selection = editdoc.getSelection();
- sel = selection.getRangeAt(0);
- selection = readNodes(sel.cloneContents(), false);
- }
- if(menu) {
- if($(ctrlid).getAttribute('menupos') !== null) {
- menupos = $(ctrlid).getAttribute('menupos');
- }
- if($(ctrlid).getAttribute('menuwidth') !== null) {
- menu.style.width = $(ctrlid).getAttribute('menuwidth') + 'px';
- }
- if(menupos == '00') {
- menu.className = 'fwinmask';
- if($(editorid + '_' + tag + '_menu').style.visibility == 'hidden') {
- $(editorid + '_' + tag + '_menu').style.visibility = 'visible';
- } else {
- showMenu({'ctrlid':ctrlid,'mtype':'win','evt':'click','pos':menupos,'timeout':250,'duration':3,'drag':ctrlid + '_ctrl'});
- }
- } else {
- showMenu({'ctrlid':ctrlid,'evt':'click','pos':menupos,'timeout':250,'duration':in_array(tag, ['fontname', 'fontsize', 'sml']) ? 2 : 3,'drag':1});
- }
- } else {
- switch(tag) {
- case 'url':
- str = '请输入链接地址:<br /><input type="text" id="' + ctrlid + '_param_1" style="width: 98%" value="" class="px" />'+
- (selection ? '' : '<br />请输入链接文字:<br /><input type="text" id="' + ctrlid + '_param_2" style="width: 98%" value="" class="px" />');
- break;
- case 'forecolor':
- showColorBox(ctrlid, 1);
- return;
- case 'backcolor':
- showColorBox(ctrlid, 1, '', 1);
- return;
- case 'inserthorizontalrule':
- showHrBox(ctrlid);
- break;
- case 'postbg':
- showHrBox(ctrlid, 'postbg');
- break;
- case 'password':
- str = '<p class="pbn">请输入帖子密码: <input type="text" id="' + ctrlid + '_param_1" size="10" value="" class="px" /></p>';
- break;
- case 'code':
- if(wysiwyg) {
- opentag = '<div class="blockcode"><blockquote>';
- closetag = '</blockquote></div><br />';
- }
- case 'quote':
- if(wysiwyg && tag == 'quote') {
- opentag = '<div class="quote"><blockquote>';
- closetag = '</blockquote></div><br />';
- }
- case 'hide':
- case 'free':
- if(selection) {
- return insertText((opentag + selection + closetag), strlen(opentag), strlen(closetag), true, sel);
- }
- var lang = {'quote' : '请输入要插入的引用', 'code' : '请输入要插入的代码', 'hide' : '请输入要隐藏的信息内容', 'free' : '如果您设置了帖子售价,请输入购买前免费可见的信息内容'};
- str += lang[tag] + ':<br /><textarea id="' + ctrlid + '_param_1" style="width: 98%" cols="50" rows="5" class="txtarea"></textarea>' +
- (tag == 'hide' ? '<br /><label><input type="radio" name="' + ctrlid + '_radio" id="' + ctrlid + '_radio_1" class="pc" checked="checked" />只有当浏览者回复本帖时才显示</label><br /><label><input type="radio" name="' + ctrlid + '_radio" id="' + ctrlid + '_radio_2" class="pc" />只有当浏览者积分高于</label> <input type="text" size="3" id="' + ctrlid + '_param_2" class="px pxs" /> 时才显示<br /><br /><label>有效天数:</label> <input type="text" size="3" id="' + ctrlid + '_param_3" class="px pxs" /> <br />距离发帖日期大于这个天数时标签自动失效' : '');
- break;
- case 'tbl':
- str = '<p class="pbn">表格行数: <input type="text" id="' + ctrlid + '_param_1" size="2" value="2" class="px" /> 表格列数: <input type="text" id="' + ctrlid + '_param_2" size="2" value="2" class="px" /></p><p class="pbn">表格宽度: <input type="text" id="' + ctrlid + '_param_3" size="2" value="" class="px" /> 背景颜色: <input type="text" id="' + ctrlid + '_param_4" size="2" class="px" onclick="showColorBox(this.id, 2)" /></p><p class="xg2 pbn" style="cursor:pointer" onclick="showDialog($(\'tbltips_msg\').innerHTML, \'notice\', \'小提示\', null, 0)"><img id="tbltips" title="小提示" class="vm" src="' + IMGDIR + '/info_small.gif"> 快速书写表格提示</p>';
- str += '<div id="tbltips_msg" style="display: none">“[tr=颜色]” 定义行背景<br />“[td=宽度]” 定义列宽<br />“[td=列跨度,行跨度,宽度]” 定义行列跨度<br /><br />快速书写表格范例:<div class=\'xs0\' style=\'margin:0 5px\'>[table]<br />Name:|Discuz!<br />Version:|X1<br />[/table]</div>用“|”分隔每一列,表格中如有“|”用“\\|”代替,换行用“\\n”代替。</div>';
- break;
- case 'aud':
- str = '<p class="pbn">请输入音乐文件地址:</p><p class="pbn"><input type="text" id="' + ctrlid + '_param_1" class="px" value="" style="width: 220px;" /></p><p class="xg2 pbn">支持 wma mp3 ra rm 等音乐格式<br />示例: http://server/audio.wma</p>';
- break;
- case 'vid':
- str = '<p class="pbn">请输入视频地址:</p><p class="pbn"><input type="text" value="" id="' + ctrlid + '_param_1" style="width: 220px;" class="px" /></p><p class="pbn">宽: <input id="' + ctrlid + '_param_2" size="5" value="500" class="px" /> 高: <input id="' + ctrlid + '_param_3" size="5" value="375" class="px" /></p><p class="xg2 pbn">支持优酷、土豆、56、酷6等视频站的视频网址<br />支持 wmv avi rmvb mov swf flv 等视频格式<br />示例: http://server/movie.wmv</p>';
- break;
- case 'fls':
- str = '<p class="pbn">请输入 Flash 文件地址:</p><p class="pbn"><input type="text" id="' + ctrlid + '_param_1" class="px" value="" style="width: 220px;" /></p><p class="pbn">宽: <input id="' + ctrlid + '_param_2" size="5" value="" class="px" /> 高: <input id="' + ctrlid + '_param_3" size="5" value="" class="px" /></p><p class="xg2 pbn">支持 swf flv 等 Flash 网址<br />示例: http://server/flash.swf</p>';
- break;
- case 'beginning':
- str = '<p class="pbn">请输入开头动画 Flash 或 图片 地址:</p><p class="pbn"><input type="text" id="' + ctrlid + '_param_1" class="px" value="" style="width: 220px;" /></p>';
- str += '<p class="pbn">点击链接地址:</p><p class="pbn"><input type="text" id="' + ctrlid + '_param_2" class="px" value="" style="width: 220px;" /></p>';
- str += '<p class="pbn">宽: <input id="' + ctrlid + '_param_3" size="5" value="" class="px" /> 高: <input id="' + ctrlid + '_param_4" size="5" value="" class="px" /></p>';
- str += '<p class="pbn">停留秒数: <input id="' + ctrlid + '_param_8" size="5" value="" class="px" /></p>';
- str += '<p class="pbn">载入、消失的效果: </p><p class="pbn"><input id="' + ctrlid + '_param_7" type="radio" name="effect" checked />无 <input id="' + ctrlid + '_param_5" type="radio" name="effect" />淡入淡出 <input id="' + ctrlid + '_param_6" type="radio" name="effect" />展开闭合</p>';
- str += '<p class="xg2 pbn">支持 swf flv jpg gif png 网址<br />宽高范围: 宽400~1024 高300~640<br />示例: http://server/flash.swf</p>';
- break;
- case 'pasteword':
- stitle = '从 Word 粘贴内容';
- str = '<p class="px" style="height:300px"><iframe id="' + ctrlid + '_param_1" frameborder="0" style="width:100%;height:100%" onload="this.contentWindow.document.body.style.width=\'550px\';this.contentWindow.document.body.contentEditable=true;this.contentWindow.document.body.focus();this.onload=null"></iframe></p><p class="xg2 pbn">请通过快捷键(Ctrl+V)把 Word 文件中的内容粘贴到上方</p>';
- menuwidth = 600;
- menupos = '00';
- menutype = 'win';
- break;
- case 'index':
- stitle = '创建帖子目录';
- str = '<p class="pbn">[index]<br />\n\
- [#<span class="xi1">页码</span>]<span class="xi1">标题</span> <span class="xg1">跳转到指定的页</span><br />\n\
- <span class="xi1">*</span>[#<span class="xi1">tid,pid</span>]<span class="xi1">标题</span> <span class="xg1">跳转到指定的帖子</span><br />\n\
- [/index]<br />\n\
- <br />\n\
- <span class="xi1">页码</span> <span class="xg1">用 [page] 对当前帖子分页后的页码</span><br />\n\
- <span class="xi1">tid,pid</span> <span class="xg1">帖子的 TID 和 PID</span><br />\n\
- <span class="xi1">*</span> <span class="xg1">添加行首缩进</span></p>';
- break;
- default:
- for(i in EXTRAFUNC['showEditorMenu']) {
- EXTRASELECTION = selection;
- EXTRASEL = sel;
- try {
- eval('str = ' + EXTRAFUNC['showEditorMenu'][i] + '(\'' + tag + '\', 0)');
- } catch(e) {}
- }
- if(!str) {
- str = '';
- var haveSel = selection == null || selection == false || in_array(trim(selection), ['', 'null', 'undefined', 'false']) ? 0 : 1;
- if(params == 1 && haveSel) {
- return insertText((opentag + selection + closetag), strlen(opentag), strlen(closetag), true, sel);
- }
- var promptlang = custombbcodes[tag]['prompt'].split("\t");
- for(var i = 1; i <= params; i++) {
- if(i != params || !haveSel) {
- str += (promptlang[i - 1] ? promptlang[i - 1] : '请输入第 ' + i + ' 个参数:') + '<br /><input type="text" id="' + ctrlid + '_param_' + i + '" style="width: 98%" value="" class="px" />' + (i < params ? '<br />' : '');
- }
- }
- }
- break;
- }
- var menu = document.createElement('div');
- menu.id = ctrlid + '_menu';
- menu.style.display = 'none';
- menu.className = 'p_pof upf';
- menu.style.width = menuwidth + 'px';
- if(menupos == '00') {
- menu.className = 'fwinmask';
- s = '<table width="100%" cellpadding="0" cellspacing="0" class="fwin"><tr><td class="t_l"></td><td class="t_c"></td><td class="t_r"></td></tr><tr><td class="m_l"> </td><td class="m_c">'
- + '<h3 class="flb"><em>' + stitle + '</em><span><a onclick="hideMenu(\'\', \'win\');return false;" class="flbc" href="javascript:;">关闭</a></span></h3><div class="c">' + str + '</div>'
- + '<p class="o pns"><button type="submit" id="' + ctrlid + '_submit" class="pn pnc"><strong>提交</strong></button></p>'
- + '</td><td class="m_r"></td></tr><tr><td class="b_l"></td><td class="b_c"></td><td class="b_r"></td></tr></table>';
- } else {
- s = '<div class="p_opt cl"><span class="y" style="margin:-10px -10px 0 0"><a onclick="hideMenu();return false;" class="flbc" href="javascript:;">关闭</a></span><div>' + str + '</div><div class="pns mtn"><button type="submit" id="' + ctrlid + '_submit" class="pn pnc"><strong>提交</strong></button></div></div>';
- }
- menu.innerHTML = s;
- $(editorid + '_editortoolbar').appendChild(menu);
- showMenu({'ctrlid':ctrlid,'mtype':menutype,'evt':'click','duration':3,'cache':0,'drag':1,'pos':menupos});
- }
- try {
- if($(ctrlid + '_param_1')) {
- $(ctrlid + '_param_1').focus();
- }
- } catch(e) {}
- var objs = menu.getElementsByTagName('*');
- for(var i = 0; i < objs.length; i++) {
- _attachEvent(objs[i], 'keydown', function(e) {
- e = e ? e : event;
- obj = BROWSER.ie ? event.srcElement : e.target;
- if((obj.type == 'text' && e.keyCode == 13) || (obj.type == 'textarea' && e.ctrlKey && e.keyCode == 13)) {
- if($(ctrlid + '_submit') && tag != 'image') $(ctrlid + '_submit').click();
- doane(e);
- } else if(e.keyCode == 27) {
- hideMenu();
- doane(e);
- }
- });
- }
- if($(ctrlid + '_submit')) $(ctrlid + '_submit').onclick = function() {
- checkFocus();
- switch(tag) {
- case 'url':
- var href = $(ctrlid + '_param_1').value;
- href = (isEmail(href) ? 'mailto:' : '') + href;
- if(href != '') {
- var v = selection ? selection : ($(ctrlid + '_param_2').value ? $(ctrlid + '_param_2').value : href);
- str = wysiwyg ? ('<a href="' + href + '">' + v + '</a>') : '[url=' + squarestrip(href) + ']' + v + '[/url]';
- if(wysiwyg) {
- insertText(str, str.length - v.length, 0, (selection ? true : false), sel);
- } else {
- insertText(str, str.length - v.length - 6, 6, (selection ? true : false), sel);
- }
- }
- break;
- case 'code':
- if(wysiwyg) {
- opentag = '<div class="blockcode"><blockquote>';
- closetag = '</blockquote></div><br />';
- if(!BROWSER.ie) {
- selection = selection ? selection : '\n';
- }
- }
- case 'quote':
- if(wysiwyg && tag == 'quote') {
- opentag = '<div class="quote"><blockquote>';
- closetag = '</blockquote></div><br />';
- if(!BROWSER.ie) {
- selection = selection ? selection : '\n';
- }
- }
- case 'hide':
- case 'free':
- if(tag == 'hide') {
- var mincredits = parseInt($(ctrlid + '_param_2').value);
- var expire = parseInt($(ctrlid + '_param_3').value);
- if(expire > 0 || (mincredits > 0 && $(ctrlid + '_radio_2').checked)) {
- opentag = '[hide=';
- if(expire > 0) {
- opentag += 'd'+expire;
- }
- if(mincredits > 0 && $(ctrlid + '_radio_2').checked) {
- opentag += (expire > 0 ? ',' : '')+mincredits;
- }
- opentag += ']';
- } else {
- opentag = '[hide]';
- }
- }
- str = $(ctrlid + '_param_1') && $(ctrlid + '_param_1').value ? $(ctrlid + '_param_1').value : (selection ? selection : '');
- if(wysiwyg) {
- str = preg_replace(['<', '>'], ['<', '>'], str);
- str = str.replace(/\r?\n/g, '<br />');
- }
- str = opentag + str + closetag;
- insertText(str, strlen(opentag), strlen(closetag), false, sel);
- break;
- case 'password':
- str = $(ctrlid + '_param_1') && $(ctrlid + '_param_1').value ? $(ctrlid + '_param_1').value : (selection ? selection : '');
- str = opentag + str + closetag;
- insertText(str, strlen(opentag), strlen(closetag), false, sel);
- break;
- case 'tbl':
- var rows = $(ctrlid + '_param_1').value;
- var columns = $(ctrlid + '_param_2').value;
- var width = $(ctrlid + '_param_3').value;
- var bgcolor = $(ctrlid + '_param_4').value;
- rows = /^[-\+]?\d+$/.test(rows) && rows > 0 && rows <= 30 ? rows : 2;
- columns = /^[-\+]?\d+$/.test(columns) && columns > 0 && columns <= 30 ? columns : 2;
- width = width.substr(width.length - 1, width.length) == '%' ? (width.substr(0, width.length - 1) <= 98 ? width : '98%') : (width <= 560 ? width : '98%');
- bgcolor = /[\(\)%,#\w]+/.test(bgcolor) ? bgcolor : '';
- if(wysiwyg) {
- str = '<table cellspacing="0" cellpadding="0" style="width:' + (width ? width : '50%') + '" class="t_table"' + (bgcolor ? ' bgcolor="' + bgcolor + '"' : '') + '>';
- for (var row = 0; row < rows; row++) {
- str += '<tr>\n';
- for (col = 0; col < columns; col++) {
- str += '<td> </td>\n';
- }
- str += '</tr>\n';
- }
- str += '</table>\n';
- } else {
- str = '[table=' + (width ? width : '50%') + (bgcolor ? ',' + bgcolor : '') + ']\n';
- for (var row = 0; row < rows; row++) {
- str += '[tr]';
- for (col = 0; col < columns; col++) {
- str += '[td] [/td]';
- }
- str += '[/tr]\n';
- }
- str += '[/table]\n';
- }
- insertText(str, str.length, 0, false, sel);
- break;
- case 'aud':
- insertText('[audio]' + $(ctrlid + '_param_1').value + '[/audio]', 7, 8, false, sel);
- break;
- case 'fls':
- if($(ctrlid + '_param_2').value && $(ctrlid + '_param_3').value) {
- insertText('[flash=' + parseInt($(ctrlid + '_param_2').value) + ',' + parseInt($(ctrlid + '_param_3').value) + ']' + squarestrip($(ctrlid + '_param_1').value) + '[/flash]', 7, 8, false, sel);
- } else {
- insertText('[flash]' + squarestrip($(ctrlid + '_param_1').value) + '[/flash]', 7, 8, false, sel);
- }
- break;
- case 'beginning':
- if($(ctrlid + '_param_1').value) {
- insertText('[begin=' + squarestrip($(ctrlid + '_param_2').value) + ',' +
- ($(ctrlid + '_param_3').value ? parseInt($(ctrlid + '_param_3').value) : 0) + ',' +
- ($(ctrlid + '_param_4').value ? parseInt($(ctrlid + '_param_4').value) : 0) + ',' +
- ($(ctrlid + '_param_5').checked ? 2 : ($(ctrlid + '_param_6').checked ? 1 : 0)) + ',' +
- ($(ctrlid + '_param_8').value ? parseInt($(ctrlid + '_param_8').value) : 0) + ']' +
- squarestrip($(ctrlid + '_param_1').value) + '[/begin]', 7, 8, false, sel);
- }
- break;
- case 'vid':
- var mediaUrl = $(ctrlid + '_param_1').value;
- var auto = '';
- var posque = mediaUrl.lastIndexOf('?');
- posque = posque === -1 ? mb_strlen(mediaUrl) : posque;
- var ext = mediaUrl.lastIndexOf('.') === -1 ? '' : mediaUrl.substring(mediaUrl.lastIndexOf('.') + 1, posque).toLowerCase();
- ext = in_array(ext, ['mp3', 'wma', 'ra', 'rm', 'ram', 'mid', 'asx', 'wmv', 'avi', 'mpg', 'mpeg', 'rmvb', 'asf', 'mov', 'flv', 'swf']) ? ext : 'x';
- if(ext == 'x') {
- if(/^mms:\/\//.test(mediaUrl)) {
- ext = 'mms';
- } else if(/^(rtsp|pnm):\/\//.test(mediaUrl)) {
- ext = 'rtsp';
- }
- }
- var str = '[media=' + ext + ',' + $(ctrlid + '_param_2').value + ',' + $(ctrlid + '_param_3').value + ']' + squarestrip(mediaUrl) + '[/media]';
- insertText(str, str.length, 0, false, sel);
- break;
- case 'image':
- var width = parseInt($(ctrlid + '_param_2').value);
- var height = parseInt($(ctrlid + '_param_3').value);
- var src = $(ctrlid + '_param_1').value;
- var style = '';
- if(wysiwyg) {
- style += width ? ' width=' + width : '';
- style += height ? ' _height=' + height : '';
- var str = '<img src=' + src + style + ' border=0 />';
- insertText(str, str.length, 0, false, sel);
- } else {
- style += width || height ? '=' + width + ',' + height : '';
- insertText('[img' + style + ']' + squarestrip(src) + '[/img]', 0, 0, false, sel);
- }
- hideMenu('', 'win');
- $(ctrlid + '_param_1').value = '';
- break;
- case 'pasteword':
- pasteWord($(ctrlid + '_param_1').contentWindow.document.body.innerHTML);
- hideMenu('', 'win');
- break;
- case 'index':
- if(wysiwyg) {
- str = '[index]<br />[#]<br />[#]<br />[/index]';
- } else {
- str = '[index]\n[#]\n[#]\n[/index]';
- }
- insertText(str, str.length, 0, false, sel);
- hideMenu('', 'win');
- break;
- default:
- for(i in EXTRAFUNC['showEditorMenu']) {
- EXTRASELECTION= selection;
- try {
- eval('str = ' + EXTRAFUNC['showEditorMenu'][i] + '(\'' + tag + '\', 1)');
- } catch(e) {}
- }
- if(!str) {
- str = '';
- var first = $(ctrlid + '_param_1').value;
- if($(ctrlid + '_param_2')) var second = $(ctrlid + '_param_2').value;
- if($(ctrlid + '_param_3')) var third = $(ctrlid + '_param_3').value;
- if((params == 1 && first) || (params == 2 && first && (haveSel || second)) || (params == 3 && first && second && (haveSel || third))) {
- if(params == 1) {
- str = first;
- } else if(params == 2) {
- str = haveSel ? selection : second;
- opentag = '[' + tag + '=' + first + ']';
- } else {
- str = haveSel ? selection : third;
- opentag = '[' + tag + '=' + first + ',' + second + ']';
- }
- insertText((opentag + str + closetag), strlen(opentag), strlen(closetag), true, sel);
- }
- }
- break;
- }
- hideMenu();
- };
- }
- function autoTypeset() {
- var sel;
- if(BROWSER.ie) {
- sel = wysiwyg ? editdoc.selection.createRange() : document.selection.createRange();
- }
- var selection = sel ? (wysiwyg ? sel.htmlText.replace(/<\/?p>/ig, '<br />') : sel.text) : getSel();
- selection = trim(selection);
- selection = wysiwyg ? selection.replace(/<br( \/)?>(<br( \/)?>)+/ig, '</p>\n<p style="line-height: 30px; text-indent: 2em;">') : selection.replace(/\n\n+/g, '[/p]\n[p=30, 2, left]');
- opentag = wysiwyg ? '<p style="line-height: 30px; text-indent: 2em;">' : '[p=30, 2, left]';
- var s = opentag + selection + (wysiwyg ? '</p>' : '[/p]');
- insertText(s, strlen(opentag), 4, false, sel);
- hideMenu();
- }
- function getSel() {
- if(wysiwyg) {
- try {
- selection = editwin.getSelection();
- checkFocus();
- range = selection ? selection.getRangeAt(0) : editdoc.createRange();
- return readNodes(range.cloneContents(), false);
- } catch(e) {
- try {
- var range = editdoc.selection.createRange();
- if(range.htmlText && range.text) {
- return range.htmlText;
- } else {
- var htmltext = '';
- for(var i = 0; i < range.length; i++) {
- htmltext += range.item(i).outerHTML;
- }
- return htmltext;
- }
- } catch(e) {
- return '';
- }
- }
- } else {
- if(!isUndefined(editdoc.selectionStart)) {
- return editdoc.value.substr(editdoc.selectionStart, editdoc.selectionEnd - editdoc.selectionStart);
- } else if(document.selection && document.selection.createRange) {
- return document.selection.createRange().text;
- } else if(window.getSelection) {
- return window.getSelection() + '';
- } else {
- return false;
- }
- }
- }
- function insertText(text, movestart, moveend, select, sel) {
- checkFocus();
- if(wysiwyg) {
- try {
- if(!editdoc.execCommand('insertHTML', false, text)) {
- throw 'insertHTML Err';
- }
- } catch(e) {
- try {
- if(!isUndefined(editdoc.selection) && editdoc.selection.type != 'Text' && editdoc.selection.type != 'None') {
- movestart = false;
- editdoc.selection.clear();
- }
- range = isUndefined(sel) ? editdoc.selection.createRange() : sel;
- range.pasteHTML(text);
- if(text.indexOf('\n') == -1) {
- if(!isUndefined(movestart)) {
- range.moveStart('character', -strlen(text) + movestart);
- range.moveEnd('character', -moveend);
- } else if(movestart != false) {
- range.moveStart('character', -strlen(text));
- }
- if(!isUndefined(select) && select) {
- range.select();
- }
- }
- } catch(e) {
- if(!sel) {
- var sel = editdoc.getSelection();
- var range = sel.getRangeAt(0);
- } else {
- var range = sel;
- }
- if(range && range.insertNode) {
- range.deleteContents();
- }
- var frag = range.createContextualFragment(text);
- range.insertNode(frag);
- }
- }
- } else {
- if(!isUndefined(editdoc.selectionStart)) {
- if(editdoc._selectionStart) {
- editdoc.selectionStart = editdoc._selectionStart;
- editdoc.selectionEnd = editdoc._selectionEnd;
- editdoc._selectionStart = 0;
- editdoc._selectionEnd = 0;
- }
- var opn = editdoc.selectionStart + 0;
- editdoc.value = editdoc.value.substr(0, editdoc.selectionStart) + text + editdoc.value.substr(editdoc.selectionEnd);
- if(!isUndefined(movestart)) {
- editdoc.selectionStart = opn + movestart;
- editdoc.selectionEnd = opn + strlen(text) - moveend;
- } else if(movestart !== false) {
- editdoc.selectionStart = opn;
- editdoc.selectionEnd = opn + strlen(text);
- }
- } else if(document.selection && document.selection.createRange) {
- if(isUndefined(sel)) {
- sel = document.selection.createRange();
- }
- if(editbox.sel) {
- sel = editbox.sel;
- editbox.sel = null;
- }
- sel.text = text.replace(/\r?\n/g, '\r\n');
- if(!isUndefined(movestart)) {
- sel.moveStart('character', -strlen(text) +movestart);
- sel.moveEnd('character', -moveend);
- } else if(movestart !== false) {
- sel.moveStart('character', -strlen(text));
- }
- sel.select();
- } else {
- editdoc.value += text;
- }
- }
- checkFocus();
- }
- function stripSimple(tag, str, iterations) {
- var opentag = '[' + tag + ']';
- var closetag = '[/' + tag + ']';
- if(isUndefined(iterations)) {
- iterations = -1;
- }
- while((startindex = stripos(str, opentag)) !== false && iterations != 0) {
- iterations --;
- if((stopindex = stripos(str, closetag)) !== false) {
- var text = str.substr(startindex + opentag.length, stopindex - startindex - opentag.length);
- str = str.substr(0, startindex) + text + str.substr(stopindex + closetag.length);
- } else {
- break;
- }
- }
- return str;
- }
- function readNodes(root, toptag) {
- var html = "";
- var moz_check = /_moz/i;
- switch(root.nodeType) {
- case Node.ELEMENT_NODE:
- case Node.DOCUMENT_FRAGMENT_NODE:
- var closed;
- if(toptag) {
- closed = !root.hasChildNodes();
- html = '<' + root.tagName.toLowerCase();
- var attr = root.attributes;
- for(var i = 0; i < attr.length; ++i) {
- var a = attr.item(i);
- if(!a.specified || a.name.match(moz_check) || a.value.match(moz_check)) {
- continue;
- }
- html += " " + a.name.toLowerCase() + '="' + a.value + '"';
- }
- html += closed ? " />" : ">";
- }
- for(var i = root.firstChild; i; i = i.nextSibling) {
- html += readNodes(i, true);
- }
- if(toptag && !closed) {
- html += "</" + root.tagName.toLowerCase() + ">";
- }
- break;
- case Node.TEXT_NODE:
- html = htmlspecialchars(root.data);
- break;
- }
- return html;
- }
- function stripComplex(tag, str, iterations) {
- var opentag = '[' + tag + '=';
- var closetag = '[/' + tag + ']';
- if(isUndefined(iterations)) {
- iterations = -1;
- }
- while((startindex = stripos(str, opentag)) !== false && iterations != 0) {
- iterations --;
- if((stopindex = stripos(str, closetag)) !== false) {
- var openend = stripos(str, ']', startindex);
- if(openend !== false && openend > startindex && openend < stopindex) {
- var text = str.substr(openend + 1, stopindex - openend - 1);
- str = str.substr(0, startindex) + text + str.substr(stopindex + closetag.length);
- } else {
- break;
- }
- } else {
- break;
- }
- }
- return str;
- }
- function stripos(haystack, needle, offset) {
- if(isUndefined(offset)) {
- offset = 0;
- }
- var index = haystack.toLowerCase().indexOf(needle.toLowerCase(), offset);
- return (index == -1 ? false : index);
- }
- function switchEditor(mode) {
- if(mode == wysiwyg || !allowswitcheditor) {
- return;
- }
- if(!mode) {
- var controlbar = $(editorid + '_controls');
- var controls = [];
- var buttons = controlbar.getElementsByTagName('a');
- var buttonslength = buttons.length;
- for(var i = 0; i < buttonslength; i++) {
- if(buttons[i].id) {
- controls[controls.length] = buttons[i].id;
- }
- }
- var controlslength = controls.length;
- for(var i = 0; i < controlslength; i++) {
- var control = $(controls[i]);
- if(control.id.indexOf(editorid + '_') != -1) {
- control.state = false;
- control.mode = 'normal';
- } else if(control.id.indexOf(editorid + '_popup_') != -1) {
- control.state = false;
- }
- }
- setContext('clear');
- }
- cursor = -1;
- stack = [];
- var parsedtext = getEditorContents();
- parsedtext = mode ? bbcode2html(parsedtext) : html2bbcode(parsedtext);
- wysiwyg = mode;
- $(editorid + '_mode').value = mode;
- newEditor(mode, parsedtext);
- setEditorStyle();
- editwin.focus();
- setCaretAtEnd();
- }
- function setCaretAtEnd() {
- if(wysiwyg) {
- editdoc.body.innerHTML += '';
- } else {
- editdoc.value += '';
- }
- }
- function moveCursor(increment) {
- var test = cursor + increment;
- if(test >= 0 && stack[test] != null && !isUndefined(stack[test])) {
- cursor += increment;
- }
- }
- function addSnapshot(str) {
- if(stack[cursor] == str) {
- return;
- } else {
- cursor++;
- stack[cursor] = str;
- if(!isUndefined(stack[cursor + 1])) {
- stack[cursor + 1] = null;
- }
- }
- }
- function getSnapshot() {
- if(!isUndefined(stack[cursor]) && stack[cursor] != null) {
- return stack[cursor];
- } else {
- return false;
- }
- }
- function squarestrip(str) {
- str = str.replace('[', '%5B');
- str = str.replace(']', '%5D');
- return str;
- }
- function loadimgsize(imgurl, editor, p) {
- var editor = !editor ? editorid : editor;
- var s = new Object();
- var p = !p ? '_image' : p;
- s.img = new Image();
- s.img.src = imgurl;
- s.loadCheck = function () {
- if(s.img.complete) {
- $(editor + p + '_param_2').value = s.img.width ? s.img.width : '';
- $(editor + p + '_param_3').value = s.img.height ? s.img.height : '';
- } else {
- setTimeout(function () {s.loadCheck();}, 100);
- }
- };
- s.loadCheck();
- }
- function showHrBox(ctrlid, boxtype) {
- if(typeof postimg_type == 'undefined') {
- var scriptNode = document.createElement("script");
- scriptNode.type = "text/javascript";
- scriptNode.charset = charset ? charset : (BROWSER.firefox ? document.characterSet : document.charset);
- scriptNode.src = 'data/cache/common_postimg.js?' + VERHASH;
- $('append_parent').appendChild(scriptNode);
- if(BROWSER.ie) {
- scriptNode.onreadystatechange = function() {
- _initHrBox(ctrlid, boxtype);
- };
- } else {
- scriptNode.onload = function() {
- _initHrBox(ctrlid, boxtype);
- };
- }
- } else {
- _initHrBox(ctrlid, boxtype);
- }
- }
- function _initHrBox(ctrlid, boxtype) {
- if(!$(ctrlid + '_menu')) {
- var menu = document.createElement('div');
- menu.id = ctrlid + '_menu';
- menu.unselectable = true;
- menu.style.display = 'none';
- if(boxtype == 'postbg') {
- menu.className = 'p_pop postbgbox';
- var imglist = postimg_type['postbg'];
- var str = '';
- for(var i = 0; i < imglist.length; i++) {
- str += '<input type="button" style="background-image: url(\''+ STATICURL+'image/postbg/'+imglist[i]+ '\');"' + ' onclick="'
- + 'insertPostBackground(\''+imglist[i]+'\');'
- + '" />' ;
- }
- } else {
- menu.className = 'p_pop hrbox';
- var hrimglist = postimg_type['hrline'];
- var str = '';
- for(var i = 0; i < hrimglist.length; i++) {
- inserturl = (hrimglist[i] != '0.gif') ? "'"+STATICURL+'image/hrline/'+hrimglist[i]+"'" : 'false';
- str += '<input type="button" style="background-image: url(\'' + STATICURL+'image/hrline/'+hrimglist[i]+ '\');"' + ' onclick="'
- + 'insertHrImage('+inserturl+');'
- + '" />' ;
- }
- }
- menu.innerHTML = str;
- $('append_parent').appendChild(menu);
- }
- }
- function insertHrImage(url) {
- checkFocus();
- if(wysiwyg) {
- if(url !== false) {
- insertText('<br><img src="' + url + '" border="0" alt="" /><br><br>', false);
- } else {
- insertText('<hr class="l">', 14);
- }
- } else {
- if(url !== false) {
- code = '\n[img]'+url+'[/img]\n';
- } else {
- code = '[hr]';
- }
- insertText(code, strlen(code), 0);
- }
- hideMenu();
- }
- function insertPostBackground(img) {
- checkFocus();
- if(img != '0.gif') {
- code = '[postbg]'+img+'[/postbg]';
- if(wysiwyg) {
- postbgElement = !BROWSER.ie ? editdoc.getElementsByName('editorpostbg') : editdoc.getElementsByTagName('style');
- for(var i = 0; i < postbgElement.length; i++) {
- postbgElement[i].parentNode.removeChild(postbgElement[i]);
- }
- editdoc.body.innerHTML += '<style type="text/css" name="editorpostbg">body{background-image:url("'+STATICURL+'image/postbg/'+img+'");}</style>';
- } else {
- editdoc.value = editdoc.value.replace(/\[postbg\]\s*([^\[\<\r\n;'\"\?\(\)]+?)\s*\[\/postbg\]/ig, '');
- editdoc.value = editdoc.value+code;
- }
- } else {
- if(wysiwyg) {
- postbgElement = !BROWSER.ie ? editdoc.getElementsByName('editorpostbg') : editdoc.getElementsByTagName('style');
- for(var i = 0; i < postbgElement.length; i++) {
- postbgElement[i].parentNode.removeChild(postbgElement[i]);
- }
- } else {
- editdoc.value = editdoc.value.replace(/\[postbg\]\s*([^\[\<\r\n;'\"\?\(\)]+?)\s*\[\/postbg\]/ig, '');
- }
- }
- hideMenu();
- }
- if(typeof jsloaded == 'function') {
- jsloaded('editor');
- }
|