_ _    _ _____  ___   __                       
 __      _(_) | _(_)___ / ( _ ) / /_   ___ ___  _ __ ___  
 \ \ /\ / / | |/ / | |_ \ / _ \| '_ \ / __/ _ \| '_ ` _ \ 
  \ V  V /| |   <| |___) | (_) | (_) | (_| (_) | | | | | |
   \_/\_/ |_|_|\_\_|____/ \___/ \___(_)___\___/|_| |_| |_|

MediaWiki:Gadget-MagnusEditBox.js

MediaWiki:Gadget-MagnusEditBox.js est un sujet qui a retenu l'attention de millions de personnes à travers le monde. Depuis son émergence, elle fait l’objet de débats, de discussions et d’explorations, alors que les experts, les universitaires et le grand public tentent de comprendre son impact sur la société contemporaine. Cet article plonge dans MediaWiki:Gadget-MagnusEditBox.js, examinant ses origines, son évolution et sa pertinence actuelle. À travers une analyse détaillée et perspicace, nous cherchons à faire la lumière sur ce phénomène, en fournissant une vision complète et actualisée de sa signification et de son influence dans divers domaines. En abordant MediaWiki:Gadget-MagnusEditBox.js sous différents angles, l'objectif est d'offrir une vue panoramique qui permet au lecteur d'approfondir ce sujet avec une compréhension large et profonde.
/*
* MagnusEditBox (basé sur Less edit clutter de Magnus Manske
* ])
*
* Divise le fenêtre d'édition en plusieurs fenêtres : une fenêtre pour l'en-tête (infobox, image),
* une fenêtre pour l'article en lui même, une fenêtre pour les catégories, une fenêtre pour les
* interwikis et une fenêtre pour les références
*
* Auteur : Magnus Manske
* Dernière révision : 8 janvier 2009
* {{Projet:JavaScript/Script|MagnusEditBox}}
*/
//<nowiki>

/* globals mw, $ */

(function () {

  var lec_sort_category = false;

  var lec_parse_references = 0 ;

  var lec_parent ;
  var lec_tb1 ;
  var lec_original ;
  var lec_tb_top ;
  var lec_tb_ill ;
  var lec_tb_cat ;
  var lec_tb_bt ;
  var lec_tb_ref ;
  var lec_active ;
  var lec_last_edited = null ;


  function less_edit_clutter_init () {
    lec_active = 1 ;
    less_edit_clutter_create_elements () ;
    less_edit_clutter_hook_button ( 'wpSave' ) ;
    less_edit_clutter_hook_button ( 'wpPreview' ) ;
    less_edit_clutter_hook_button ( 'wpDiff' ) ;
    less_edit_clutter_parse_main_textbox () ;
  }

  function less_edit_clutter_insert_at_cursor ( field , value ) {
    if (document.selection) {
      field.focus();
      var 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);
    }
  }

  function less_edit_clutter_hook_button ( id ) {
    var b = document.getElementById ( id ) ;
    b.onclick = function () { less_edit_clutter_rejoin() ; return true ; } ;
  }

  function less_edit_clutter_delete_reference () {
    var si = lec_tb_ref.selectedIndex ;
    if ( si == null || si == -1 ) return false; // Nothing selected
    var text = lec_tb_ref.firstChild.nodeValue ;
    text = text.split ( ' : ' ) ;
    var value = text.shift() ;

    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 false;

    var refstuff = prompt ( "Enter reference name:" , '' ) ;
    if ( null == refstuff ) return false; // Cancel
    var text = prompt ( "Enter reference contents:" , '' ) ;
    if ( null == text ) return false; // 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.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_edit () {
    var si = lec_tb_ref.selectedIndex ;
    if ( si == null || si == -1 ) return false; // Nothing selected
    var text = lec_tb_ref.firstChild.nodeValue ;
    text = text.split ( ' : ' ) ;
    var value = text.shift() ;
    text = text.join ( ' : ' ) ;
    text = text.split ( ' | ' ) ;
    var refstuff = text.shift() ;
    text = text.join ( ' | ' ) ;
    refstuff = prompt ( "Entrez le nom de la référence :" , refstuff ) ;
    if ( null == refstuff ) return ; // Cancel
    text = prompt ( "Entrez le contenu de la référence :" , text ) ;
    if ( null == text ) return ; // Cancel
    lec_tb_ref.firstChild.nodeValue = value + ' : ' + refstuff + ' | ' + text ;
    return false;
  }

  // compare be-x-old:xxx and be:xxx doesn't work as expected
  // we must sort on the lang code only
  function less_edit_clutter_compare_lang(a, b) {
     a = a.split(':');
     b = b.split(':');
     if (a > b)
        return 1;
     else if (a < b)
        return -1;
     return 0;
  }

  function less_edit_clutter_rejoin () {
    var v, n, i, s ;

    if ( lec_active != 1 ) return ;
    v = lec_tb_top.value ;
    v = v.replace(/^\s+|\s+$/g,"") ;
    if ( v != '' ) v += "\n" ;
    v += lec_tb1.value ;
    v = v.replace(/^\s+|\s+$/g,"") ;
    if ( v != '' ) v += "\n\n" ;
    v += lec_tb_bt.value ;
    // Conserver autant que possible le formatage des modèles de bas
    // de page sans chercher à conserver la mixin de cat/interwikis et
    // de modèles
    //v = v.replace(/^\s+|\s+$/g,"") ;
    if ( v != '' ) v += "\n" ;

    // Categories
    n = lec_tb_cat.value.split ( "\n" ) ;
    if (lec_sort_category)
      n = n.sort() ;
    for ( i = 0 ; i < n.length ; i++ ) {
      s = n.replace(/^\s+|\s+$/g,"") ;
      if ( s == '' ) continue ;
      v += '[[Catégorie:' +
           s + "]]\n" ;
    }
    v = v.replace(/^\s+|\s+$/g,"") ;
    if ( v != '' ) v += "\n\n" ;

    // Interlanguage links
    n = lec_tb_ill.value.split ( "\n" ) ;
    n = n.sort(less_edit_clutter_compare_lang) ;
    for ( i = 0 ; i < n.length ; i++ ) {
      s = n.replace(/^\s+|\s+$/g,"") ;
      if ( s == '' ) continue ;
      v += ']\n" ;
    }
    v = v.replace(/^\s+|\s+$/g,"") ;

    if ( lec_parse_references ) {
      for ( 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 != '' ) refstuff = ' name="' + refstuff + '"' ;
        text = '<ref' + refstuff + '>' + text + '</ref>' ;
        var key = '<<REF' + value + '>>' ;
        v = v.split(key).join(text) ;
      }
    }

    lec_tb1.value = v ;
  }

  function less_edit_clutter_create_elements () {
    lec_tb1 = document.getElementById ( 'wpTextbox1' ) ;
    lec_parent = lec_tb1.parentNode ;

    lec_tb_top = document.createElement ( 'textarea' ) ;
    lec_tb_top.id = 'lec_tb_top' ;
    lec_tb_top.name = 'lec_tb_top' ;
    lec_tb_top.cols = 80 ;
    lec_tb_top.rows = 5 ;

    lec_tb_ill = document.createElement ( 'textarea' ) ;
    lec_tb_ill.id = 'lec_tb_ill' ;
    lec_tb_ill.name = 'lec_tb_ill' ;
    lec_tb_ill.cols = 30 ;
    lec_tb_ill.rows = 5 ;

    lec_tb_cat = document.createElement ( 'textarea' ) ;
    lec_tb_cat.id = 'lec_tb_cat' ;
    lec_tb_cat.name = 'lec_tb_cat' ;
    lec_tb_cat.cols = 30 ;
    lec_tb_cat.rows = 5 ;

    lec_tb_bt = document.createElement ( 'textarea' ) ;
    lec_tb_bt.id = 'lec_tb_bt' ;
    lec_tb_bt.name = 'lec_tb_bt' ;
    lec_tb_bt.cols = 30 ;
    lec_tb_bt.rows = 5 ;

    var lec_bottom_table = document.createElement ( 'table' ) ;
    var lec_bottom_tbody = document.createElement ( 'tbody' ) ;
    var lec_bottom_tr = document.createElement ( 'tr' ) ;
    var lec_bottom_tr2 = document.createElement ( 'tr' ) ;
    var lec_bottom_td1 = document.createElement ( 'td' ) ;
    var lec_bottom_td2 = document.createElement ( 'td' ) ;
    var lec_bottom_td3 = document.createElement ( 'td' ) ;

    lec_bottom_td1.style.width = '40%' ;
    lec_bottom_td2.style.width = '30%' ;
    lec_bottom_td3.style.width = '30%' ;

    lec_bottom_td1.appendChild ( document.createTextNode ( 'Modèles de bas de page et mots magiques' ) ) ;
    lec_bottom_td1.appendChild ( document.createElement ( 'br' ) ) ;
    lec_bottom_td1.appendChild ( lec_tb_bt ) ;

    lec_bottom_td2.appendChild ( document.createTextNode ( 'Catégories' ) ) ;
    lec_bottom_td2.appendChild ( document.createElement ( 'br' ) ) ;
    lec_bottom_td2.appendChild ( lec_tb_cat ) ;

    lec_bottom_td3.appendChild ( document.createTextNode ( 'Liens interwikis' ) ) ;
    lec_bottom_td3.appendChild ( document.createElement ( 'br' ) ) ;
    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_edit ;

      var a_new_reference = document.createElement ( 'a' ) ;
      a_new_reference.appendChild ( document.createTextNode ( 'ajouter' ) ) ;
      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 ( 'supprimer' ) ) ;
      a_delete_reference.href = '#' ;
      a_delete_reference.onclick = less_edit_clutter_delete_reference ;

      var a_edit_reference = document.createElement ( 'a' ) ;
      a_edit_reference.appendChild ( document.createTextNode ( 'éditer' ) ) ;
      a_edit_reference.href = '#' ;
      a_edit_reference.onclick = less_edit_clutter_refsel_edit ;

      var lec_bottom_td4 = document.createElement ( 'td' ) ;
      lec_bottom_td4.appendChild ( document.createTextNode ( 'Références (' ) ) ;
      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 ( a_edit_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 ) ;
    lec_bottom_tr.appendChild ( lec_bottom_td3 ) ;
    lec_bottom_tbody.appendChild ( lec_bottom_tr ) ;
    lec_bottom_table.appendChild ( lec_bottom_tbody ) ;

    var a = document.createElement ( 'a' ) ;
    a.href = '#' ;
    a.appendChild ( document.createTextNode ( "basculer en mode d'édition traditionnelle" ) ) ;
    a.onclick = function () {
      var u = document.getElementById('lec_div_top') ;
      u.parentNode.removeChild ( u ) ;
      u = document.getElementById('lec_div_bottom') ;
      u.parentNode.removeChild ( u ) ;
      lec_tb1.value = lec_original ;
      lec_active = 0 ;
      return false ;
    };

    var b = document.createElement ( 'a' ) ;
    b.href = '#' ;
    b.appendChild ( document.createTextNode ( "refaire pour le contenu courant" ) ) ;
    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 ( "Cœur de l'article (" ) ) ;
    adiv.appendChild ( a ) ;
    adiv.appendChild ( document.createTextNode ( " | " ) ) ;
    adiv.appendChild ( b ) ;
    adiv.appendChild ( document.createTextNode ( ")" ) ) ;

    top.appendChild ( document.createTextNode ( "Modèles d'en-tête et images" ) ) ;
    top.appendChild ( lec_tb_top ) ;
    top.appendChild ( adiv ) ;

    var bottom = document.createElement ( 'div' ) ;
    bottom.id = 'lec_div_bottom' ;

    bottom.appendChild ( document.createTextNode ( 'Bas de page' ) ) ;
    bottom.appendChild ( lec_bottom_table ) ;

    lec_parent.insertBefore ( bottom , lec_tb1.nextSibling ) ;
    lec_parent.insertBefore ( top , lec_tb1 ) ;

    lec_bottom_table.id = 'lec_tb_bottom' ;
    lec_bottom_table.style.width = '100%' ;
    lec_bottom_table.style.cellSpacing = '2' ;
    lec_bottom_table.style.cellPadding = '2' ;


    less_edit_clutter_append_show_hide ( 'lec_tb_top' ) ;
    less_edit_clutter_append_show_hide ( 'lec_tb_bottom' ) ;
  }

  function less_edit_clutter_toggle_show_hide ( id , a ) {
    var x = document.getElementById ( id ) ;
    if ( x.style.display == 'none' ) {
      x.style.display = '' ;
      while ( a.firstChild ) a.removeChild ( a.firstChild ) ;
      a.appendChild (  document.createTextNode ( 'masquer' ) ) ;
    } else {
      x.style.display = 'none' ;
      while ( a.firstChild ) a.removeChild ( a.firstChild ) ;
      a.appendChild ( document.createTextNode ( 'voir' ) ) ;
    }
  }

  function less_edit_clutter_append_show_hide ( id ) {
    var x = document.getElementById ( id ) ;
    var n = document.createElement ( 'span' ) ;

    var a = document.createElement ( 'a' ) ;
    a.href = '#' ;
    a.onclick = function () { less_edit_clutter_toggle_show_hide ( id , this ) ; return false ; };
    a.appendChild ( document.createTextNode ( 'masquer' ) ) ;

    n.appendChild ( document.createTextNode ( ' (' ) ) ;
    n.appendChild ( a ) ;
    n.appendChild ( document.createTextNode ( ')' ) ) ;
    n.appendChild ( document.createElement ( 'br' ) ) ;

    x.parentNode.insertBefore ( n , x ) ;
  //  x.style.display = 'none' ;
  }

  function less_edit_clutter_validate_langlink(lc, no_ws, lines, languages) {
    // Not completly correct as ] will be identified as a lang link
    // even foo isn't one, for now handle only image:. Problem not solvable
    // unless we keep a complete liste of valid lang links (in a cookie filled from
    // sitematrix via api.php and a 24h expiration time ?)
    if ( lc.match(/^\\]$/) &&
         !lc.match(/^\\]$/) ) {
        lines.pop() ;
        var s = no_ws.substr ( 2 ) ;
        s = s.replace ( /\]\]$/ , "" ) ;
        languages.push ( s ) ;
        return true;
    }
    return false;
  }

  function less_edit_clutter_parse_main_textbox () {
    lec_original = lec_tb1.value ;
    var lines = lec_original.split("\n") ;
    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 ) {
      var cnt = 1 ;
      var v = lec_original ;
      v = v.split ( /<ref/ig ) ;
      var o = v.shift () ;
      var refs =  ;
      while ( lec_tb_ref.firstChild ) lec_tb_ref.removeChild ( lec_tb_ref.firstChild ) ;
      for ( var i = 0 ; i < v.length ; i++ ) {
        if ( v.substr(0,1) != ' ' && v.substr(0,1) != '>' ) { // Something that is not a reference tag
          o += '<ref' + v ;
          continue ;
        }
        var n = v.split ( '>' ) ;
        if ( n.length < 2 ) { o += '<ref' + v ; continue ; }
        var refstuff = n.shift() ;
        refstuff = refstuff.match ( /name=\"(.*)\"\s*$/ ) ;
        if ( null == refstuff ) refstuff = '' ;
        else refstuff = refstuff.pop() ;
        n = n.join ( '>' ) ;
        n = n.split ( '</ref>' ) ;
        if ( n.length < 2 ) { o += '<ref' + v ; continue ; }
        var refcontents = n.shift() ;
  //      if ( n.length > 1 ) { o += '<ref' + v ; continue ; }
        n = n.join ( '</ref>' ) ;
        o += '<<REF' + cnt + '>>' + n ;
        refs.push ( cnt + ' : ' + refstuff + ' | ' + refcontents ) ;
        cnt++ ;
      }
      for ( var j = 0 ; j < refs.length ; j++ ) {
        var opt = document.createElement ( 'option' ) ;
        opt.value = j ;
        opt.appendChild ( document.createTextNode ( refs ) ) ;
        lec_tb_ref.appendChild ( opt ) ;
      }
      lines = o.split("\n") ;
    }

    var no_ws ;

    // Begin of text
    while ( lines.length > 0 ) {
      no_ws = lines.replace(/^\s+|\s+$/g,"") ;
      var no_comment = no_ws.replace(/<!--.*-->/g, "").toLowerCase();
      if ( no_ws == "" ) {
        lines.shift() ;
        if ( begin_templates != '' ) begin_templates += "\n" ;
      } else if ( no_comment.match(/^\{\{*\}\}$/) ) {
        lines.shift() ;
        begin_templates = begin_templates + no_ws + "\n" ;
      } else if ( no_comment.match(/^\{\{*$/) ) {
        begin_templates = begin_templates + lines.shift() + "\n" ;
        in_template++ ;
      } else if ( in_template && no_comment.match(/^*\}\}\s*$/) ) {
        begin_templates = begin_templates + lines.shift() + "\n" ;
        in_template-- ;
      } else if ( in_template > 0 ) {
        begin_templates = begin_templates + lines.shift() + "\n" ;
      } else if ( no_comment.match(/^+$/) || no_comment.match(/^\s*<hr\s*\/*>\s*$/) ) {
        begin_templates = begin_templates + lines.shift() + "\n" ;
      } else if ( no_comment.match(/^\\]$/) ) {
        begin_templates = begin_templates + lines.shift() + "\n" ;
      } else break ;
    }

    begin_templates = begin_templates.replace(/^\s+|\s+$/g,"") ;


    var categories =  ;
    var languages =  ;
    var end_templates = "" ;

    // End of text
    in_template = 0 ;
    var end_templates_append = "" ;
    while ( lines.length > 0 ) {
      var lp = lines.length - 1 ;
      no_ws = lines.replace(/^\s+|\s+$/g,"") ;
      var lc = no_ws.toLowerCase() ;
      if ( lc == "" ) {
        lines.pop() ;
        if ( end_templates != '' ) end_templates = "\n" + end_templates ;
      } else if ( lc.substr ( 0 , 12 ) == "[[catégorie:" ) {
        lines.pop() ;
        var s = no_ws.substr ( 12 ) ;
        s = s.replace ( /\]\]$/ , "" ) ;
        categories.push ( s ) ;
      } else if (less_edit_clutter_validate_langlink(lc, no_ws, lines, languages)) {
        // less_edit_clutter_validate_langlink() save the lang link
      } 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 ;
      } else if ( lc.match(/^*\}\}$/) ) {
        end_templates = lines.pop() + "\n" + end_templates ;
        in_template++ ;
      } else if ( lc.match(/^\{\{*$/) ) {
        end_templates = lines.pop() + "\n" + end_templates ;
        in_template-- ;
      } else if ( no_ws.match(/^__NOTOC__$/) ) {
        end_templates = lines.pop() + "\n" + end_templates ;
      } else if ( in_template > 0 ) {
        end_templates = lines.pop() + "\n" + end_templates ;
      } else break ;
    }

    categories.reverse();

    var oet ;
    do {
      oet = end_templates ;
      end_templates = end_templates.split("\n\n\n").join("\n\n") ;
    } while ( end_templates != oet ) ;
    end_templates = end_templates.replace(/^\s+|\s+$/g,"") ;
    end_templates_append = end_templates_append.replace(/^\s+|\s+$/g,"") ;
    if ( end_templates != '') {
      if (end_templates_append != '')
         end_templates += "\n\n" ;
      else
         end_templates += "\n" ;
    }
    end_templates += end_templates_append ;

    // Set boxes
    lec_tb_top.value = begin_templates ;
    if (lec_sort_category)
      lec_tb_cat.value = categories.sort().join("\n") ;
    else
      lec_tb_cat.value = categories.join("\n") ;
    lec_tb_ill.value = languages.sort(less_edit_clutter_compare_lang).join("\n") ;
    lec_tb_bt.value = end_templates ;
    lec_tb1.value = lines.join("\n") ;
  }



  if ( ( mw.config.get('wgAction') == "submit" || mw.config.get('wgAction') == "edit" ) && mw.config.get('wgNamespaceNumber') == 0 ) {
    $( less_edit_clutter_init ) ;
  }

})();

//</nowiki>