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

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


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


function localknownLinkTemplates() {
function ltw_copyAttributes(target, source) {for (key in source)target[key] = source[key];return target;}
 
function ltw_knownLinkTemplates() {
var constants = ["",
var constants = ["",
"שם המחבר",
"שם המחבר",
שורה 76: שורה 73:
"שם העיתון",
"שם העיתון",
"קוד העיתון באתר (שלוש אותיות לטיניות גדולות)",
"קוד העיתון באתר (שלוש אותיות לטיניות גדולות)",
"שם המין/זן"
"שם המין/זן",
"שם הרב",
"שם השיעור",
"השיעור כשם שמופיע בקישור"
];
];


var localtemplatesDic = {
var templatesDic = {
"הארץ": [1, 2, 3, 4],
"הארץ": [1, 2, 3, 4],
"דבר": [1,2,22,3,7,0,23],
"דבר": [1,2,22,3,7,0,23],
שורה 147: שורה 147:
"Iucnredlist": [45,3],
"Iucnredlist": [45,3],
"העין השביעית": [1,34,6,4,25],
"העין השביעית": [1,34,6,4,25],
"One": [1,2,3,4]
"One": [1,2,3,4],
"קול הלשון - שיעור" : [46,47,48,4],
"ספר פרויקט גוטנברג": [],
"imdb title": [],
"imdb name": [],
"imdb company": []
};
};
for (var key in localtemplatesDic)
for (var key in templatesDic)
for (var i in localtemplatesDic[key])
for (var i in templatesDic[key])
if (typeof(localtemplatesDic[key][i]) == "number")
if (typeof(templatesDic[key][i]) == "number")
localtemplatesDic[key][i] = constants[localtemplatesDic[key][i]];
templatesDic[key][i] = constants[templatesDic[key][i]];
if (typeof privateTemplates === "object")
if (typeof privateTemplates === "object")
localcopyAttributes(localtemplatesDic, privateTemplates);
ltw_copyAttributes(templatesDic, privateTemplates);
return localtemplatesDic;
return templatesDic;
}
}


function localnamedParams(templateName) {
function ltw_namedParams(templateName) {
var allNamedParam = {
var allNamedParam = {
'בלדד השוחי': [['משתנה ראשון', 'כותרת משתנה ראשון'], ['משתנה שני', 'כותרת משתנה שני']]
'קול הלשון - שיעור': [['וידאו', '"וידאו": רשמו "כן" אם זה שיעור לצפייה'], ['תואר', 'תואר - אם תואר המרצה שונה מ"הרב"']],
"ספר פרויקט גוטנברג": [["כותב", "שם כותב הספר (אופציונלי)"], ['שם הספר', 'שם הספר (ברירת מחדל: שם הערך)'], ['מספר', 'מספר הספר בפרויקט']],
"imdb title": [['id', 'המספר שמופיע בקישור'], ['title', 'הכותרת שתופיע בקישור (אופציונלי: ברירת מחדל - שם הערך']],
"imdb name": [['id', 'המספר שמופיע בקישור'], ['name', 'הכותרת שתופיע בקישור (אופציונלי: ברירת מחדל - שם הערך']],
"imdb company": [['id', 'המספר שמופיע בקישור'], ['company', 'הכותרת שתופיע בקישור']]
};
};
return allNamedParam[templateName] || [];
return allNamedParam[templateName] || [];
}
}


function localtemplateRegex(templateName) {
function ltw_templateRegex(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]},
שורה 216: שורה 225:
"Iucnredlist": {regex: /details(?:\.php)?\/(\d+)/, params: [2]},
"Iucnredlist": {regex: /details(?:\.php)?\/(\d+)/, params: [2]},
"העין השביעית": {regex: /the7eye\.org\.il\/([^\/]+)\/Pages\/(.*)\.aspx/, params: [5,3]},
"העין השביעית": {regex: /the7eye\.org\.il\/([^\/]+)\/Pages\/(.*)\.aspx/, params: [5,3]},
"One": {regex: /Article\/(\d*)\.html/, params: [3]}
"One": {regex: /Article\/(\d*)\.html/, params: [3]},
"קול הלשון - שיעור": {regex: /(?:PathFile=|Source=)([^&]*)/i, params:[3]},
"ספר פרויקט גוטנברג": {regex: /ebooks\/(\d+)/i, params: [3]},
"imdb title": {regex: /title\/tt(\d+)/i, params: [1]},
"imdb name": {regex: /name\/nm(\d+)/i, params: [1]},
"imdb company": {regex: /company\/co(\d+)/i, params: [1]}
}
}


שורה 223: שורה 237:
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 = localcopyAttributes({}, histregex);
var lr = ltw_copyAttributes({}, 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")
localcopyAttributes(regexes, privateRegexes);
ltw_copyAttributes(regexes, privateRegexes);
return regexes[templateName];
return regexes[templateName];
}
}


function localaddFiledToTable(doc, table, param) {
function ltw_addFiledToTable(doc, table, param) {
var row = table.insertRow(-1) || table[rows[table.rows.length-1]];
var row = table.insertRow(-1) || table[rows[table.rows.length-1]];
var cell = row.insertCell(-1) || row.cells[0];
var cell = row.insertCell(-1) || row.cells[0];
cell.innerHTML = param;
cell.innerHTML = param;
cell.style.maxWidth = "16em";
cell.style.maxWidth = "16em";
var field = localcopyAttributes(doc.createElement("input"), {type: "text", maxLength: 120, doc: doc});
var field = ltw_copyAttributes(doc.createElement("input"), {type: "text", maxLength: 120, doc: doc});
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = localupdatePreview;
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = ltw_updatePreview;
field.style.width = "20em";
field.style.width = "20em";
cell = row.insertCell(-1) || row.cells[1];
cell = row.insertCell(-1) || row.cells[1];
שורה 245: שורה 259:
}
}


function localpopupPredefinedLinkTemplate(templateName, paramList, regexDict) {
function ltw_popupPredefinedLinkTemplate(templateName, paramList, regexDict) {
var namedParamsList = localnamedParams(templateName);
var namedParamsList = ltw_namedParams(templateName);
var height = 160 + 20 * (paramList.length + namedParamsList.length) + (regexDict ? 60 : 0);
var height = 160 + 20 * (paramList.length + namedParamsList.length) + (regexDict ? 60 : 0);
for (i in paramList)
for (i in paramList)
שורה 254: שורה 268:
var doc = popup.document;
var doc = popup.document;
doc.problematic = regexDict && regexDict.problematic;
doc.problematic = regexDict && regexDict.problematic;
localcopyAttributes(doc, { title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, allFields:[] } );
ltw_copyAttributes(doc, {title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, orderedFields:[], getTemplate:ltw_createTemplate, updatePreview:function(){this.previewNode.data = this.getTemplate();}});
var body = doc.body;
var body = doc.body;
if (regexDict) {
if (regexDict) {
שורה 260: שורה 274:
var b = doc.createElement("input");
var b = doc.createElement("input");
b.urlInput = doc.createElement("input");
b.urlInput = doc.createElement("input");
localcopyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
ltw_copyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
b.urlInput.style.width = "12em";
b.urlInput.style.width = "12em";
body.appendChild(b.urlInput);
body.appendChild(b.urlInput);
localcopyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: localupdatePreview });
ltw_copyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: ltw_updatePreview });
b.onclick = function() {
b.onclick = function() {
var str = this.urlInput.value;
var str = this.urlInput.value;
שורה 270: שורה 284:
str = str.replace(this.regexDict.replace[r][0], this.regexDict.replace[r][1]);
str = str.replace(this.regexDict.replace[r][0], this.regexDict.replace[r][1]);
var matches = str.match(this.regexDict.regex);
var matches = str.match(this.regexDict.regex);
var orderedFields = this.doc.orderedFields, namedFields = this.doc.namedFields;
var numOrdered = orderedFields.length, numNamed = namedFields.length;
if (matches)
if (matches)
for (var i = 1; i < matches.length; i++) {
for (var i = 1; i < matches.length; i++) {
var fieldIndex = this.regexDict.params[i-1]; //parameters are counted from one, we count from 0.
var fieldIndex = this.regexDict.params[i-1] - 1; //parameters are counted from one, we count from 0.
if (fieldIndex && this.doc.allFields[fieldIndex-1])
if (fieldIndex < numOrdered)
this.doc.allFields[fieldIndex-1].value = matches[i];
orderedFields[fieldIndex].value = matches[i];
else if (fieldIndex < numOrdered + numNamed)
namedFields[fieldIndex-numOrdered][1].value = matches[i];
}
}
this.update();
this.update();
שורה 285: שורה 303:
var param = paramList[i];
var param = paramList[i];
if (param.length == 0) { // this allow defining an empty parameter. by use of a "pseudo field".
if (param.length == 0) { // this allow defining an empty parameter. by use of a "pseudo field".
doc.allFields.push({value:""});
doc.orderedFields.push({value:""});
continue;
continue;
}
}
doc.allFields.push(localaddFiledToTable(doc, table, param));
doc.orderedFields.push(ltw_addFiledToTable(doc, table, param));
}
}
doc.namedParFields = [];
doc.namedFields = [];
for (var i in namedParamsList) {
for (var i in namedParamsList) {
var np = namedParamsList[i];
var np = namedParamsList[i];
doc.namedParFields.push([np[0], localaddFiledToTable(doc, table, np[1])]);
doc.namedFields.push([np[0], ltw_addFiledToTable(doc, table, np[1])]);
}
}
body.appendChild(table);
body.appendChild(table);
שורה 301: שורה 319:
for (var box in checkboxes) {
for (var box in checkboxes) {
p.appendChild(doc.createTextNode(checkboxes[box]));
p.appendChild(doc.createTextNode(checkboxes[box]));
doc[box] = localcopyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: localupdatePreview});
doc[box] = ltw_copyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: ltw_updatePreview});
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"));
localcopyAttributes(p.style, {background: "blue", color: "white", fontSize: "0.85em"} );
ltw_copyAttributes(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 = localcopyAttributes(doc.createElement("input"), {type:"button", value:"אישור", doc: doc, popup: popup});
b = ltw_copyAttributes(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("", localcreateTemplate(this.doc), "");
insertTags("", this.doc.getTemplate(), "");
this.popup.close();
this.popup.close();
}
}
body.appendChild(b);
body.appendChild(b);
b = localcopyAttributes(doc.createElement("input"), {type: "button", value: "ביטול", popup: popup, onclick: function(){this.popup.close();}});
b = ltw_copyAttributes(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 localfireLinkTemplatePopup(templateName) {
function ltw_fireLinkTemplatePopup(templateName) {
var linkTemplates = localknownLinkTemplates();
var linkTemplates = ltw_knownLinkTemplates();
var templateParams = linkTemplates[templateName];
var templateParams = linkTemplates[templateName];
if (templateParams && templateParams.constructor == Array && templateParams.length > 0)
ltw_popupPredefinedLinkTemplate(templateName, templateParams, ltw_templateRegex(templateName));
localpopupPredefinedLinkTemplate(templateName, templateParams, localtemplateRegex(templateName));
}
}


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


function localcreateLinkTemplatesSelections() {
function ltw_createLinkTemplatesSelections() {
var select = document.createElement("select");
var select = document.createElement("select");
select.onchange = function() {
select.onchange = function() {
localfireLinkTemplatePopup(this.value);
ltw_fireLinkTemplatePopup(this.value);
this.selectedIndex = 0;
this.selectedIndex = 0;
return false;
return false;
}
}
select.options.add(new Option("אשף תבניות קישורים", ""));
select.options.add(new Option("אשף תבניות קישורים", ""));
var allnames = localcreateSortedTemplatesList();
var allnames = ltw_createSortedTemplatesList();
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]));
שורה 357: שורה 374:
}
}


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


function localadvancedFire(context) {
function ltw_advancedFire(context) {
localfireLinkTemplatePopup(this.template);
ltw_fireLinkTemplatePopup(this.template);
}
}


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


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