MediaWiki:Gadget-LiveRC.js/Extensions/AddComplexTemplateExtension.js

Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/* 
 --------------------------------------------------------------------------------------
 ---------LLLL---------III--------------------------RRRRRRRRRR--------CCCCC------------
 ---------LLLL---------III--------------------------RRRRRRRRRRRR----CCCCCCCCC----------
 ---------LLLL--------------------------------------RRR------RRR---CCC-----CCC---------
 ---------LLLL---------III--VV-----VV--EEEEEEEEE----RRR------RRR--CCC------------------
 ---------LLLL---------III---VV---VV---EEE----------RRRRRRRRRRR---CCC------------------
 ---------LLLL---------III---VV---VV---EEEEEE-------RRRRRRRRRR----CCC------------------
 ---------LLLL---------III----VV-VV----EEEEEE-------RRR-----RRR----CCC-----CCC---------
 ---------LLLLLLLLLLL--III----VVVVV----EEE----------RRR------RRR----CCCCCCCCC----------
 ---------LLLLLLLLLLL--III-----VVV-----EEEEEEEEE----RRR-------RRR-----CCCCC------------
 --------------------------------------------------------------------------------------
 
'''Extension de LiveRC'''
 
// Permet d'insérer un bandeau d'article avec paramètres
 
* Licence : ...?
* Documentation : 
* Auteur : [[:it:User:Jalo]] [[:it:User:Rotpunkt]], [[:fr:User:Dr Brains]]
*
* This script contains functions (InserisciTemplate_showDialog, InserisciTemplate_dumpTemplate and InserisciTemplate_buildInputEl)
* and formats (all template definitions) modified from:
* http://it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-tb-base.js&oldid=66478020
* http://it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-tb-* (for the templates)
* author Rotpunkt (http://it.wikipedia.org/wiki/Utente:Rotpunkt)
*
* Développement et maintenance :
 
{{Catégorisation JS|LiveRC}}
*/
//<source lang=javascript>

if(typeof(LiveRC_AddHook)==="function"){ // DÉBUT IF
 LiveRC_Config["InstalledLiveRCExtensions"].push("InserisciTemplate");
/* ************************************************************************************************************************************************ */

window.Custom_lstMyTemplate = {};
window.lstMyTemplate = {
    'Ébauche': { 
      template:'Ébauche',
      string:'Ébauche',
      where:'top',
      noinclude: false,
      subst: false,
      parameters: {
              "1":     {name: 'Thème 1',     type: 'select'},
              "2":     {name: 'Thème 2',     type: 'select'},
              "3":     {name: 'Thème 3',     type: 'select'},
              "4":     {name: 'Thème 4',     type: 'select'},
              "5":     {name: 'Thème 5',     type: 'select'},
              "6":     {name: 'Thème 6',     type: 'select'}
      }
    },
    'À fusionner':{
      template:'À fusionner',
      string:'À fusionner',
      where:'top',
      noinclude: false,
      subst: false,
      parameters: {
              "1":          {name: 'Article 1',        type: 'string'},
              "2":          {name: 'Article 2',        type: 'string'},
              "3":          {name: 'Article 3',        type: 'string'},
              "4":          {name: 'Article 4',        type: 'string'},
              "5":          {name: 'Article 5',        type: 'string'},
              "6":          {name: 'Article 6',        type: 'string'},
              "section FT": {name: 'Titre de section', type: 'string'}
      }
    },
    'Fusion technique':{
      template:'Fusion technique',
      string:'Fusion technique',
      where:'top',
      noinclude: false,
      subst: false,
      parameters: {
              "1":          {name: 'Article 1',        type: 'string'},
              "2":          {name: 'Article 2',        type: 'string'},
              "3":          {name: 'Article 3',        type: 'string'},
              "4":          {name: 'Article 4',        type: 'string'},
              "5":          {name: 'Article 5',        type: 'string'},
              "6":          {name: 'Article 6',        type: 'string'},
              "section FT": {name: 'Titre de section', type: 'string'}
      }
    }
};


mw.loader.addStyleTag("" +
".InserisciTemplate_TemplateDiv {" +
"  border: 1px solid #808080;" +
"  padding: 0.5em;" +
"  margin: 2px;" +
"} " + 
".InserisciTemplate_template {" +
"  font-size:150%;" +
"  font-weight:bold;" +
"}"
);

window.AddComplexTemplateExtension_Init = function(){
  var GoodActions = (mw.config.get('wgAction')=="view"||mw.config.get('wgAction')=="purge");
  if(!GoodActions) return;
  var ThisPage = mw.config.get('wgPageName').replace(/_/g, " "); 
  var lrcPage =        ( ThisPage === lrcMakeParam("PageTitle") );
  var installPage =    ( ThisPage === LiveRC_Config["InstallationPage"]);
  var userCustomPage = ( ThisPage === lrcGetNamespaceName(2)+":"+mw.config.get('wgUserName')+LiveRC_Config["UserParamPage"]+".js");
  if(!lrcPage && !installPage && !userCustomPage ) return;  
  AddComplexTemplateExtension_getEbaucheParams();
}
LiveRC_AddHook("AfterGotUserInfos", AddComplexTemplateExtension_Init);


// ===== GET PARAMS FOR {{Ébauche}} =====


window.AddComplexTemplateExtension_getEbaucheParams = function(ParamList, apcontinue){
  if(!ParamList){ 
    ParamList = new Array();
    ParamList.push("");
  }
  if(!apcontinue) apcontinue = "";
  var URL = lrcGetAPIURL('format=xml&action=query')
          + '&list=allpages'
          + '&apnamespace=10'
          + '&aplimit='+LiveRC_Config["UserInfos"].APIlimit
          + '&apprefix=Ébauche/paramètres%20'
          + '&apfilterredir=nonredirects'
          + apcontinue; 
  wpajax.http({url:URL,
               onSuccess:AddComplexTemplateExtension_getEbaucheParamsDone,
               list:ParamList
  });
}

window.AddComplexTemplateExtension_getEbaucheParamsDone = function(Req, data){
  var ParamList = data.list;
  var ObjectXML = Req.responseXML;
  var pages = ObjectXML.getElementsByTagName('p');
  for(var a=0,l=pages.length;a<l;a++){
    var page = pages[a];
    var title = page.getAttribute("title").split('Ébauche/paramètres ')[1];
    if(!title || title == "?" ) continue;
    if(ParamList.indexOf(title)==-1) ParamList.push(title);
  }
  var MustContinue = ObjectXML.getElementsByTagName('query-continue')[0];
  if(MustContinue && MustContinue.getElementsByTagName("allpages")[0]){
    var apcontinue = "&apcontinue=" + encodeURIComponent(MustContinue.getElementsByTagName("allpages")[0].getAttribute("apcontinue"));
    AddComplexTemplateExtension_getEbaucheParams(ParamList, apcontinue);
  }else{
    try{
      var Params = lstMyTemplate['Ébauche'].parameters;
      for(var paramname in Params){
        if(!Params.hasOwnProperty(paramname)) continue;
        lstMyTemplate['Ébauche'].parameters[paramname].value = ParamList;
      }
    }catch(e){
      lrcDisplayDebug("Failed to get {{Ébauche}} params");
    };
    InserisciTemplate_PopulateConfigPanel();
  }
}
 
// ####################################################################################################################
// ####################################################################################################################
 
// Add options in the "Tag" form
 
window.lrcRunInsertTemplate = function(data){
    var TagSelect = document.getElementById('LiveTagReason');
 
    var TemplateList = Custom_lstMyTemplate;
    if(!lrcGetObjectLength(TemplateList)) TemplateList = lstMyTemplate;
    $.each(TemplateList, function(i, val) {
        var optTag = document.createElement('option');
        optTag.value = i;
        optTag.className = "InserisciTemplateExtension";
        optTag.innerHTML = val.string;
        TagSelect.appendChild(optTag);
    });
    // setup dialog
    mw.loader.using(['jquery.ui'], function () {
        $('<div>')
            .attr('id', 'gtb-dialog')
            .appendTo('body');
    });
}
LiveRC_AddHook("AfterPreviewArticle", lrcRunInsertTemplate); 
 
// Function launched when choosing one of this extension options
 
getLiveTagFunctions["InserisciTemplateExtension"] = function(page, option){
  lrcDisableLink("LiveTagReason");
  lrcDisableLink("LiveTagLink");
 
  var TemplateList = Custom_lstMyTemplate;
  if(!lrcGetObjectLength(TemplateList)) TemplateList = lstMyTemplate;
  var message = TemplateList[option.value];
  wpajax.http({ url: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml'
                     + '&action=query&prop=info&meta=tokens&type=csrf'
                     + '&inprop=protection'
                     + '&titles=' + encodeURIComponent(page),
                onSuccess: InserisciTemplate_PostTagPage,
                page: page,
                message: message});
  return false;
}
 
// Get page edit token and protection status
 
window.InserisciTemplate_PostTagPage = function(xmlreq, data){
  var page = data.page;
  var message = data.message; 
  ObjetXML = xmlreq.responseXML;
  var Isprotected = false;
  var PR = ObjetXML.getElementsByTagName("pr");
  for(var a=0,l=PR.length;a<l;a++){
    var Type = PR[a].getAttribute("type");
    var Level = PR[a].getAttribute("level");
    if(Type=="edit" && mw.config.get('wgUserGroups').indexOf(Level)==-1) Isprotected = true;
  }
  if(Isprotected){
    LiveRC_alert("<b>"+lrcMakeText("PROTECTEDPAGE").split("$1").join(page)+"</b>");
    return;
  }
  LiveRC_Config["edittoken"] = ObjetXML.getElementsByTagName('tokens')[0].getAttribute('csrftoken');  
  // show dialog
  var tpl = InserisciTemplate_showDialog(message, page);
}
 
// Show the dialog in order to ask for the template parameters.
 
window.InserisciTemplate_showDialog = function(data, page) {
    var $dialog, $fieldset;
    // create the dialog html
    $dialog = $('#gtb-dialog').html(lrcMakeText("IT_InsertTemplate1"));
    $('<a>')
        .attr('href', mw.config.get('wgArticlePath').split("$1").join(lrcGetNamespaceName(10)) + data.template)
        .attr('target', '_blank')
        .attr('tabindex', '-1')
        .css('color', '#2e45ad')
        .text(data.template)
        .appendTo($dialog);
    $dialog.append(lrcMakeText("IT_InsertTemplate2"));
    $fieldset = $('<fieldset>').css('border-color', 'gray').appendTo($dialog);
    $('<legend>').text(lrcMakeText('IT_InsertTemplateParams')).appendTo($fieldset);
    $.each(data.parameters, function (id, val) {
        var inputEl = InserisciTemplate_buildInputEl(id, val);
        $('<label>')
            .attr('for', id)
            .text(inputEl.label + ':')
            .appendTo($fieldset);
        $fieldset
            .append('<br/>')
            .append(inputEl.el)
            .append('<br/>');
    });
    // show the dialog
    var Buttons = new Object();
    var OKText = lrcMakeText('OK');
    var CancelText = lrcMakeText('Cancel');
    Buttons[OKText] = function () {
                var params = {};
                $dialog.find('input:text,select').each(function () {
                    params[this.id] = this.value.trim();
                });
                var text = InserisciTemplate_dumpTemplate(data, params);
                $(this).dialog('close');
                InserisciTemplate_postTemplate(data, text, page);
            };
    Buttons[CancelText] = function () {
                $(this).dialog('close');
            };
    $dialog.dialog({
        title: lrcMakeIcon("LogoIcon") + '&nbsp;' + data.string,
        width: 500,
        resizable: false,
        modal: true,
        zIndex: 10000,
        buttons: Buttons
    });
}
 
window.InserisciTemplate_buildInputEl = function(id, data) {
    var label, inputEl;
    if (data.type == 'string') {
        label = data.name;
        inputEl = $('<input/>')
            .attr('id', id)
            .attr('type', 'text')
            .attr('size', 50)
            .attr('value', (data.value || ''));
    } else if (data.type == 'select') {
        label = data.name;
        inputEl = $('<select>')
            .attr('id', id)
            .css('width', '200px');
        $.each(data.value, function (i, option) {
            $('<option>')
                .html(option)
                .appendTo(inputEl);
        });
    }
    return { label: label, el: inputEl };
}
 
// Check the dialog box and create the wikitext from the template and its params
 
window.InserisciTemplate_dumpTemplate = function(template, params) {
    var text, templateParams = "";
    templateParams = LiveRC_FormatTemplateParams(params || {});
    text = (template.noinclude ? '<noinclude>' : '') +
           '{{' + (template.subst ? 'subst:' : '') +
           template.template + '|' +
           (templateParams) + 
           '}}' +
           (template.noinclude ? '</noinclude>' : '') + '\n';
    return text;
}
 
window.LiveRC_FormatTemplateParams = function(params) {
    var text = new Array();
    for(var arg in params){
        if(params.hasOwnProperty(arg)) text.push(arg+"="+params[arg]);
    }
    return text.join("|");
}
 
// Save the edit 
 
window.InserisciTemplate_postTemplate  = function(data, text, page){
  lrcDisableLink("LiveTagReason");
  lrcDisableLink("LiveTagLink");
  var EditParam = new Array();
  EditParam["token"] = LiveRC_Config["edittoken"];
  if (data.where == 'top')
    EditParam["prependtext"] = text+"\n";
  else if (data.where == 'bottom')
    EditParam["appendtext"] = "\n"+text;
  else //default = top
    EditParam["prependtext"] = text+"\n";
  EditParam["summary"] = lrcMakeText("RESUMESTART") + lrcMakeText("TAG_RESUME") + ' ' + data.template;
  EditParam["title"] = page;
  EditParam["watchlist"] = "preferences";
  EditParam["notminor"] = "1";
  EditParam["nocreate"] = "1";
  if(lrcMakeParam("BypassWatchdefault")) EditParam["watchlist"] = "nochange"; 
  var Params = new Array();
  for(var Param in EditParam){
    Params.push(Param+"="+encodeURIComponent(EditParam[Param]));
  }
  Params = Params.join("&");
  var headers = new Array();
  headers['Content-Type'] = 'application/x-www-form-urlencoded';
   wpajax.http({ url: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=edit',
                method: "POST", headers: headers,
                data: Params,
                onSuccess: InserisciTemplate_PostTagPageDone,
                params:EditParam,
                where: data.where
  });
}
 
window.InserisciTemplate_PostTagPageDone = function(Req, data){
  var params = data.params;
  var where = data.where;
  var text = "<b>" +params["title"]+ " : " + lrcMakeText("TAG_DONE") + "</b> <small>("+params[(where=='bottom')?"appendtext":"prependtext"]+")</small>";
  LiveRC_alert(text);
}
 
/* ########################################## CONFIGURATION PANEL ################################## */
 
 
// ===== Create a fieldset in the configuration panel =====
 
window.InserisciTemplate_CreateConfigPanel = function(){
  var InserisciTemplateUl = LiveRC_ManageParams_CreateNewListMenu("InserisciTemplateLegend", LiveRC_ManageParams_CreateActionButtons());
  if(!InserisciTemplateUl) return;
  InserisciTemplateUl.parentNode.removeChild(InserisciTemplateUl);
  var ThisFieldset = document.getElementById("LiveRC_OptionsContent_InserisciTemplateLegend");
  var TargetFieldset = document.getElementById("LiveRC_OptionsContent_lstParamMenuTabs");
  if(ThisFieldset && TargetFieldset) TargetFieldset.parentNode.insertBefore(ThisFieldset, TargetFieldset);
}
LiveRC_AddHook("AfterCreateParamPanel", InserisciTemplate_CreateConfigPanel);
 
window.InserisciTemplate_PopulateConfigPanel = function(){
  var InserisciTemplateFieldset = document.getElementById("LiveRC_OptionsContent_InserisciTemplateLegend");
  if(!InserisciTemplateFieldset) InserisciTemplate_CreateConfigPanel();
  var Target = lrcGetElementsByClass("LiveRC_ParamMenuPart", InserisciTemplateFieldset, "div")[0];
  if(!Target) return;
  while(Target.firstChild){ Target.removeChild(Target.firstChild); }
  var Templates = Custom_lstMyTemplate;
  if(!Templates || lrcGetObjectLength(Templates)==0) Templates = lstMyTemplate;
  for(var temp in Templates){
    if(!Templates.hasOwnProperty(temp)) continue;
    var Template = Templates[temp];    
    var TemplateForm = InserisciTemplate_CreateTemplateConfigPanel(Template);
    Target.appendChild(TemplateForm);
  }
  var NewTemplate = document.createElement('p');
  NewTemplate.id = "InserisciTemplate_AddNeTemplateP";
  var NewTemplateLink = document.createElement('a');
  NewTemplateLink.innerHTML = "(+)";
  NewTemplateLink.title = lrcMakeText("IT_AddTemplate");
  NewTemplateLink.href = "javascript:;";
  NewTemplateLink.onclick = function(){ InserisciTemplate_AddNewTemplate(); };
  NewTemplate.appendChild(NewTemplateLink);
  Target.appendChild(NewTemplate);
}

window.InserisciTemplate_AddNewTemplate = function(){
  var P = document.getElementById("InserisciTemplate_AddNeTemplateP");
  if(!P) return;
  var BlankTemplate = { template:'',
                        string:'',
                        where:'top',
                        noinclude: false,
                        subst: false,
                        parameters: {}
  };
  var NewDiv = InserisciTemplate_CreateTemplateConfigPanel(BlankTemplate);
  P.parentNode.insertBefore(NewDiv, P);
}
 
window.InserisciTemplate_DeleteTemplate = function(DeleteLink){
  var Div = DeleteLink;
  while(Div){
    if(lrcHasClass(Div, "InserisciTemplate_TemplateDiv")) break;
    Div = Div.parentNode;
  }
  if(!Div) return;
  Div.parentNode.removeChild(Div);
}
 
window.InserisciTemplate_CreateTemplateConfigPanel = function(Template){
  var TemplateDiv = document.createElement('div');
  TemplateDiv.className = "InserisciTemplate_TemplateDiv ParamMenuLi";
  var Legend = document.createElement('p');
  var Title = document.createElement('a')
  Title.className = "InserisciTemplate_template";
  Title.innerHTML = "{{"+Template.template+"}} ";
  Title.target = "_blank";
  Title.href = lrcGetPageURL(lrcGetNamespaceName(10)+":"+Template.template);
  Title.title = lrcGetNamespaceName(10)+":"+Template.template;
  Title.onclick = function(){ liveArticle(lrcGetNamespaceName(10)+":"+Template.template); return false; };
  Legend.appendChild(Title);
  var DeleteTemplateLink = document.createElement('a');
  DeleteTemplateLink.innerHTML = "(-)";
  DeleteTemplateLink.title = lrcMakeText("IT_DeleteTemplate");
  DeleteTemplateLink.href = "javascript:;";
  DeleteTemplateLink.onclick = function(){ InserisciTemplate_DeleteTemplate(this); };
  Legend.appendChild(DeleteTemplateLink);
  TemplateDiv.appendChild(Legend);
  var TemplateForm = document.createElement('form');
  TemplateForm.className = "InserisciTemplate_TemplateForm";
  TemplateDiv.appendChild(TemplateForm);
  var UL = document.createElement('ul');
  TemplateForm.appendChild(UL);
 
  var LI_Template = document.createElement('li');
  UL.appendChild(LI_Template);
 
// 'template':   name of the template to be inserted 
  var Label_template = document.createElement('label');
  Label_template.setAttribute('for', 'template');
  Label_template.innerHTML = "template : ";
  LI_Template.appendChild(Label_template);
  var Input_template = document.createElement('input');
  Input_template.id = 'template';
  Input_template.type = "text";
  Input_template.value = (Template.template || "");
  LI_Template.appendChild(Input_template);
  LI_Template.appendChild(document.createTextNode(" - "));
 
// 'string':     option label in the template combo box
  var Label_string = document.createElement('label');
  Label_string.setAttribute('for', 'string');
  Label_string.innerHTML = "string : ";
  LI_Template.appendChild(Label_string);
  var Input_string = document.createElement('input');
  Input_string.id = 'string';
  Input_string.type = "text";
  Input_string.value = (Template.string || "");
  LI_Template.appendChild(Input_string);
  LI_Template.appendChild(document.createTextNode(" - "));
 
// 'where':      where to insert the template in the page (top or bottom)
  var Label_where = document.createElement('label');
  Label_where.setAttribute('for', 'where');
  Label_where.innerHTML = "where : ";
  LI_Template.appendChild(Label_where);
  var Select_where = document.createElement('select');
  Select_where.id = 'where';
  var Opts = ["top", "bottom"];
  for(var a=0,l=Opts.length;a<l;a++){
    var OptValue = Opts[a];
    var Opt = document.createElement('option');
    Opt.innerHTML = OptValue;
    Opt.value = OptValue;
    if(OptValue == Template.where) Opt.selected = "selected";
    Select_where.appendChild(Opt);
  }
  LI_Template.appendChild(Select_where);
  LI_Template.appendChild(document.createTextNode(" - "));
 
// 'noinclude':  whether the template shall be tagged with "noinclude"
  var Label_noinclude = document.createElement('label');
  Label_noinclude.setAttribute('for', 'noinclude');
  Label_noinclude.innerHTML = "noinclude : ";
  LI_Template.appendChild(Label_noinclude);
  var Input_noinclude = document.createElement('input');
  Input_noinclude.id = 'noinclude';
  Input_noinclude.type = "checkbox";
  if(Template.noinclude) Input_noinclude.checked = "checked";
  LI_Template.appendChild(Input_noinclude);
  LI_Template.appendChild(document.createTextNode(" - "));
 
// 'subst':      whether the template shall be "substed"
  var Label_subst = document.createElement('label');
  Label_subst.setAttribute('for', 'subst');
  Label_subst.innerHTML = "subst : ";
  LI_Template.appendChild(Label_subst);
  var Input_subst = document.createElement('input');
  Input_subst.id = 'subst';
  Input_subst.type = "checkbox";
  if(Template.subst) Input_subst.checked = "checked";
  LI_Template.appendChild(Input_subst);
 
// 'parameters'
  var LI_parameters = document.createElement('li');
  UL.appendChild(LI_parameters);
  var Label_parameters = document.createElement('label');
  Label_parameters.setAttribute('for', 'parameters');
  Label_parameters.innerHTML = "parameters : ";
  LI_parameters.appendChild(Label_parameters);
  var ParamsUL = document.createElement('ul');
  ParamsUL.id = 'parameters';
  LI_parameters.appendChild(ParamsUL);
  for(var param in Template.parameters){
    if(!Template.parameters.hasOwnProperty(param)) continue;
    var LI_Param = InserisciTemplate_CreateNewParam(param, Template.parameters[param]);
    ParamsUL.appendChild(LI_Param);
  }
  var Li_NewParam = document.createElement('li');
  var Link_NewParam = document.createElement('a');
  Link_NewParam.innerHTML = "(+)";
  Link_NewParam.title = lrcMakeText("IT_AddParam");
  Link_NewParam.href = "javascript:;";
  Link_NewParam.onclick = function(){ InserisciTemplate_AddParamToTemplate(this); };
  Li_NewParam.appendChild(Link_NewParam);
  ParamsUL.appendChild(Li_NewParam);
  return TemplateDiv;
}
 
window.InserisciTemplate_AddParamToTemplate = function(AddParamLink){
  var Li = AddParamLink.parentNode;
  var NewParams = {name: '', type: 'string', value: ''};
  var NewParamLi = InserisciTemplate_CreateNewParam("", NewParams);
  Li.parentNode.insertBefore(NewParamLi, Li);
}
 
window.InserisciTemplate_CreateNewParam = function(param, Params){
  var ParamName = Params.name;
  var ParamType = Params.type;
  var ParamValue = Params.value;
  var LI_Param = document.createElement('li');
  LI_Param.className = "LI_parameters_li";
 
  var DeleteParamLink = document.createElement('a');
  DeleteParamLink.innerHTML = "(-)";
  DeleteParamLink.title = lrcMakeText("IT_DeleteParam");
  DeleteParamLink.href = "javascript:;";
  DeleteParamLink.onclick = function(){ InserisciTemplate_DeleteParamFromTemplate(this); }; 
  LI_Param.appendChild(DeleteParamLink);
  LI_Param.appendChild(document.createTextNode(" - "));
 
//// parameters id
  var Label_id = document.createElement('label');
  Label_id.setAttribute('for', 'Param_id');
  Label_id.innerHTML = "id : ";
  LI_Param.appendChild(Label_id);
  var Input_id = document.createElement('input');
  Input_id.id = 'Param_id';
  Input_id.type = "text";
  Input_id.value = (param || "");
  LI_Param.appendChild(Input_id);
  LI_Param.appendChild(document.createTextNode(" - "));
 
//// parameters.name
  var Label_name = document.createElement('label');
  Label_name.setAttribute('for', 'Param_name');
  Label_name.innerHTML = "name : ";
  LI_Param.appendChild(Label_name);
  var Input_name = document.createElement('input');
  Input_name.id = 'Param_name';
  Input_name.type = "text";
  Input_name.value = (ParamName || "");
  LI_Param.appendChild(Input_name);
  LI_Param.appendChild(document.createTextNode(" - "));
 
//// parameters.type
  var Label_type = document.createElement('label');
  Label_type.setAttribute('for', 'Param_type');
  Label_type.innerHTML = "type : ";
  LI_Param.appendChild(Label_type);
  var Select_type = document.createElement('select');
  Select_type.id = 'Param_type';
  var Opts = ["string", "select"];
  for(var a=0,l=Opts.length;a<l;a++){
    var OptValue = Opts[a];
    var Opt = document.createElement('option');
    Opt.innerHTML = OptValue;
    Opt.value = OptValue;
    if(OptValue == ParamType) Opt.selected = "selected";
    Select_type.appendChild(Opt);
  }
  Select_type.onchange = function(){ InserisciTemplate_ChageValueType(this); }
  LI_Param.appendChild(Select_type);
  LI_Param.appendChild(document.createTextNode(" - "));
 
//// parameters.value
  var Label_value = document.createElement('label');
  Label_value.setAttribute('for', 'Param_value');
  Label_value.innerHTML = "value : ";
  LI_Param.appendChild(Label_value);
  if(ParamType == "string"){
    var Input_value = document.createElement('input');
    Input_value.id = 'Param_value';
    Input_value.type = "text";
    Input_value.size = "30";
    Input_value.value = (ParamValue || "");
    LI_Param.appendChild(Input_value);
  }else if(ParamType == "select"){
    var Select_value = document.createElement('select');
    Select_value.id = 'Param_value';
    Select_value.style.width = '206px';
    var Opts = ParamValue;
    if(typeof(Opts) ==="object"){
      for(var a=0,l=Opts.length;a<l;a++){
        var OptValue = Opts[a];
        var Opt = document.createElement('option');
        Opt.innerHTML = OptValue;
        Opt.value = OptValue;
        Select_value.appendChild(Opt);
      }
    }
    LI_Param.appendChild(Select_value);
    LI_Param.appendChild(document.createTextNode(" "));
    var DeleteOptionLink = document.createElement('a');
    DeleteOptionLink.innerHTML = "(-)";
    DeleteOptionLink.title = lrcMakeText("IT_DeleteOption");
    DeleteOptionLink.href = "javascript:;";
    DeleteOptionLink.onclick = function(){ InserisciTemplate_DeleteOptionFromSelect(this); };
    LI_Param.appendChild(DeleteOptionLink);
    LI_Param.appendChild(document.createTextNode(" "));
 
    var AddOptionLink = document.createElement('a');
    AddOptionLink.innerHTML = "(+)";
    AddOptionLink.title = lrcMakeText("IT_AddOption");
    AddOptionLink.href = "javascript:;";
    AddOptionLink.onclick = function(){ InserisciTemplate_AddOptionToSelect(this); };
    LI_Param.appendChild(AddOptionLink);
  }
  return LI_Param;
}
 
window.InserisciTemplate_ChageValueType = function(Select){
  var NewType = Select.value;
  var Li = Select.parentNode;
  var Labels = Li.getElementsByTagName('label');
  var LastLabel = Labels[(Labels.length-1)];
  while(LastLabel.nextSibling){ LastLabel.nextSibling.parentNode.removeChild(LastLabel.nextSibling); }
  if(NewType == "string"){
    var Input_value = document.createElement('input');
    Input_value.id = 'Param_value';
    Input_value.type = "text";
    Input_value.size = "30";
    Input_value.value = "";
    LastLabel.parentNode.appendChild(Input_value);
  }else{
    var Select_value = document.createElement('select');
    Select_value.id = 'Param_value';
    Select_value.style.width = '206px';
    var Opt = document.createElement('option');
    Opt.innerHTML = "";
    Opt.value = "";
    Select_value.appendChild(Opt);
    LastLabel.parentNode.appendChild(Select_value);
    LastLabel.parentNode.appendChild(document.createTextNode(" "));
    var DeleteOptionLink = document.createElement('a');
    DeleteOptionLink.innerHTML = "(-)";
    DeleteOptionLink.title = lrcMakeText("IT_DeleteOption");
    DeleteOptionLink.href = "javascript:;";
    DeleteOptionLink.onclick = function(){ InserisciTemplate_DeleteOptionFromSelect(this); };
    LastLabel.parentNode.appendChild(DeleteOptionLink);
    LastLabel.parentNode.appendChild(document.createTextNode(" "));
    var AddOptionLink = document.createElement('a');
    AddOptionLink.innerHTML = "(+)";
    AddOptionLink.title = lrcMakeText("IT_AddOption");
    AddOptionLink.href = "javascript:;";
    AddOptionLink.onclick = function(){ InserisciTemplate_AddOptionToSelect(this); };
    LastLabel.parentNode.appendChild(AddOptionLink);
  }
}
 
window.InserisciTemplate_DeleteOptionFromSelect = function(DeleteOptionLink){
  var Li = DeleteOptionLink.parentNode;
  var Selects = Li.getElementsByTagName('select');
  for(var a=0,l=Selects.length;a<l;a++){
    var Select = Selects[a];
    if(!Select.id || Select.id != 'Param_value') continue;
    var SelectedOpt = Select.value;
    var Options = Select.getElementsByTagName('option');
    for(var b=0,m=Options.length;b<m;b++){
      var thisOpt = Options[b];
      if(thisOpt.value != SelectedOpt) continue;
      thisOpt.parentNode.removeChild(thisOpt);
    }
  }
}
 
window.InserisciTemplate_AddOptionToSelect = function(AddOptionLink){
  var AddOptionForm = document.createElement('span');
  var AddOptionInput = document.createElement('input');
  AddOptionInput.type = 'text';
  AddOptionForm.appendChild(AddOptionInput);
  var AddOptionInputOK = document.createElement('input');
  AddOptionInputOK.type = 'button';
  AddOptionInputOK.value = lrcMakeText("OK");
  AddOptionInputOK.onclick = function(){ InserisciTemplate_AddOptionToSelect_OK(this); };
  AddOptionInputOK.onselect = function(){ InserisciTemplate_AddOptionToSelect_OK(this); };
  AddOptionForm.appendChild(AddOptionInputOK);
  var AddOptionInputCancel = document.createElement('input');
  AddOptionInputCancel.type = 'button';
  AddOptionInputCancel.value = lrcMakeText("Cancel");
  AddOptionInputCancel.onclick = function(){ InserisciTemplate_AddOptionToSelect_Cancel(this); };
  AddOptionInputCancel.onselect = function(){ InserisciTemplate_AddOptionToSelect_Cancel(this); };
  AddOptionForm.appendChild(AddOptionInputCancel);
  AddOptionLink.parentNode.insertBefore(AddOptionForm, AddOptionLink);
  AddOptionLink.style.display = "none";
}
 
window.InserisciTemplate_AddOptionToSelect_Cancel = function(AddOptionInputCancel){
  var Span = AddOptionInputCancel.parentNode;
  var Link = Span.nextSibling;
  Span.parentNode.removeChild(Span);
  Link.style.display = "";
}
 
window.InserisciTemplate_AddOptionToSelect_OK = function(AddOptionInputOK){
  var Input = AddOptionInputOK.previousSibling;
  var NewOption = Input.value;
  var Li = AddOptionInputOK.parentNode.parentNode;
  var Selects = Li.getElementsByTagName('select');
  for(var a=0,l=Selects.length;a<l;a++){
    var Select = Selects[a];
    if(!Select.id || Select.id != 'Param_value') continue;
    var Option = document.createElement('option');
    Option.innerHTML = NewOption;
    Option.value = NewOption;
    Select.appendChild(Option);
  }
  InserisciTemplate_AddOptionToSelect_Cancel(AddOptionInputOK)
}
 
window.InserisciTemplate_DeleteParamFromTemplate = function(DeleteParamLink){
  var Li = DeleteParamLink.parentNode;
  Li.parentNode.removeChild(Li);
}
 
// ===== Check the fieldset and add a text to be saved in /LiveRCparam.js page =====
 
window.InserisciTemplate_CheckConfigPanel = function(){ 
  var ITConfigPanel = document.getElementById('LiveRC_OptionsContent_InserisciTemplateLegend');
  if(!ITConfigPanel) return;
  var ElementForms = lrcGetElementsByClass("InserisciTemplate_TemplateForm", ITConfigPanel, "form");
  var Items = new Object();
  for(var a=0,l=ElementForms.length;a<l;a++){
    var ThisForm = ElementForms[a];
    var NewItem = new Object();
    NewItem.template = getElementWithId('template', 'input', ThisForm).value;
    NewItem.string = getElementWithId('string', 'input', ThisForm).value;
    NewItem.where = getElementWithId('where', 'select', ThisForm).value;
    NewItem.noinclude = (getElementWithId('noinclude', 'input', ThisForm).checked ? true : false );
    NewItem.subst = (getElementWithId('subst', 'input', ThisForm).checked ? true : false );
    NewItem.parameters = new Object();
    var ParamLIs = lrcGetElementsByClass("LI_parameters_li", ThisForm, "li");
    for(var b=0,m=ParamLIs.length;b<m;b++){
      var ParamLi = ParamLIs[b];
      var NewParam = new Object();
      var NewParamId = getElementWithId('Param_id', 'input', ParamLi).value;
      NewParam.name = getElementWithId('Param_name', 'input', ParamLi).value;
      NewParam.type = getElementWithId('Param_type', 'select', ParamLi).value;
      if(NewParam.type == "string"){
        NewParam.value = getElementWithId('Param_value', 'input', ParamLi).value.unhtmlize();
        if(!NewParam.value) delete NewParam.value;
      }else{
        NewParam.value = new Array();
        var ParamValueSelect = getElementWithId('Param_value', 'select', ParamLi);
        var Opt = ParamValueSelect.getElementsByTagName('option');
        for(var c=0,k=Opt.length;c<k;c++){
          NewParam.value.push(Opt[c].value.unhtmlize());
        }
      }      
      NewItem.parameters[NewParamId] = NewParam;
    }  
    Items[NewItem.template] = NewItem;
  }
  var TextToSave = InserisciTemplate_CompareNewParams(Items);
  if(!TextToSave) return;
  var SavedText = "\nCustom_lstMyTemplate = {\n";
  var SavedItems = new Array();
  for(var item in Items){
    var SavedItem = "  '"+item+"':{\n";
    var ThisTemplate = Items[item];
    for(var tempParam in ThisTemplate){
      SavedItem += "    "+tempParam+" : ";
      var tempParamValue = ThisTemplate[tempParam];
      if(tempParam!="parameters"){
        SavedItem += ( typeof(tempParamValue)=="string" ? lrcEscapeStrHTML(tempParamValue) : tempParamValue ) + ",\n";
      }else{
        SavedItem += "{\n";
        var tempParameters = new Array();
        for(var parameter in tempParamValue){
          var thisparam = tempParamValue[parameter];
          var ParamItems = new Array();
          for(var paramItem in thisparam){
            var thisparamItemValue = thisparam[paramItem];
            if(paramItem!="value" || typeof(thisparamItemValue)=="string"){
              ParamItems.push( paramItem + ":" + lrcEscapeStrHTML(thisparamItemValue) );
            }else{
              var ThisParamValue = new Array();
              for(var a=0,l=thisparamItemValue.length;a<l;a++){
                ThisParamValue.push(lrcEscapeStrHTML(thisparamItemValue[a]));
              }
              ParamItems.push( paramItem +": [" + ThisParamValue.join(",") + "]" );
            }
          }
          tempParameters.push("      " + lrcEscapeStrHTML(parameter) + " : {" + ParamItems.join(",") + "}");
        }
        SavedItem += tempParameters.join(",\n");
        SavedItem += "\n    }";        
      }
    }
    SavedItem += "\n  }";
    SavedItems.push(SavedItem);
  }
  SavedText += SavedItems.join(",\n");
  SavedText += "};\n\n";
  LiveRC_Config["BeforeParamPanelSavedHookResult"] += SavedText;
} 
LiveRC_AddHook("BeforeParamPanelSaved", InserisciTemplate_CheckConfigPanel);
 
window.InserisciTemplate_CompareNewParams = function(NewItems){
  var OldItems = lstMyTemplate;
  for(var template in OldItems){
    if(typeof(NewItems[template])==="undefined") return true;
    for(var item in OldItems[template]){
      if(item != "parameters"){
        if(OldItems[template][item] !== NewItems[template][item]) return true;
      }else{
        if(lrcGetObjectLength(OldItems[template][item]) != lrcGetObjectLength(NewItems[template][item])) return true;
        for(var param in OldItems[template][item]){
          if(!NewItems[template][item][param]) return true;
          for(var paramitem in OldItems[template][item][param]){
            if(paramitem != "value" || (typeof(OldItems[template][item][param][paramitem]) != "object" && typeof(NewItems[template][item][param][paramitem]) != "object")){
              if(OldItems[template][item][param][paramitem] !== NewItems[template][item][param][paramitem]) return true;
            }else{
              if(OldItems[template][item][param][paramitem].length != NewItems[template][item][param][paramitem].length) return true;
              for(var a=0, l=OldItems[template][item][param][paramitem].length;a<l;a++){
                if(OldItems[template][item][param][paramitem][a] != NewItems[template][item][param][paramitem][a]) return true;
              }
            }
          }
        }
      }
    }
  }
  for(var template in NewItems){
    if(typeof(OldItems[template])==="undefined") return true;
  }
  return false;
}
 
// ===== Vars for configuration panel fieldset =====
 
// Texts
 
try{
  lrcTexts["IT_InsertTemplate1"]      = "Inserisce il template {{";
  lrcTexts["IT_InsertTemplate2"]      = "}} nella pagina.";
  lrcTexts["IT_InsertTemplateParams"] = "Parametri";
  lrcTexts["IT_AddTemplate"]     = "Aggiungi un nuovo template";
  lrcTexts["IT_DeleteTemplate"]  = "Cancella questo template";
  lrcTexts["IT_AddParam"]        = "Aggiungi un nuovo parametro";
  lrcTexts["IT_DeleteParam"]     = "Cancella questo parametro";
  lrcTexts["IT_DeleteOption"]    = "Cancella l'opzione selezionata";
  lrcTexts["IT_AddOption"]       = "Aggiungi una nuova opzione";
}catch(e){ }
 
 
// Descriptions
try{
  lrcParamDesc["DescIT_InsertTemplate1"]      = "[InserisciTemplate] Inserisci la parte 1 della frase del template";
  lrcParamDesc["DescIT_InsertTemplate2"]      = "[InserisciTemplate] Inserisci la parte 2 della frase del template";
  lrcParamDesc["DescIT_InsertTemplateParams"] = "[InserisciTemplate] Parametri";
 
  lrcParamDesc["DescIT_AddTemplate"]     = "[InserisciTemplate] Frase Aggiungi un nuovo template";
  lrcParamDesc["DescIT_DeleteTemplate"]  = "[InserisciTemplate] Frase Cancella questo template";
  lrcParamDesc["DescIT_AddParam"]        = "[InserisciTemplate] Frase Aggiungi un nuovo parametro";
  lrcParamDesc["DescIT_DeleteParam"]     = "[InserisciTemplate] Frase Cancella questo parametro";
  lrcParamDesc["DescIT_DeleteOption"]    = "[InserisciTemplate] Frase Cancella l'opzione selezionata";
  lrcParamDesc["DescIT_AddOption"]       = "[InserisciTemplate] Frase Aggiungi una nuova opzione";
  lrcParamDesc["DescInserisciTemplateLegend"]       = "Parametri per l'estensione InserisciTemplate";
  lrcParamDesc["DescInserisciTemplateLegend_short"] = "InserisciTemplate";
}catch(e){ }
 
// Hide/Show tabs panel item
addParamMenuTab("InserisciTemplateLegend", true);
 
/* ************************************************************************************************************************************************ */
} // FIN IF
  
//</source>