לדלג לתוכן

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

מתוך צפונות ויקי
מ לבקשת קיפוד
מ עדכון של קיפודנחש
שורה 1: שורה 1:
//Adds wizard for using templates for external links
//Adds wizard for using templates for external links
//Written by [[User:קיפודנחש]]
//Written by [[User:קיפודנחש]]
if (wgAction == 'edit') $(document).ready(function() {
function ltw_createTemplate() {
 
var par = ["{{" + this.templateName];
 
for (var i in this.orderedFields)
 
par.push((this.problematic? (parseInt(i)+1) + "=":"") + $.trim(this.orderedFields[i].value));
 
if (this.defParam)
   
for (var parnum in this.defParam)
function templates(templateName) {
if (par[parnum] == this.defParam[parnum])
var constants = ["",
par[parnum] = '';
"שם המחבר",
while (par.length && !par[par.length-1].length && this.orderedFields[par.length-2].type) // remove tailing empty ordered params.
"כותרת  המאמר",
par.pop();
"מספר (כפי שמופיע בקישור)",
var code = par.join("|");
"מידע נוסף (למשל תאריך)",
if (this.namedFields) {
"מספר הסדרה",
var pairs = ['']; // so we'll get the firs bar
"נתיב הדף - כמו שמופיע בקישור",
for (j in this.namedFields) {
"מידע נוסף (לא תאריך)",
var val = $.trim(this.namedFields[j][1].value);
"ספר",
if (val.length > 0)
"פרק",
pairs.push(this.namedFields[j][0] + '=' + val);
"פסוק",
"מסכת",
"דף",
"עמוד",
"משנה",
"סימן",
"סעיף",
"הלכות",
"שם",
"מספר הסדרה",
'מספר סדרת "ART"',
"",
"תאריך כתבה (לדוגמה, 1949/07/25), כפי שמופיע בקישור",
"סוג הפרסום, כפי שמופיע בקישור אחרי '=EntityId'. בדרך כלל 'Ar' לכתבה רגילה, 'Pc' לתמונה ו־'Ad' לפרסומת",
"שם הספר",
"קידומת סוג הכתבה",
"מזהה נושא הכתבה",
"שם הערך",
"קוד כניסה חינם (כפי שמופיע בקישור)",
"כרך",
"הפניה לכתבה (כפי שמופיע בקישור)",
"הלכה",
"",
"חלק",
"כותרת הדף",
"שם החלל",
"מספר ה-folder כמו שמופיע בקישור",
"כותרת הספר/שם הקהילה",
"מספר גיליון, תאריך פרסום ומספרי עמודים",
"החלק השני של הקישור",
"מספר העמוד, כפי שמופיע באתר",
"שם האיש",
"שם האמן",
"שם העיתון",
"קוד העיתון באתר (שלוש אותיות לטיניות גדולות)",
"שם המין/זן",
"שם הרב",
"שם השיעור",
"השיעור כשם שמופיע בקישור",
"מספר גיליון, תאריך פרסום ומספרי עמודים (אופציונלי)",
"שם הערך בויקישיבה",
"קידומת הקישור, אם שונה מ-www"
];
 
var templatesAr = [
{t: 'קישור כללי', np: [
['כתובת', 'הקישור (כלומר ה-URL) עצמו'],
['כותרת', 'שם המאמר המקושר'],
['הכותב', 'שמות כותבי המאמר', 1],
['תאריך', 'תאריך המאמר', 1],
['עמודים', 'מספר העמודים', 1],
['שפה', 'שפה (אם המאמר לא בעברית)', 1],
['פורמט', 'פורמט המאמר, אם אינו HTML (למשל PDF, DOC, וכן הלאה', 1],
['ציטוט', 'ציטוט משפט מהדף המקושר (יכול לעזור במציאת הדף בעתיד, אם הקישור ישתנה)', 1]
]},
{t: 'הארץ', p: [1,2,3,4], r: /(?:spages\/|itemNo=)(\d+)/i, rp: [3], bm: 1, op: [3]},
{t: 'דבר'},
{t: 'מעריב'},
{t: 'הצבי'},
{t: 'הצפירה'},
{t: 'המגיד'},
{t: 'חבצלת'},
{t: 'המליץ'},
{t: 'PalPost'},
{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]},
{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: ["האותיות שמציינות את המדינה"]},
{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]},
{t: 'Onlife', p: [1,2,3,4], r: /onlife\.co\.il\/([^\/]+)\/(.*)/i, rp: [1,3], op: [3]},
{t: 'ynet', p: [1,2,3,4,0,5,25], 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,0,5,25], 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,0,19], r: /\/articles\/(\d+),7340,L-(\d+),00/i, rp: [6,3], op: [3,4,5,6]},
{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: 'אנציקלופדיה ynet', p: [27,3,28,4], r: /\/yaan\/0,7340,L-(\d+)-([^-]*)-FreeYaan,00.html/i, rp: [2,3], op: [3]},
{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]},
{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: [2]},
{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: 'מממ2', p: [1,2,3,4], r: /data\/docs\/([^\.])\.rtf/i, rp: [3], op: [3]},
{t: 'משנה תורה', p: [12,3,34], r: /mechon-mamre.org\/\i\/(\d+)\.htm/i, rp: [2]},
{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: 'HebrewBooksPage', p: [1,8,3,4,40], r: /pdfpager\.aspx\?.*req=(\d+).*&pgnum=(\d+)/i, rp: [3,5], op: [0,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]},
{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;
}
}
if (pairs.length > 1)
code += pairs.join('|');
var template;
}
for (var i in templatesAr)  
code += "}}";
if (templatesAr[i].t == templateName)  
if (this.refCheckBox.checked)
template = templatesAr[i];
return "{{הערה|1=" +  code + "}}";
if (this.listCheckBox.checked)
var historic = {"דבר": "DAV", "מעריב": "MAR", "הצבי": "HZV", "הצפירה": "HZF", "המגיד": "MGD", "המליץ": "HMZ", "חבצלת": "HZT", "PalPost": "PLS"};
return "\n* " + code + "\n";
if (historic[template.t]) {
return code;
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]});
}
function ltw_copyAttributes(target, source) {for (key in source)target[key] = source[key];return target;}
 
for (var i in template.p)
if (typeof template.p[i] == "number")
template.p[i] = constants[template.p[i]];
return template;
function ltw_knownLinkTemplates() {
var constants = ["",
"שם המחבר",
"כותרת  המאמר",
"מספר (כפי שמופיע בקישור)",
"מידע נוסף (למשל תאריך)",
"מספר הסדרה",
"נתיב הדף - כמו שמופיע בקישור",
"מידע נוסף (לא תאריך)",
"ספר",
"פרק",
"פסוק",
"מסכת",
"דף",
"עמוד",
"משנה",
"סימן",
"סעיף",
"הלכות",
"שם",
"מספר הסדרה",
'מספר סדרת "ART"',
"",
"תאריך כתבה, בצורה 1949/07/25<br/>כפי שמופיע בקישור",
"סוג הפרסום, כפי שמופיע בקישור אחרי '=EntityId'. בדרך כלל 'Ar' לכתבה רגילה, 'Pc' לתמונה ו־'Ad' לפרסומת",
"שם הספר",
"קידומת סוג הכתבה",
"מזהה נושא הכתבה",
"שם הערך",
"קוד כניסה חינם (כפי שמופיע בקישור)",
"כרך",
"הפניה לכתבה (כפי שמופיע בקישור)",
"הלכה",
"",
"חלק",
"כותרת הדף",
"שם החלל",
"מספר ה-folder כמו שמופיע בקישור",
"כותרת הספר/שם הקהילה",
"מספר גיליון, תאריך פרסום ומספרי עמודים",
"החלק השני של הקישור",
"מספר העמוד, כפי שמופיע באתר",
"שם האיש",
"שם האמן",
"שם העיתון",
"קוד העיתון באתר (שלוש אותיות לטיניות גדולות)",
"שם המין/זן",
"שם הרב",
"שם השיעור",
"השיעור כשם שמופיע בקישור",
"מספר גיליון, תאריך פרסום ומספרי עמודים (אופציונלי)"
];
var templatesDic = {
'קישור כללי': [],
"הארץ": [1, 2, 3, 4],
"דבר": [1,2,22,3,7,0,23],
"מעריב": [1,2,22,3,7,0,23],
"הצבי": [1,2,22,3,7,0,23],
"הצפירה": [1,2,22,3,7,0,23],
"המגיד": [1,2,22,3,7,0,23],
"חבצלת": [1,2,22,3,7,0,23],
"המליץ": [1,2,22,3,7,0,23],
"PalPost": [1,2,22,3,7,0,23],
'תנ"ך': [8,9,10],
"nrg": [1,2,3,4,0,19,20],
"Mooma2": [42,3],
"בחדרי חרדים": [1,2,3,4],
"CIA factbook":["האותיות שמציינות את המדינה"],
"HebrewBooks":[1,8,3,4],
"mynet":[1,2,3,4,0,5],
"NFC":[1,2,3,4],
"Onlife":[1,2,3,4],
"ynet":[1,2,3,4,0,5,25],
"Xnet":[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,4],
"בשבע":[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,2,3,4],
"אנצ דעת":[3,27],
"דעת":[1,39,2],
"ויקישיבה":["שם הערך בויקישיבה"],
"HebrewBooksPage": [1,8,3,4,40],
"גדולי ישראל": [29,40,41,13],
"עיתונות יהודית היסטורית 2": [43,44,1,2,22,3,7,0,23],
"Iucnredlist": [45,3],
"העין השביעית": [1,34,6,4,25],
"One": [1,2,3,4],
"קול הלשון - שיעור" : [46,47,48,4],
"ספר פרויקט גוטנברג": [],
"imdb title": [],
"imdb name": [],
"imdb company": [],
"Google book": [],
"TheMarker1": [1,2,3,4],
"מערכות": [1,2,3,49],
"mako": [1,2,3,6,4]
};
for (var key in templatesDic)
for (var i in templatesDic[key])
if (typeof(templatesDic[key][i]) == "number")
templatesDic[key][i] = constants[templatesDic[key][i]];
if (typeof privateTemplates === "object")
ltw_copyAttributes(templatesDic, privateTemplates);
return templatesDic;
}
function ltw_namedParams(templateName) {
var allNamedParam = {
'קול הלשון - שיעור': [['וידאו', '"וידאו": רשמו "כן" אם זה שיעור לצפייה'], ['תואר', 'תואר - אם תואר המרצה שונה מ"הרב"']],
"ספר פרויקט גוטנברג": [["כותב", "שם כותב הספר (אופציונלי)"], ['שם הספר', 'שם הספר (ברירת מחדל: שם הערך)'], ['מספר', 'מספר הספר בפרויקט']],
"imdb title": [['id', 'המספר שמופיע בקישור'], ['title', 'הכותרת שתופיע בקישור (אופציונלי: ברירת מחדל - שם הערך']],
"imdb name": [['id', 'המספר שמופיע בקישור'], ['name', 'הכותרת שתופיע בקישור (אופציונלי: ברירת מחדל - שם הערך']],
"imdb company": [['id', 'המספר שמופיע בקישור'], ['company', 'הכותרת שתופיע בקישור']],
"Google book": [['מזהה','מזהה הספר באתר גוגל'],['כותב','שם כותב/י הספר (אופציונלי)'],['שם הספר','שם הספר (אופציונלי) - ללא הפרמטר יוצג שם הערך']],
"TheMarker1": [['5','קידומת הקישור, אם שונה מ-www']],
'קישור כללי': [
['כתובת', 'הקישור (כלומר ה-URL) עצמו'],
['כותרת', 'שם המאמר המקושר'],
['הכותב', 'שמות כותבי המאמר'],
['תאריך', 'תאריך המאמר'],
['עמודים', 'מספר העמודים'],
['שפה', 'שפה (אם המאמר לא בעברית)'],
['פורמט', 'פורמט המאמר, אם אינו HTML (למשל PDF, DOC, וכן הלאה'],
['ציטוט', 'ציטוט משפט מהדף המקושר (יכול לעזור במציאת הדף בעתיד, אם הקישור ישתנה)']
]
};
return allNamedParam[templateName] || [];
}
function ltw_defaultParameters(templateName) { // if parameter has the default value, we omit it
var defs = {
"דבר": {7: "Ar"},  
"מעריב": {7: "Ar"},
"הצבי": {7: "Ar"},
"הצפירה": {7: "Ar"},
"המגיד": {7: "Ar"},
"המליץ": {7: "Ar"},
"חבצלת": {7: "Ar"},
"PalPost": {7: "Ar"},
"עיתונות יהודית היסטורית 2": {9: "Ar"},
"ynet": {6: 0, 7: 'articles'},
"Xnet": {6: 0, 7: 'articles'}
}
return defs[templateName] || {};
}
function ltw_templateRegex(templateName) {
var regexes = {
"nrg": {regex: /\/online\/([^\/]+)\/ART([^\/]*)\/([^\.]+).html/i, params:[6,7,3]},
"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]},
"ynet": {regex: /ynet\.co\.il\/([^\/]+)\/(\d+),7340,L-(\d+),00.html/i, params:[7,6,3]},
"Xnet": {regex: /([^\/]+)\/(\d+),\d+,L-(\d+),00.html/i, params:[7,6,3]},
"Mooma2": {regex: /\?ArtistId=(\d+)/i, params:[2]},
"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]},
"אנציקלופדיה 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\/|itemNo=)(\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: /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},
"עיתונות יהודית היסטורית 2": {regex: /(?:Key|BaseHref)=([A-Z]{3})\/(\d{4}\/\d{1,2}\/\d{1,2})(?:.*&EntityId=|\/\d+\/)([A-Z][a-z])(\d+)/i, params:[2,5,9,6], replace: [[/%2F/gi, '/']]},
"Iucnredlist": {regex: /details(?:\.php)?\/(\d+)/, params: [2]},
"העין השביעית": {regex: /the7eye\.org\.il\/([^\/]+)\/Pages\/(.*)\.aspx/, params: [5,3]},
"One": {regex: /(?:Article[\d\-\/,]*\/|id=)([\d\-\/,]*\d)/, params: [3]},
"קול הלשון - שיעור": {regex: /(?:PathFile=|Source=)([^&]*)/i, params:[3]},
"ספר פרויקט גוטנברג": {regex: /ebooks\/(\d+)/i, params: [3]},
"imdb title": {regex: /title\/tt(\d+)/i, params: [1]},
"imdb name": {regex: /name\/nm(\d+)/i, params: [1]},
"imdb company": {regex: /company\/co(\d+)/i, params: [1]},
"Google book" : {regex: /id=([^&]*)/, params: [1]},
"TheMarker1": {regex: /http:\/\/(?:www)?(.*)\.themarker\.com\/([^\?]+)/i, params: [5,3]},
"מערכות": {regex: /FILES\/(.*)\.pdf/i, params: [3]},
"mako": {regex: /www\.mako\.co\.il\/(.*?)\/Article-(.*?)\.htm/i, params: [4,3]}
}
}
 
// these guys are all the same - it's best to handle them as such.
function templateDialog(dialog, template) {
var historic = {"דבר": "DAV", "מעריב": "MAR", "הצבי": "HZV", "הצפירה": "HZF", "המגיד": "MGD", "המליץ": "HMZ", "חבצלת": "HZT", "PalPost": "PLS"};
var orderedFields = [],
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, '/']]};
namedFields = [],
for (var template in historic) {
table = $('<table>'),
var lr = ltw_copyAttributes({}, histregex);
empty = {val: function(){return '';}, hasClass: function(){return 0;}};
lr.regex = new RegExp(lr.regex.source.replace("HISTNAME", historic[template]));
 
regexes[template] = lr;
function createWikiCode() {
}
var par = ["{{" + template.t];
if (typeof privateRegexes === "object")
for (var i in orderedFields) {
ltw_copyAttributes(regexes, privateRegexes);
var val = $.trim(orderedFields[i].val()).replace('|', '{{!}}');
return regexes[templateName];
if (val.indexOf('=') + 1)
}
val = (i + 1) + '=' + val;
par.push(val);
function ltw_addFiledToTable(doc, table, param) {
}
var row = table.insertRow(-1) || table[rows[table.rows.length-1]];
if (template.def)
var cell = row.insertCell(-1) || row.cells[0];
for (var parnum in template.def)
cell.innerHTML = param;
if (par[parnum] == template.def[parnum])
cell.style.maxWidth = "16em";
par[parnum] = '';
var field = ltw_copyAttributes(doc.createElement("input"), {type: "text", maxLength: 120, doc: doc});
while (par.length && !par[par.length-1].length && orderedFields[par.length-2].length) // last condition is to avoid remving "emptys"
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = ltw_updatePreview;
par.pop();
field.style.width = "20em";
var code = par.join("|");
cell = row.insertCell(-1) || row.cells[1];
if (namedFields) {
cell.appendChild(field);
var pairs = [];
return field;
for (j in namedFields) {
}
var val = $.trim(namedFields[j][1].val()).replace('|', '{{!}}');
if (val.length)
function ltw_hasBookMarklet(template) {
pairs.push(namedFields[j][0] + '=' + val);
return $.inArray(template, ['ynet', 'הארץ', 'nrg', 'וואלה!', 'ערוץ 7', 'נענע10', 'גלובס', 'עכבר העיר', 'הערוץ האקדמי', 'העין השביעית', 'Xnet' ,'One', 'בחדרי חרדים','ישראל היום','mako']) + 1;
}
function ltw_popupPredefinedLinkTemplate(templateName, paramList, regexDict) {
var hasBookmarklet = ltw_hasBookMarklet(templateName);
var namedParamsList = ltw_namedParams(templateName);
var height = 160 + 26 * (paramList.length + namedParamsList.length) + (regexDict ? 60 : 0) + (hasBookmarklet ? 60 : 0);
for (var i in paramList)
height += 18 * Math.floor(paramList[i].length / 33);
for (var i in namedParamsList)
height += 18 * Math.floor(namedParamsList[i][1].length / 33);
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.write("Fix for FF4");
var body = doc.body;
ltw_copyAttributes(doc, {
title: " הוספת תבנית: " + templateName,
dir: "rtl",
templateName: templateName,
orderedFields: [],
getTemplate: ltw_createTemplate,
updatePreview: function(){this.previewNode.data = this.getTemplate();},
problematic: regexDict && regexDict.problematic,
defParam: ltw_defaultParameters(templateName)
});
body.innerHTML = "";
if (hasBookmarklet) {
var p = doc.createElement("p");
p.style.color = 'red';
p.appendChild(doc.createTextNode('קיים בוקמרקלט שמייצר תבנית זו באופן אוטומטי. אנא שקלו להשתמש בו.'));
body.appendChild(p);
}
if (regexDict) {
body.appendChild(doc.createTextNode('הדביקו את הקישור כאן:'));
var b = doc.createElement("input");
b.urlInput = doc.createElement("input");
ltw_copyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
b.urlInput.style.width = "12em";
body.appendChild(b.urlInput);
ltw_copyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: ltw_updatePreview });
b.onclick = function() {
var str = this.urlInput.value;
if (this.regexDict.replace)
for (var r in this.regexDict.replace)
str = str.replace(this.regexDict.replace[r][0], this.regexDict.replace[r][1]);
var matches = str.match(this.regexDict.regex);
var orderedFields = this.doc.orderedFields, namedFields = this.doc.namedFields;
var numOrdered = orderedFields.length, numNamed = namedFields.length;
if (matches)
for (var i = 1; i < matches.length; i++) {
var fieldIndex = this.regexDict.params[i-1] - 1; //parameters are counted from one, we count from 0.
if (fieldIndex < numOrdered)
orderedFields[fieldIndex].value = matches[i] || '';
else if (fieldIndex < numOrdered + numNamed)
namedFields[fieldIndex-numOrdered][1].value = matches[i] || '';
}
}
this.update();
if (pairs.length)
code += '|' + pairs.join('|');
}
code += "}}";
if ($('#ltw2_ref').attr('checked'))
return "{{הערה|" +  code + "}}";
if ($('#ltw2_list').attr('checked'))
return "\n* " + code + "\n";
return code;
}
}
body.appendChild(b);
 
body.appendChild(doc.createElement("hr"));
function updatePreview(){
}
$('#ltw2_preview').text(createWikiCode());
var table = doc.createElement("table");
var good = true;
for (var i in paramList) {
var f = orderedFields.concat(namedFields)
var param = paramList[i];
for (i in f)
if (param.length == 0) { // this allow defining an empty parameter. by use of a "pseudo field".
if (f[i].hasClass('ltw_required') && $.trim(f[i].val()).length == 0)
doc.orderedFields.push({value:""});
good = false;
continue;
$(".ui-dialog-buttonpane button:contains('אישור')").button(good ? "enable" : "disable");
}
 
function addRow(labelText, paramName, optional) {
var inputField = $('<input>', {id: 'ltw2_inputfield_' + paramName, type: 'text', width: 600}).css({width: '28em'}).bind('input', 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 = this.value;
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();
}
}
doc.orderedFields.push(ltw_addFiledToTable(doc, table, param));
}
if (template.bm)
doc.namedFields = [];
dialog.append($('<p>').css({color: 'red', fontWeight: 'bold'})
for (var i in namedParamsList) {
.text('קיים בוקמרקלט שמייצר תבנית "'  +  template.t + '" באופן אוטומטי. אנא שקלו להשתמש בו.'))
var np = namedParamsList[i];
.append($('<hr>'));
doc.namedFields.push([np[0], ltw_addFiledToTable(doc, table, np[1])]);
}
if (template.r)
body.appendChild(table);
dialog.append($('<span>').text('הדביקו את הקישור כאן:').css({width: '20em'}))
body.appendChild(doc.createElement("p"));
.append($('<input>', {type: "text", maxLength: 600}).css({width: '30em'}).bind('input', extractParamsFromURL))
var p = doc.createElement("p");
.append($('<hr>'))
var checkboxes = {refCheckBox: " הערת שוליים:", listCheckBox: " פריט ברשימה:"}
for (var box in checkboxes) {
dialog
p.appendChild(doc.createTextNode(checkboxes[box]));
.append($('<p>').text('השדות המסומנים באדום הם חובה, השאר אופציונליים'))
doc[box] = ltw_copyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: ltw_updatePreview});
.append(table)
p.appendChild(doc[box]);
.append($('<p>').css({height: '2em'}))
}
.append($('<label>').text(' הערת שוליים '))
body.appendChild(p);
.append($('<input>', {type: 'checkbox', id: 'ltw2_ref'}).change(updatePreview))
body.appendChild(p = doc.createElement("p"));
.append($('<label>').css({width: '12em'}).text( ' פריט ברשימה '))
ltw_copyAttributes(p.style, {background: "blue", color: "white", fontSize: "0.85em"} );
.append($('<input>', {type: 'checkbox', id: 'ltw2_list'}).change(updatePreview))
p.appendChild(doc.previewNode = doc.createTextNode(' '));
.append($('<p>').css({height: '1.5em'}))
body.appendChild(doc.createElement("p"));
.append($('<p>', {id: 'ltw2_preview'}).css({backgroundColor: "lightGreen", fontSize: '120%', maxWidth: '40em'}));
b = ltw_copyAttributes(doc.createElement("input"), {type:"button", value:"אישור", doc: doc, popup: popup});
doc.problematic = regexDict && regexDict.problematic && true;
for (var i = 0; i < (template.p || []).length; i++)
b.onclick = function() {
if (template.p[i].length == 0)  // this allow defining an empty parameter. by use of a "pseudo field".
insertTags("", this.doc.getTemplate(), "");
orderedFields.push(empty);
this.popup.close();
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]);
dialog.dialog('option', 'buttons', {
'אישור': function() {insertTags('', '', createWikiCode()); dialog.dialog('close');},
'ביטול': function() {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]
});
updatePreview();
}
}
body.appendChild(b);
 
b = ltw_copyAttributes(doc.createElement("input"), {type: "button", value: "ביטול", popup: popup, onclick: function(){this.popup.close();}});
function fireDialog() {
body.appendChild(b);
$('#ltw_dialog').remove(); // kill existing popup when button is pressed again.
doc.refCheckBox.onchange();
var title = 'יצירת תבנית קישור',
}
dialog = $('<div>', {id: 'ltw_dialog'}).css({backgroundColor: '#E8E8E8'}).dialog({
title: title,
function ltw_fireLinkTemplatePopup(templateName) {
resizable: false,
var linkTemplates = ltw_knownLinkTemplates();
close: function() {$(this).remove();},
var templateParams = linkTemplates[templateName];
}),
ltw_popupPredefinedLinkTemplate(templateName, templateParams, ltw_templateRegex(templateName));
selector = $('<select>').change(function() {
}
if (! this.value) return;
dialog.dialog('option', 'title', title + ' עבור ' + this.value);
function ltw_createSortedTemplatesList() {
$(this).remove();
var fullList = ltw_knownLinkTemplates();
templateDialog(dialog, templates(this.value));
var names = [], hnames = [];
});
var first = 'קישור כללי';
for (var x in fullList)
selector.append($('<option>', {text: 'בחרו תבנית מהרשימה'}));
if (x.match(/^[a-zA-Z]/))
var fullList = templates(false);
names.push(x);
for (var i in fullList)
else
selector.append($('<option>', {text: fullList[i].t, value: fullList[i].t}));
if (x != first)
dialog.append(selector);
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 [first].concat(hnames).concat(names);
}
function ltw_createLinkTemplatesSelections() {
var select = document.createElement("select");
select.onchange = function() {
ltw_fireLinkTemplatePopup(this.value);
this.selectedIndex = 0;
return false;
}
}
select.options.add(new Option("אשף תבניות קישורים", ""));
 
var allnames = ltw_createSortedTemplatesList();
setTimeout(function() {
for (var i in allnames)
var button = $('<img>', {src: 'http://upload.wikimedia.org/wikipedia/commons/e/ea/Button_easy_cite.png', title: 'תבנית קישור'})
select.options.add(new Option(allnames[i], allnames[i]));
.click(function() {
var toolbar = document.getElementById("toolbar");
mediaWiki.loader.using('jquery.ui.dialog', fireDialog);
if (toolbar)
});
toolbar.appendChild(select);
$('div.section-advanced > div:last').append(button);
}
$('div #toolbar').append(button);
}, 1000);
function ltw_updatePreview() { this.doc.updatePreview(); }
});
function ltw_advancedFire(context) {
ltw_fireLinkTemplatePopup(this.template);
}
function ltw_createAdvanceToolKit() {
    var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []};
var templatesList = ltw_createSortedTemplatesList();
for (var i in templatesList)
        gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: ltw_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(ltw_createAdvanceToolKit);
if (wgAction == 'edit')
hookEvent("load", ltw_createLinkTemplatesSelections);

גרסה מ־07:29, 9 באוגוסט 2011

//Adds wizard for using templates for external links
//Written by [[User:קיפודנחש]]
if (wgAction == 'edit') $(document).ready(function() {




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

		var templatesAr = [
			{t: 'קישור כללי', np: [
				['כתובת', 'הקישור (כלומר ה-URL) עצמו'], 
				['כותרת', 'שם המאמר המקושר'],
				['הכותב', 'שמות כותבי המאמר', 1],
				['תאריך', 'תאריך המאמר', 1],
				['עמודים', 'מספר העמודים', 1],
				['שפה', 'שפה (אם המאמר לא בעברית)', 1],
				['פורמט', 'פורמט המאמר, אם אינו HTML (למשל PDF, DOC, וכן הלאה', 1],
				['ציטוט', 'ציטוט משפט מהדף המקושר (יכול לעזור במציאת הדף בעתיד, אם הקישור ישתנה)', 1]
			]},
			{t: 'הארץ', p: [1,2,3,4], r: /(?:spages\/|itemNo=)(\d+)/i, rp: [3], bm: 1, op: [3]},
			{t: 'דבר'},
			{t: 'מעריב'},
			{t: 'הצבי'},
			{t: 'הצפירה'},
			{t: 'המגיד'},
			{t: 'חבצלת'},
			{t: 'המליץ'},
			{t: 'PalPost'},
			{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]},
			{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: ["האותיות שמציינות את המדינה"]},
			{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]},
			{t: 'Onlife', p: [1,2,3,4], r: /onlife\.co\.il\/([^\/]+)\/(.*)/i, rp: [1,3], op: [3]},
			{t: 'ynet', p: [1,2,3,4,0,5,25], 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,0,5,25], 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,0,19], r: /\/articles\/(\d+),7340,L-(\d+),00/i, rp: [6,3], op: [3,4,5,6]},
			{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: 'אנציקלופדיה ynet', p: [27,3,28,4], r: /\/yaan\/0,7340,L-(\d+)-([^-]*)-FreeYaan,00.html/i, rp: [2,3], op: [3]},
			{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]},
			{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: [2]},
			{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: 'מממ2', p: [1,2,3,4], r: /data\/docs\/([^\.])\.rtf/i, rp: [3], op: [3]},
			{t: 'משנה תורה', p: [12,3,34], r: /mechon-mamre.org\/\i\/(\d+)\.htm/i, rp: [2]},
			{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: 'HebrewBooksPage', p: [1,8,3,4,40], r: /pdfpager\.aspx\?.*req=(\d+).*&pgnum=(\d+)/i, rp: [3,5], op: [0,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]},
			{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"};
		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) {
		var	orderedFields = [],
			namedFields = [],
			table = $('<table>'),
			empty = {val: function(){return '';}, hasClass: function(){return 0;}};

		function createWikiCode() {
			var par = ["{{" + template.t];
			for (var i in orderedFields) {
				var val = $.trim(orderedFields[i].val()).replace('|', '{{!}}');
				if (val.indexOf('=') + 1)
					val = (i + 1) + '=' + val;
				par.push(val);
			}
			if (template.def)
				for (var parnum in template.def)
					if (par[parnum] == template.def[parnum])
						par[parnum] = '';
			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('|', '{{!}}');
					if (val.length)
						pairs.push(namedFields[j][0] + '=' + val);
				}
				if (pairs.length)
					code += '|' + pairs.join('|');
			}
			code += "}}";
			if ($('#ltw2_ref').attr('checked'))
				return "{{הערה|" +  code + "}}";
			if ($('#ltw2_list').attr('checked'))
				return "\n* " + code + "\n";
			return code;
		}

		function updatePreview(){
			$('#ltw2_preview').text(createWikiCode());
			var good = true;
			var f = orderedFields.concat(namedFields)
			for (i in f)
				if (f[i].hasClass('ltw_required') && $.trim(f[i].val()).length == 0)
					good = false;
			$(".ui-dialog-buttonpane button:contains('אישור')").button(good ? "enable" : "disable");
		}

		function addRow(labelText, paramName, optional) {
			var inputField = $('<input>', {id: 'ltw2_inputfield_' + paramName, type: 'text', width: 600}).css({width: '28em'}).bind('input', 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 = this.value;
			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();
		}
		
		if (template.bm)
			dialog.append($('<p>').css({color: 'red', fontWeight: 'bold'})
				.text('קיים בוקמרקלט שמייצר תבנית "'  +  template.t + '" באופן אוטומטי. אנא שקלו להשתמש בו.'))
				.append($('<hr>'));
		
		if (template.r)
			dialog.append($('<span>').text('הדביקו את הקישור כאן:').css({width: '20em'}))
				.append($('<input>', {type: "text", maxLength: 600}).css({width: '30em'}).bind('input', 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]);
		
			
		dialog.dialog('option', 'buttons', {
			'אישור': function() {insertTags('', '', createWikiCode()); dialog.dialog('close');},
			'ביטול': function() {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]
		});
		updatePreview();
	}

	function fireDialog() {
		$('#ltw_dialog').remove(); // kill existing popup when button is pressed again.
		var title = 'יצירת תבנית קישור',
			dialog = $('<div>', {id: 'ltw_dialog'}).css({backgroundColor: '#E8E8E8'}).dialog({
				title: title,
				resizable: false,
				close: function() {$(this).remove();},
			}),
			selector = $('<select>').change(function() {
				if (! this.value) return;
				dialog.dialog('option', 'title', title + ' עבור ' + this.value);
				$(this).remove();
				templateDialog(dialog, templates(this.value));
			});
		
		selector.append($('<option>', {text: 'בחרו תבנית מהרשימה'}));
		var fullList = templates(false);
		for (var i in fullList)
			selector.append($('<option>', {text: fullList[i].t, value: fullList[i].t}));
		dialog.append(selector);
	}

	setTimeout(function() {
		var button = $('<img>', {src: 'http://upload.wikimedia.org/wikipedia/commons/e/ea/Button_easy_cite.png', title: 'תבנית קישור'})
		.click(function() {
			mediaWiki.loader.using('jquery.ui.dialog', fireDialog);
		});
		$('div.section-advanced > div:last').append(button);
		$('div #toolbar').append(button);
	}, 1000);
});