לדלג לתוכן

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

מתוך צפונות ויקי
נו כבר
מ 166 גרסאות של הדף wikipedia:he:מדיה_ויקי:Gadget-TemplatesExternalLinks.js יובאו
 
(105 גרסאות ביניים של 14 משתמשים אינן מוצגות)
שורה 1: שורה 1:
//אשף תבניות קישורים
//Adds wizard for using templates for external links
function createTemplate(doc) {
//Written by [[User:קיפודנחש]]
var par = ["{{" + doc.templateName];
if (($.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit']) + 1) && ( !$('#wpTextbox1').prop( 'readonly' ) ))  
for (var i in doc.allFields)
mw.loader.using('jquery.textSelection', function() {
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 templates(templateName) {
var constants = ["",
"שם המחבר",
"כותרת המאמר",
"מספר (כפי שמופיע בקישור)",
"מידע נוסף, למשל תאריך. נסו לשמור על הפורמט '30 באוגוסט 1958'",
"מספר הסדרה",
"נתיב הדף - כמו שמופיע בקישור",
"מידע נוסף (לא תאריך)",
"ספר",
"פרק",
"פסוק",
"מסכת",
"דף",
"עמוד",
"משנה",
"סימן",
"סעיף",
"הלכות",
"שם",
"מספר הסדרה",
'מספר סדרת "ART"',
"",
"תאריך כתבה (בפורמט 1949/07/25, כפי שמופיע בקישור)",
"סוג הפרסום, כפי שמופיע בקישור אחרי '=EntityId'. בדרך כלל 'Ar' לכתבה רגילה, 'Pc' לתמונה ו־'Ad' לפרסומת",
"שם הספר",
"קידומת סוג הכתבה",
"מזהה נושא הכתבה",
"שם הערך",
"קוד כניסה חינם (כפי שמופיע בקישור)",
"כרך",
"הפניה לכתבה (כפי שמופיע בקישור)",
"הלכה",
"",
"חלק",
"כותרת הדף",
"שם החלל",
"מספר ה-folder כמו שמופיע בקישור",
"כותרת הספר/שם הקהילה",
"מספר גיליון, תאריך פרסום ומספרי עמודים",
"החלק השני של הקישור",
"מספר העמוד, כפי שמופיע באתר",
"שם האיש",
"שם האמן",
"שם העיתון",
"קוד העיתון באתר (שלוש אותיות לטיניות גדולות)",
"שם המין/זן",
"שם הרב",
"שם השיעור",
"השיעור כשם שמופיע בקישור",
"מספר גיליון, תאריך פרסום ומספרי עמודים",
"שם הערך בויקישיבה",
"קידומת הקישור, אם שונה מ-www",
"האותיות שמציינות את המדינה"
];


var templatesAr = [
{t: 'קישור כללי', np: [
['הכותב', 'שמות כותבי המאמר', 1],
['כותרת', 'שם המאמר המקושר'],
['כתובת', 'הקישור (כלומר ה-URL) עצמו'],
['תאריך', 'תאריך המאמר, בפורמט "30 באוגוסט 1958"', 1],
['עמודים', 'מספר העמודים', 1],
['מידע נוסף', 'מידע נוסף (לא תאריך)', 1],
['שפה', 'שפה (אם המאמר לא בעברית)', 1],
['ציטוט', 'ציטוט משפט מהדף המקושר (יכול לעזור במציאת הדף בעתיד, אם הקישור ישתנה)', 1]
]},
{t: 'הארץ', p: [1,2,3,4], r: /([.\d]+)$/i, rp: [3], bm: 1, op: [0,3]},
{t: 'דבר'},
{t: 'מעריב'},
{t: 'הצבי'},
{t: 'הצפירה'},
{t: 'המגיד'},
{t: 'חבצלת'},
{t: 'המליץ'},
{t: 'על המשמר'},
{t: 'היינט'},
{t: 'PalPost'},
            {t: 'חרות'},
{t: 'תנ"ך', p: [8,9,10], op:[2]},
{t: 'nrg', p: [1,2,3,4,0,19,20], r: /\/online\/([^\/]+)\/ART([^\/]*)\/([^\.]+).html/i, rp: [6,7,3], bm: 1, op:[3,4,5,6], nopop: 1},
{t: 'Mooma2', p: [42,3], r: /\?ArtistId=(\d+)/i, rp: [2]},
{t: 'בחדרי חרדים', p: [1,2,3,4], r: /\/Article\.aspx\?id=(\d+)/i, rp: [3], bm: 1, op: [3]},
{t: 'CIA factbook', p: [52]},
{t: 'mynet', p: [1,2,3,4,0,5], r: /articles\/(\d+),7340,L-(\d+),00\.html/i, rp: [6,3], op: [3,4,5,6]},
{t: 'NFC', p: [1,2,3,4], r: /Archive\/([^\.]+)\.html/i, rp: [3], op: [3], bm: 1},
{t: 'Onlife', p: [1,2,3,4], r: /onlife\.co\.il\/([^\/]+)\/(.*)/i, rp: [1,3], op: [3]},
{t: 'ynet', p: [1,2,3,4], def: {6: 0, 7: 'articles'}, r: /ynet\.co\.il\/([^\/]+)\/(\d+),7340,L-(\d+),00.html/i, rp: [7,6,3], bm: 1, op: [3,4,5,6]},
{t: 'Xnet', p: [1,2,3,4], def: {6: 0, 7: 'articles'}, r: /([^\/]+)\/(\d+),\d+,L-(\d+),00.html/i, rp: [7,6,3], bm: 1, op: [3,4,5,6]},
{t: 'וואלה!', p: [1,2,3,4,0,26], r: /\?w=\/(\d+)\/(\d+)/i, rp: [6,3], bm: 1, op: [3,4,5]},
{t: 'גלובס', p: [1,2,3,4], r: /\/news\/article.aspx\?did=(\d+)/i, rp: [3], bm: 1, op: [3]},
{t: 'כלכליסט', p: [1,2,3,4], r: /\/articles\/(\d+),7340,L-(\d+),00/i, rp: [6,3], op: [3,4,5,6], bm: 1},
{t: 'נענע10', p: [1,2,3,4,0,26], r: /http:\/\/([a-z]*)\.nana10\.co\.il\/Article\/\?ArticleID=(\d+)/i, rp: [6,3], bm: 1, op: [3,4,5,6]},
{t: 'תדהר', p: [29,13,27], op: [2]},
{t: 'אנשים ישראל', p: [1,2,3,4], r: /.*itemID=(\d+)&/i, rp: [3], op: [3]},
{t: 'אתר חיל האוויר', p: [1,2,3,4], r: /\/([^\/]*)-he\//i, rp: [3], op: [3]},
{t: 'בלדד השוחי', p: [3,2,4], r: /ArticleID(\d*)/i, rp: [1], op: [2]},
{t: 'בשבע', p: [1,2,3,4], r: /Article.aspx\/(\d+)/i, rp: [3], op: [3]},
{t: 'האייל הקורא', p: [1,2,3,4], r: /story(?:_|\?id=)(\d+)/i, rp: [3], op: [3]},
{t: 'הידען', p: [1,2,30,4], r: /hayadan\.org\.il\/([^\/]*)/i, rp: [3], op: [3]},
{t: 'המאסף', p: [1,2,3,4], r: /notimportant\.co\.il\/?p=(\d+)/i, rp: [3], op: [3]},
{t: 'חסקין', p: [3,2], r: /ArticleNum=(\d+)/i, rp: [1]},
{t: 'בבלי', p: [11,12,13], op: [2]},
{t: 'משנה', p: [11,9,14], op: [2]},
{t: 'רמב"ם', p: [8,17,9,31], op: [0,3]},
{t: 'ירושלמי', p: [11,9,31], op: [2]},
{t: 'שולחן ערוך', p: [33,15,16], op: [2]},
{t: 'מטח', p: [1,2,3,4], op: [3]},
{t: 'גלצ', p: [1,2,3,4], r: /NewsArticle\.aspx\?NewsId\=(\d+)/i, rp: [3], op: [3]},
{t: 'ישראל היום', p: [1,2,3,4], r: /newsletter_article\.php\?id=(\d+)/i, rp: [3], bm: 1, op: [3]},
{t: 'מממ', p: [1,2,3,4], r: /data\/pdf\/([^\.])\.pdf/i, rp: [3], op: [3]},
{t: 'נזכור', p: [35,3], r: /HalalKorot\.aspx\?id=(\d+)/i, rp: [2]},
{t: 'סגולה', p: [1,2,3,4], r: /view-article\.asp\?article=(\d+)/i, rp: [3], op: [3]},
{t: 'ספורט 5', p: [1,2,3,36,4], r: /articles\.aspx\?FolderID=(\d+)&docID=(\d+)/i, rp: [4,3], op: [3], op: [0,4]},
{t: 'ספסל', p: [3,18,0], r: /hplayer\.aspx\?id=(\d+)/i, rp: [1]},
{t: 'ספסל מאמן', p: [3,18,0], r: /hstaff\.aspx\?id=(\d+)/i, rp: [1]},
{t: 'ספרי יזכור', p: [1,37,3,4], r: /yizkor\.nypl\.org\/index\.php\?id=(\d+)/i, rp: [3], op: [3]},
{t: 'הספרייה הדיגיטלית', p: [1,24,3,4], r: /nnl\/dig\/books\/([^\.]+)\.html/i, rp: [3], op: [3]},
{t: 'אורות', p: [1,2,3,4], r: /Article\.aspx\?ID=(\d+)/i, rp: [3], op: [3]},
{t: 'הערוץ האקדמי', p: [1,34,3,4], r: /programs\/Item\.aspx\?it=(\d+)/i, rp: [3], bm: 1, op: [3]},
{t: 'עכבר העיר', p: [1,2,3,4], r: /CM\.articles_item,(.*),\.aspx/i, rp: [3], bm: 1, op: [3]},
{t: 'ערוץ7', p: [1,2,3,4], r: /News\.aspx\/(\d+)/i, rp: [3], bm: 1, op: [3]},
{t: 'פעמים', p: [1,2,3,38], r: /dbsAttachedFiles\/Article_(.*)\.pdf/i, rp: [3], op: [3], op: [0,3]},
{t: 'תכלת', p: [1,2,3,4], r: /article\.php\?id=(\d+)/i, rp: [3], op: [3]},
{t: 'אנצ דעת', p: [3,27], r: /value\.asp\?id1=(\d+)/i, rp: [1]},
{t: 'דעת', p: [1,39,2], r: /(?:www\.)?daat\.ac\.il\/(.*)/i, rp: [2]},
{t: 'ויקישיבה', p: [50]},
{t: 'HebrewBooks', p: [1,8,3,4], r: /hebrewbooks\.org\/(\d+)/i, rp: [3], op: [3]},
{t: 'גדולי ישראל', p: [29,40,41,13]},
{t: 'עיתונות יהודית היסטורית 2', p: [43,44,1,2,22,3,7,0,23], def: {9: "Ar"}, r: /(?:Key|BaseHref)=([A-Z]{3})\/(\d{4}\/\d{1,2}\/\d{1,2})(?:.*&EntityId=|\/\d+\/)([A-Z][a-z])(\d+)/i, rp: [2,5,9,6], replace: [[/%2F/gi,'/']], op: [6,8]},
{t: 'Iucnredlist', p: [45,3], r: /details(?:\.php)?\/(\d+)/, rp: [2]},
{t: 'העין השביעית', p: [1,34,6,4,25], r: /the7eye\.org\.il\/([^\/]+)\/Pages\/(.*)\.aspx/, rp: [5,3], bm: 1, op: [3,4]},
{t: 'One', p: [1,2,3,4], r: /(?:Article[\d\-\/,]*\/|id=)([\d\-\/,]*\d)/, rp: [3], bm: 1, op: [3]},
{t: 'קול הלשון - שיעור', p: [46,47,48,4], np: [['וידאו', '"וידאו": רשמו "כן" אם זה שיעור לצפייה'], ['תואר', 'תואר - אם תואר המרצה שונה מ"הרב"']], r: /(?:PathFile=|Source=)([^&]*)/i, rp: [3], op: [3]},
{t: 'ספר פרויקט גוטנברג', np: [["כותב", "שם כותב הספר", 1], ['שם הספר', 'שם הספר (ברירת מחדל: שם הערך)', 1], ['מספר', 'מספר הספר בפרויקט']], r: /ebooks\/(\d+)/i, rp: [3]},
{t: 'imdb title', np: [['id', 'המספר שמופיע בקישור'], ['title', 'הכותרת שתופיע בקישור (אופציונלי: ברירת מחדל - שם הערך', 1]], r: /title\/tt(\d+)/i, rp: [1]},
{t: 'imdb name', np: [['id', 'המספר שמופיע בקישור'], ['name', 'הכותרת שתופיע בקישור (אופציונלי: ברירת מחדל - שם הערך', 1]], r: /name\/nm(\d+)/i, rp: [1]},
{t: 'imdb company', np: [['id', 'המספר שמופיע בקישור'], ['company', 'הכותרת שתופיע בקישור']], r: /company\/co(\d+)/i, rp: [1]},
{t: 'Google book', np: [['מזהה','מזהה הספר באתר גוגל'],['כותב','שם כותב/י הספר', 1],['שם הספר','שם הספר (אופציונלי) - ללא הפרמטר יוצג שם הערך', 1]], r: /id=([^&]*)/, rp: [1]},
{t: 'TheMarker1', p: [1,2,3,4,51], r: /http:\/\/(?:www)?(.*)\.themarker\.com\/([^\?]+)/i, rp: [5,3], op: [3,4], bm: 1},
{t: 'מערכות', p: [1,2,3,49], r: /FILES\/(.*)\.pdf/i, rp: [3], op: [3]},
{t: 'mako', p: [1,2,3,6,4], r: /www\.mako\.co\.il\/(.*?)\/Article-(.*?)\.htm/i, rp: [4,3], bm: 1, op: [4]}
];


if (! templateName) {
var en = /^[a-z]/;
function compare(t1, t2) {
var gen = 'קישור כללי', a = t1.t.toLowerCase(), b = t2.t.toLowerCase();
if (a == gen ^ b == gen) return (b == gen) - (a == gen);
if (en.test(a) - en.test(b)) return en.test(a) - en.test(b); // all hebrew before all english
return a > b ? 1 : (a < b ? -1 : 0);
}
templatesAr.sort(compare);
return templatesAr;
}
var template;
for (var i in templatesAr)
if (templatesAr[i].t == templateName)
template = templatesAr[i];
var historic = {"דבר": "DAV", "מעריב": "MAR", "הצבי": "HZV", "הצפירה": "HZF", "המגיד": "MGD", "המליץ": "HMZ", "חבצלת": "HZT", "PalPost": "PLS", "על המשמר" : "AHR", "היינט": "HYT", "חרות": "HRT"};
if (historic[template.t]) {
var r = new RegExp('=HISTNAME/(\\d{4}/\\d{1,2}/\\d{1,2})(?:.*&EntityId=|/\\d+/)([A-Z][a-z])(\\d+)'.replace('HISTNAME', historic[template.t]));
$.extend(template, {p: [1,2,22,3,7,0,23], def: {7: "Ar"}, r: r, rp: [3,7,4], replace: [[/%2F/gi, '/']], op: [4,6]});
}


for (var i in template.p)
if (typeof template.p[i] == "number")
template.p[i] = constants[template.p[i]];


return template;
}


function knownLinkTemplates() {
function templateDialog(dialog, template, values) {
var constants = ["",
var brainDamage = $.client.profile().name == 'msie' && $.client.profile().versionNumber < 8;
"שם המחבר",
var orderedFields = [],
"כותרת  המאמר",
namedFields = [],
"מספר (כפי שמופיע בקישור)",
table = $('<table>'),
"מידע נוסף (למשל תאריך)",
empty = {val: function(){return '';}, hasClass: function(){return 0;}};
"מספר הסדרה",
"קידומת",
"מידע נוסף (לא תאריך)",
"ספר",
"פרק",
"פסוק",
"מסכת",
"דף",
"עמוד",
"משנה",
"סימן",
"סעיף",
"הלכות",
"שם",
"מספר הסדרה",
'מספר סדרת "ART"',
"כותרת הכתבה. אם הכתבה משתרעת על פני דפים אחדים יש לתת לכל חלק פרט לראשון את הכותרת 'המשך'",
"תאריך כתבה, בצורה 1949/07/25<br/>כפי שמופיע בקישור",
"ערך חלופי לסוג הפרסום, כשהקישור הוא לפרסומת או לתמונה ולא לכתבה.<br/>אם הקישור כולל 'EntityId=Ad' או 'EntityId=Pc', יש למלא Ad או Pc",
"שם הספר",
"קידומת סוג הכתבה",
"מזהה נושא הכתבה",
"שם הערך",
"קוד כניסה חינם (כפי שמופיע בקישור)",
"כרך",
"הפניה לכתבה (כפי שמופיע בקישור)",
"הלכה",
"טור",
"חלק",
"כותרת הדף",
"שם החלל",
"מספר ה-folder כמו שמופיע בקישור",
"כותרת הספר/שם הקהילה",
"מספר גיליון, תאריך פרסום ומספרי עמודים",
"החלק השני של הקישור",
"מספר העמוד, כפי שמופיע באתר",
"שם האיש"
];


var templatesDic = {
function createWikiCode() {
"הארץ": [1, 2, 3, 4],
var par = ["{{" + template.t];
"דבר": [1,2,22,3,7,23],
for (var i = 0; i < orderedFields.length; i++)
'תנ"ך': [8,9,10],
par.push($.trim(orderedFields[i].val()).replace(/\|/g, '{{!}}').replace(/=/g, '{{=}}'));
"nrg": [1,2,3,4,0,19,20],
"Mooma": [18],
"בחדרי חרדים": [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]


};
if (template.def)
for (var key in templatesDic)
for (var parnum in template.def)
for (var i in templatesDic[key])
if (par[parnum] == template.def[parnum])
if (typeof(templatesDic[key][i]) == "number")
par[parnum] = '';
templatesDic[key][i] = constants[templatesDic[key][i]];
if (! template.nopop)
return templatesDic;
while (par.length && !par[par.length-1].length && orderedFields[par.length-2].length) // last condition is to avoid remving "emptys"
}
par.pop();
var code = par.join("|");
if (namedFields) {
var pairs = [];
for (j in namedFields) {
var val = $.trim(namedFields[j][1].val()).replace(/\|/g, '{{!}}');
if (val.length)
pairs.push(namedFields[j][0] + '=' + val);
}
if (pairs.length)
code += '|' + pairs.join('|');
}
code += "}}";
if ($('#ltw2_ref').prop('checked'))
return "{{הערה|" + code + "}}";
if ($('#ltw2_list').prop('checked'))
return "\n* " + code + "\n";
return code;
}


function templateRegex(templateName) {
function updatePreview(){
var regexes = {
$('#ltw2_preview').text(createWikiCode());
"nrg": {regex: /\/online\/([^\/]+)\/ART([^\/]+)\/([^\.]+).html/i, params:[6,7,3]},
var canOK = 'enable';
"Google book": { regex: /\/books\?id=([^&]+)/i, params:[1]},
var f = orderedFields.concat([]); //clone - we don't want to touch orderedFields.
"NFC": {regex: /Archive\/([^\.]+)\.html/i, params:[3]},
for (var i in namedFields)
"HebrewBooks": {regex: /hebrewbooks\.org\/(\d+)/i, params:[3]},
f.push(namedFields[i][1]);
"mynet": {regex: /articles\/(\d+),7340,L-(\d+),00\.html/i, params:[6,3]},
for (var i in f)
"Onlife": {regex: /onlife\.co\.il\/([^\/]+)\/(.*)/i, params:[1,3]},
if (f[i].hasClass('ltw_required') && $.trim(f[i].val()).length == 0)
"PalPost": {regex: /BaseHref=PLS\/(\d{4}\/\d{1,2}\/\d{1,2})&EntityId=Ar(\d+)/i, params:[3,4]},
canOK = 'disable';
"TheMarker": {regex: /http:\/\/(?:www\.){0,1}themarker\.com\/tmc\/article\.jhtml\?ElementId=([^&\/\.]+)/i, params:[3]},
$(".ui-dialog-buttonpane button:contains('אישור')").button(canOK);
"ynet": {regex: /ynet\.co\.il\/([^\/]+)\/(\d+),7340,L-(\d+),00.html/i, params:[7,6,3]},
$('#ltw2_list').attr('disabled', $('#ltw2_ref').prop('checked'));//disable list if ref
"Mooma": {regex: /\?ArtistId=(\d+)/i, params:[1]},
$('#ltw2_ref').attr('disabled', $('#ltw2_list').prop('checked'));//disable ref if list
"HebrewBooksPage": {regex: /pdfpager\.aspx\?.*req=(\d+).*&pgnum=(\d+)/i, params:[3,5]},
if (brainDamage) { //IOW: internet explorer.
"בחדרי חרדים" : { regex: /\/Article\.aspx\?id=(\d+)/i, params:[3]},
var width = $('#ltw_dialog').width() - 12;
"וואלה!": {regex: /\?w=\/(\d+)\/(\d+)/i, params:[6,3]},
$('.ui-dialog-titlebar').width(width);
"גלובס": {regex: /\/news\/article.aspx\?did=(\d+)/i, params:[3]},
$('.ui-dialog-buttonpane').width(width);
"כלכליסט": {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]},
function addRow(labelText, paramName, optional) {
"אנשים ישראל": {regex: /.*itemID=(\d+)&/i, params:[3]},
var inputField = $('<input>', {id: 'ltw2_inputfield_' + paramName, type: 'text', width: 600}).css({width: '28em'}).on('paste cut drop input change', updatePreview);
"אתר חיל האוויר": {regex: /\/([^\/]*)-he\//i, params:[3]},
if (! (optional || 0))
"בלדד השוחי": {regex: /ArticleID(\d*)/i, params:[1]},
inputField.addClass('ltw_required').css({border: '1px red solid'});
"בשבע": {regex: /Article.aspx\/(\d+)/i, params:[3]},
var tr = $('<tr>')
"האייל הקורא": {regex: /story(?:_|\?id=)(\d+)/i, params:[3]},
.append($('<td>').text(labelText).css({maxWidth: '20em'}))
"הידען": {regex: /hayadan\.org\.il\/([^\/]*)/i, params:[3]},
.append($('<td>').css({width: '30em'}).append(inputField));
"המאסף": {regex: /notimportant\.co\.il\/?p=(\d+)/i, params:[3]},
if (typeof paramName == 'number')
"חסקין": {regex: /ArticleNum=(\d+)/i, params:[1]},
orderedFields.push(inputField);
"הארץ": {regex: /spages\/(\d+)[\.\/]/i, params:[3]},
else
"גלצ": {regex: /NewsArticle\.aspx\?NewsId\=(\d+)/i, params:[3]},
namedFields.push([paramName, inputField]);
"ישראל היום": {regex: /newsletter_article\.php\?id=(\d+)/i, params:[3]},
table.append(tr);
"מממ": {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) {
function extractParamsFromURL() {
var height = 160 + 20 * paramList.length + (regexDict ? 60 : 0);
var str = $('#ltw_urlinput').val();
for (i in paramList)
if (template.replace)
height += 16 * Math.floor(paramList[i].length / 24);
for (var r in template.replace)
var top = (screen.height - height) / 2, left = (screen.width - 550) / 2;
str = str.replace(template.replace[r][0], template.replace[r][1]);
var popup = window.open("", "", "resizable=1,height="+height+",width=550,left="+left+",top="+top);
var matches = str.match(template.r);
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)
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.
$('#ltw2_inputfield_' + template.rp[i-1]).val(matches[i] || '');
if (fieldIndex && this.doc.allFields[fieldIndex-1])
updatePreview();
this.doc.allFields[fieldIndex-1].value = matches[i];
}
 
$('.ltw_disposable').remove();
 
if (template.bm)
dialog.append($('<p>', {title: 'ראו דף "עזרה:בוקמרקלטים"'}).css({color: 'red', fontWeight: 'bold'})
.text('קיים בוקמרקלט שמייצר תבנית "' + template.t + '" באופן אוטומטי. אנא שקלו להשתמש בו (ראו "עזרה:בוקמרקלטים").'))
.append($('<hr>'));
 
if (template.r)
dialog.append($('<span>').text('הדביקו את הקישור כאן:').css({width: '20em'}))
.append($('<input>', {type: "text", id: 'ltw_urlinput', maxLength: 600}).css({width: '26em'}).on('paste cut drop input change', extractParamsFromURL))
.append($('<hr>'))
 
dialog
.append($('<p>').text('השדות המסומנים באדום הם חובה, השאר אופציונליים'))
.append(table)
.append($('<p>').css({height: '2em'}))
.append($('<label>').text(' הערת שוליים '))
.append($('<input>', {type: 'checkbox', id: 'ltw2_ref'}).change(updatePreview))
.append($('<label>').css({width: '12em'}).text( ' פריט ברשימה '))
.append($('<input>', {type: 'checkbox', id: 'ltw2_list'}).change(updatePreview))
.append($('<p>').css({height: '1.5em'}))
.append($('<p>', {id: 'ltw2_preview'}).css({backgroundColor: "lightGreen", fontSize: '120%', maxWidth: '40em'}));
 
 
for (var i = 0; i < (template.p || []).length; i++)
if (template.p[i].length == 0) // this allow defining an empty parameter. by use of a "pseudo field".
orderedFields.push(empty);
else
addRow(template.p[i], parseInt(i, 10) + 1, template.op && ($.inArray(i, template.op)+1));
 
for (var i in template.np)
addRow(template.np[i][1], template.np[i][0], template.np[i][2]);
 
var valIndex = 0;
while (values && values.length) {
var next = values.shift();
var pair = next.split('=');
if (pair.length > 1) {
if (isNaN(pair[0])) {
for (var named in namedFields)
if (namedFields[named][0] == $.trim(pair[0]))
namedFields[named][1].val(pair[1]);
} else {
valIndex = parseInt(pair[0], 10);
if (valIndex <= orderedFields.length)
orderedFields[valIndex - 1].val(pair[1]);
}
}
this.update();
} else
if (valIndex < orderedFields.length)
orderedFields[valIndex++].val(pair[0]);
}
}
body.appendChild(b);
 
body.appendChild(doc.createElement("hr"));
dialog.dialog('option', 'buttons', {
'ביטול':
function() {
dialog.dialog('close');
},
'אישור':
function() {
$("#wpTextbox1").textSelection( 'encapsulateSelection', {peri: createWikiCode(), replace: true} );
dialog.dialog('close');
}
});
$('.ui-dialog-buttonpane').css({backgroundColor: '#E0E0E0'});
dialog.dialog('option', {
height: 'auto',
width: 'auto',
position: [(window.width - dialog.width()) / 2, (window.height - dialog.height()) / 2]
});
$('.ui-dialog-buttonpane').children().css({float: 'right'});
updatePreview();
}
}
var table = doc.createElement("table");
 
for (var i in paramList) {
function fireDialog() {
var param = paramList[i];
 
if (param.length == 0) { // this allow defining an empty parameter. by use of a "pseudo field".
var killold = $('#ltw_dialog').remove(), // kill existing popup when button is pressed again.
doc.allFields.push({value:""});
title = 'יצירת תבנית קישור',
continue;
dialog = $('<div>', {id: 'ltw_dialog'}).css({backgroundColor: '#E8E8E8', maxWidth: '58em'}).dialog({
title: title,
resizable: false,
close: function() {$(this).remove();}
}),
fullList = templates(false),
allTemplates = [];
 
function fromTemplate(text) {
var regex = new RegExp('\\{\\{(' + allTemplates.join('|') + ')([^}]*)');
match = text.match(regex);
if (match) {
template = match[1];
values = match[2].split('|');
values.shift();
templateDialog(dialog, templates(template), values);
return true;
}
return false;
}
}
var row = table.insertRow(-1);
if (!row)
row = table[rows[table.rows.length-1]];
var cell = row.insertCell(-1);
if (!cell)
cell = row.cells[0];
cell.innerHTML = param;
cell.style.maxWidth = "16em";
var field = doc.createElement("input");
copyAttributes(field, { type: "text", maxLength: 120, doc: doc });
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = updatePreview;
field.style.width = "20em";
cell = row.insertCell(-1);
if (!cell)
cell = 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("  "));
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 createLinkTemplatesSelections() {
for (var i in fullList)
var select = document.createElement("select");
allTemplates.push(fullList[i].t);
select.onchange = function() {
fireLinkTemplatePopup(this.value);
this.selectedIndex = 0;
return false;
}
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;});
var allnames = hnames.concat(names);
select.options.add(new Option("אשף תבניות קישורים", ""));
for (var i = 0; i < allnames.length; i++)
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); }
if (fromTemplate($("#wpTextbox1").textSelection('getSelection')))
return;


function copyAttributes(target, source) {
var selector = $('<select>', {'class': 'ltw_disposable'}).change(function() { // class in quotes - reserved word.
for (key in source)
if (! this.value) return;
target[key] = source[key];
dialog.dialog('option', 'title', title + ' עבור ' + this.value);
return target;
$(this).remove();
}
templateDialog(dialog, templates(this.value));
});
selector.append($('<option>', {text: 'בחרו תבנית מהרשימה'}));
for (var i in allTemplates)
selector.append($('<option>', {text: allTemplates[i], value: allTemplates[i]}));
dialog.append(selector);
dialog.append($('<p>', {'class': 'ltw_disposable'}).text('או הדביקו כאן תבנית לעריכה:'));
dialog.append($('<input>', {type: 'text', maxLength: 1000, 'class': 'ltw_disposable'}).css({width: '14em'}).on('paste cut drop input change', function() {fromTemplate(this.value);}));
}


if (wgAction == 'edit')
if (mw.user.options.get('usebetatoolbar')) {
hookEvent("load", createLinkTemplatesSelections);
var depend = ['ext.wikiEditor'];
mw.loader.using(depend, function() {
if(typeof $.wikiEditor != 'undefined')
$(function() {
$('#wpTextbox1').wikiEditor('addToToolbar', {
section: 'main',
group: 'insert',
tools: {
'linkTemplatewizard': {
label: 'תבנית קישור',
filters: [ 'body.ns-subject' ],
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Gnome-web-browser.svg/22px-Gnome-web-browser.svg.png',
action: {type: 'callback', execute: fireDialog}
}
}
});
$('[rel= "linkTemplatewizard"]').css('float','left');
});
});
}
else
mw.loader.using('mediawiki.toolbar', function() {
$(function() {
$('div #toolbar').append( // "old style"
$('<img>', {src: '//upload.wikimedia.org/wikipedia/commons/3/34/Button_LINK_HE1.png', title: 'תבנית קישור', 'class': 'mw-toolbar-editbutton'})
.css({cursor: 'pointer'})
.click(function() {mw.loader.using('jquery.ui', fireDialog);})
);
});
});
});

גרסה אחרונה מ־23:27, 4 בדצמבר 2022

//Adds wizard for using templates for external links
//Written by [[User:קיפודנחש]]
if (($.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit']) + 1)  && ( !$('#wpTextbox1').prop( 'readonly' ) )) 
mw.loader.using('jquery.textSelection', function() {

	function templates(templateName) {
		var constants = ["",
			"שם המחבר",
			"כותרת המאמר",
			"מספר (כפי שמופיע בקישור)",
			"מידע נוסף, למשל תאריך. נסו לשמור על הפורמט '30 באוגוסט 1958'",
			"מספר הסדרה",
			"נתיב הדף - כמו שמופיע בקישור",
			"מידע נוסף (לא תאריך)",
			"ספר",
			"פרק",
			"פסוק",
			"מסכת",
			"דף",
			"עמוד",
			"משנה",
			"סימן",
			"סעיף",
			"הלכות",
			"שם",
			"מספר הסדרה",
			'מספר סדרת "ART"',
			"",
			"תאריך כתבה (בפורמט 1949/07/25, כפי שמופיע בקישור)",
			"סוג הפרסום, כפי שמופיע בקישור אחרי '=EntityId'. בדרך כלל 'Ar' לכתבה רגילה, 'Pc' לתמונה ו־'Ad' לפרסומת",
			"שם הספר",
			"קידומת סוג הכתבה",
			"מזהה נושא הכתבה",
			"שם הערך",
			"קוד כניסה חינם (כפי שמופיע בקישור)",
			"כרך",
			"הפניה לכתבה (כפי שמופיע בקישור)",
			"הלכה",
			"",
			"חלק",
			"כותרת הדף",
			"שם החלל",
			"מספר ה-folder כמו שמופיע בקישור",
			"כותרת הספר/שם הקהילה",
			"מספר גיליון, תאריך פרסום ומספרי עמודים",
			"החלק השני של הקישור",
			"מספר העמוד, כפי שמופיע באתר",
			"שם האיש",
			"שם האמן",
			"שם העיתון",
			"קוד העיתון באתר (שלוש אותיות לטיניות גדולות)",
			"שם המין/זן",
			"שם הרב",
			"שם השיעור",
			"השיעור כשם שמופיע בקישור",
			"מספר גיליון, תאריך פרסום ומספרי עמודים",
			"שם הערך בויקישיבה",
			"קידומת הקישור, אם שונה מ-www",
			"האותיות שמציינות את המדינה"
		];

		var templatesAr = [
			{t: 'קישור כללי', np: [
				['הכותב', 'שמות כותבי המאמר', 1],
				['כותרת', 'שם המאמר המקושר'],
				['כתובת', 'הקישור (כלומר ה-URL) עצמו'],
				['תאריך', 'תאריך המאמר, בפורמט "30 באוגוסט 1958"', 1],
				['עמודים', 'מספר העמודים', 1],
				['מידע נוסף', 'מידע נוסף (לא תאריך)', 1],
				['שפה', 'שפה (אם המאמר לא בעברית)', 1],
				['ציטוט', 'ציטוט משפט מהדף המקושר (יכול לעזור במציאת הדף בעתיד, אם הקישור ישתנה)', 1]
			]},
			{t: 'הארץ', p: [1,2,3,4], r: /([.\d]+)$/i, rp: [3], bm: 1, op: [0,3]},
			{t: 'דבר'},
			{t: 'מעריב'},
			{t: 'הצבי'},
			{t: 'הצפירה'},
			{t: 'המגיד'},
			{t: 'חבצלת'},
			{t: 'המליץ'},
			{t: 'על המשמר'},
			{t: 'היינט'},
			{t: 'PalPost'},
            {t: 'חרות'},
			{t: 'תנ"ך', p: [8,9,10], op:[2]},
			{t: 'nrg', p: [1,2,3,4,0,19,20], r: /\/online\/([^\/]+)\/ART([^\/]*)\/([^\.]+).html/i, rp: [6,7,3], bm: 1, op:[3,4,5,6], nopop: 1},
			{t: 'Mooma2', p: [42,3], r: /\?ArtistId=(\d+)/i, rp: [2]},
			{t: 'בחדרי חרדים', p: [1,2,3,4], r: /\/Article\.aspx\?id=(\d+)/i, rp: [3], bm: 1, op: [3]},
			{t: 'CIA factbook', p: [52]},
			{t: 'mynet', p: [1,2,3,4,0,5], r: /articles\/(\d+),7340,L-(\d+),00\.html/i, rp: [6,3], op: [3,4,5,6]},
			{t: 'NFC', p: [1,2,3,4], r: /Archive\/([^\.]+)\.html/i, rp: [3], op: [3], bm: 1},
			{t: 'Onlife', p: [1,2,3,4], r: /onlife\.co\.il\/([^\/]+)\/(.*)/i, rp: [1,3], op: [3]},
			{t: 'ynet', p: [1,2,3,4], def: {6: 0, 7: 'articles'}, r: /ynet\.co\.il\/([^\/]+)\/(\d+),7340,L-(\d+),00.html/i, rp: [7,6,3], bm: 1, op: [3,4,5,6]},
			{t: 'Xnet', p: [1,2,3,4], def: {6: 0, 7: 'articles'}, r: /([^\/]+)\/(\d+),\d+,L-(\d+),00.html/i, rp: [7,6,3], bm: 1, op: [3,4,5,6]},
			{t: 'וואלה!', p: [1,2,3,4,0,26], r: /\?w=\/(\d+)\/(\d+)/i, rp: [6,3], bm: 1, op: [3,4,5]},
			{t: 'גלובס', p: [1,2,3,4], r: /\/news\/article.aspx\?did=(\d+)/i, rp: [3], bm: 1, op: [3]},
			{t: 'כלכליסט', p: [1,2,3,4], r: /\/articles\/(\d+),7340,L-(\d+),00/i, rp: [6,3], op: [3,4,5,6], bm: 1},
			{t: 'נענע10', p: [1,2,3,4,0,26], r: /http:\/\/([a-z]*)\.nana10\.co\.il\/Article\/\?ArticleID=(\d+)/i, rp: [6,3], bm: 1, op: [3,4,5,6]},
			{t: 'תדהר', p: [29,13,27], op: [2]},
			{t: 'אנשים ישראל', p: [1,2,3,4], r: /.*itemID=(\d+)&/i, rp: [3], op: [3]},
			{t: 'אתר חיל האוויר', p: [1,2,3,4], r: /\/([^\/]*)-he\//i, rp: [3], op: [3]},
			{t: 'בלדד השוחי', p: [3,2,4], r: /ArticleID(\d*)/i, rp: [1], op: [2]},
			{t: 'בשבע', p: [1,2,3,4], r: /Article.aspx\/(\d+)/i, rp: [3], op: [3]},
			{t: 'האייל הקורא', p: [1,2,3,4], r: /story(?:_|\?id=)(\d+)/i, rp: [3], op: [3]},
			{t: 'הידען', p: [1,2,30,4], r: /hayadan\.org\.il\/([^\/]*)/i, rp: [3], op: [3]},
			{t: 'המאסף', p: [1,2,3,4], r: /notimportant\.co\.il\/?p=(\d+)/i, rp: [3], op: [3]},
			{t: 'חסקין', p: [3,2], r: /ArticleNum=(\d+)/i, rp: [1]},
			{t: 'בבלי', p: [11,12,13], op: [2]},
			{t: 'משנה', p: [11,9,14], op: [2]},
			{t: 'רמב"ם', p: [8,17,9,31], op: [0,3]},
			{t: 'ירושלמי', p: [11,9,31], op: [2]},
			{t: 'שולחן ערוך', p: [33,15,16], op: [2]},
			{t: 'מטח', p: [1,2,3,4], op: [3]},
			{t: 'גלצ', p: [1,2,3,4], r: /NewsArticle\.aspx\?NewsId\=(\d+)/i, rp: [3], op: [3]},
			{t: 'ישראל היום', p: [1,2,3,4], r: /newsletter_article\.php\?id=(\d+)/i, rp: [3], bm: 1, op: [3]},
			{t: 'מממ', p: [1,2,3,4], r: /data\/pdf\/([^\.])\.pdf/i, rp: [3], op: [3]},
			{t: 'נזכור', p: [35,3], r: /HalalKorot\.aspx\?id=(\d+)/i, rp: [2]},
			{t: 'סגולה', p: [1,2,3,4], r: /view-article\.asp\?article=(\d+)/i, rp: [3], op: [3]},
			{t: 'ספורט 5', p: [1,2,3,36,4], r: /articles\.aspx\?FolderID=(\d+)&docID=(\d+)/i, rp: [4,3], op: [3], op: [0,4]},
			{t: 'ספסל', p: [3,18,0], r: /hplayer\.aspx\?id=(\d+)/i, rp: [1]},
			{t: 'ספסל מאמן', p: [3,18,0], r: /hstaff\.aspx\?id=(\d+)/i, rp: [1]},
			{t: 'ספרי יזכור', p: [1,37,3,4], r: /yizkor\.nypl\.org\/index\.php\?id=(\d+)/i, rp: [3], op: [3]},
			{t: 'הספרייה הדיגיטלית', p: [1,24,3,4], r: /nnl\/dig\/books\/([^\.]+)\.html/i, rp: [3], op: [3]},
			{t: 'אורות', p: [1,2,3,4], r: /Article\.aspx\?ID=(\d+)/i, rp: [3], op: [3]},
			{t: 'הערוץ האקדמי', p: [1,34,3,4], r: /programs\/Item\.aspx\?it=(\d+)/i, rp: [3], bm: 1, op: [3]},
			{t: 'עכבר העיר', p: [1,2,3,4], r: /CM\.articles_item,(.*),\.aspx/i, rp: [3], bm: 1, op: [3]},
			{t: 'ערוץ7', p: [1,2,3,4], r: /News\.aspx\/(\d+)/i, rp: [3], bm: 1, op: [3]},
			{t: 'פעמים', p: [1,2,3,38], r: /dbsAttachedFiles\/Article_(.*)\.pdf/i, rp: [3], op: [3], op: [0,3]},
			{t: 'תכלת', p: [1,2,3,4], r: /article\.php\?id=(\d+)/i, rp: [3], op: [3]},
			{t: 'אנצ דעת', p: [3,27], r: /value\.asp\?id1=(\d+)/i, rp: [1]},
			{t: 'דעת', p: [1,39,2], r: /(?:www\.)?daat\.ac\.il\/(.*)/i, rp: [2]},
			{t: 'ויקישיבה', p: [50]},
			{t: 'HebrewBooks', p: [1,8,3,4], r: /hebrewbooks\.org\/(\d+)/i, rp: [3], op: [3]},
			{t: 'גדולי ישראל', p: [29,40,41,13]},
			{t: 'עיתונות יהודית היסטורית 2', p: [43,44,1,2,22,3,7,0,23], def: {9: "Ar"}, r: /(?:Key|BaseHref)=([A-Z]{3})\/(\d{4}\/\d{1,2}\/\d{1,2})(?:.*&EntityId=|\/\d+\/)([A-Z][a-z])(\d+)/i, rp: [2,5,9,6], replace: [[/%2F/gi,'/']], op: [6,8]},
			{t: 'Iucnredlist', p: [45,3], r: /details(?:\.php)?\/(\d+)/, rp: [2]},
			{t: 'העין השביעית', p: [1,34,6,4,25], r: /the7eye\.org\.il\/([^\/]+)\/Pages\/(.*)\.aspx/, rp: [5,3], bm: 1, op: [3,4]},
			{t: 'One', p: [1,2,3,4], r: /(?:Article[\d\-\/,]*\/|id=)([\d\-\/,]*\d)/, rp: [3], bm: 1, op: [3]},
			{t: 'קול הלשון - שיעור', p: [46,47,48,4], np: [['וידאו', '"וידאו": רשמו "כן" אם זה שיעור לצפייה'], ['תואר', 'תואר - אם תואר המרצה שונה מ"הרב"']], r: /(?:PathFile=|Source=)([^&]*)/i, rp: [3], op: [3]},
			{t: 'ספר פרויקט גוטנברג', np: [["כותב", "שם כותב הספר", 1], ['שם הספר', 'שם הספר (ברירת מחדל: שם הערך)', 1], ['מספר', 'מספר הספר בפרויקט']], r: /ebooks\/(\d+)/i, rp: [3]},
			{t: 'imdb title', np: [['id', 'המספר שמופיע בקישור'], ['title', 'הכותרת שתופיע בקישור (אופציונלי: ברירת מחדל - שם הערך', 1]], r: /title\/tt(\d+)/i, rp: [1]},
			{t: 'imdb name', np: [['id', 'המספר שמופיע בקישור'], ['name', 'הכותרת שתופיע בקישור (אופציונלי: ברירת מחדל - שם הערך', 1]], r: /name\/nm(\d+)/i, rp: [1]},
			{t: 'imdb company', np: [['id', 'המספר שמופיע בקישור'], ['company', 'הכותרת שתופיע בקישור']], r: /company\/co(\d+)/i, rp: [1]},
			{t: 'Google book', np: [['מזהה','מזהה הספר באתר גוגל'],['כותב','שם כותב/י הספר', 1],['שם הספר','שם הספר (אופציונלי) - ללא הפרמטר יוצג שם הערך', 1]], r: /id=([^&]*)/, rp: [1]},
			{t: 'TheMarker1', p: [1,2,3,4,51], r: /http:\/\/(?:www)?(.*)\.themarker\.com\/([^\?]+)/i, rp: [5,3], op: [3,4], bm: 1},
			{t: 'מערכות', p: [1,2,3,49], r: /FILES\/(.*)\.pdf/i, rp: [3], op: [3]},
			{t: 'mako', p: [1,2,3,6,4], r: /www\.mako\.co\.il\/(.*?)\/Article-(.*?)\.htm/i, rp: [4,3], bm: 1, op: [4]}
			];

		if (! templateName) {
			var en = /^[a-z]/;
			function compare(t1, t2) {
				var gen = 'קישור כללי', a = t1.t.toLowerCase(), b = t2.t.toLowerCase();
				if (a == gen ^ b == gen) return (b == gen) - (a == gen);
				if (en.test(a) - en.test(b)) return en.test(a) - en.test(b); // all hebrew before all english
				return a > b ? 1 : (a < b ? -1 : 0);
			}
			templatesAr.sort(compare);
			return templatesAr;
		}

		var template;
		for (var i in templatesAr)
			if (templatesAr[i].t == templateName)
				template = templatesAr[i];

		var historic = {"דבר": "DAV", "מעריב": "MAR", "הצבי": "HZV", "הצפירה": "HZF", "המגיד": "MGD", "המליץ": "HMZ", "חבצלת": "HZT", "PalPost": "PLS", "על המשמר" : "AHR", "היינט": "HYT", "חרות": "HRT"};
		if (historic[template.t]) {
			var r = new RegExp('=HISTNAME/(\\d{4}/\\d{1,2}/\\d{1,2})(?:.*&EntityId=|/\\d+/)([A-Z][a-z])(\\d+)'.replace('HISTNAME', historic[template.t]));
			$.extend(template, {p: [1,2,22,3,7,0,23], def: {7: "Ar"}, r: r, rp: [3,7,4], replace: [[/%2F/gi, '/']], op: [4,6]});
		}

		for (var i in template.p)
		if (typeof template.p[i] == "number")
			template.p[i] = constants[template.p[i]];

		return template;
	}

	function templateDialog(dialog, template, values) {
		var brainDamage = $.client.profile().name == 'msie' && $.client.profile().versionNumber < 8;
		var	orderedFields = [],
			namedFields = [],
			table = $('<table>'),
			empty = {val: function(){return '';}, hasClass: function(){return 0;}};

		function createWikiCode() {
			var par = ["{{" + template.t];
			for (var i = 0; i < orderedFields.length; i++)
				par.push($.trim(orderedFields[i].val()).replace(/\|/g, '{{!}}').replace(/=/g, '{{=}}'));

			if (template.def)
				for (var parnum in template.def)
					if (par[parnum] == template.def[parnum])
						par[parnum] = '';
			if (! template.nopop)
				while (par.length && !par[par.length-1].length && orderedFields[par.length-2].length) // last condition is to avoid remving "emptys"
					par.pop();
			var code = par.join("|");
			if (namedFields) {
				var pairs = [];
				for (j in namedFields) {
					var val = $.trim(namedFields[j][1].val()).replace(/\|/g, '{{!}}');
					if (val.length)
						pairs.push(namedFields[j][0] + '=' + val);
				}
				if (pairs.length)
					code += '|' + pairs.join('|');
			}
			code += "}}";
			if ($('#ltw2_ref').prop('checked'))
				return "{{הערה|" + code + "}}";
			if ($('#ltw2_list').prop('checked'))
				return "\n* " + code + "\n";
			return code;
		}

		function updatePreview(){
			$('#ltw2_preview').text(createWikiCode());
			var canOK = 'enable';
			var f = orderedFields.concat([]); //clone - we don't want to touch orderedFields.
			for (var i in namedFields)
				f.push(namedFields[i][1]);
			for (var i in f)
				if (f[i].hasClass('ltw_required') && $.trim(f[i].val()).length == 0)
					canOK = 'disable';
			$(".ui-dialog-buttonpane button:contains('אישור')").button(canOK);
			$('#ltw2_list').attr('disabled', $('#ltw2_ref').prop('checked'));//disable list if ref
			$('#ltw2_ref').attr('disabled', $('#ltw2_list').prop('checked'));//disable ref if list
			if (brainDamage) { //IOW: internet explorer.
				var width = $('#ltw_dialog').width() - 12;
				$('.ui-dialog-titlebar').width(width);
				$('.ui-dialog-buttonpane').width(width);
			}
		}

		function addRow(labelText, paramName, optional) {
			var inputField = $('<input>', {id: 'ltw2_inputfield_' + paramName, type: 'text', width: 600}).css({width: '28em'}).on('paste cut drop input change', updatePreview);
			if (! (optional || 0))
				inputField.addClass('ltw_required').css({border: '1px red solid'});
			var tr = $('<tr>')
				.append($('<td>').text(labelText).css({maxWidth: '20em'}))
				.append($('<td>').css({width: '30em'}).append(inputField));
			if (typeof paramName == 'number')
				orderedFields.push(inputField);
			else
				namedFields.push([paramName, inputField]);
			table.append(tr);
		}

		function extractParamsFromURL() {
			var str = $('#ltw_urlinput').val();
			if (template.replace)
				for (var r in template.replace)
					str = str.replace(template.replace[r][0], template.replace[r][1]);
			var matches = str.match(template.r);
			if (matches)
				for (var i = 1; i < matches.length; i++)
					$('#ltw2_inputfield_' + template.rp[i-1]).val(matches[i] || '');
			updatePreview();
		}

		$('.ltw_disposable').remove();

		if (template.bm)
			dialog.append($('<p>', {title: 'ראו דף "עזרה:בוקמרקלטים"'}).css({color: 'red', fontWeight: 'bold'})
				.text('קיים בוקמרקלט שמייצר תבנית "' + template.t + '" באופן אוטומטי. אנא שקלו להשתמש בו (ראו "עזרה:בוקמרקלטים").'))
				.append($('<hr>'));

		if (template.r)
			dialog.append($('<span>').text('הדביקו את הקישור כאן:').css({width: '20em'}))
				.append($('<input>', {type: "text", id: 'ltw_urlinput', maxLength: 600}).css({width: '26em'}).on('paste cut drop input change', extractParamsFromURL))
				.append($('<hr>'))

		dialog
			.append($('<p>').text('השדות המסומנים באדום הם חובה, השאר אופציונליים'))
			.append(table)
			.append($('<p>').css({height: '2em'}))
			.append($('<label>').text(' הערת שוליים '))
			.append($('<input>', {type: 'checkbox', id: 'ltw2_ref'}).change(updatePreview))
			.append($('<label>').css({width: '12em'}).text( ' פריט ברשימה '))
			.append($('<input>', {type: 'checkbox', id: 'ltw2_list'}).change(updatePreview))
			.append($('<p>').css({height: '1.5em'}))
			.append($('<p>', {id: 'ltw2_preview'}).css({backgroundColor: "lightGreen", fontSize: '120%', maxWidth: '40em'}));


		for (var i = 0; i < (template.p || []).length; i++)
			if (template.p[i].length == 0)	// this allow defining an empty parameter. by use of a "pseudo field".
				orderedFields.push(empty);
			else
				addRow(template.p[i], parseInt(i, 10) + 1, template.op && ($.inArray(i, template.op)+1));

		for (var i in template.np)
			addRow(template.np[i][1], template.np[i][0], template.np[i][2]);

		var valIndex = 0;
		while (values && values.length) {
			var next = values.shift();
			var pair = next.split('=');
			if (pair.length > 1) {
				if (isNaN(pair[0])) {
					for (var named in namedFields)
						if (namedFields[named][0] == $.trim(pair[0]))
							namedFields[named][1].val(pair[1]);
				} else {
					valIndex = parseInt(pair[0], 10);
					if (valIndex <= orderedFields.length)
						orderedFields[valIndex - 1].val(pair[1]);
				}
			} else
				if (valIndex < orderedFields.length)
					orderedFields[valIndex++].val(pair[0]);
		}

		dialog.dialog('option', 'buttons', {
			'ביטול':
				function() {
					dialog.dialog('close');
				},
			'אישור':
				function() {
					$("#wpTextbox1").textSelection( 'encapsulateSelection', {peri: createWikiCode(), replace: true} );
					dialog.dialog('close');
				}
		});
		$('.ui-dialog-buttonpane').css({backgroundColor: '#E0E0E0'});
		dialog.dialog('option', {
			height: 'auto',
			width: 'auto',
			position: [(window.width - dialog.width()) / 2, (window.height - dialog.height()) / 2]
		});
		$('.ui-dialog-buttonpane').children().css({float: 'right'});
		updatePreview();
	}

	function fireDialog() {

		var killold = $('#ltw_dialog').remove(), // kill existing popup when button is pressed again.
			title = 'יצירת תבנית קישור',
			dialog = $('<div>', {id: 'ltw_dialog'}).css({backgroundColor: '#E8E8E8', maxWidth: '58em'}).dialog({
				title: title,
				resizable: false,
				close: function() {$(this).remove();}
			}),
			fullList = templates(false),
			allTemplates = [];

		function fromTemplate(text) {
			var regex = new RegExp('\\{\\{(' + allTemplates.join('|') + ')([^}]*)');
			match = text.match(regex);
			if (match) {
				template = match[1];
				values = match[2].split('|');
				values.shift();
				templateDialog(dialog, templates(template), values);
				return true;
			}
			return false;
		}


		for (var i in fullList)
			allTemplates.push(fullList[i].t);

		if (fromTemplate($("#wpTextbox1").textSelection('getSelection')))
			return;

		var selector = $('<select>', {'class': 'ltw_disposable'}).change(function() { // class in quotes - reserved word.
			if (! this.value) return;
			dialog.dialog('option', 'title', title + ' עבור ' + this.value);
			$(this).remove();
			templateDialog(dialog, templates(this.value));
		});
		selector.append($('<option>', {text: 'בחרו תבנית מהרשימה'}));
		for (var i in allTemplates)
			selector.append($('<option>', {text: allTemplates[i], value: allTemplates[i]}));
		dialog.append(selector);
		dialog.append($('<p>', {'class': 'ltw_disposable'}).text('או הדביקו כאן תבנית לעריכה:'));
		dialog.append($('<input>', {type: 'text', maxLength: 1000, 'class': 'ltw_disposable'}).css({width: '14em'}).on('paste cut drop input change', function() {fromTemplate(this.value);}));
	}

	if (mw.user.options.get('usebetatoolbar')) {
		var depend = ['ext.wikiEditor'];
		mw.loader.using(depend, function() {
			if(typeof $.wikiEditor != 'undefined')
				$(function() {
					$('#wpTextbox1').wikiEditor('addToToolbar', {
						section: 'main',
						group: 'insert',
						tools: {
							'linkTemplatewizard': {
								label: 'תבנית קישור',
								filters: [ 'body.ns-subject' ],
								type: 'button',
								icon: '//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Gnome-web-browser.svg/22px-Gnome-web-browser.svg.png',
								action: {type: 'callback', execute: fireDialog}
							}
						}
						
						
					});
					$('[rel= "linkTemplatewizard"]').css('float','left');
				});
		});
	}
	else
		mw.loader.using('mediawiki.toolbar', function() {
			$(function() {
				$('div #toolbar').append( // "old style"
					$('<img>', {src: '//upload.wikimedia.org/wikipedia/commons/3/34/Button_LINK_HE1.png', title: 'תבנית קישור', 'class': 'mw-toolbar-editbutton'})
					.css({cursor: 'pointer'})
					.click(function() {mw.loader.using('jquery.ui', fireDialog);})
				);
			});
		});
});