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

הוספת mooma2 (תבנית מבוססת מיקום)
מ 166 גרסאות של הדף wikipedia:he:מדיה_ויקי:Gadget-TemplatesExternalLinks.js יובאו
 
(99 גרסאות ביניים של 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 copyAttributes(target, source) {
for (key in source)
target[key] = source[key];
return target;
}


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


var templatesDic = {
var templatesAr = [
"הארץ": [1, 2, 3, 4],
{t: 'קישור כללי', np: [
"דבר": [1,2,22,3,7,23],
['הכותב', 'שמות כותבי המאמר', 1],
'תנ"ך': [8,9,10],
['כותרת', 'שם המאמר המקושר'],
"nrg": [1,2,3,4,0,19,20],
['כתובת', 'הקישור (כלומר ה-URL) עצמו'],
"Mooma2": [32,3],
['תאריך', 'תאריך המאמר, בפורמט "30 באוגוסט 1958"', 1],
"בחדרי חרדים": [1,2,3,4],
['עמודים', 'מספר העמודים', 1],
"CIA factbook":["האותיות שמציינות את המדינה"],
['מידע נוסף', 'מידע נוסף (לא תאריך)', 1],
"Google book":["מזהה - מזהה הספר באתר גוגל", 24, 1],
['שפה', 'שפה (אם המאמר לא בעברית)', 1],
"HebrewBooks":[1,8,3,4],
['ציטוט', 'ציטוט משפט מהדף המקושר (יכול לעזור במציאת הדף בעתיד, אם הקישור ישתנה)', 1]
"mynet":[1,2,3,4,0,5],
]},
"NFC":[1,2,3,4],
{t: 'הארץ', p: [1,2,3,4], r: /([.\d]+)$/i, rp: [3], bm: 1, op: [0,3]},
"Onlife":[1,2,3,4],
{t: 'דבר'},
"PalPost":[1,2,12,3,4],
{t: 'מעריב'},
"TheMarker":[1,2,3,4],
{t: 'הצבי'},
"ynet":[1,2,3,4,0,5,25],
{t: 'הצפירה'},
"וואלה!":[1,2,3,4,0,26],
{t: 'המגיד'},
"גלובס":[1,2,3,4],
{t: 'חבצלת'},
"כלכליסט":[1,2,3,4,0,19],
{t: 'המליץ'},
"נענע10":[1,2,3,4,0,26],
{t: 'על המשמר'},
"אנציקלופדיה ynet":[27,3,28,4],
{t: 'היינט'},
"תדהר":[29,13,27],
{t: 'PalPost'},
"אנשים ישראל":[1,2,3,4],
            {t: 'חרות'},
"אתר חיל האוויר":[1,2,3,4],
{t: 'תנ"ך', p: [8,9,10], op:[2]},
"בלדד השוחי":[3,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},
"בשבע":[1,2,3,4],
{t: 'Mooma2', p: [42,3], r: /\?ArtistId=(\d+)/i, rp: [2]},
"האייל הקורא":[1,2,3,4],
{t: 'בחדרי חרדים', p: [1,2,3,4], r: /\/Article\.aspx\?id=(\d+)/i, rp: [3], bm: 1, op: [3]},
"הידען":[1,2,30,4],
{t: 'CIA factbook', p: [52]},
"המאסף":[1,2,3,4],
{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]},
"חסקין":[3,2],
{t: 'NFC', p: [1,2,3,4], r: /Archive\/([^\.]+)\.html/i, rp: [3], op: [3], bm: 1},
"בבלי":[11,12,13],
{t: 'Onlife', p: [1,2,3,4], r: /onlife\.co\.il\/([^\/]+)\/(.*)/i, rp: [1,3], op: [3]},
"משנה":[11,9,14],
{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]},
'רמב"ם':[8,17,9,31],
{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]},
"ירושלמי":[11,9,31],
{t: 'וואלה!', p: [1,2,3,4,0,26], r: /\?w=\/(\d+)\/(\d+)/i, rp: [6,3], bm: 1, op: [3,4,5]},
"שולחן ערוך":[33,15,16],
{t: 'גלובס', p: [1,2,3,4], r: /\/news\/article.aspx\?did=(\d+)/i, rp: [3], bm: 1, op: [3]},
"מטח":[1,2,3,4],
{t: 'כלכליסט', p: [1,2,3,4], r: /\/articles\/(\d+),7340,L-(\d+),00/i, rp: [6,3], op: [3,4,5,6], bm: 1},
"גלצ":[1,2,3,4],
{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]},
"ישראל היום":[1,2,3,4],
{t: 'תדהר', p: [29,13,27], op: [2]},
"מממ":[1,2,3,4],
{t: 'אנשים ישראל', p: [1,2,3,4], r: /.*itemID=(\d+)&/i, rp: [3], op: [3]},
"מממ2":[1,2,3,4],
{t: 'אתר חיל האוויר', p: [1,2,3,4], r: /\/([^\/]*)-he\//i, rp: [3], op: [3]},
"משנה תורה":[12,3,34],
{t: 'בלדד השוחי', p: [3,2,4], r: /ArticleID(\d*)/i, rp: [1], op: [2]},
"נזכור":[35,3],
{t: 'בשבע', p: [1,2,3,4], r: /Article.aspx\/(\d+)/i, rp: [3], op: [3]},
"סגולה":[1,2,3,4],
{t: 'האייל הקורא', p: [1,2,3,4], r: /story(?:_|\?id=)(\d+)/i, rp: [3], op: [3]},
"ספורט 5":[1,2,3,36,4],
{t: 'הידען', p: [1,2,30,4], r: /hayadan\.org\.il\/([^\/]*)/i, rp: [3], op: [3]},
"ספסל":[3,18,0],
{t: 'המאסף', p: [1,2,3,4], r: /notimportant\.co\.il\/?p=(\d+)/i, rp: [3], op: [3]},
"ספסל מאמן":[3,18,0],
{t: 'חסקין', p: [3,2], r: /ArticleNum=(\d+)/i, rp: [1]},
"ספרי יזכור":[1,37,3,4],
{t: 'בבלי', p: [11,12,13], op: [2]},
"הספרייה הדיגיטלית":[1,24,3,4],
{t: 'משנה', p: [11,9,14], op: [2]},
"אורות":[1,2,3,4],
{t: 'רמב"ם', p: [8,17,9,31], op: [0,3]},
"הערוץ האקדמי":[1,34,3,4],
{t: 'ירושלמי', p: [11,9,31], op: [2]},
"עכבר העיר":[1,2,3,4],
{t: 'שולחן ערוך', p: [33,15,16], op: [2]},
"ערוץ7":[1,2,3,4],
{t: 'מטח', p: [1,2,3,4], op: [3]},
"פעמים":[1,2,3,38],
{t: 'גלצ', p: [1,2,3,4], r: /NewsArticle\.aspx\?NewsId\=(\d+)/i, rp: [3], op: [3]},
"ספר פרויקט גוטנברג":[1,24,3],
{t: 'ישראל היום', p: [1,2,3,4], r: /newsletter_article\.php\?id=(\d+)/i, rp: [3], bm: 1, op: [3]},
"תכלת":[1,2,3,4],
{t: 'מממ', p: [1,2,3,4], r: /data\/pdf\/([^\.])\.pdf/i, rp: [3], op: [3]},
"אנצ דעת":[3,27],
{t: 'נזכור', p: [35,3], r: /HalalKorot\.aspx\?id=(\d+)/i, rp: [2]},
"דעת":[1,39,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]},
"HebrewBooksPage": [1,8,3,4,40],
{t: 'ספסל', p: [3,18,0], r: /hplayer\.aspx\?id=(\d+)/i, rp: [1]},
"גדולי ישראל": [29,40,41,13],
{t: 'ספסל מאמן', p: [3,18,0], r: /hstaff\.aspx\?id=(\d+)/i, rp: [1]},
"פנאי פלוס": [1,2,3,4,0,5,25]
{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) {
for (var key in templatesDic)
var en = /^[a-z]/;
for (var i in templatesDic[key])
function compare(t1, t2) {
if (typeof(templatesDic[key][i]) == "number")
var gen = 'קישור כללי', a = t1.t.toLowerCase(), b = t2.t.toLowerCase();
templatesDic[key][i] = constants[templatesDic[key][i]];
if (a == gen ^ b == gen) return (b == gen) - (a == gen);
return templatesDic;
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;
}


function templateRegex(templateName) {
var template;
var regexes = {
for (var i in templatesAr)
"nrg": {regex: /\/online\/([^\/]+)\/ART([^\/]+)\/([^\.]+).html/i, params:[6,7,3]},
if (templatesAr[i].t == templateName)
"Google book": { regex: /\/books\?id=([^&]+)/i, params:[1]},
template = templatesAr[i];
"NFC": {regex: /Archive\/([^\.]+)\.html/i, params:[3]},
 
"HebrewBooks": {regex: /hebrewbooks\.org\/(\d+)/i, params:[3]},
var historic = {"דבר": "DAV", "מעריב": "MAR", "הצבי": "HZV", "הצפירה": "HZF", "המגיד": "MGD", "המליץ": "HMZ", "חבצלת": "HZT", "PalPost": "PLS", "על המשמר" : "AHR", "היינט": "HYT", "חרות": "HRT"};
"mynet": {regex: /articles\/(\d+),7340,L-(\d+),00\.html/i, params:[6,3]},
if (historic[template.t]) {
"Onlife": {regex: /onlife\.co\.il\/([^\/]+)\/(.*)/i, params:[1,3]},
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]));
"PalPost": {regex: /BaseHref=PLS\/(\d{4}\/\d{1,2}\/\d{1,2})&EntityId=Ar(\d+)/i, params:[3,4]},
$.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]});
"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]},
for (var i in template.p)
"HebrewBooksPage": {regex: /pdfpager\.aspx\?.*req=(\d+).*&pgnum=(\d+)/i, params:[3,5]},
if (typeof template.p[i] == "number")
"בחדרי חרדים" : { regex: /\/Article\.aspx\?id=(\d+)/i, params:[3]},
template.p[i] = constants[template.p[i]];
"וואלה!": {regex: /\?w=\/(\d+)\/(\d+)/i, params:[6,3]},
 
"גלובס": {regex: /\/news\/article.aspx\?did=(\d+)/i, params:[3]},
return template;
"כלכליסט": {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) {
function templateDialog(dialog, template, values) {
var height = 160 + 20 * paramList.length + (regexDict ? 60 : 0);
var brainDamage = $.client.profile().name == 'msie' && $.client.profile().versionNumber < 8;
for (i in paramList)
var orderedFields = [],
height += 16 * Math.floor(paramList[i].length / 24);
namedFields = [],
var top = (screen.height - height) / 2, left = (screen.width - 550) / 2;
table = $('<table>'),
var popup = window.open("", "", "resizable=1,height="+height+",width=550,left="+left+",top="+top);
empty = {val: function(){return '';}, hasClass: function(){return 0;}};
var doc = popup.document;
 
doc.problematic = regexDict && regexDict.problematic;
function createWikiCode() {
copyAttributes(doc, { title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, allFields:[] } );
var par = ["{{" + template.t];
var body = doc.body;
for (var i = 0; i < orderedFields.length; i++)
if (regexDict) {
par.push($.trim(orderedFields[i].val()).replace(/\|/g, '{{!}}').replace(/=/g, '{{=}}'));
body.appendChild(doc.createTextNode('הדביקו את הקישור כאן:'));
 
var b = doc.createElement("input");
if (template.def)
b.urlInput = doc.createElement("input");
for (var parnum in template.def)
copyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
if (par[parnum] == template.def[parnum])
b.urlInput.style.width = "12em";
par[parnum] = '';
body.appendChild(b.urlInput);
if (! template.nopop)
copyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: updatePreview });
while (par.length && !par[par.length-1].length && orderedFields[par.length-2].length) // last condition is to avoid remving "emptys"
b.onclick = function() {
par.pop();
var matches = this.urlInput.value.match(this.regexDict.regex);
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)
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) {
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) {
function fireDialog() {
var linkTemplates = knownLinkTemplates();
 
var templateParams = linkTemplates[templateName];
var killold = $('#ltw_dialog').remove(), // kill existing popup when button is pressed again.
if (templateParams && templateParams.constructor == Array && templateParams.length > 0)
title = 'יצירת תבנית קישור',
popupPredefinedLinkTemplate(templateName, templateParams, templateRegex(templateName));
dialog = $('<div>', {id: 'ltw_dialog'}).css({backgroundColor: '#E8E8E8', maxWidth: '58em'}).dialog({
}
title: title,
resizable: false,
close: function() {$(this).remove();}
}),
fullList = templates(false),
allTemplates = [];


function createSortedTemplatesList() {
function fromTemplate(text) {
var fullList = knownLinkTemplates();
var regex = new RegExp('\\{\\{(' + allTemplates.join('|') + ')([^}]*)');
var names = [], hnames = [];
match = text.match(regex);
for (x in fullList)
if (match) {
if (x.match(/^[a-zA-Z]/))
template = match[1];
names.push(x);
values = match[2].split('|');
else
values.shift();
hnames.push(x);
templateDialog(dialog, templates(template), values);
hnames.sort();
return true;
names.sort(function(a,b){var la=a.toLowerCase(),lb=b.toLowerCase();return la>lb?1:la<lb?-1:0;});
}
return hnames.concat(names);
return false;
}
}


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); }
for (var i in fullList)
allTemplates.push(fullList[i].t);


function advancedFire(context) {
if (fromTemplate($("#wpTextbox1").textSelection('getSelection')))
fireLinkTemplatePopup(this.template);
return;
}


function createAdvanceToolKit() {
var selector = $('<select>', {'class': 'ltw_disposable'}).change(function() { // class in quotes - reserved word.
    var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []};
if (! this.value) return;
var templatesList = createSortedTemplatesList();
dialog.dialog('option', 'title', title + ' עבור ' + this.value);
for (var i in templatesList)
$(this).remove();
        gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: advancedFire, template: templatesList[i]}});
templateDialog(dialog, templates(this.value));
$j('#wpTextbox1').wikiEditor('addToToolbar', {
});
'section': 'advanced',
selector.append($('<option>', {text: 'בחרו תבנית מהרשימה'}));
'group': 'heading',
for (var i in allTemplates)
'tools': {'linkTemplateWizard': gadget}
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 (typeof $j != 'undefined' && typeof $j.fn.wikiEditor != 'undefined')
if (mw.user.options.get('usebetatoolbar')) {
$j(document).ready(createAdvanceToolKit);
var depend = ['ext.wikiEditor'];
if (wgAction == 'edit')
mw.loader.using(depend, function() {
hookEvent("load", createLinkTemplatesSelections);
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);})
);
});
});
});