אונטערשייד צווישן ווערסיעס פון "מעדיעוויקי:Gadget-TemplatesExternalLinks.js"
קפיצה לניווט
קפיצה לחיפוש
אין תקציר עריכה |
(perf) |
||
שורה 1: | שורה 1: | ||
//Adds wizard for using templates for external links | //Adds wizard for using templates for external links | ||
//Written by [[User:קיפודנחש]] | //Written by [[User:קיפודנחש]] | ||
console.time('TemplatesExternalLinks'); | |||
if (($.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit']) + 1) && ( !$('#wpTextbox1').prop( 'readonly' ) )) | if (($.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit']) + 1) && ( !$('#wpTextbox1').prop( 'readonly' ) )) | ||
mw.loader.using('jquery.textSelection', function() { | mw.loader.using('jquery.textSelection', function() { | ||
שורה 406: | שורה 407: | ||
}); | }); | ||
}); | }); | ||
console.timeEnd('TemplatesExternalLinks'); |
רעוויזיע פון 00:10, 19 סעפטעמבער 2023
//Adds wizard for using templates for external links
//Written by [[User:קיפודנחש]]
console.time('TemplatesExternalLinks');
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: 'בחדרי חרדים', 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: 'וואלה!', 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: /\/([^\/]*)-he\//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: [3,35], r: /HalalKorot\.aspx\?id=(\d+)/i, rp: [2]},
/* {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: [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: /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]},*/
{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: 'היברובוקס', p: [1,8,3,4], r: /hebrewbooks\.org\/(\d+)/i, rp: [3], op: [0,3]},
{t: 'אוצר החכמה', p: [1,8,3,4], r: /otzar\.org\/(\d+)/i, rp: [3], 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], 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: '//yi.hamichlol.org.il/w/load.php?modules=oojs-ui.styles.icons-interactions&image=browser&lang=yi&skin=vector&version=nvpks',
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);})
);
});
});
});
console.timeEnd('TemplatesExternalLinks');