diff -r de56132c008d -r bdac73ed481e includes/clientside/static/editor.js --- a/includes/clientside/static/editor.js Sun Mar 28 21:49:26 2010 -0400 +++ b/includes/clientside/static/editor.js Sun Mar 28 23:10:46 2010 -0400 @@ -9,1167 +9,1167 @@ window.ajaxEditor = function(revid) { - if ( KILL_SWITCH ) - return true; - if ( editor_open ) - return true; - load_component(['l10n', 'template-compiler', 'messagebox', 'fadefilter', 'flyin', 'toolbar']); - selectButtonMinor('edit'); - selectButtonMajor('article'); - setAjaxLoading(); - - var rev_id_uri = ( revid ) ? '&revid=' + revid : ''; - ajaxGet(stdAjaxPrefix + '&_mode=getsource' + rev_id_uri, function(ajax) - { - if ( ajax.readyState == 4 && ajax.status == 200 ) - { - unsetAjaxLoading(); - - var response = String(ajax.responseText + ''); - if ( !check_json_response(response) ) - { - handle_invalid_json(response); - return false; - } - - response = parseJSON(response); - if ( response.mode == 'error' ) - { - unselectAllButtonsMinor(); - new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_server'), response.error); - return false; - } - - if ( !response.auth_view_source ) - { - unselectAllButtonsMinor(); - new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_access_denied_title'), $lang.get('editor_err_access_denied_body')); - return false; - } - - // do we need to enter a captcha before saving the page? - var captcha_hash = ( response.require_captcha ) ? response.captcha_id : false; - - ajaxBuildEditor((!response.auth_edit), response.time, response.allow_wysiwyg, captcha_hash, response.revid, response.undo_info, response); - } - }); + if ( KILL_SWITCH ) + return true; + if ( editor_open ) + return true; + load_component(['l10n', 'template-compiler', 'messagebox', 'fadefilter', 'flyin', 'toolbar']); + selectButtonMinor('edit'); + selectButtonMajor('article'); + setAjaxLoading(); + + var rev_id_uri = ( revid ) ? '&revid=' + revid : ''; + ajaxGet(stdAjaxPrefix + '&_mode=getsource' + rev_id_uri, function(ajax) + { + if ( ajax.readyState == 4 && ajax.status == 200 ) + { + unsetAjaxLoading(); + + var response = String(ajax.responseText + ''); + if ( !check_json_response(response) ) + { + handle_invalid_json(response); + return false; + } + + response = parseJSON(response); + if ( response.mode == 'error' ) + { + unselectAllButtonsMinor(); + new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_server'), response.error); + return false; + } + + if ( !response.auth_view_source ) + { + unselectAllButtonsMinor(); + new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_access_denied_title'), $lang.get('editor_err_access_denied_body')); + return false; + } + + // do we need to enter a captcha before saving the page? + var captcha_hash = ( response.require_captcha ) ? response.captcha_id : false; + + ajaxBuildEditor((!response.auth_edit), response.time, response.allow_wysiwyg, captcha_hash, response.revid, response.undo_info, response); + } + }); } window.ajaxBuildEditor = function(readonly, timestamp, allow_wysiwyg, captcha_hash, revid, undo_info, response) { - // Set flags - // We don't want the fancy confirmation framework to trigger if the user is only viewing the page source - if ( !readonly ) - { - editor_open = true; - disableUnload(); - } - - // Destroy existing contents of page container - if ( editor_use_modal_window ) - { - darken(true, 70, 'enano_editor_darkener'); - // Build a div with 80% width, centered, and 10px from the top of the window - var edcon = document.createElement('div'); - edcon.style.position = 'absolute'; - edcon.style.backgroundColor = '#FFFFFF'; - edcon.style.padding = '10px'; - edcon.style.width = '80%'; - edcon.style.zIndex = getHighestZ() + 1; - edcon.id = 'ajaxEditContainerModal'; - - // Positioning - var top = getScrollOffset() + 10; - var left = ( getWidth() / 10 ) - 10; // 10% of window width on either side - 10px for padding = perfect centering effect - edcon.style.top = String(top) + 'px'; - edcon.style.left = String(left) + 'px'; - var body = document.getElementsByTagName('body')[0]; - - // Set opacity to 0 - domObjChangeOpac(0, edcon); - body.appendChild(edcon); - } - else - { - var edcon = document.getElementById('ajaxEditContainer'); - for ( var i = edcon.childNodes.length - 1; i >= 0; i-- ) - { - edcon.removeChild(edcon.childNodes[i]); - } - } - - var content = response.src; - - // - // BUILD EDITOR - // - - var heading = document.createElement('h3'); - heading.style.cssFloat = 'left'; - heading.style.styleFloat = 'left'; - heading.style.marginTop = '0px'; - heading.style.marginBottom = '0px'; - heading.appendChild(document.createTextNode($lang.get('editor_msg_editor_heading'))); - - // Plaintext/wikitext toggler - // Only build the editor if using TinyMCE is allowed. THIS IS WEAK - // AND CANNOT BE MADE ANY STRONGER. - - if ( allow_wysiwyg ) - { - var toggler = document.createElement('p'); - toggler.style.marginLeft = '0'; - toggler.style.textAlign = 'right'; - - var span_wiki = document.createElement('span'); - var span_mce = document.createElement('span'); - span_wiki.id = 'enano_edit_btn_pt'; - span_mce.id = 'enano_edit_btn_mce'; - - // to-wikitext button - var a = document.createElement('a'); - a.href = '#'; - a.className = 'abutton image abutton_green'; - a.appendChild(gen_sprite(scriptPath + '/images/editor/sprite.png', 16, 16, 0, 96)); - a.appendChild(document.createTextNode(' ' + $lang.get('editor_btn_wikitext'))); - span_wiki.appendChild(a); - toggler.appendChild(span_wiki); - - // to-HTML button - var a = document.createElement('a'); - a.href = '#'; - a.className = 'abutton image abutton_blue'; - a.appendChild(gen_sprite(scriptPath + '/images/editor/sprite.png', 16, 16, 0, 112)); - a.appendChild(document.createTextNode(' ' + $lang.get('editor_btn_graphical'))); - span_mce.appendChild(a); - toggler.appendChild(span_mce); - - if ( response.page_format == 'xhtml' ) - { - // Current selection is TinyMCE - make span_wiki have the link and span_mce be plaintext - span_mce.style.display = 'none'; - } - else - { - // Current selection is wikitext - set span_wiki to plaintext and span_mce to link - span_wiki.style.display = 'none'; - } - } - - // Form (to allow submits from MCE to trigger a real save) - var form = document.createElement('form'); - form.action = 'javascript:void(0);'; - form.onsubmit = function() - { - ajaxEditorSave(); - return false; - } - - // Draft notice - if ( response.have_draft && !readonly ) - { - var dn = document.createElement('div'); - dn.className = 'warning-box'; - dn.id = 'ajax_edit_draft_notice'; - dn.innerHTML = '' + $lang.get('editor_msg_have_draft_title') + '
'; - dn.innerHTML += $lang.get('editor_msg_have_draft_body', { author: response.draft_author, time: response.draft_time }); - } - - // Old-revision notice - if ( revid > 0 ) - { - var oldrev_box = document.createElement('div'); - oldrev_box.className = 'usermessage'; - oldrev_box.appendChild(document.createTextNode($lang.get('editor_msg_editing_old_revision'))); - } - - // Preview holder - var preview_anchor = document.createElement('a'); - preview_anchor.name = 'ajax_preview'; - preview_anchor.id = 'ajax_preview'; - var preview_container = document.createElement('div'); - preview_container.id = 'enano_editor_preview'; - preview_container.style.clear = 'left'; - - // Textarea containing the content - var ta_wrapper = document.createElement('div'); - ta_wrapper.style.margin = '10px 0'; - // ta_wrapper.style.clear = 'both'; - var textarea = document.createElement('textarea'); - ta_wrapper.appendChild(textarea); - - textarea.id = 'ajaxEditArea'; - textarea.rows = '20'; - textarea.cols = '60'; - textarea.style.width = '98.7%'; - - // Revision metadata controls - var tblholder = document.createElement('div'); - tblholder.className = 'tblholder'; - var metatable = document.createElement('table'); - metatable.setAttribute('border', '0'); - metatable.setAttribute('cellspacing', '1'); - metatable.setAttribute('cellpadding', '4'); - - if ( readonly ) - { - // Close Viewer button - var toolbar = ''; - var head = new templateParser(response.toolbar_templates.toolbar_start); - var button = new templateParser(response.toolbar_templates.toolbar_button); - var tail = new templateParser(response.toolbar_templates.toolbar_end); - - toolbar += head.run(); - - button.assign_bool({ - show_title: true - }); - - // Button: close - button.assign_vars({ - TITLE: $lang.get('editor_btn_closeviewer'), - IMAGE: editor_img_path + '/discard.gif', - SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 16), - FLAGS: 'href="#" onclick="ajaxReset(true); return false;"' - }); - toolbar += button.run(); - toolbar += tail.run(); - } - else - { - // First row: edit summary - var tr1 = document.createElement('tr'); - var td1_1 = document.createElement('td'); - var td1_2 = document.createElement('td'); - td1_1.className = 'row2'; - td1_2.className = 'row1'; - td1_2.style.width = '70%'; - td1_1.appendChild(document.createTextNode($lang.get('editor_lbl_edit_summary'))); - td1_1.appendChild(document.createElement('br')); - var small = document.createElement('small'); - small.appendChild(document.createTextNode($lang.get('editor_lbl_edit_summary_explain'))); - td1_1.appendChild(small); - - var field_es = document.createElement('input'); - field_es.id = 'enano_editor_field_summary'; - field_es.type = 'text'; - field_es.size = '40'; - field_es.style.width = '96%'; - - if ( revid > 0 ) - { - undo_info.last_rev_id = revid; - field_es.value = $lang.get('editor_reversion_edit_summary', undo_info); - } - - td1_2.appendChild(field_es); - - tr1.appendChild(td1_1); - tr1.appendChild(td1_2); - - // Second row: minor edit - var tr2 = document.createElement('tr'); - var td2_1 = document.createElement('td'); - var td2_2 = document.createElement('td'); - td2_1.className = 'row2'; - td2_2.className = 'row1'; - td2_1.appendChild(document.createTextNode($lang.get('editor_lbl_minor_edit'))); - td2_1.appendChild(document.createElement('br')); - var small = document.createElement('small'); - small.appendChild(document.createTextNode($lang.get('editor_lbl_minor_edit_explain'))); - td2_1.appendChild(small); - - var label = document.createElement('label'); - var field_mi = document.createElement('input'); - field_mi.id = 'enano_editor_field_minor'; - field_mi.type = 'checkbox'; - label.appendChild(field_mi); - label.appendChild(document.createTextNode(' ')); - label.appendChild(document.createTextNode($lang.get('editor_lbl_minor_edit_field'))); - td2_2.appendChild(label); - - tr2.appendChild(td2_1); - tr2.appendChild(td2_2); - - if ( captcha_hash ) - { - // generate captcha field (effectively third row) - var tr4 = document.createElement('tr'); - var td4_1 = document.createElement('td'); - var td4_2 = document.createElement('td'); - td4_1.className = 'row2'; - td4_2.className = 'row1'; - - td4_1.appendChild(document.createTextNode($lang.get('editor_lbl_field_captcha'))); - td4_1.appendChild(document.createElement('br')); - var small2 = document.createElement('small'); - small2.appendChild(document.createTextNode($lang.get('editor_msg_captcha_pleaseenter'))); - small2.appendChild(document.createElement('br')); - small2.appendChild(document.createElement('br')); - small2.appendChild(document.createTextNode($lang.get('editor_msg_captcha_blind'))); - td4_1.appendChild(small2); - - var img = document.createElement('img'); - img.src = makeUrlNS('Special', 'Captcha/' + captcha_hash); - img.setAttribute('enano:captcha_hash', captcha_hash); - img.id = 'enano_editor_captcha_img'; - img.onclick = function() - { - this.src = makeUrlNS('Special', 'Captcha/' + this.getAttribute('enano:captcha_hash') + '/' + Math.floor(Math.random() * 100000)); - } - img.style.cursor = 'pointer'; - td4_2.appendChild(img); - td4_2.appendChild(document.createElement('br')); - td4_2.appendChild(document.createTextNode($lang.get('editor_lbl_field_captcha_code') + ' ')); - var input = document.createElement('input'); - input.type = 'text'; - input.id = 'enano_editor_field_captcha'; - input.setAttribute('enano:captcha_hash', captcha_hash); - input.size = '9'; - td4_2.appendChild(input); - - tr4.appendChild(td4_1); - tr4.appendChild(td4_2); - } - - // Third row: controls - - var toolbar = ''; - var head = new templateParser(response.toolbar_templates.toolbar_start); - var button = new templateParser(response.toolbar_templates.toolbar_button); - var label = new templateParser(response.toolbar_templates.toolbar_label); - var tail = new templateParser(response.toolbar_templates.toolbar_end); - - button.assign_bool({ - show_title: true - }); - - toolbar += head.run(); - - // Button: Save - button.assign_vars({ - TITLE: $lang.get('editor_btn_save'), - IMAGE: editor_img_path + '/save.gif', - SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 64), - FLAGS: 'href="#" onclick="ajaxEditorSave(); return false;"' - }); - toolbar += button.run(); - - // Button: preview - button.assign_vars({ - TITLE: $lang.get('editor_btn_preview'), - IMAGE: editor_img_path + '/preview.gif', - SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 32), - FLAGS: 'href="#" onclick="ajaxEditorGenPreview(); return false;"' - }); - toolbar += button.run(); - - // Button: revert - button.assign_vars({ - TITLE: $lang.get('editor_btn_revert'), - IMAGE: editor_img_path + '/revert.gif', - SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 48), - FLAGS: 'href="#" onclick="ajaxEditorRevertToLatest(); return false;"' - }); - toolbar += button.run(); - - // Button: diff - button.assign_vars({ - TITLE: $lang.get('editor_btn_diff'), - IMAGE: editor_img_path + '/diff.gif', - SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 0), - FLAGS: 'href="#" onclick="ajaxEditorShowDiffs(); return false;"' - }); - toolbar += button.run(); - - // Button: cancel - button.assign_vars({ - TITLE: $lang.get('editor_btn_cancel'), - IMAGE: editor_img_path + '/discard.gif', - SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 16), - FLAGS: 'href="#" onclick="ajaxEditorCancel(); return false;"' - }); - toolbar += button.run(); - - // Separator - label.assign_vars({ - TITLE: ' ' - }); - toolbar += label.run(); - - // Button: Save draft - button.assign_vars({ - TITLE: $lang.get('editor_btn_savedraft'), - IMAGE: editor_img_path + '/savedraft.gif', - SPRITE: false, - FLAGS: 'href="#" onclick="ajaxPerformAutosave(); return false;" id="ajax_edit_savedraft_btn"' - }); - toolbar += button.run(); - - toolbar += tail.run(); - - metatable.appendChild(tr1); - metatable.appendChild(tr2); - if ( captcha_hash ) - { - metatable.appendChild(tr4); - } - // metatable.appendChild(tr3); - } - tblholder.appendChild(metatable); - - // Edit disclaimer/notice - if ( response.edit_notice ) - { - var en_div = document.createElement('div'); - en_div.innerHTML = response.edit_notice; - en_div.className = 'usermessage'; - en_div.style.margin = '10px 0 0 0'; - } - - // Put it all together... - form.appendChild(heading); - if ( allow_wysiwyg ) - form.appendChild(toggler); - - if ( dn ) - form.appendChild(dn); - - if ( oldrev_box ) - form.appendChild(oldrev_box); - - form.appendChild(preview_anchor); - form.appendChild(preview_container); - form.appendChild(ta_wrapper); - if ( !readonly ) - form.appendChild(tblholder); - form.innerHTML += '
' + toolbar + '
'; - edcon.appendChild(form); - - if ( response.edit_notice && !readonly ) - { - edcon.appendChild(en_div); - } - - // more textarea attribs/init - var textarea = document.getElementById('ajaxEditArea'); - textarea.as_last_save = 0; - textarea.content_orig = content; - textarea.used_draft = false; - textarea.onkeyup = function() - { - if ( this.needReset ) - { - var img = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('img')[0]; - var lbl = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('span')[0]; - img.src = editor_img_path + '/savedraft.gif'; - lbl.innerHTML = $lang.get('editor_btn_savedraft'); - } - if ( window.AutosaveTimeoutObj ) - clearTimeout(window.AutosaveTimeoutObj); - window.AutosaveTimeoutObj = setTimeout('ajaxAutosaveDraft();', ( AUTOSAVE_TIMEOUT * 1000 )); - } - - if ( readonly ) - { - textarea.className = 'mce_readonly'; - textarea.setAttribute('readonly', 'readonly'); - } - - $dynano('ajaxEditArea').object.focus(); - $dynano('ajaxEditArea').object._edTimestamp = timestamp; - $dynano('ajaxEditArea').setContent(content); - - // If the editor preference is tinymce, switch the editor to TinyMCE now - if ( response.page_format == 'xhtml' && allow_wysiwyg ) - { - $dynano('ajaxEditArea').switchToMCE(false); - } - - if ( allow_wysiwyg ) - { - var a = document.getElementById('enano_edit_btn_pt').getElementsByTagName('a')[0]; - a.onclick = function() { - ajaxSetEditorPlain(); - return false; - }; - var a = document.getElementById('enano_edit_btn_mce').getElementsByTagName('a')[0]; - a.onclick = function() { - ajaxSetEditorMCE(); - return false; - }; - } - - // if we're using the modal window, fade it in - if ( editor_use_modal_window ) - { - domOpacity(edcon, 0, 100, 500); - } - - // Autosave every 5 minutes (m * s * ms) - setInterval('ajaxPerformAutosave();', ( 5 * 60 * 1000 )); + // Set flags + // We don't want the fancy confirmation framework to trigger if the user is only viewing the page source + if ( !readonly ) + { + editor_open = true; + disableUnload(); + } + + // Destroy existing contents of page container + if ( editor_use_modal_window ) + { + darken(true, 70, 'enano_editor_darkener'); + // Build a div with 80% width, centered, and 10px from the top of the window + var edcon = document.createElement('div'); + edcon.style.position = 'absolute'; + edcon.style.backgroundColor = '#FFFFFF'; + edcon.style.padding = '10px'; + edcon.style.width = '80%'; + edcon.style.zIndex = getHighestZ() + 1; + edcon.id = 'ajaxEditContainerModal'; + + // Positioning + var top = getScrollOffset() + 10; + var left = ( getWidth() / 10 ) - 10; // 10% of window width on either side - 10px for padding = perfect centering effect + edcon.style.top = String(top) + 'px'; + edcon.style.left = String(left) + 'px'; + var body = document.getElementsByTagName('body')[0]; + + // Set opacity to 0 + domObjChangeOpac(0, edcon); + body.appendChild(edcon); + } + else + { + var edcon = document.getElementById('ajaxEditContainer'); + for ( var i = edcon.childNodes.length - 1; i >= 0; i-- ) + { + edcon.removeChild(edcon.childNodes[i]); + } + } + + var content = response.src; + + // + // BUILD EDITOR + // + + var heading = document.createElement('h3'); + heading.style.cssFloat = 'left'; + heading.style.styleFloat = 'left'; + heading.style.marginTop = '0px'; + heading.style.marginBottom = '0px'; + heading.appendChild(document.createTextNode($lang.get('editor_msg_editor_heading'))); + + // Plaintext/wikitext toggler + // Only build the editor if using TinyMCE is allowed. THIS IS WEAK + // AND CANNOT BE MADE ANY STRONGER. + + if ( allow_wysiwyg ) + { + var toggler = document.createElement('p'); + toggler.style.marginLeft = '0'; + toggler.style.textAlign = 'right'; + + var span_wiki = document.createElement('span'); + var span_mce = document.createElement('span'); + span_wiki.id = 'enano_edit_btn_pt'; + span_mce.id = 'enano_edit_btn_mce'; + + // to-wikitext button + var a = document.createElement('a'); + a.href = '#'; + a.className = 'abutton image abutton_green'; + a.appendChild(gen_sprite(scriptPath + '/images/editor/sprite.png', 16, 16, 0, 96)); + a.appendChild(document.createTextNode(' ' + $lang.get('editor_btn_wikitext'))); + span_wiki.appendChild(a); + toggler.appendChild(span_wiki); + + // to-HTML button + var a = document.createElement('a'); + a.href = '#'; + a.className = 'abutton image abutton_blue'; + a.appendChild(gen_sprite(scriptPath + '/images/editor/sprite.png', 16, 16, 0, 112)); + a.appendChild(document.createTextNode(' ' + $lang.get('editor_btn_graphical'))); + span_mce.appendChild(a); + toggler.appendChild(span_mce); + + if ( response.page_format == 'xhtml' ) + { + // Current selection is TinyMCE - make span_wiki have the link and span_mce be plaintext + span_mce.style.display = 'none'; + } + else + { + // Current selection is wikitext - set span_wiki to plaintext and span_mce to link + span_wiki.style.display = 'none'; + } + } + + // Form (to allow submits from MCE to trigger a real save) + var form = document.createElement('form'); + form.action = 'javascript:void(0);'; + form.onsubmit = function() + { + ajaxEditorSave(); + return false; + } + + // Draft notice + if ( response.have_draft && !readonly ) + { + var dn = document.createElement('div'); + dn.className = 'warning-box'; + dn.id = 'ajax_edit_draft_notice'; + dn.innerHTML = '' + $lang.get('editor_msg_have_draft_title') + '
'; + dn.innerHTML += $lang.get('editor_msg_have_draft_body', { author: response.draft_author, time: response.draft_time }); + } + + // Old-revision notice + if ( revid > 0 ) + { + var oldrev_box = document.createElement('div'); + oldrev_box.className = 'usermessage'; + oldrev_box.appendChild(document.createTextNode($lang.get('editor_msg_editing_old_revision'))); + } + + // Preview holder + var preview_anchor = document.createElement('a'); + preview_anchor.name = 'ajax_preview'; + preview_anchor.id = 'ajax_preview'; + var preview_container = document.createElement('div'); + preview_container.id = 'enano_editor_preview'; + preview_container.style.clear = 'left'; + + // Textarea containing the content + var ta_wrapper = document.createElement('div'); + ta_wrapper.style.margin = '10px 0'; + // ta_wrapper.style.clear = 'both'; + var textarea = document.createElement('textarea'); + ta_wrapper.appendChild(textarea); + + textarea.id = 'ajaxEditArea'; + textarea.rows = '20'; + textarea.cols = '60'; + textarea.style.width = '98.7%'; + + // Revision metadata controls + var tblholder = document.createElement('div'); + tblholder.className = 'tblholder'; + var metatable = document.createElement('table'); + metatable.setAttribute('border', '0'); + metatable.setAttribute('cellspacing', '1'); + metatable.setAttribute('cellpadding', '4'); + + if ( readonly ) + { + // Close Viewer button + var toolbar = ''; + var head = new templateParser(response.toolbar_templates.toolbar_start); + var button = new templateParser(response.toolbar_templates.toolbar_button); + var tail = new templateParser(response.toolbar_templates.toolbar_end); + + toolbar += head.run(); + + button.assign_bool({ + show_title: true + }); + + // Button: close + button.assign_vars({ + TITLE: $lang.get('editor_btn_closeviewer'), + IMAGE: editor_img_path + '/discard.gif', + SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 16), + FLAGS: 'href="#" onclick="ajaxReset(true); return false;"' + }); + toolbar += button.run(); + toolbar += tail.run(); + } + else + { + // First row: edit summary + var tr1 = document.createElement('tr'); + var td1_1 = document.createElement('td'); + var td1_2 = document.createElement('td'); + td1_1.className = 'row2'; + td1_2.className = 'row1'; + td1_2.style.width = '70%'; + td1_1.appendChild(document.createTextNode($lang.get('editor_lbl_edit_summary'))); + td1_1.appendChild(document.createElement('br')); + var small = document.createElement('small'); + small.appendChild(document.createTextNode($lang.get('editor_lbl_edit_summary_explain'))); + td1_1.appendChild(small); + + var field_es = document.createElement('input'); + field_es.id = 'enano_editor_field_summary'; + field_es.type = 'text'; + field_es.size = '40'; + field_es.style.width = '96%'; + + if ( revid > 0 ) + { + undo_info.last_rev_id = revid; + field_es.value = $lang.get('editor_reversion_edit_summary', undo_info); + } + + td1_2.appendChild(field_es); + + tr1.appendChild(td1_1); + tr1.appendChild(td1_2); + + // Second row: minor edit + var tr2 = document.createElement('tr'); + var td2_1 = document.createElement('td'); + var td2_2 = document.createElement('td'); + td2_1.className = 'row2'; + td2_2.className = 'row1'; + td2_1.appendChild(document.createTextNode($lang.get('editor_lbl_minor_edit'))); + td2_1.appendChild(document.createElement('br')); + var small = document.createElement('small'); + small.appendChild(document.createTextNode($lang.get('editor_lbl_minor_edit_explain'))); + td2_1.appendChild(small); + + var label = document.createElement('label'); + var field_mi = document.createElement('input'); + field_mi.id = 'enano_editor_field_minor'; + field_mi.type = 'checkbox'; + label.appendChild(field_mi); + label.appendChild(document.createTextNode(' ')); + label.appendChild(document.createTextNode($lang.get('editor_lbl_minor_edit_field'))); + td2_2.appendChild(label); + + tr2.appendChild(td2_1); + tr2.appendChild(td2_2); + + if ( captcha_hash ) + { + // generate captcha field (effectively third row) + var tr4 = document.createElement('tr'); + var td4_1 = document.createElement('td'); + var td4_2 = document.createElement('td'); + td4_1.className = 'row2'; + td4_2.className = 'row1'; + + td4_1.appendChild(document.createTextNode($lang.get('editor_lbl_field_captcha'))); + td4_1.appendChild(document.createElement('br')); + var small2 = document.createElement('small'); + small2.appendChild(document.createTextNode($lang.get('editor_msg_captcha_pleaseenter'))); + small2.appendChild(document.createElement('br')); + small2.appendChild(document.createElement('br')); + small2.appendChild(document.createTextNode($lang.get('editor_msg_captcha_blind'))); + td4_1.appendChild(small2); + + var img = document.createElement('img'); + img.src = makeUrlNS('Special', 'Captcha/' + captcha_hash); + img.setAttribute('enano:captcha_hash', captcha_hash); + img.id = 'enano_editor_captcha_img'; + img.onclick = function() + { + this.src = makeUrlNS('Special', 'Captcha/' + this.getAttribute('enano:captcha_hash') + '/' + Math.floor(Math.random() * 100000)); + } + img.style.cursor = 'pointer'; + td4_2.appendChild(img); + td4_2.appendChild(document.createElement('br')); + td4_2.appendChild(document.createTextNode($lang.get('editor_lbl_field_captcha_code') + ' ')); + var input = document.createElement('input'); + input.type = 'text'; + input.id = 'enano_editor_field_captcha'; + input.setAttribute('enano:captcha_hash', captcha_hash); + input.size = '9'; + td4_2.appendChild(input); + + tr4.appendChild(td4_1); + tr4.appendChild(td4_2); + } + + // Third row: controls + + var toolbar = ''; + var head = new templateParser(response.toolbar_templates.toolbar_start); + var button = new templateParser(response.toolbar_templates.toolbar_button); + var label = new templateParser(response.toolbar_templates.toolbar_label); + var tail = new templateParser(response.toolbar_templates.toolbar_end); + + button.assign_bool({ + show_title: true + }); + + toolbar += head.run(); + + // Button: Save + button.assign_vars({ + TITLE: $lang.get('editor_btn_save'), + IMAGE: editor_img_path + '/save.gif', + SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 64), + FLAGS: 'href="#" onclick="ajaxEditorSave(); return false;"' + }); + toolbar += button.run(); + + // Button: preview + button.assign_vars({ + TITLE: $lang.get('editor_btn_preview'), + IMAGE: editor_img_path + '/preview.gif', + SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 32), + FLAGS: 'href="#" onclick="ajaxEditorGenPreview(); return false;"' + }); + toolbar += button.run(); + + // Button: revert + button.assign_vars({ + TITLE: $lang.get('editor_btn_revert'), + IMAGE: editor_img_path + '/revert.gif', + SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 48), + FLAGS: 'href="#" onclick="ajaxEditorRevertToLatest(); return false;"' + }); + toolbar += button.run(); + + // Button: diff + button.assign_vars({ + TITLE: $lang.get('editor_btn_diff'), + IMAGE: editor_img_path + '/diff.gif', + SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 0), + FLAGS: 'href="#" onclick="ajaxEditorShowDiffs(); return false;"' + }); + toolbar += button.run(); + + // Button: cancel + button.assign_vars({ + TITLE: $lang.get('editor_btn_cancel'), + IMAGE: editor_img_path + '/discard.gif', + SPRITE: gen_sprite_html(editor_img_path + '/sprite.png', 16, 16, 0, 16), + FLAGS: 'href="#" onclick="ajaxEditorCancel(); return false;"' + }); + toolbar += button.run(); + + // Separator + label.assign_vars({ + TITLE: ' ' + }); + toolbar += label.run(); + + // Button: Save draft + button.assign_vars({ + TITLE: $lang.get('editor_btn_savedraft'), + IMAGE: editor_img_path + '/savedraft.gif', + SPRITE: false, + FLAGS: 'href="#" onclick="ajaxPerformAutosave(); return false;" id="ajax_edit_savedraft_btn"' + }); + toolbar += button.run(); + + toolbar += tail.run(); + + metatable.appendChild(tr1); + metatable.appendChild(tr2); + if ( captcha_hash ) + { + metatable.appendChild(tr4); + } + // metatable.appendChild(tr3); + } + tblholder.appendChild(metatable); + + // Edit disclaimer/notice + if ( response.edit_notice ) + { + var en_div = document.createElement('div'); + en_div.innerHTML = response.edit_notice; + en_div.className = 'usermessage'; + en_div.style.margin = '10px 0 0 0'; + } + + // Put it all together... + form.appendChild(heading); + if ( allow_wysiwyg ) + form.appendChild(toggler); + + if ( dn ) + form.appendChild(dn); + + if ( oldrev_box ) + form.appendChild(oldrev_box); + + form.appendChild(preview_anchor); + form.appendChild(preview_container); + form.appendChild(ta_wrapper); + if ( !readonly ) + form.appendChild(tblholder); + form.innerHTML += '
' + toolbar + '
'; + edcon.appendChild(form); + + if ( response.edit_notice && !readonly ) + { + edcon.appendChild(en_div); + } + + // more textarea attribs/init + var textarea = document.getElementById('ajaxEditArea'); + textarea.as_last_save = 0; + textarea.content_orig = content; + textarea.used_draft = false; + textarea.onkeyup = function() + { + if ( this.needReset ) + { + var img = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('img')[0]; + var lbl = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('span')[0]; + img.src = editor_img_path + '/savedraft.gif'; + lbl.innerHTML = $lang.get('editor_btn_savedraft'); + } + if ( window.AutosaveTimeoutObj ) + clearTimeout(window.AutosaveTimeoutObj); + window.AutosaveTimeoutObj = setTimeout('ajaxAutosaveDraft();', ( AUTOSAVE_TIMEOUT * 1000 )); + } + + if ( readonly ) + { + textarea.className = 'mce_readonly'; + textarea.setAttribute('readonly', 'readonly'); + } + + $dynano('ajaxEditArea').object.focus(); + $dynano('ajaxEditArea').object._edTimestamp = timestamp; + $dynano('ajaxEditArea').setContent(content); + + // If the editor preference is tinymce, switch the editor to TinyMCE now + if ( response.page_format == 'xhtml' && allow_wysiwyg ) + { + $dynano('ajaxEditArea').switchToMCE(false); + } + + if ( allow_wysiwyg ) + { + var a = document.getElementById('enano_edit_btn_pt').getElementsByTagName('a')[0]; + a.onclick = function() { + ajaxSetEditorPlain(); + return false; + }; + var a = document.getElementById('enano_edit_btn_mce').getElementsByTagName('a')[0]; + a.onclick = function() { + ajaxSetEditorMCE(); + return false; + }; + } + + // if we're using the modal window, fade it in + if ( editor_use_modal_window ) + { + domOpacity(edcon, 0, 100, 500); + } + + // Autosave every 5 minutes (m * s * ms) + setInterval('ajaxPerformAutosave();', ( 5 * 60 * 1000 )); } window.ajaxEditorDestroyModalWindow = function() { - if ( editor_use_modal_window ) - { - var edcon = document.getElementById('ajaxEditContainerModal'); - var body = document.getElementsByTagName('body')[0]; - if ( edcon ) - { - body.removeChild(edcon); - enlighten(true, 'enano_editor_darkener'); - } - } + if ( editor_use_modal_window ) + { + var edcon = document.getElementById('ajaxEditContainerModal'); + var body = document.getElementsByTagName('body')[0]; + if ( edcon ) + { + body.removeChild(edcon); + enlighten(true, 'enano_editor_darkener'); + } + } } window.ajaxEditorSave = function(is_draft, text_override) { - if ( !is_draft ) - { - ajaxSetEditorLoading(); - } - if ( is_draft && editor_save_lock ) - return false; - else - editor_save_lock = true; - - var ta_content = ( text_override ) ? text_override : $dynano('ajaxEditArea').getContent(); - - if ( !is_draft && ( ta_content == '' || ta_content == '

' || ta_content == '

 

' ) ) - { - new MessageBox(MB_OK|MB_ICONSTOP, $lang.get('editor_err_no_text_title'), $lang.get('editor_err_no_text_body')); - ajaxUnSetEditorLoading(); - return false; - } - - if ( is_draft ) - { - // ajaxSetEditorLoading(); - var img = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('img')[0]; - var lbl = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('span')[0]; - img.src = cdnPath + '/images/loading.gif'; - var d = new Date(); - var m = String(d.getMinutes()); - if ( m.length < 2 ) - m = '0' + m; - var time = d.getHours() + ':' + m; - lbl.innerHTML = $lang.get('editor_msg_draft_saving'); - } - - var edit_summ = $dynano('enano_editor_field_summary').object.value; - if ( !edit_summ ) - edit_summ = ''; - var is_minor = ( $dynano('enano_editor_field_minor').object.checked ) ? 1 : 0; - var timestamp = $dynano('ajaxEditArea').object._edTimestamp; - var used_draft = $dynano('ajaxEditArea').object.used_draft; - - var json_packet = { - src: ta_content, - summary: edit_summ, - minor_edit: is_minor, - time: timestamp, - draft: ( is_draft == true ), - format: ( $dynano('ajaxEditArea').isMCE() ) ? 'xhtml' : 'wikitext', - used_draft: used_draft - }; - - // Do we need to add captcha info? - if ( document.getElementById('enano_editor_field_captcha') && !is_draft ) - { - var captcha_field = document.getElementById('enano_editor_field_captcha'); - if ( captcha_field.value == '' ) - { - new MessageBox(MB_OK|MB_ICONSTOP, $lang.get('editor_err_need_captcha_title'), $lang.get('editor_err_need_captcha_body')); - ajaxUnSetEditorLoading(); - return false; - } - json_packet.captcha_code = captcha_field.value; - json_packet.captcha_id = captcha_field.getAttribute('enano:captcha_hash'); - } - - json_packet = ajaxEscape(toJSONString(json_packet)); - ajaxPost(stdAjaxPrefix + '&_mode=savepage_json', 'r=' + json_packet, function(ajax) - { - if ( ajax.readyState == 4 && ajax.status == 200 ) - { - ajaxUnSetEditorLoading(); - var response = String(ajax.responseText + ''); - if ( !check_json_response(response) ) - { - handle_invalid_json(response); - return false; - } - - response = parseJSON(response); - // This will only be used if there was a lower-level error. - if ( response.mode == 'error' ) - { - editor_save_lock = false; - new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_server'), response.error); - return false; - } - // This will be used if the PageProcessor generated errors (usually security/permissions related) - if ( response.mode == 'errors' ) - { - editor_save_lock = false; - // This will be true if the user entered a captcha code incorrectly, thus - // invalidating the code and requiring a new image to be generated. - if ( response.new_captcha ) - { - // Generate the new captcha field - var img = document.getElementById('enano_editor_captcha_img'); - var input = document.getElementById('enano_editor_field_captcha'); - if ( img && input ) - { - img._captchaHash = response.new_captcha; - input._captchaHash = response.new_captcha; - img.src = makeUrlNS('Special', 'Captcha/' + response.new_captcha); - input.value = ''; - } - } - var errors = ''; - new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_save_title'), $lang.get('editor_err_save_body') + errors); - return false; - } - // If someone else got to the page first, warn the user - if ( response.mode == 'obsolete' ) - { - editor_save_lock = false; - // Update the local timestamp to allow override - $dynano('ajaxEditArea').object._edTimestamp = response.time; - new MessageBox(MB_OK | MB_ICONEXCLAMATION, $lang.get('editor_err_obsolete_title'), $lang.get('editor_err_obsolete_body', { author: response.author, timestamp: response.date_string, page_url: makeUrl(title, false, true) })); - return false; - } - if ( response.mode == 'success' ) - { - if ( response.is_draft ) - { - document.getElementById('ajaxEditArea').used_draft = true; - document.getElementById('ajaxEditArea').needReset = true; - var img = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('img')[0]; - var lbl = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('span')[0]; - if ( response.is_draft == 'delete' ) - { - img.src = scriptPath + '/images/editor/savedraft.gif'; - lbl.innerHTML = $lang.get('editor_btn_savedraft'); - - var dn = $dynano('ajax_edit_draft_notice').object; - if ( dn ) - { - dn.parentNode.removeChild(dn); - } - } - else - { - img.src = scriptPath + '/images/mini-info.png'; - var d = new Date(); - var m = String(d.getMinutes()); - if ( m.length < 2 ) - m = '0' + m; - var time = d.getHours() + ':' + m; - lbl.innerHTML = $lang.get('editor_msg_draft_saved', { time: time }); - } - editor_save_lock = false; - } - else - { - // The save was successful; reset flags and make another request for the new page content - setAjaxLoading(); - editor_open = false; - editor_save_lock = false; - enableUnload(); - $dynano('ajaxEditArea').destroyMCE(false); - changeOpac(0, 'ajaxEditContainer'); - ajaxGet(stdAjaxPrefix + '&_mode=getpage&noheaders', function(ajax) - { - if ( ajax.readyState == 4 && ajax.status == 200 ) - { - unsetAjaxLoading(); - selectButtonMajor('article'); - unselectAllButtonsMinor(); - - ajaxEditorDestroyModalWindow(); - document.getElementById('ajaxEditContainer').innerHTML = '
' + $lang.get('editor_msg_saved') + '
' + ajax.responseText; - // if we're on a userpage, call the onload function to rebuild the tabs - if ( typeof(userpage_onload) == 'function' ) - { - window.userpage_blocks = []; - userpage_onload(); - } - opacity('ajaxEditContainer', 0, 100, 1000); - } - }); - } - } - } - }, true); + if ( !is_draft ) + { + ajaxSetEditorLoading(); + } + if ( is_draft && editor_save_lock ) + return false; + else + editor_save_lock = true; + + var ta_content = ( text_override ) ? text_override : $dynano('ajaxEditArea').getContent(); + + if ( !is_draft && ( ta_content == '' || ta_content == '

' || ta_content == '

 

' ) ) + { + new MessageBox(MB_OK|MB_ICONSTOP, $lang.get('editor_err_no_text_title'), $lang.get('editor_err_no_text_body')); + ajaxUnSetEditorLoading(); + return false; + } + + if ( is_draft ) + { + // ajaxSetEditorLoading(); + var img = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('img')[0]; + var lbl = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('span')[0]; + img.src = cdnPath + '/images/loading.gif'; + var d = new Date(); + var m = String(d.getMinutes()); + if ( m.length < 2 ) + m = '0' + m; + var time = d.getHours() + ':' + m; + lbl.innerHTML = $lang.get('editor_msg_draft_saving'); + } + + var edit_summ = $dynano('enano_editor_field_summary').object.value; + if ( !edit_summ ) + edit_summ = ''; + var is_minor = ( $dynano('enano_editor_field_minor').object.checked ) ? 1 : 0; + var timestamp = $dynano('ajaxEditArea').object._edTimestamp; + var used_draft = $dynano('ajaxEditArea').object.used_draft; + + var json_packet = { + src: ta_content, + summary: edit_summ, + minor_edit: is_minor, + time: timestamp, + draft: ( is_draft == true ), + format: ( $dynano('ajaxEditArea').isMCE() ) ? 'xhtml' : 'wikitext', + used_draft: used_draft + }; + + // Do we need to add captcha info? + if ( document.getElementById('enano_editor_field_captcha') && !is_draft ) + { + var captcha_field = document.getElementById('enano_editor_field_captcha'); + if ( captcha_field.value == '' ) + { + new MessageBox(MB_OK|MB_ICONSTOP, $lang.get('editor_err_need_captcha_title'), $lang.get('editor_err_need_captcha_body')); + ajaxUnSetEditorLoading(); + return false; + } + json_packet.captcha_code = captcha_field.value; + json_packet.captcha_id = captcha_field.getAttribute('enano:captcha_hash'); + } + + json_packet = ajaxEscape(toJSONString(json_packet)); + ajaxPost(stdAjaxPrefix + '&_mode=savepage_json', 'r=' + json_packet, function(ajax) + { + if ( ajax.readyState == 4 && ajax.status == 200 ) + { + ajaxUnSetEditorLoading(); + var response = String(ajax.responseText + ''); + if ( !check_json_response(response) ) + { + handle_invalid_json(response); + return false; + } + + response = parseJSON(response); + // This will only be used if there was a lower-level error. + if ( response.mode == 'error' ) + { + editor_save_lock = false; + new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_server'), response.error); + return false; + } + // This will be used if the PageProcessor generated errors (usually security/permissions related) + if ( response.mode == 'errors' ) + { + editor_save_lock = false; + // This will be true if the user entered a captcha code incorrectly, thus + // invalidating the code and requiring a new image to be generated. + if ( response.new_captcha ) + { + // Generate the new captcha field + var img = document.getElementById('enano_editor_captcha_img'); + var input = document.getElementById('enano_editor_field_captcha'); + if ( img && input ) + { + img._captchaHash = response.new_captcha; + input._captchaHash = response.new_captcha; + img.src = makeUrlNS('Special', 'Captcha/' + response.new_captcha); + input.value = ''; + } + } + var errors = ''; + new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_save_title'), $lang.get('editor_err_save_body') + errors); + return false; + } + // If someone else got to the page first, warn the user + if ( response.mode == 'obsolete' ) + { + editor_save_lock = false; + // Update the local timestamp to allow override + $dynano('ajaxEditArea').object._edTimestamp = response.time; + new MessageBox(MB_OK | MB_ICONEXCLAMATION, $lang.get('editor_err_obsolete_title'), $lang.get('editor_err_obsolete_body', { author: response.author, timestamp: response.date_string, page_url: makeUrl(title, false, true) })); + return false; + } + if ( response.mode == 'success' ) + { + if ( response.is_draft ) + { + document.getElementById('ajaxEditArea').used_draft = true; + document.getElementById('ajaxEditArea').needReset = true; + var img = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('img')[0]; + var lbl = $dynano('ajax_edit_savedraft_btn').object.getElementsByTagName('span')[0]; + if ( response.is_draft == 'delete' ) + { + img.src = scriptPath + '/images/editor/savedraft.gif'; + lbl.innerHTML = $lang.get('editor_btn_savedraft'); + + var dn = $dynano('ajax_edit_draft_notice').object; + if ( dn ) + { + dn.parentNode.removeChild(dn); + } + } + else + { + img.src = scriptPath + '/images/mini-info.png'; + var d = new Date(); + var m = String(d.getMinutes()); + if ( m.length < 2 ) + m = '0' + m; + var time = d.getHours() + ':' + m; + lbl.innerHTML = $lang.get('editor_msg_draft_saved', { time: time }); + } + editor_save_lock = false; + } + else + { + // The save was successful; reset flags and make another request for the new page content + setAjaxLoading(); + editor_open = false; + editor_save_lock = false; + enableUnload(); + $dynano('ajaxEditArea').destroyMCE(false); + changeOpac(0, 'ajaxEditContainer'); + ajaxGet(stdAjaxPrefix + '&_mode=getpage&noheaders', function(ajax) + { + if ( ajax.readyState == 4 && ajax.status == 200 ) + { + unsetAjaxLoading(); + selectButtonMajor('article'); + unselectAllButtonsMinor(); + + ajaxEditorDestroyModalWindow(); + document.getElementById('ajaxEditContainer').innerHTML = '
' + $lang.get('editor_msg_saved') + '
' + ajax.responseText; + // if we're on a userpage, call the onload function to rebuild the tabs + if ( typeof(userpage_onload) == 'function' ) + { + window.userpage_blocks = []; + userpage_onload(); + } + opacity('ajaxEditContainer', 0, 100, 1000); + } + }); + } + } + } + }, true); } // Delete the draft (this is a massive server-side hack) window.ajaxEditorDeleteDraft = function() { - miniPromptMessage({ - title: $lang.get('editor_msg_confirm_delete_draft_title'), - message: $lang.get('editor_msg_confirm_delete_draft_body'), - buttons: [ - { - text: $lang.get('editor_btn_delete_draft'), - color: 'red', - style: { - fontWeight: 'bold' - }, - onclick: function() { - ajaxEditorDeleteDraftReal(); - miniPromptDestroy(this); - } - }, - { - text: $lang.get('etc_cancel'), - onclick: function() { - miniPromptDestroy(this); - } - } - ] - }); + miniPromptMessage({ + title: $lang.get('editor_msg_confirm_delete_draft_title'), + message: $lang.get('editor_msg_confirm_delete_draft_body'), + buttons: [ + { + text: $lang.get('editor_btn_delete_draft'), + color: 'red', + style: { + fontWeight: 'bold' + }, + onclick: function() { + ajaxEditorDeleteDraftReal(); + miniPromptDestroy(this); + } + }, + { + text: $lang.get('etc_cancel'), + onclick: function() { + miniPromptDestroy(this); + } + } + ] + }); } window.ajaxEditorDeleteDraftReal = function() { - return ajaxEditorSave(true, -1); + return ajaxEditorSave(true, -1); } window.ajaxEditorGenPreview = function() { - ajaxSetEditorLoading(); - var ta_content = $dynano('ajaxEditArea').getContent(); - ta_content = ajaxEscape(ta_content); - if ( $dynano('enano_editor_preview').object.innerHTML != '' ) - { - opacity('enano_editor_preview', 100, 0, 500); - } - ajaxPost(stdAjaxPrefix + '&_mode=preview', 'text=' + ta_content, function(ajax) - { - if ( ajax.readyState == 4 && ajax.status == 200 ) - { - ajaxUnSetEditorLoading(); - changeOpac(0, 'enano_editor_preview'); - $dynano('enano_editor_preview').object.innerHTML = ajax.responseText; - window.location.hash = '#ajax_preview'; - opacity('enano_editor_preview', 0, 100, 500); - } - }, true); + ajaxSetEditorLoading(); + var ta_content = $dynano('ajaxEditArea').getContent(); + ta_content = ajaxEscape(ta_content); + if ( $dynano('enano_editor_preview').object.innerHTML != '' ) + { + opacity('enano_editor_preview', 100, 0, 500); + } + ajaxPost(stdAjaxPrefix + '&_mode=preview', 'text=' + ta_content, function(ajax) + { + if ( ajax.readyState == 4 && ajax.status == 200 ) + { + ajaxUnSetEditorLoading(); + changeOpac(0, 'enano_editor_preview'); + $dynano('enano_editor_preview').object.innerHTML = ajax.responseText; + window.location.hash = '#ajax_preview'; + opacity('enano_editor_preview', 0, 100, 500); + } + }, true); } window.ajaxEditorRevertToLatest = function() { - miniPromptMessage({ - title: $lang.get('editor_msg_revert_confirm_title'), - message: $lang.get('editor_msg_revert_confirm_body'), - buttons: [ - { - text: $lang.get('editor_btn_revert_confirm'), - color: 'red', - sprite: [ editor_img_path + '/sprite.png', 16, 16, 0, 48 ], - style: { - fontWeight: 'bold' - }, - onclick: function() - { - ajaxEditorRevertToLatestReal(); - miniPromptDestroy(this); - return false; - } - }, - { - text: $lang.get('etc_cancel'), - onclick: function() - { - miniPromptDestroy(this); - return false; - } - } - ] - }); + miniPromptMessage({ + title: $lang.get('editor_msg_revert_confirm_title'), + message: $lang.get('editor_msg_revert_confirm_body'), + buttons: [ + { + text: $lang.get('editor_btn_revert_confirm'), + color: 'red', + sprite: [ editor_img_path + '/sprite.png', 16, 16, 0, 48 ], + style: { + fontWeight: 'bold' + }, + onclick: function() + { + ajaxEditorRevertToLatestReal(); + miniPromptDestroy(this); + return false; + } + }, + { + text: $lang.get('etc_cancel'), + onclick: function() + { + miniPromptDestroy(this); + return false; + } + } + ] + }); } window.ajaxEditorRevertToLatestReal = function() { - ajaxSetEditorLoading(); - ajaxGet(stdAjaxPrefix + '&_mode=getsource', function(ajax) - { - if ( ajax.readyState == 4 && ajax.status == 200 ) - { - ajaxUnSetEditorLoading(); - - var response = String(ajax.responseText + ''); - if ( !check_json_response(response) ) - { - handle_invalid_json(response); - return false; - } - - response = parseJSON(response); - if ( response.mode == 'error' ) - { - unselectAllButtonsMinor(); - new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_server'), response.error); - return false; - } - - if ( !response.auth_view_source ) - { - unselectAllButtonsMinor(); - new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_access_denied_title'), $lang.get('editor_err_access_denied_body')); - return false; - } - - setTimeout(function() - { - editor_convert_if_needed(response.page_format); - $dynano('ajaxEditArea').setContent(response.src); - }, aclDisableTransitionFX ? 10 : 750); - } - }, true); + ajaxSetEditorLoading(); + ajaxGet(stdAjaxPrefix + '&_mode=getsource', function(ajax) + { + if ( ajax.readyState == 4 && ajax.status == 200 ) + { + ajaxUnSetEditorLoading(); + + var response = String(ajax.responseText + ''); + if ( !check_json_response(response) ) + { + handle_invalid_json(response); + return false; + } + + response = parseJSON(response); + if ( response.mode == 'error' ) + { + unselectAllButtonsMinor(); + new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_server'), response.error); + return false; + } + + if ( !response.auth_view_source ) + { + unselectAllButtonsMinor(); + new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_access_denied_title'), $lang.get('editor_err_access_denied_body')); + return false; + } + + setTimeout(function() + { + editor_convert_if_needed(response.page_format); + $dynano('ajaxEditArea').setContent(response.src); + }, aclDisableTransitionFX ? 10 : 750); + } + }, true); } window.ajaxEditorShowDiffs = function() { - ajaxSetEditorLoading(); - var ta_content = $dynano('ajaxEditArea').getContent(); - ta_content = ajaxEscape(ta_content); - if ( $dynano('enano_editor_preview').object.innerHTML != '' ) - { - opacity('enano_editor_preview', 100, 0, 500); - } - ajaxPost(stdAjaxPrefix + '&_mode=diff_cur', 'text=' + ta_content, function(ajax) - { - if ( ajax.readyState == 4 && ajax.status == 200 ) - { - ajaxUnSetEditorLoading(); - changeOpac(0, 'enano_editor_preview'); - $dynano('enano_editor_preview').object.innerHTML = ajax.responseText; - window.location.hash = '#ajax_preview'; - opacity('enano_editor_preview', 0, 100, 500); - } - }, true); + ajaxSetEditorLoading(); + var ta_content = $dynano('ajaxEditArea').getContent(); + ta_content = ajaxEscape(ta_content); + if ( $dynano('enano_editor_preview').object.innerHTML != '' ) + { + opacity('enano_editor_preview', 100, 0, 500); + } + ajaxPost(stdAjaxPrefix + '&_mode=diff_cur', 'text=' + ta_content, function(ajax) + { + if ( ajax.readyState == 4 && ajax.status == 200 ) + { + ajaxUnSetEditorLoading(); + changeOpac(0, 'enano_editor_preview'); + $dynano('enano_editor_preview').object.innerHTML = ajax.responseText; + window.location.hash = '#ajax_preview'; + opacity('enano_editor_preview', 0, 100, 500); + } + }, true); } window.ajaxEditorCancel = function() { - miniPromptMessage({ - title: $lang.get('editor_msg_cancel_confirm_title'), - message: $lang.get('editor_msg_cancel_confirm_body'), - buttons: [ - { - text: $lang.get('editor_btn_cancel_confirm'), - color: 'red', - sprite: [ editor_img_path + '/sprite.png', 16, 16, 0, 16 ], - style: { - fontWeight: 'bold' - }, - onclick: function() - { - setAjaxLoading(); - ajaxEditorDestroyModalWindow(); - editor_open = false; - enableUnload(); - $dynano('ajaxEditArea').destroyMCE(false); - ajaxReset(); - miniPromptDestroy(this); - return false; - } - }, - { - text: $lang.get('editor_btn_cancel_cancel'), - onclick: function() - { - miniPromptDestroy(this); - return false; - } - } - ] - }); + miniPromptMessage({ + title: $lang.get('editor_msg_cancel_confirm_title'), + message: $lang.get('editor_msg_cancel_confirm_body'), + buttons: [ + { + text: $lang.get('editor_btn_cancel_confirm'), + color: 'red', + sprite: [ editor_img_path + '/sprite.png', 16, 16, 0, 16 ], + style: { + fontWeight: 'bold' + }, + onclick: function() + { + setAjaxLoading(); + ajaxEditorDestroyModalWindow(); + editor_open = false; + enableUnload(); + $dynano('ajaxEditArea').destroyMCE(false); + ajaxReset(); + miniPromptDestroy(this); + return false; + } + }, + { + text: $lang.get('editor_btn_cancel_cancel'), + onclick: function() + { + miniPromptDestroy(this); + return false; + } + } + ] + }); } window.ajaxSetEditorMCE = function(confirmed) { - if ( editor_loading ) - return false; - - if ( !confirmed ) - { - miniPromptMessage({ - title: $lang.get('editor_msg_convert_confirm_title'), - message: $lang.get('editor_msg_convert_confirm_body'), - buttons: [ - { - color: 'blue', - text: $lang.get('editor_btn_graphical'), - style: { - fontWeight: 'bold' - }, - sprite: [ editor_img_path + '/sprite.png', 16, 16, 0, 112 ], - onclick: function() - { - ajaxSetEditorMCE(true); - miniPromptDestroy(this); - return false; - } - }, - { - text: $lang.get('etc_cancel'), - onclick: function() - { - miniPromptDestroy(this); - return false; - } - } - ] - }); - return false; - } - - // Clear out existing buttons - var span_wiki = $dynano('enano_edit_btn_pt').object; - var span_mce = $dynano('enano_edit_btn_mce').object; - span_wiki.style.display = 'inline'; - span_mce.style.display = 'none'; - - // Swap editor - $dynano('ajaxEditArea').switchToMCE(true); + if ( editor_loading ) + return false; + + if ( !confirmed ) + { + miniPromptMessage({ + title: $lang.get('editor_msg_convert_confirm_title'), + message: $lang.get('editor_msg_convert_confirm_body'), + buttons: [ + { + color: 'blue', + text: $lang.get('editor_btn_graphical'), + style: { + fontWeight: 'bold' + }, + sprite: [ editor_img_path + '/sprite.png', 16, 16, 0, 112 ], + onclick: function() + { + ajaxSetEditorMCE(true); + miniPromptDestroy(this); + return false; + } + }, + { + text: $lang.get('etc_cancel'), + onclick: function() + { + miniPromptDestroy(this); + return false; + } + } + ] + }); + return false; + } + + // Clear out existing buttons + var span_wiki = $dynano('enano_edit_btn_pt').object; + var span_mce = $dynano('enano_edit_btn_mce').object; + span_wiki.style.display = 'inline'; + span_mce.style.display = 'none'; + + // Swap editor + $dynano('ajaxEditArea').switchToMCE(true); } window.ajaxSetEditorPlain = function(confirmed) { - if ( editor_loading ) - return false; - - if ( !confirmed ) - { - miniPromptMessage({ - title: $lang.get('editor_msg_convert_confirm_title'), - message: $lang.get('editor_msg_convert_confirm_body'), - buttons: [ - { - color: 'green', - text: $lang.get('editor_btn_wikitext'), - style: { - fontWeight: 'bold' - }, - sprite: [ editor_img_path + '/sprite.png', 16, 16, 0, 96 ], - onclick: function() - { - ajaxSetEditorPlain(true); - miniPromptDestroy(this); - return false; - } - }, - { - text: $lang.get('etc_cancel'), - onclick: function() - { - miniPromptDestroy(this); - return false; - } - } - ] - }); - return false; - } - - // Clear out existing buttons - var span_wiki = $dynano('enano_edit_btn_pt').object; - var span_mce = $dynano('enano_edit_btn_mce').object; - span_wiki.style.display = 'none'; - span_mce.style.display = 'inline'; - - // Swap editor - $dynano('ajaxEditArea').destroyMCE(true); + if ( editor_loading ) + return false; + + if ( !confirmed ) + { + miniPromptMessage({ + title: $lang.get('editor_msg_convert_confirm_title'), + message: $lang.get('editor_msg_convert_confirm_body'), + buttons: [ + { + color: 'green', + text: $lang.get('editor_btn_wikitext'), + style: { + fontWeight: 'bold' + }, + sprite: [ editor_img_path + '/sprite.png', 16, 16, 0, 96 ], + onclick: function() + { + ajaxSetEditorPlain(true); + miniPromptDestroy(this); + return false; + } + }, + { + text: $lang.get('etc_cancel'), + onclick: function() + { + miniPromptDestroy(this); + return false; + } + } + ] + }); + return false; + } + + // Clear out existing buttons + var span_wiki = $dynano('enano_edit_btn_pt').object; + var span_mce = $dynano('enano_edit_btn_mce').object; + span_wiki.style.display = 'none'; + span_mce.style.display = 'inline'; + + // Swap editor + $dynano('ajaxEditArea').destroyMCE(true); } var editor_loading = false; window.ajaxSetEditorLoading = function() { - var ed = false; - if ( window.tinyMCE ) - { - ed = tinyMCE.get('ajaxEditArea'); - } - editor_loading = true; - if ( ed ) - { - ed.setProgressState(1); - } - else - { - ed = document.getElementById('ajaxEditArea'); - var blackout = document.createElement('div'); - blackout.style.position = 'absolute'; - blackout.style.top = $dynano('ajaxEditArea').Top() + 'px'; - blackout.style.left = $dynano('ajaxEditArea').Left() + 'px'; - blackout.style.width = $dynano('ajaxEditArea').Width() + 'px'; - blackout.style.height = $dynano('ajaxEditArea').Height() + 'px'; - blackout.style.backgroundColor = '#FFFFFF'; - domObjChangeOpac(60, blackout); - blackout.style.backgroundImage = 'url(' + scriptPath + '/includes/clientside/tinymce/themes/advanced/skins/default/img/progress.gif)'; - blackout.style.backgroundPosition = 'center center'; - blackout.style.backgroundRepeat = 'no-repeat'; - blackout.id = 'enano_editor_blackout'; - blackout.style.zIndex = getHighestZ() + 2; - - var body = document.getElementsByTagName('body')[0]; - body.appendChild(blackout); - } + var ed = false; + if ( window.tinyMCE ) + { + ed = tinyMCE.get('ajaxEditArea'); + } + editor_loading = true; + if ( ed ) + { + ed.setProgressState(1); + } + else + { + ed = document.getElementById('ajaxEditArea'); + var blackout = document.createElement('div'); + blackout.style.position = 'absolute'; + blackout.style.top = $dynano('ajaxEditArea').Top() + 'px'; + blackout.style.left = $dynano('ajaxEditArea').Left() + 'px'; + blackout.style.width = $dynano('ajaxEditArea').Width() + 'px'; + blackout.style.height = $dynano('ajaxEditArea').Height() + 'px'; + blackout.style.backgroundColor = '#FFFFFF'; + domObjChangeOpac(60, blackout); + blackout.style.backgroundImage = 'url(' + scriptPath + '/includes/clientside/tinymce/themes/advanced/skins/default/img/progress.gif)'; + blackout.style.backgroundPosition = 'center center'; + blackout.style.backgroundRepeat = 'no-repeat'; + blackout.id = 'enano_editor_blackout'; + blackout.style.zIndex = getHighestZ() + 2; + + var body = document.getElementsByTagName('body')[0]; + body.appendChild(blackout); + } } window.ajaxUnSetEditorLoading = function() { - editor_loading = false; - var ed = false; - if ( window.tinyMCE ) - { - ed = tinyMCE.get('ajaxEditArea'); - } - if ( ed ) - { - ed.setProgressState(0); - } - else - { - var blackout = document.getElementById('enano_editor_blackout'); - var body = document.getElementsByTagName('body')[0]; - if ( !blackout ) - return false; - body.removeChild(blackout); - } + editor_loading = false; + var ed = false; + if ( window.tinyMCE ) + { + ed = tinyMCE.get('ajaxEditArea'); + } + if ( ed ) + { + ed.setProgressState(0); + } + else + { + var blackout = document.getElementById('enano_editor_blackout'); + var body = document.getElementsByTagName('body')[0]; + if ( !blackout ) + return false; + body.removeChild(blackout); + } } window.ajaxAutosaveDraft = function() { - var aed = document.getElementById('ajaxEditArea'); - if ( !aed ) - return false; - var last_save = aed.as_last_save; - var now = unix_time(); - if ( ( last_save + 120 ) < now && aed.value != aed.content_orig ) - { - ajaxPerformAutosave(); - } + var aed = document.getElementById('ajaxEditArea'); + if ( !aed ) + return false; + var last_save = aed.as_last_save; + var now = unix_time(); + if ( ( last_save + 120 ) < now && aed.value != aed.content_orig ) + { + ajaxPerformAutosave(); + } } window.ajaxPerformAutosave = function() { - var aed = document.getElementById('ajaxEditArea'); - if ( !aed ) - return false; - var now = unix_time(); - aed.as_last_save = now; - - var ta_content = $dynano('ajaxEditArea').getContent(); - - if ( ta_content == '' || ta_content == '

' || ta_content == '

 

' ) - { - return false; - } - - ajaxEditorSave(true); + var aed = document.getElementById('ajaxEditArea'); + if ( !aed ) + return false; + var now = unix_time(); + aed.as_last_save = now; + + var ta_content = $dynano('ajaxEditArea').getContent(); + + if ( ta_content == '' || ta_content == '

' || ta_content == '

 

' ) + { + return false; + } + + ajaxEditorSave(true); } window.ajaxEditorUseDraft = function() { - var aed = document.getElementById('ajaxEditArea'); - if ( !aed ) - return false; - ajaxSetEditorLoading(); - ajaxGet(stdAjaxPrefix + '&_mode=getsource&get_draft=1', function(ajax) - { - if ( ajax.readyState == 4 && ajax.status == 200 ) - { - ajaxUnSetEditorLoading(); - - var response = String(ajax.responseText + ''); - if ( !check_json_response(response) ) - { - handle_invalid_json(response); - return false; - } - - response = parseJSON(response); - if ( response.mode == 'error' ) - { - unselectAllButtonsMinor(); - new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_server'), response.error); - return false; - } - - editor_convert_if_needed(response.page_format); - - $dynano('ajaxEditArea').setContent(response.src); - $dynano('ajaxEditArea').object.used_draft = true; - - var es = document.getElementById('enano_editor_field_summary'); - if ( es.value == '' ) - { - es.value = response.edit_summary; - } - - var dn = $dynano('ajax_edit_draft_notice').object; - dn.parentNode.removeChild(dn); - } - }, true); + var aed = document.getElementById('ajaxEditArea'); + if ( !aed ) + return false; + ajaxSetEditorLoading(); + ajaxGet(stdAjaxPrefix + '&_mode=getsource&get_draft=1', function(ajax) + { + if ( ajax.readyState == 4 && ajax.status == 200 ) + { + ajaxUnSetEditorLoading(); + + var response = String(ajax.responseText + ''); + if ( !check_json_response(response) ) + { + handle_invalid_json(response); + return false; + } + + response = parseJSON(response); + if ( response.mode == 'error' ) + { + unselectAllButtonsMinor(); + new MessageBox(MB_OK | MB_ICONSTOP, $lang.get('editor_err_server'), response.error); + return false; + } + + editor_convert_if_needed(response.page_format); + + $dynano('ajaxEditArea').setContent(response.src); + $dynano('ajaxEditArea').object.used_draft = true; + + var es = document.getElementById('enano_editor_field_summary'); + if ( es.value == '' ) + { + es.value = response.edit_summary; + } + + var dn = $dynano('ajax_edit_draft_notice').object; + dn.parentNode.removeChild(dn); + } + }, true); } window.editor_convert_if_needed = function(targetformat, noticetitle, noticebody) { - // Do we need to change the format? - var need_to_mce = ( targetformat == 'xhtml' && !$dynano('ajaxEditArea').isMCE() ); - var need_to_wkt = ( targetformat == 'wikitext' && $dynano('ajaxEditArea').isMCE() ); - if ( need_to_mce ) - { - $dynano('ajaxEditArea').setContent(''); - $dynano('ajaxEditArea').switchToMCE(false); - - // Clear out existing buttons - var span_wiki = $dynano('enano_edit_btn_pt').object; - var span_mce = $dynano('enano_edit_btn_mce').object; - span_wiki.style.display = 'inline'; - span_mce.style.display = 'none'; - } - else if ( need_to_wkt ) - { - $dynano('ajaxEditArea').setContent(''); - $dynano('ajaxEditArea').destroyMCE(false); - - // Clear out existing buttons - var span_wiki = $dynano('enano_edit_btn_pt').object; - var span_mce = $dynano('enano_edit_btn_mce').object; - span_wiki.style.display = 'none'; - span_mce.style.display = 'inline'; - } - if ( need_to_mce || need_to_wkt ) - { - // explain the conversion - if ( !noticetitle ) - noticetitle = 'editor_msg_convert_draft_load_title'; - if ( !noticebody ) - noticebody = 'editor_msg_convert_draft_load_body'; - - miniPromptMessage({ - title: $lang.get(noticetitle), - message: $lang.get(noticebody), - buttons: [ - { - text: $lang.get('etc_ok'), - onclick: function() - { - miniPromptDestroy(this); - return false; - } - } - ] - }); - } + // Do we need to change the format? + var need_to_mce = ( targetformat == 'xhtml' && !$dynano('ajaxEditArea').isMCE() ); + var need_to_wkt = ( targetformat == 'wikitext' && $dynano('ajaxEditArea').isMCE() ); + if ( need_to_mce ) + { + $dynano('ajaxEditArea').setContent(''); + $dynano('ajaxEditArea').switchToMCE(false); + + // Clear out existing buttons + var span_wiki = $dynano('enano_edit_btn_pt').object; + var span_mce = $dynano('enano_edit_btn_mce').object; + span_wiki.style.display = 'inline'; + span_mce.style.display = 'none'; + } + else if ( need_to_wkt ) + { + $dynano('ajaxEditArea').setContent(''); + $dynano('ajaxEditArea').destroyMCE(false); + + // Clear out existing buttons + var span_wiki = $dynano('enano_edit_btn_pt').object; + var span_mce = $dynano('enano_edit_btn_mce').object; + span_wiki.style.display = 'none'; + span_mce.style.display = 'inline'; + } + if ( need_to_mce || need_to_wkt ) + { + // explain the conversion + if ( !noticetitle ) + noticetitle = 'editor_msg_convert_draft_load_title'; + if ( !noticebody ) + noticebody = 'editor_msg_convert_draft_load_body'; + + miniPromptMessage({ + title: $lang.get(noticetitle), + message: $lang.get(noticebody), + buttons: [ + { + text: $lang.get('etc_ok'), + onclick: function() + { + miniPromptDestroy(this); + return false; + } + } + ] + }); + } }