User:Magnus Manske/less edit clutter.js: Difference between revisions

Content deleted Content added
mNo edit summary
m Remove legacy globals per phab:T72470 (via WP:JWB)
 
(20 intermediate revisions by one other user not shown)
Line 1:
if ( ( mw.config.get('wgAction') == "submit" || mw.config.get('wgAction') == "edit" ) && mw.config.get('wgNamespaceNumber') == 0 ) {
addOnloadHook ( less_edit_clutter_init ) ;
}
 
var lec_parse_references = 1 ;
 
var lec_parent ;
Line 10 ⟶ 12:
var lec_tb_cat ;
var lec_tb_bt ;
var lec_tb_ref ;
var lec_active ;
var lec_last_edited = null ;
 
 
Line 20 ⟶ 24:
less_edit_clutter_hook_button ( 'wpDiff' ) ;
less_edit_clutter_parse_main_textbox () ;
if(window.AJAXPreview) AJAXPreview.getTextContent = less_edit_clutter_get_rejoined_text ;
}
 
function less_edit_clutter_insert_at_cursor ( field , value ) {
if (document.selection) {
field.focus();
sel = document.selection.createRange();
sel.text = value;
} else if (field.selectionStart || field.selectionStart == '0') {
var startPos = field.selectionStart;
var endPos = field.selectionEnd;
field.value = field.value.substring(0, startPos)+ value+ field.value.substring(endPos, field.value.length);
}
}
 
Line 27 ⟶ 44:
}
 
function less_edit_clutter_rejoinless_edit_clutter_delete_reference () {
var si = lec_tb_ref.selectedIndex ;
if ( lec_active != 1 ) return ;
if ( !si || si == null ) return ; // Nothing selected
var text = lec_tb_ref[si].firstChild.nodeValue ;
text = text.split ( ' : ' ) ;
var value = text.shift() ;
text = text.join ( ' : ' ) ;
text = text.split ( ' | ' ) ;
var refstuff = text.shift() ;
text = text.join ( ' | ' ) ;
var key = '<<REF' + value + '>>' ;
lec_tb_top.value = lec_tb_top.value.split(key).join('') ;
lec_tb1.value = lec_tb1.value.split(key).join('') ;
lec_tb_bt.value = lec_tb_bt.value.split(key).join('') ;
less_edit_clutter_rejoin () ;
less_edit_clutter_parse_main_textbox () ;
return false ;
}
 
function less_edit_clutter_insert_new_reference () {
if ( lec_last_edited == null ) return ;
 
var refstuff = prompt ( "Enter reference name:" , '' ) ;
if ( null == refstuff ) return ; // Cancel
var text = prompt ( "Enter reference contents:" , '' ) ;
if ( null == text ) return ; // Cancel
 
var max = lec_tb_ref.length + 2 ;
 
less_edit_clutter_insert_at_cursor ( lec_last_edited , '<<REF' + max + '>>' ) ;
 
text = max + ' : ' + refstuff + ' | ' + text ;
var opt = document.createElement ( 'option' ) ;
opt.value = max-1 ;
opt.appendChild ( document.createTextNode ( text ) ) ;
lec_tb_ref.appendChild ( opt ) ;
less_edit_clutter_rejoin () ;
less_edit_clutter_parse_main_textbox () ;
return false ;
}
 
function less_edit_clutter_mark_text_range ( ctrl , from , to ) {
if(ctrl.setSelectionRange) {
ctrl.focus();
ctrl.setSelectionRange ( from , to ) ;
}
else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse ( true ) ;
range.moveEnd ( 'character', from ) ;
range.moveStart ( 'character', to ) ;
range.select();
}
}
 
function less_edit_clutter_tb1_select ( ta ) {
var selection = ta.value.substr(ta.selectionStart, ta.selectionEnd - ta.selectionStart);
if ( ! /^\<*REF\d+\>*$/.test ( selection ) ) return ;
var num = selection.match ( /^\<*REF(\d+)\>*$/ ) ;
num = num.pop() ;
num-- ;
lec_tb_ref[num].selected = true ;
}
 
function less_edit_clutter_find_and_mark ( text , ctrl ) {
var pos = ctrl.value.search ( text ) ;
if ( pos < 0 ) return true ; // Continue search
less_edit_clutter_mark_text_range ( ctrl , pos , pos + text.length ) ;
return false ;
}
 
function less_edit_clutter_refsel_changed () {
var si = lec_tb_ref.selectedIndex + 1 ;
var key = '<<REF' + si + '>>' ;
var cont = true ;
if ( cont ) cont = less_edit_clutter_find_and_mark ( key , lec_tb_top ) ;
if ( cont ) cont = less_edit_clutter_find_and_mark ( key , lec_tb1 ) ;
if ( cont ) cont = less_edit_clutter_find_and_mark ( key , lec_tb_bt ) ;
if ( cont ) alert ( "Something's wrong - could not find reference " + key + "! Better reload this edit in the standard edit box!" ) ;
}
 
function less_edit_clutter_refsel_double_clicked () {
var si = lec_tb_ref.selectedIndex ;
var text = lec_tb_ref[si].firstChild.nodeValue ;
text = text.split ( ' : ' ) ;
var value = text.shift() ;
text = text.join ( ' : ' ) ;
text = text.split ( ' | ' ) ;
var refstuff = text.shift() ;
text = text.join ( ' | ' ) ;
refstuff = prompt ( "Enter reference name:" , refstuff ) ;
if ( null == refstuff ) return ; // Cancel
text = prompt ( "Enter reference contents:" , text ) ;
if ( null == text ) return ; // Cancel
lec_tb_ref[si].firstChild.nodeValue = value + ' : ' + refstuff + ' | ' + text ;
}
 
function less_edit_clutter_get_rejoined_text () {
if ( lec_active != 1 ) return '' ;
v = lec_tb_top.value ;
v = v.replace(/^\s+|\s+$/g,"") ;
Line 45 ⟶ 162:
s = n[i].replace(/^\s+|\s+$/g,"") ;
if ( s == '' ) continue ;
v += '[[Category:' +
s + "]]\n" ;
}
v = v.replace(/^\s+|\s+$/g,"") ;
Line 59 ⟶ 177:
}
v = v.replace(/^\s+|\s+$/g,"") ;
if ( lec_parse_references ) {
for ( var n = lec_tb_ref.firstChild ; n ; n = n.nextSibling ) {
var text = n.firstChild.nodeValue ;
text = text.split ( ' : ' ) ;
var value = text.shift() ;
text = text.join ( ' : ' ) ;
text = text.split ( ' | ' ) ;
var refstuff = text.shift() ;
text = text.join ( ' | ' ) ;
if ( refstuff != '' ) {
var r = refstuff.match ( /^(.*)::(.*)$/ ) ;
if ( r == null ) {
refstuff = ' name="' + refstuff + '"' ;
} else {
var gn = r.pop() ;
var rn = r.pop() ;
refstuff = '' ;
if ( gn != '' ) refstuff += ' group="' + gn + '"' ;
if ( rn != '' ) refstuff += ' name="' + rn + '"' ;
}
}
text = '<ref' + refstuff + '>' + text + '</ref>' ;
var key = '<<REF' + value + '>>' ;
v = v.split(key).join(text) ;
}
}
return v ;
}
 
function less_edit_clutter_rejoin () {
lec_tb1.value = v ;
if ( lec_active != 1 ) return ;
lec_tb1.value = less_edit_clutter_get_rejoined_text() ;
}
 
Line 90 ⟶ 240:
lec_tb_bt.cols = 30 ;
lec_tb_bt.rows = 5 ;
 
lec_bottom_table = document.createElement ( 'table' ) ;
lec_bottom_tbody = document.createElement ( 'tbody' ) ;
lec_bottom_tr = document.createElement ( 'tr' ) ;
lec_bottom_tr2 = document.createElement ( 'tr' ) ;
lec_bottom_td1 = document.createElement ( 'td' ) ;
lec_bottom_td2 = document.createElement ( 'td' ) ;
Line 114 ⟶ 265:
lec_bottom_td3.appendChild ( lec_tb_ill ) ;
 
if ( lec_parse_references ) {
lec_tb1.onselect = function () { less_edit_clutter_tb1_select ( lec_tb1 ) ; } ;
lec_tb_top.onselect = function () { less_edit_clutter_tb1_select ( lec_tb_top ) ; } ;
lec_tb_bt.onselect = function () { less_edit_clutter_tb1_select ( lec_tb_bt ) ; } ;
 
lec_tb1.onfocus = function () { lec_last_edited = lec_tb1 ; } ;
lec_tb_top.onfocus = function () { lec_last_edited = lec_tb_top ; } ;
lec_tb_bt.onfocus = function () { lec_last_edited = lec_tb_bt ; } ;
 
lec_tb_ref = document.createElement ( 'select' ) ;
lec_tb_ref.id = 'lec_tb_ref' ;
lec_tb_ref.name = 'lec_tb_ref' ;
lec_tb_ref.size = 5 ;
lec_tb_ref.style.width = '100%' ;
lec_tb_ref.onchange = less_edit_clutter_refsel_changed ;
lec_tb_ref.ondblclick = less_edit_clutter_refsel_double_clicked ;
 
var a_new_reference = document.createElement ( 'a' ) ;
a_new_reference.appendChild ( document.createTextNode ( 'insert new reference' ) ) ;
a_new_reference.href = '#' ;
a_new_reference.onclick = less_edit_clutter_insert_new_reference ;
 
var a_delete_reference = document.createElement ( 'a' ) ;
a_delete_reference.appendChild ( document.createTextNode ( 'delete reference' ) ) ;
a_delete_reference.href = '#' ;
a_delete_reference.onclick = less_edit_clutter_delete_reference ;
 
lec_bottom_td4 = document.createElement ( 'td' ) ;
lec_bottom_td4.appendChild ( document.createTextNode ( 'References (' ) ) ;
lec_bottom_td4.appendChild ( a_new_reference ) ;
lec_bottom_td4.appendChild ( document.createTextNode ( ' | ' ) ) ;
lec_bottom_td4.appendChild ( a_delete_reference ) ;
lec_bottom_td4.appendChild ( document.createTextNode ( ')' ) ) ;
lec_bottom_td4.appendChild ( document.createElement ( 'br' ) ) ;
lec_bottom_td4.appendChild ( lec_tb_ref ) ;
lec_bottom_td4.colSpan = '3' ;
 
lec_bottom_tr2.appendChild ( lec_bottom_td4 ) ;
lec_bottom_tbody.appendChild ( lec_bottom_tr2 ) ;
}
lec_bottom_tr.appendChild ( lec_bottom_td1 ) ;
lec_bottom_tr.appendChild ( lec_bottom_td2 ) ;
Line 122 ⟶ 314:
var a = document.createElement ( 'a' ) ;
a.href = '#' ;
a.appendChild ( document.createTextNode ( "resetreload toin standard edit box" ) ) ;
a.onclick = function () {
u = document.getElementById('lec_div_top') ;
Line 130 ⟶ 322:
lec_tb1.value = lec_original ;
lec_active = 0 ;
return false ;
}
 
var b = document.createElement ( 'a' ) ;
b.href = '#' ;
b.appendChild ( document.createTextNode ( "redo for current contents" ) ) ;
b.onclick = function () {
less_edit_clutter_rejoin () ;
less_edit_clutter_parse_main_textbox () ;
return false ;
}
var top = document.createElement ( 'div' ) ;
top.id = 'lec_div_top' ;
 
var adiv = document.createElement ( 'div' ) ;
adiv.style.display = 'block' ;
adiv.appendChild ( document.createTextNode ( "Main text (" ) ) ;
adiv.appendChild ( a ) ;
adiv.appendChild ( document.createTextNode ( " | " ) ) ;
adiv.appendChild ( b ) ;
adiv.appendChild ( document.createTextNode ( ")" ) ) ;
 
top.appendChild ( document.createTextNode ( "Header templates and images" ) ) ;
top.appendChild ( lec_tb_top ) ;
top.appendChild ( document.createTextNode ( "Main text (" )adiv ) ;
top.appendChild ( a ) ;
top.appendChild ( document.createTextNode ( ")" ) ) ;
 
var bottom = document.createElement ( 'div' ) ;
Line 196 ⟶ 403:
var in_template = 0 ;
var begin_templates = "" ;
// References
if ( lec_parse_references && /\<\<REF\d+\>\>/.test ( lec_original ) ) lec_parse_references = 0 ; // Already contains pattern, aborting
if ( lec_parse_references ) {
cnt = 1 ;
v = lec_original ;
v = v.split ( /\<ref/ig ) ;
o = v.shift () ;
refs = new Array () ;
while ( lec_tb_ref.firstChild ) lec_tb_ref.removeChild ( lec_tb_ref.firstChild ) ;
for ( i = 0 ; i < v.length ; i++ ) {
if ( v[i].substr(0,1) != ' ' && v[i].substr(0,1) != '>' ) { // Something that is not a reference tag
o += '<ref' + v[i] ;
continue ;
}
n = v[i].split ( '>' ) ;
if ( n.length < 2 ) { o += '<ref' + v[i] ; continue ; }
var attrs = n.shift() ;
var name_attr = attrs ;
rs = name_attr.match ( /name=\"([^"]*)\"/ ) ;
if ( rs == null ) rs = name_attr.match ( /name=\'([^']*)\'/ ) ;
if ( rs == null ) rs = name_attr.match ( /name=([a-zA-Z0-9_\-]*)/ ) ;
name_attr = rs ;
if ( null == name_attr ) name_attr = '' ;
else name_attr = name_attr.pop() ;
 
var group_attr = attrs ;
rs = group_attr.match ( /group=\"([^"]*)\"/ ) ;
if ( rs == null ) rs = group_attr.match ( /group=\'([^']*)\'/ ) ;
if ( rs == null ) rs = group_attr.match ( /group=([a-zA-Z0-9_\-]*)/ ) ;
group_attr = rs ;
if ( null == group_attr ) group_attr = '' ;
else group_attr = group_attr.pop() ;
refstuff = name_attr ;
if ( group_attr != '' ) refstuff += "::" + group_attr ;
n = n.join ( '>' ) ;
n = n.split ( '</ref>' ) ;
if ( n.length < 2 ) { o += '<ref' + v[i] ; continue ; }
refcontents = n.shift() ;
// if ( n.length > 1 ) { o += '<ref' + v[i] ; continue ; }
n = n.join ( '</ref>' ) ;
o += '<<REF' + cnt + '>>' + n ;
refs.push ( cnt + ' : ' + refstuff + ' | ' + refcontents ) ;
cnt++ ;
}
for ( i = 0 ; i < refs.length ; i++ ) {
var opt = document.createElement ( 'option' ) ;
opt.value = i ;
opt.appendChild ( document.createTextNode ( refs[i] ) ) ;
lec_tb_ref.appendChild ( opt ) ;
}
lines = o.split("\n") ;
}
 
// Begin of text
var in_table = 0 ;
while ( lines.length > 0 ) {
var no_ws = lines[0].replace(/^\s+|\s+$/g,"") ;
Line 219 ⟶ 485:
} else if ( lc.match(/^\[\[image\:.*\]\]$/) ) {
begin_templates = begin_templates + lines.shift() + "\n" ;
} else if ( lc.match(/^\[\[file\:.*\]\]$/) ) {
begin_templates = begin_templates + lines.shift() + "\n" ;
} else if ( lc.match(/^:/) ) { // Indented "For other uses..."
begin_templates = begin_templates + lines.shift() + "\n" ;
} else if ( lc.match(/^\{\|/) ) { // Table open
in_table++ ;
begin_templates = begin_templates + lines.shift() + "\n" ;
} else if ( lc.match(/^\s*\|\}/) && in_table > 0 ) { // Table close
in_table-- ;
begin_templates = begin_templates + lines.shift() + "\n" ;
} else if ( in_table > 0 ) {
begin_templates = begin_templates + lines.shift() + "\n" ;
 
} else break ;
}
Line 251 ⟶ 532:
} else if ( lc.match(/^\{\{defaultsort\s*[\|\:].*\}\}$/) ) {
end_templates_append += "\n\n" + lines.pop() ;
} else if ( lc.match(/^\<!--.*-->$/) ) {
end_templates = lines.pop() + "\n" + end_templates ;
} else if ( lc.match(/^\{\{.*\}\}$/) ) {
end_templates = lines.pop() + "\n" + end_templates ;