מדיה ויקי:Gadget-TemplatesExternalLinks.js: הבדלים בין גרסאות בדף

מ לבקשת קיפוד
תמיכה בתבניות עם פרמטרים שמיים - תשתית
שורה 2: שורה 2:
//Written by [[User:קיפודנחש]]
//Written by [[User:קיפודנחש]]


function createTemplate(doc) {
function localcreateTemplate(doc) {
var par = ["{{" + doc.templateName];
var par = ["{{" + doc.templateName];
for (var i in doc.allFields)
for (var i in doc.allFields)
par.push((doc.problematic? (parseInt(i)+1) + "=":"") + doc.allFields[i].value);
par.push((doc.problematic? (parseInt(i)+1) + "=":"") + doc.allFields[i].value);
var code = par.join("|") + "}}";
var code = par.join("|");
if (doc.namedParFields) {
var pairs = ['']; // so we'll get the firs bar
for (j in doc.namedParFields) {
var val = $.trim(doc.namedParFields[j][1].value);
if (val.length > 0)
pairs.push(doc.namedParFields[j][0] + '=' + val);
}
if (pairs.length > 1)
code += pairs.join('|');
}
code += "}}";
if (doc.refCheckBox.checked)
if (doc.refCheckBox.checked)
return "{{הערה|1=" +  code + "}}";
return "{{הערה|1=" +  code + "}}";
שורה 13: שורה 24:
return code;
return code;
}
}
function copyAttributes(target, source) {
function localcopyAttributes(target, source) {
for (key in source)
for (key in source)
target[key] = source[key];
target[key] = source[key];
שורה 19: שורה 30:
}
}


function knownLinkTemplates() {
function localknownLinkTemplates() {
var constants = ["",
var constants = ["",
"שם המחבר",
"שם המחבר",
שורה 68: שורה 79:
];
];


var templatesDic = {
var localtemplatesDic = {
"הארץ": [1, 2, 3, 4],
"הארץ": [1, 2, 3, 4],
"דבר": [1,2,22,3,7,0,23],
"דבר": [1,2,22,3,7,0,23],
שורה 138: שורה 149:
"One": [1,2,3,4]
"One": [1,2,3,4]
};
};
for (var key in templatesDic)
for (var key in localtemplatesDic)
for (var i in templatesDic[key])
for (var i in localtemplatesDic[key])
if (typeof(templatesDic[key][i]) == "number")
if (typeof(localtemplatesDic[key][i]) == "number")
templatesDic[key][i] = constants[templatesDic[key][i]];
localtemplatesDic[key][i] = constants[localtemplatesDic[key][i]];
if (typeof privateTemplates === "object")
if (typeof privateTemplates === "object")
copyAttributes(templatesDic, privateTemplates);
localcopyAttributes(localtemplatesDic, privateTemplates);
return templatesDic;
return localtemplatesDic;
}
 
function localnamedParams(templateName) {
var allNamedParam = {
'בלדד השוחי': [['משתנה ראשון', 'כותרת משתנה ראשון'], ['משתנה שני', 'כותרת משתנה שני']]
};
return allNamedParam[templateName] || [];
}
}


function templateRegex(templateName) {
function localtemplateRegex(templateName) {
var regexes = {
var regexes = {
"nrg": {regex: /\/online\/([^\/]+)\/ART([^\/]*)\/([^\.]+).html/i, params:[6,7,3]},
"nrg": {regex: /\/online\/([^\/]+)\/ART([^\/]*)\/([^\.]+).html/i, params:[6,7,3]},
שורה 205: שורה 223:
var histregex = {regex: /=HISTNAME\/(\d{4}\/\d{1,2}\/\d{1,2})(?:.*&EntityId=|\/\d+\/)([A-Z][a-z])(\d+)/i, params:[3,7,4], replace: [[/%2F/gi, '/']]};
var histregex = {regex: /=HISTNAME\/(\d{4}\/\d{1,2}\/\d{1,2})(?:.*&EntityId=|\/\d+\/)([A-Z][a-z])(\d+)/i, params:[3,7,4], replace: [[/%2F/gi, '/']]};
for (var template in historic) {
for (var template in historic) {
var lr = copyAttributes({}, histregex);
var lr = localcopyAttributes({}, histregex);
lr.regex =  new RegExp(lr.regex.source.replace("HISTNAME", historic[template]));
lr.regex =  new RegExp(lr.regex.source.replace("HISTNAME", historic[template]));
regexes[template] = lr;
regexes[template] = lr;
}
}
if (typeof privateRegexes === "object")
if (typeof privateRegexes === "object")
copyAttributes(regexes, privateRegexes);
localcopyAttributes(regexes, privateRegexes);
return regexes[templateName];
return regexes[templateName];
}
}


function popupPredefinedLinkTemplate(templateName, paramList, regexDict) {
function localaddFiledToTable(doc, table, param) {
var height = 160 + 20 * paramList.length + (regexDict ? 60 : 0);
var row = table.insertRow(-1) || table[rows[table.rows.length-1]];
var cell = row.insertCell(-1) || row.cells[0];
cell.innerHTML = param;
cell.style.maxWidth = "16em";
var field = localcopyAttributes(doc.createElement("input"), {type: "text", maxLength: 120, doc: doc});
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = localupdatePreview;
field.style.width = "20em";
cell = row.insertCell(-1) || row.cells[1];
cell.appendChild(field);
return field;
}
 
function localpopupPredefinedLinkTemplate(templateName, paramList, regexDict) {
var namedParamsList = localnamedParams(templateName);
var height = 160 + 20 * (paramList.length + namedParamsList.length) + (regexDict ? 60 : 0);
for (i in paramList)
for (i in paramList)
height += 16 * Math.floor(paramList[i].length / 24);
height += 16 * Math.floor(paramList[i].length / 24);
שורה 222: שורה 254:
var doc = popup.document;
var doc = popup.document;
doc.problematic = regexDict && regexDict.problematic;
doc.problematic = regexDict && regexDict.problematic;
copyAttributes(doc, { title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, allFields:[] } );
localcopyAttributes(doc, { title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, allFields:[] } );
var body = doc.body;
var body = doc.body;
if (regexDict) {
if (regexDict) {
שורה 228: שורה 260:
var b = doc.createElement("input");
var b = doc.createElement("input");
b.urlInput = doc.createElement("input");
b.urlInput = doc.createElement("input");
copyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
localcopyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
b.urlInput.style.width = "12em";
b.urlInput.style.width = "12em";
body.appendChild(b.urlInput);
body.appendChild(b.urlInput);
copyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: updatePreview });
localcopyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: localupdatePreview });
b.onclick = function() {
b.onclick = function() {
var str = this.urlInput.value;
var str = this.urlInput.value;
שורה 256: שורה 288:
continue;
continue;
}
}
var row = table.insertRow(-1) || table[rows[table.rows.length-1]];
doc.allFields.push(localaddFiledToTable(doc, table, param));
var cell = row.insertCell(-1) || row.cells[0];
}
cell.innerHTML = param;
doc.namedParFields = [];
cell.style.maxWidth = "16em";
for (var i in namedParamsList) {
var field = copyAttributes(doc.createElement("input"), { type: "text", maxLength: 120, doc: doc });
var np = namedParamsList[i];
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = updatePreview;
doc.namedParFields.push([np[0], localaddFiledToTable(doc, table, np[1])]);
field.style.width = "20em";
cell = row.insertCell(-1) || row.cells[1];
cell.appendChild(field);
doc.allFields.push(field);
}
}
body.appendChild(table);
body.appendChild(table);
שורה 273: שורה 301:
for (var box in checkboxes) {
for (var box in checkboxes) {
p.appendChild(doc.createTextNode(checkboxes[box]));
p.appendChild(doc.createTextNode(checkboxes[box]));
doc[box] = copyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: updatePreview});
doc[box] = localcopyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: localupdatePreview});
p.appendChild(doc[box]);
p.appendChild(doc[box]);
}
}
body.appendChild(p);
body.appendChild(p);
body.appendChild(p = doc.createElement("p"));
body.appendChild(p = doc.createElement("p"));
copyAttributes(p.style, {background: "blue", color: "white", fontSize: "0.85em"} );
localcopyAttributes(p.style, {background: "blue", color: "white", fontSize: "0.85em"} );
p.appendChild(doc.previewNode = doc.createTextNode(' '));
p.appendChild(doc.previewNode = doc.createTextNode(' '));
body.appendChild(doc.createElement("p"));
body.appendChild(doc.createElement("p"));
b = copyAttributes(doc.createElement("input"), {type:"button", value:"אישור", doc: doc, popup: popup});
b = localcopyAttributes(doc.createElement("input"), {type:"button", value:"אישור", doc: doc, popup: popup});
doc.problematic = regexDict && regexDict.problematic && true;
doc.problematic = regexDict && regexDict.problematic && true;
b.onclick = function() {
b.onclick = function() {
insertTags("", createTemplate(this.doc), "");
insertTags("", localcreateTemplate(this.doc), "");
this.popup.close();
this.popup.close();
}
}
body.appendChild(b);
body.appendChild(b);
b = copyAttributes(doc.createElement("input"), {type: "button", value: "ביטול", popup: popup, onclick: function(){this.popup.close();}});
b = localcopyAttributes(doc.createElement("input"), {type: "button", value: "ביטול", popup: popup, onclick: function(){this.popup.close();}});
body.appendChild(b);
body.appendChild(b);
doc.refCheckBox.onchange();
doc.refCheckBox.onchange();
}
}


function fireLinkTemplatePopup(templateName) {
function localfireLinkTemplatePopup(templateName) {
var linkTemplates = knownLinkTemplates();
var linkTemplates = localknownLinkTemplates();
var templateParams = linkTemplates[templateName];
var templateParams = linkTemplates[templateName];
if (templateParams && templateParams.constructor == Array && templateParams.length > 0)
if (templateParams && templateParams.constructor == Array && templateParams.length > 0)
popupPredefinedLinkTemplate(templateName, templateParams, templateRegex(templateName));
localpopupPredefinedLinkTemplate(templateName, templateParams, localtemplateRegex(templateName));
}
}


function createSortedTemplatesList() {
function localcreateSortedTemplatesList() {
var fullList = knownLinkTemplates();
var fullList = localknownLinkTemplates();
var names = [], hnames = [];
var names = [], hnames = [];
for (x in fullList)
for (x in fullList)
שורה 313: שורה 341:
}
}


function createLinkTemplatesSelections() {
function localcreateLinkTemplatesSelections() {
var select = document.createElement("select");
var select = document.createElement("select");
select.onchange = function() {
select.onchange = function() {
fireLinkTemplatePopup(this.value);
localfireLinkTemplatePopup(this.value);
this.selectedIndex = 0;
this.selectedIndex = 0;
return false;
return false;
}
}
select.options.add(new Option("אשף תבניות קישורים", ""));
select.options.add(new Option("אשף תבניות קישורים", ""));
var allnames = createSortedTemplatesList();
var allnames = localcreateSortedTemplatesList();
for (var i in allnames)
for (var i in allnames)
select.options.add(new Option(allnames[i], allnames[i]));
select.options.add(new Option(allnames[i], allnames[i]));
שורה 329: שורה 357:
}
}


function updatePreview() { this.doc.previewNode.data = createTemplate(this.doc); }
function localupdatePreview() { this.doc.previewNode.data = localcreateTemplate(this.doc); }


function advancedFire(context) {
function localadvancedFire(context) {
fireLinkTemplatePopup(this.template);
localfireLinkTemplatePopup(this.template);
}
}


function createAdvanceToolKit() {
function localcreateAdvanceToolKit() {
     var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []};
     var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []};
var templatesList = createSortedTemplatesList();
var templatesList = localcreateSortedTemplatesList();
for (var i in templatesList)
for (var i in templatesList)
         gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: advancedFire, template: templatesList[i]}});
         gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: localadvancedFire, template: templatesList[i]}});
$j('#wpTextbox1').wikiEditor('addToToolbar', {
$j('#wpTextbox1').wikiEditor('addToToolbar', {
'section': 'advanced',
'section': 'advanced',
שורה 348: שורה 376:


if (typeof $j != 'undefined' && typeof $j.fn.wikiEditor != 'undefined')
if (typeof $j != 'undefined' && typeof $j.fn.wikiEditor != 'undefined')
$j(document).ready(createAdvanceToolKit);
$j(document).ready(localcreateAdvanceToolKit);
if (wgAction == 'edit')
if (wgAction == 'edit')
hookEvent("load", createLinkTemplatesSelections);
hookEvent("load", localcreateLinkTemplatesSelections);