מדיה ויקי:Gadget-TemplatesExternalLinks.js
מראה
הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
- פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
- גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
- אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
//אשף תבניות קישורים
function createTemplate(doc) {
var par = ["{{" + doc.templateName];
for (var i in doc.allFields)
par.push((doc.problematic? (parseInt(i)+1) + "=":"") + doc.allFields[i].value);
var code = par.join("|") + "}}";
if (doc.refCheckBox.checked)
return "{{הערה|1=" + code + "}}";
if (doc.listCheckBox.checked)
return "* " + code;
return code;
}
function copyAttributes(target, source) {
for (key in source)
target[key] = source[key];
return target;
}
function knownLinkTemplates() {
var constants = ["",
"שם המחבר",
"כותרת המאמר",
"מספר (כפי שמופיע בקישור)",
"מידע נוסף (למשל תאריך)",
"מספר הסדרה",
"קידומת",
"מידע נוסף (לא תאריך)",
"ספר",
"פרק",
"פסוק",
"מסכת",
"דף",
"עמוד",
"משנה",
"סימן",
"סעיף",
"הלכות",
"שם",
"מספר הסדרה",
'מספר סדרת "ART"',
"כותרת הכתבה. אם הכתבה משתרעת על פני דפים אחדים יש לתת לכל חלק פרט לראשון את הכותרת 'המשך'",
"תאריך כתבה, בצורה 1949/07/25<br/>כפי שמופיע בקישור",
"ערך חלופי לסוג הפרסום, כשהקישור הוא לפרסומת או לתמונה ולא לכתבה.<br/>אם הקישור כולל 'EntityId=Ad' או 'EntityId=Pc', יש למלא Ad או Pc",
"שם הספר",
"קידומת סוג הכתבה",
"מזהה נושא הכתבה",
"שם הערך",
"קוד כניסה חינם (כפי שמופיע בקישור)",
"כרך",
"הפניה לכתבה (כפי שמופיע בקישור)",
"הלכה",
"טור",
"חלק",
"כותרת הדף",
"שם החלל",
"מספר ה-folder כמו שמופיע בקישור",
"כותרת הספר/שם הקהילה",
"מספר גיליון, תאריך פרסום ומספרי עמודים",
"החלק השני של הקישור",
"מספר העמוד, כפי שמופיע באתר",
"שם האיש",
"שם האמן"
];
var templatesDic = {
"הארץ": [1, 2, 3, 4],
"דבר": [1,2,22,3,7,23],
'תנ"ך': [8,9,10],
"nrg": [1,2,3,4,0,19,20],
"Mooma2": [32,3],
"בחדרי חרדים": [1,2,3,4],
"CIA factbook":["האותיות שמציינות את המדינה"],
"Google book":["מזהה - מזהה הספר באתר גוגל", 24, 1],
"HebrewBooks":[1,8,3,4],
"mynet":[1,2,3,4,0,5],
"NFC":[1,2,3,4],
"Onlife":[1,2,3,4],
"PalPost":[1,2,12,3,4],
"TheMarker":[1,2,3,4],
"ynet":[1,2,3,4,0,5,25],
"וואלה!":[1,2,3,4,0,26],
"גלובס":[1,2,3,4],
"כלכליסט":[1,2,3,4,0,19],
"נענע10":[1,2,3,4,0,26],
"אנציקלופדיה ynet":[27,3,28,4],
"תדהר":[29,13,27],
"אנשים ישראל":[1,2,3,4],
"אתר חיל האוויר":[1,2,3,4],
"בלדד השוחי":[3,2],
"בשבע":[1,2,3,4],
"האייל הקורא":[1,2,3,4],
"הידען":[1,2,30,4],
"המאסף":[1,2,3,4],
"חסקין":[3,2],
"בבלי":[11,12,13],
"משנה":[11,9,14],
'רמב"ם':[8,17,9,31],
"ירושלמי":[11,9,31],
"שולחן ערוך":[33,15,16],
"מטח":[1,2,3,4],
"גלצ":[1,2,3,4],
"ישראל היום":[1,2,3,4],
"מממ":[1,2,3,4],
"מממ2":[1,2,3,4],
"משנה תורה":[12,3,34],
"נזכור":[35,3],
"סגולה":[1,2,3,4],
"ספורט 5":[1,2,3,36,4],
"ספסל":[3,18,0],
"ספסל מאמן":[3,18,0],
"ספרי יזכור":[1,37,3,4],
"הספרייה הדיגיטלית":[1,24,3,4],
"אורות":[1,2,3,4],
"הערוץ האקדמי":[1,34,3,4],
"עכבר העיר":[1,2,3,4],
"ערוץ7":[1,2,3,4],
"פעמים":[1,2,3,38],
"ספר פרויקט גוטנברג":[1,24,3],
"תכלת":[1,2,3,4],
"אנצ דעת":[3,27],
"דעת":[1,39,2],
"ויקישיבה":["שם הערך בויקישיבה"],
"HebrewBooksPage": [1,8,3,4,40],
"גדולי ישראל": [29,40,41,13],
"פנאי פלוס": [1,2,3,4,0,5,25]
};
for (var key in templatesDic)
for (var i in templatesDic[key])
if (typeof(templatesDic[key][i]) == "number")
templatesDic[key][i] = constants[templatesDic[key][i]];
return templatesDic;
}
function templateRegex(templateName) {
var regexes = {
"nrg": {regex: /\/online\/([^\/]+)\/ART([^\/]+)\/([^\.]+).html/i, params:[6,7,3]},
"Google book": { regex: /\/books\?id=([^&]+)/i, params:[1]},
"NFC": {regex: /Archive\/([^\.]+)\.html/i, params:[3]},
"HebrewBooks": {regex: /hebrewbooks\.org\/(\d+)/i, params:[3]},
"mynet": {regex: /articles\/(\d+),7340,L-(\d+),00\.html/i, params:[6,3]},
"Onlife": {regex: /onlife\.co\.il\/([^\/]+)\/(.*)/i, params:[1,3]},
"PalPost": {regex: /BaseHref=PLS\/(\d{4}\/\d{1,2}\/\d{1,2})&EntityId=Ar(\d+)/i, params:[3,4]},
"TheMarker": {regex: /http:\/\/(?:www\.){0,1}themarker\.com\/tmc\/article\.jhtml\?ElementId=([^&\/\.]+)/i, params:[3]},
"ynet": {regex: /ynet\.co\.il\/([^\/]+)\/(\d+),7340,L-(\d+),00.html/i, params:[7,6,3]},
"Mooma2": {regex: /\?ArtistId=(\d+)/i, params:[1]},
"HebrewBooksPage": {regex: /pdfpager\.aspx\?.*req=(\d+).*&pgnum=(\d+)/i, params:[3,5]},
"בחדרי חרדים" : { regex: /\/Article\.aspx\?id=(\d+)/i, params:[3]},
"וואלה!": {regex: /\?w=\/(\d+)\/(\d+)/i, params:[6,3]},
"גלובס": {regex: /\/news\/article.aspx\?did=(\d+)/i, params:[3]},
"כלכליסט": {regex: /\/articles\/(\d+),7340,L-(\d+),00/i, params:[6,3]},
"נענע10": {regex: /http:\/\/([a-z]*)\.nana10\.co\.il\/Article\/\?ArticleID=(\d+)/i, params:[6,3]},
"דבר": {regex: /=DAV\/(\d{4}\/\d{1,2}\/\d{1,2})&EntityId=(Ar|Ad|Pc)(\d+)/i, params:[3,6,4]},
"אנציקלופדיה ynet": {regex: /\/yaan\/0,7340,L-(\d+)-([^-]*)-FreeYaan,00.html/i, params:[2,3]},
"אנשים ישראל": {regex: /.*itemID=(\d+)&/i, params:[3]},
"אתר חיל האוויר": {regex: /\/([^\/]*)-he\//i, params:[3]},
"בלדד השוחי": {regex: /ArticleID(\d*)/i, params:[1]},
"בשבע": {regex: /Article.aspx\/(\d+)/i, params:[3]},
"האייל הקורא": {regex: /story(?:_|\?id=)(\d+)/i, params:[3]},
"הידען": {regex: /hayadan\.org\.il\/([^\/]*)/i, params:[3]},
"המאסף": {regex: /notimportant\.co\.il\/?p=(\d+)/i, params:[3]},
"חסקין": {regex: /ArticleNum=(\d+)/i, params:[1]},
"הארץ": {regex: /spages\/(\d+)[\.\/]/i, params:[3]},
"גלצ": {regex: /NewsArticle\.aspx\?NewsId\=(\d+)/i, params:[3]},
"ישראל היום": {regex: /newsletter_article\.php\?id=(\d+)/i, params:[3]},
"מממ": {regex: /data\/pdf\/([^\.])\.pdf/i, params:[3]},
"מממ2": {regex: /data\/docs\/([^\.])\.rtf/i, params:[3]},
"משנה תורה": {regex: /mechon-mamre.org\/\i\/(\d+)\.htm/i, params:[2]},
"נזכור": {regex: /HalalKorot\.aspx\?id=(\d+)/i, params:[2]},
"סגולה": {regex: /view-article\.asp\?article=(\d+)/i, params:[3]},
"ספורט 5": {regex: /articles\.aspx\?FolderID=(\d+)&docID=(\d+)/i, params:[4,3]},
"ספסל": {regex: /hplayer\.aspx\?id=(\d+)/i, params:[1]},
"ספסל מאמן": {regex: /hstaff\.aspx\?id=(\d+)/i, params:[1]},
"ספרי יזכור": {regex: /yizkor\.nypl\.org\/index\.php\?id=(\d+)/i, params:[3]},
"הספרייה הדיגיטלית": {regex: /nnl\/dig\/books\/([^\.]+)\.html/i, params:[3]},
"אורות": {regex: /Article\.aspx\?ID=(\d+)/i, params:[3]},
"הערוץ האקדמי": {regex: /programs\/Item\.aspx\?it=(\d+)/i, params:[3]},
"עכבר העיר": {regex: /CM\.articles_item,(.*),\.aspx/i, params:[3]},
"ערוץ7": {regex: /News\.aspx\/(\d+)/i, params:[3]},
"פעמים": {regex: /dbsAttachedFiles\/Article_(.*)\.pdf/i, params:[3]},
"ספר פרויקט גוטנברג": {regex: /ebooks\/(\d+)/i, params:[3]},
"תכלת": {regex: /article\.php\?id=(\d+)/i, params:[3]},
":אנצ דעת": {regex: /value\.asp\?id1=(\d+)/i, params:[1]},
"דעת": {regex: /(?:www\.)?daat\.ac\.il\/(.*)/i, params:[2], problematic:1},
"פנאי פלוס": {regex: /ynet\.co\.il\/([^\/]+)\/(\d+),7340,L-(\d+),00\.html/i, params:[7,6,3]}
}
return regexes[templateName];
}
function popupPredefinedLinkTemplate(templateName, paramList, regexDict) {
var height = 160 + 20 * paramList.length + (regexDict ? 60 : 0);
for (i in paramList)
height += 16 * Math.floor(paramList[i].length / 24);
var top = (screen.height - height) / 2, left = (screen.width - 550) / 2;
var popup = window.open("", "", "resizable=1,height="+height+",width=550,left="+left+",top="+top);
var doc = popup.document;
doc.problematic = regexDict && regexDict.problematic;
copyAttributes(doc, { title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, allFields:[] } );
var body = doc.body;
if (regexDict) {
body.appendChild(doc.createTextNode('הדביקו את הקישור כאן:'));
var b = doc.createElement("input");
b.urlInput = doc.createElement("input");
copyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
b.urlInput.style.width = "12em";
body.appendChild(b.urlInput);
copyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: updatePreview });
b.onclick = function() {
var matches = this.urlInput.value.match(this.regexDict.regex);
if (matches)
for (var i = 1; i < matches.length; i++) {
var fieldIndex = this.regexDict.params[i-1]; //parameters are counted from one, we count from 0.
if (fieldIndex && this.doc.allFields[fieldIndex-1])
this.doc.allFields[fieldIndex-1].value = matches[i];
}
this.update();
}
body.appendChild(b);
body.appendChild(doc.createElement("hr"));
}
var table = doc.createElement("table");
for (var i in paramList) {
var param = paramList[i];
if (param.length == 0) { // this allow defining an empty parameter. by use of a "pseudo field".
doc.allFields.push({value:""});
continue;
}
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 = copyAttributes(doc.createElement("input"), { type: "text", maxLength: 120, doc: doc });
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = updatePreview;
field.style.width = "20em";
cell = row.insertCell(-1) || row.cells[1];
cell.appendChild(field);
doc.allFields.push(field);
}
body.appendChild(table);
body.appendChild(doc.createElement("p"));
p = doc.createElement("p");
p.appendChild(doc.createTextNode(" הערת שוליים:"));
doc.refCheckBox = copyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: updatePreview});
p.appendChild(doc.refCheckBox);
p.appendChild(doc.createTextNode(" פריט ברשימה:"));
doc.listCheckBox = copyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: updatePreview});
p.appendChild(doc.listCheckBox);
body.appendChild(p);
p = doc.createElement("p");
copyAttributes(p.style, {background: "blue", color: "white", fontSize: "0.85em"} );
p.appendChild(doc.previewNode = doc.createTextNode(' '));
body.appendChild(p);
body.appendChild(doc.createElement("p"));
b = copyAttributes(doc.createElement("input"), {type:"button", value:"אישור", doc: doc, popup: popup});
doc.problematic = regexDict && regexDict.problematic && true;
b.onclick = function() {
insertTags("", createTemplate(this.doc), "");
this.popup.close();
}
body.appendChild(b);
b = copyAttributes(doc.createElement("input"), {type: "button", value: "ביטול", popup: popup, onclick: function(){this.popup.close();}});
body.appendChild(b);
doc.refCheckBox.onchange();
}
function fireLinkTemplatePopup(templateName) {
var linkTemplates = knownLinkTemplates();
var templateParams = linkTemplates[templateName];
if (templateParams && templateParams.constructor == Array && templateParams.length > 0)
popupPredefinedLinkTemplate(templateName, templateParams, templateRegex(templateName));
}
function createSortedTemplatesList() {
var fullList = knownLinkTemplates();
var names = [], hnames = [];
for (x in fullList)
if (x.match(/^[a-zA-Z]/))
names.push(x);
else
hnames.push(x);
hnames.sort();
names.sort(function(a,b){var la=a.toLowerCase(),lb=b.toLowerCase();return la>lb?1:la<lb?-1:0;});
return hnames.concat(names);
}
function createLinkTemplatesSelections() {
var select = document.createElement("select");
select.onchange = function() {
fireLinkTemplatePopup(this.value);
this.selectedIndex = 0;
return false;
}
select.options.add(new Option("אשף תבניות קישורים", ""));
var allnames = createSortedTemplatesList();
for (var i in allnames)
select.options.add(new Option(allnames[i], allnames[i]));
var toolbar = document.getElementById("toolbar");
if (toolbar)
toolbar.appendChild(select);
}
function updatePreview() { this.doc.previewNode.data = createTemplate(this.doc); }
function advancedFire(context) {
fireLinkTemplatePopup(this.template);
}
function createAdvanceToolKit() {
var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []};
var templatesList = createSortedTemplatesList();
for (var i in templatesList)
gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: advancedFire, template: templatesList[i]}});
$j('#wpTextbox1').wikiEditor('addToToolbar', {
'section': 'advanced',
'group': 'heading',
'tools': {'linkTemplateWizard': gadget}
});
}
if (typeof $j != 'undefined' && typeof $j.fn.wikiEditor != 'undefined')
$j(document).ready(createAdvanceToolKit);
if (wgAction == 'edit')
hookEvent("load", createLinkTemplatesSelections);