מדיה ויקי:Gadget-TemplatesExternalLinks.js: הבדלים בין גרסאות בדף
מ לבקשת קיפוד |
תמיכה בתבניות עם פרמטרים שמיים - תשתית |
||
| שורה 2: | שורה 2: | ||
//Written by [[User:קיפודנחש]] | //Written by [[User:קיפודנחש]] | ||
function | 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 | function localcopyAttributes(target, source) { | ||
for (key in source) | for (key in source) | ||
target[key] = source[key]; | target[key] = source[key]; | ||
| שורה 19: | שורה 30: | ||
} | } | ||
function | function localknownLinkTemplates() { | ||
var constants = ["", | var constants = ["", | ||
"שם המחבר", | "שם המחבר", | ||
| שורה 68: | שורה 79: | ||
]; | ]; | ||
var | 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 | for (var key in localtemplatesDic) | ||
for (var i in | for (var i in localtemplatesDic[key]) | ||
if (typeof( | if (typeof(localtemplatesDic[key][i]) == "number") | ||
localtemplatesDic[key][i] = constants[localtemplatesDic[key][i]]; | |||
if (typeof privateTemplates === "object") | if (typeof privateTemplates === "object") | ||
localcopyAttributes(localtemplatesDic, privateTemplates); | |||
return | return localtemplatesDic; | ||
} | |||
function localnamedParams(templateName) { | |||
var allNamedParam = { | |||
'בלדד השוחי': [['משתנה ראשון', 'כותרת משתנה ראשון'], ['משתנה שני', 'כותרת משתנה שני']] | |||
}; | |||
return allNamedParam[templateName] || []; | |||
} | } | ||
function | 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 = | 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") | ||
localcopyAttributes(regexes, privateRegexes); | |||
return regexes[templateName]; | return regexes[templateName]; | ||
} | } | ||
function | 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; | ||
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"); | ||
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); | ||
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; | ||
} | } | ||
doc.allFields.push(localaddFiledToTable(doc, table, param)); | |||
} | |||
doc.namedParFields = []; | |||
for (var i in namedParamsList) { | |||
var np = namedParamsList[i]; | |||
doc.namedParFields.push([np[0], localaddFiledToTable(doc, table, np[1])]); | |||
} | } | ||
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] = | 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")); | ||
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 = | 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("", | insertTags("", localcreateTemplate(this.doc), ""); | ||
this.popup.close(); | this.popup.close(); | ||
} | } | ||
body.appendChild(b); | body.appendChild(b); | ||
b = | 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 | function localfireLinkTemplatePopup(templateName) { | ||
var linkTemplates = | 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) | ||
localpopupPredefinedLinkTemplate(templateName, templateParams, localtemplateRegex(templateName)); | |||
} | } | ||
function | function localcreateSortedTemplatesList() { | ||
var fullList = | var fullList = localknownLinkTemplates(); | ||
var names = [], hnames = []; | var names = [], hnames = []; | ||
for (x in fullList) | for (x in fullList) | ||
| שורה 313: | שורה 341: | ||
} | } | ||
function | function localcreateLinkTemplatesSelections() { | ||
var select = document.createElement("select"); | var select = document.createElement("select"); | ||
select.onchange = function() { | select.onchange = function() { | ||
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 = | 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 | function localupdatePreview() { this.doc.previewNode.data = localcreateTemplate(this.doc); } | ||
function | function localadvancedFire(context) { | ||
localfireLinkTemplatePopup(this.template); | |||
} | } | ||
function | function localcreateAdvanceToolKit() { | ||
var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []}; | var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []}; | ||
var templatesList = | var templatesList = localcreateSortedTemplatesList(); | ||
for (var i in templatesList) | for (var i in templatesList) | ||
gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: | 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( | $j(document).ready(localcreateAdvanceToolKit); | ||
if (wgAction == 'edit') | if (wgAction == 'edit') | ||
hookEvent("load", | hookEvent("load", localcreateLinkTemplatesSelections); | ||