לדלג לתוכן

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

מתוך צפונות ויקי
מ לבקשת קיפוד
תמיכה בתבניות עם פרמטרים שמיים - תשתית
שורה 2: שורה 2:
//Written by [[User:קיפודנחש]]
//Written by [[User:קיפודנחש]]


function createTemplate(doc) {
function localcreateTemplate(doc) {
var par = ["{{" + doc.templateName];
var par = ["{{" + doc.templateName];
for (var i in doc.allFields)
for (var i in doc.allFields)
par.push((doc.problematic? (parseInt(i)+1) + "=":"") + doc.allFields[i].value);
par.push((doc.problematic? (parseInt(i)+1) + "=":"") + doc.allFields[i].value);
var code = par.join("|") + "}}";
var code = par.join("|");
if (doc.namedParFields) {
var pairs = ['']; // so we'll get the firs bar
for (j in doc.namedParFields) {
var val = $.trim(doc.namedParFields[j][1].value);
if (val.length > 0)
pairs.push(doc.namedParFields[j][0] + '=' + val);
}
if (pairs.length > 1)
code += pairs.join('|');
}
code += "}}";
if (doc.refCheckBox.checked)
if (doc.refCheckBox.checked)
return "{{הערה|1=" +  code + "}}";
return "{{הערה|1=" +  code + "}}";
שורה 13: שורה 24:
return code;
return code;
}
}
function copyAttributes(target, source) {
function localcopyAttributes(target, source) {
for (key in source)
for (key in source)
target[key] = source[key];
target[key] = source[key];
שורה 19: שורה 30:
}
}


function knownLinkTemplates() {
function localknownLinkTemplates() {
var constants = ["",
var constants = ["",
"שם המחבר",
"שם המחבר",
שורה 68: שורה 79:
];
];


var templatesDic = {
var localtemplatesDic = {
"הארץ": [1, 2, 3, 4],
"הארץ": [1, 2, 3, 4],
"דבר": [1,2,22,3,7,0,23],
"דבר": [1,2,22,3,7,0,23],
שורה 138: שורה 149:
"One": [1,2,3,4]
"One": [1,2,3,4]
};
};
for (var key in templatesDic)
for (var key in localtemplatesDic)
for (var i in templatesDic[key])
for (var i in localtemplatesDic[key])
if (typeof(templatesDic[key][i]) == "number")
if (typeof(localtemplatesDic[key][i]) == "number")
templatesDic[key][i] = constants[templatesDic[key][i]];
localtemplatesDic[key][i] = constants[localtemplatesDic[key][i]];
if (typeof privateTemplates === "object")
if (typeof privateTemplates === "object")
copyAttributes(templatesDic, privateTemplates);
localcopyAttributes(localtemplatesDic, privateTemplates);
return templatesDic;
return localtemplatesDic;
}
 
function localnamedParams(templateName) {
var allNamedParam = {
'בלדד השוחי': [['משתנה ראשון', 'כותרת משתנה ראשון'], ['משתנה שני', 'כותרת משתנה שני']]
};
return allNamedParam[templateName] || [];
}
}


function templateRegex(templateName) {
function localtemplateRegex(templateName) {
var regexes = {
var regexes = {
"nrg": {regex: /\/online\/([^\/]+)\/ART([^\/]*)\/([^\.]+).html/i, params:[6,7,3]},
"nrg": {regex: /\/online\/([^\/]+)\/ART([^\/]*)\/([^\.]+).html/i, params:[6,7,3]},
שורה 205: שורה 223:
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, '/']]};
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, '/']]};
for (var template in historic) {
for (var template in historic) {
var lr = copyAttributes({}, histregex);
var lr = localcopyAttributes({}, histregex);
lr.regex =  new RegExp(lr.regex.source.replace("HISTNAME", historic[template]));
lr.regex =  new RegExp(lr.regex.source.replace("HISTNAME", historic[template]));
regexes[template] = lr;
regexes[template] = lr;
}
}
if (typeof privateRegexes === "object")
if (typeof privateRegexes === "object")
copyAttributes(regexes, privateRegexes);
localcopyAttributes(regexes, privateRegexes);
return regexes[templateName];
return regexes[templateName];
}
}


function popupPredefinedLinkTemplate(templateName, paramList, regexDict) {
function localaddFiledToTable(doc, table, param) {
var height = 160 + 20 * paramList.length + (regexDict ? 60 : 0);
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 = localcopyAttributes(doc.createElement("input"), {type: "text", maxLength: 120, doc: doc});
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = localupdatePreview;
field.style.width = "20em";
cell = row.insertCell(-1) || row.cells[1];
cell.appendChild(field);
return field;
}
 
function localpopupPredefinedLinkTemplate(templateName, paramList, regexDict) {
var namedParamsList = localnamedParams(templateName);
var height = 160 + 20 * (paramList.length + namedParamsList.length) + (regexDict ? 60 : 0);
for (i in paramList)
for (i in paramList)
height += 16 * Math.floor(paramList[i].length / 24);
height += 16 * Math.floor(paramList[i].length / 24);
שורה 222: שורה 254:
var doc = popup.document;
var doc = popup.document;
doc.problematic = regexDict && regexDict.problematic;
doc.problematic = regexDict && regexDict.problematic;
copyAttributes(doc, { title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, allFields:[] } );
localcopyAttributes(doc, { title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, allFields:[] } );
var body = doc.body;
var body = doc.body;
if (regexDict) {
if (regexDict) {
שורה 228: שורה 260:
var b = doc.createElement("input");
var b = doc.createElement("input");
b.urlInput = doc.createElement("input");
b.urlInput = doc.createElement("input");
copyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
localcopyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
b.urlInput.style.width = "12em";
b.urlInput.style.width = "12em";
body.appendChild(b.urlInput);
body.appendChild(b.urlInput);
copyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: updatePreview });
localcopyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: localupdatePreview });
b.onclick = function() {
b.onclick = function() {
var str = this.urlInput.value;
var str = this.urlInput.value;
שורה 256: שורה 288:
continue;
continue;
}
}
var row = table.insertRow(-1) || table[rows[table.rows.length-1]];
doc.allFields.push(localaddFiledToTable(doc, table, param));
var cell = row.insertCell(-1) || row.cells[0];
}
cell.innerHTML = param;
doc.namedParFields = [];
cell.style.maxWidth = "16em";
for (var i in namedParamsList) {
var field = copyAttributes(doc.createElement("input"), { type: "text", maxLength: 120, doc: doc });
var np = namedParamsList[i];
field.onkeyup = field.onmouseup = field.onfocus = field.onblur = updatePreview;
doc.namedParFields.push([np[0], localaddFiledToTable(doc, table, np[1])]);
field.style.width = "20em";
cell = row.insertCell(-1) || row.cells[1];
cell.appendChild(field);
doc.allFields.push(field);
}
}
body.appendChild(table);
body.appendChild(table);
שורה 273: שורה 301:
for (var box in checkboxes) {
for (var box in checkboxes) {
p.appendChild(doc.createTextNode(checkboxes[box]));
p.appendChild(doc.createTextNode(checkboxes[box]));
doc[box] = copyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: updatePreview});
doc[box] = localcopyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: localupdatePreview});
p.appendChild(doc[box]);
p.appendChild(doc[box]);
}
}
body.appendChild(p);
body.appendChild(p);
body.appendChild(p = doc.createElement("p"));
body.appendChild(p = doc.createElement("p"));
copyAttributes(p.style, {background: "blue", color: "white", fontSize: "0.85em"} );
localcopyAttributes(p.style, {background: "blue", color: "white", fontSize: "0.85em"} );
p.appendChild(doc.previewNode = doc.createTextNode(' '));
p.appendChild(doc.previewNode = doc.createTextNode(' '));
body.appendChild(doc.createElement("p"));
body.appendChild(doc.createElement("p"));
b = copyAttributes(doc.createElement("input"), {type:"button", value:"אישור", doc: doc, popup: popup});
b = localcopyAttributes(doc.createElement("input"), {type:"button", value:"אישור", doc: doc, popup: popup});
doc.problematic = regexDict && regexDict.problematic && true;
doc.problematic = regexDict && regexDict.problematic && true;
b.onclick = function() {
b.onclick = function() {
insertTags("", createTemplate(this.doc), "");
insertTags("", localcreateTemplate(this.doc), "");
this.popup.close();
this.popup.close();
}
}
body.appendChild(b);
body.appendChild(b);
b = copyAttributes(doc.createElement("input"), {type: "button", value: "ביטול", popup: popup, onclick: function(){this.popup.close();}});
b = localcopyAttributes(doc.createElement("input"), {type: "button", value: "ביטול", popup: popup, onclick: function(){this.popup.close();}});
body.appendChild(b);
body.appendChild(b);
doc.refCheckBox.onchange();
doc.refCheckBox.onchange();
}
}


function fireLinkTemplatePopup(templateName) {
function localfireLinkTemplatePopup(templateName) {
var linkTemplates = knownLinkTemplates();
var linkTemplates = localknownLinkTemplates();
var templateParams = linkTemplates[templateName];
var templateParams = linkTemplates[templateName];
if (templateParams && templateParams.constructor == Array && templateParams.length > 0)
if (templateParams && templateParams.constructor == Array && templateParams.length > 0)
popupPredefinedLinkTemplate(templateName, templateParams, templateRegex(templateName));
localpopupPredefinedLinkTemplate(templateName, templateParams, localtemplateRegex(templateName));
}
}


function createSortedTemplatesList() {
function localcreateSortedTemplatesList() {
var fullList = knownLinkTemplates();
var fullList = localknownLinkTemplates();
var names = [], hnames = [];
var names = [], hnames = [];
for (x in fullList)
for (x in fullList)
שורה 313: שורה 341:
}
}


function createLinkTemplatesSelections() {
function localcreateLinkTemplatesSelections() {
var select = document.createElement("select");
var select = document.createElement("select");
select.onchange = function() {
select.onchange = function() {
fireLinkTemplatePopup(this.value);
localfireLinkTemplatePopup(this.value);
this.selectedIndex = 0;
this.selectedIndex = 0;
return false;
return false;
}
}
select.options.add(new Option("אשף תבניות קישורים", ""));
select.options.add(new Option("אשף תבניות קישורים", ""));
var allnames = createSortedTemplatesList();
var allnames = localcreateSortedTemplatesList();
for (var i in allnames)
for (var i in allnames)
select.options.add(new Option(allnames[i], allnames[i]));
select.options.add(new Option(allnames[i], allnames[i]));
שורה 329: שורה 357:
}
}


function updatePreview() { this.doc.previewNode.data = createTemplate(this.doc); }
function localupdatePreview() { this.doc.previewNode.data = localcreateTemplate(this.doc); }


function advancedFire(context) {
function localadvancedFire(context) {
fireLinkTemplatePopup(this.template);
localfireLinkTemplatePopup(this.template);
}
}


function createAdvanceToolKit() {
function localcreateAdvanceToolKit() {
     var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []};
     var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []};
var templatesList = createSortedTemplatesList();
var templatesList = localcreateSortedTemplatesList();
for (var i in templatesList)
for (var i in templatesList)
         gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: advancedFire, template: templatesList[i]}});
         gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: localadvancedFire, template: templatesList[i]}});
$j('#wpTextbox1').wikiEditor('addToToolbar', {
$j('#wpTextbox1').wikiEditor('addToToolbar', {
'section': 'advanced',
'section': 'advanced',
שורה 348: שורה 376:


if (typeof $j != 'undefined' && typeof $j.fn.wikiEditor != 'undefined')
if (typeof $j != 'undefined' && typeof $j.fn.wikiEditor != 'undefined')
$j(document).ready(createAdvanceToolKit);
$j(document).ready(localcreateAdvanceToolKit);
if (wgAction == 'edit')
if (wgAction == 'edit')
hookEvent("load", createLinkTemplatesSelections);
hookEvent("load", localcreateLinkTemplatesSelections);

גרסה מ־13:23, 29 במרץ 2011

//Adds wizard for using templates for external links
//Written by [[User:קיפודנחש]]

function localcreateTemplate(doc) {
	var par = ["{{" + doc.templateName];
	for (var i in doc.allFields)
		par.push((doc.problematic? (parseInt(i)+1) + "=":"") + doc.allFields[i].value);
	var code = par.join("|");
	if (doc.namedParFields) {
		var pairs = ['']; // so we'll get the firs bar
		for (j in doc.namedParFields) {
			var val = $.trim(doc.namedParFields[j][1].value);
			if (val.length > 0)
				pairs.push(doc.namedParFields[j][0] + '=' + val);
		}
		if (pairs.length > 1)
			code += pairs.join('|');
	}
	code += "}}";
	if (doc.refCheckBox.checked)
		return "{{הערה|1=" +  code + "}}";
	if (doc.listCheckBox.checked)
		return "\n* " + code + "\n";
	return code;
}
function localcopyAttributes(target, source) {
	for (key in source)
		target[key] = source[key];
	return target;
}

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

	var localtemplatesDic = {
		"הארץ": [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],
		"TheMarker":[1,2,3,4],
		"ynet":[1,2,3,4,0,5,25],
		"וואלה!":[1,2,3,4,0,26],
		"גלובס":[1,2,3,4],
		"כלכליסט":[1,2,3,4,0,19],
		"נענע10":[1,2,3,4,0,26],
		"אנציקלופדיה ynet":[27,3,28,4],
		"תדהר":[29,13,27],
		"אנשים ישראל":[1,2,3,4],
		"אתר חיל האוויר":[1,2,3,4],
		"בלדד השוחי":[3,2,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],
		"פנאי פלוס": [1,2,3,4,0,5,25],
		"עיתונות יהודית היסטורית 2": [43,44,1,2,22,3,7,0,23],
		"Iucnredlist": [45,3],
		"העין השביעית": [1,34,6,4,25],
		"One": [1,2,3,4]
	};
	for (var key in localtemplatesDic)
		for (var i in localtemplatesDic[key])
			if (typeof(localtemplatesDic[key][i]) == "number")
				localtemplatesDic[key][i] = constants[localtemplatesDic[key][i]];
	if (typeof privateTemplates === "object")
		localcopyAttributes(localtemplatesDic, privateTemplates);
	return localtemplatesDic;
}

function localnamedParams(templateName) {
	var allNamedParam = {
		'בלדד השוחי': [['משתנה ראשון', 'כותרת משתנה ראשון'], ['משתנה שני', 'כותרת משתנה שני']]
	};
	return allNamedParam[templateName] || [];
}

function localtemplateRegex(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]},
		"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:[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},
		"פנאי פלוס": {regex: /ynet\.co\.il\/([^\/]+)\/(\d+),7340,L-(\d+),00\.html/i, params:[7,6,3]},
		"עיתונות יהודית היסטורית 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*)\.html/, params: [3]}
	}

	// these guys are all the same - it's best to handle them as such.
	var historic = {"דבר": "DAV", "מעריב": "MAR", "הצבי": "HZV", "הצפירה": "HZF", "המגיד": "MGD", "המליץ": "HMZ", "חבצלת": "HZT", "PalPost": "PLS"};
	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, '/']]};
	for (var template in historic) {
		var lr = localcopyAttributes({}, histregex);
		lr.regex =  new RegExp(lr.regex.source.replace("HISTNAME", historic[template]));
		regexes[template] = lr;
	}
	if (typeof privateRegexes === "object")
		localcopyAttributes(regexes, privateRegexes);
	return regexes[templateName];
}

function localaddFiledToTable(doc, table, param) {
	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 = localcopyAttributes(doc.createElement("input"), {type: "text", maxLength: 120, doc: doc});
	field.onkeyup = field.onmouseup = field.onfocus = field.onblur = localupdatePreview;
	field.style.width = "20em";
	cell = row.insertCell(-1) || row.cells[1];
	cell.appendChild(field);
	return field;
}

function localpopupPredefinedLinkTemplate(templateName, paramList, regexDict) {
	var namedParamsList = localnamedParams(templateName);
	var height = 160 + 20 * (paramList.length + namedParamsList.length) + (regexDict ? 60 : 0);
	for (i in paramList)
		height += 16 * Math.floor(paramList[i].length / 24);
	var top = (screen.height - height) / 2, left = (screen.width - 550) / 2;
	var popup = window.open("", "", "resizable=1,height="+height+",width=550,left="+left+",top="+top);
	var doc = popup.document;
	doc.problematic = regexDict && regexDict.problematic;
	localcopyAttributes(doc, { title: " הוספת תבנית: " + templateName, dir: "rtl", templateName: templateName, allFields:[] } );
	var body = doc.body;
	if (regexDict) {
		body.appendChild(doc.createTextNode('הדביקו את הקישור כאן:'));
		var b = doc.createElement("input");
		b.urlInput = doc.createElement("input");
		localcopyAttributes(b.urlInput, { type: "text", maxLength: 600 } );
		b.urlInput.style.width = "12em";
		body.appendChild(b.urlInput);
		localcopyAttributes(b, {type: "button", value: "חילוץ פרמטרים מהקישור", regexDict: regexDict, doc: doc, update: localupdatePreview });
		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);
			if (matches)
				for (var i = 1; i < matches.length; i++) {
					var fieldIndex = this.regexDict.params[i-1]; //parameters are counted from one, we count from 0.
					if (fieldIndex && this.doc.allFields[fieldIndex-1])
						this.doc.allFields[fieldIndex-1].value = matches[i];
				}
			this.update();
		}
		body.appendChild(b);
		body.appendChild(doc.createElement("hr"));
	}
	var table = doc.createElement("table");
	for (var i in paramList) {
		var param = paramList[i];
		if (param.length == 0) { // this allow defining an empty parameter. by use of a "pseudo field".
			doc.allFields.push({value:""});
			continue;
		}
		doc.allFields.push(localaddFiledToTable(doc, table, param));
	}
	doc.namedParFields = [];
	for (var i in namedParamsList) {
		var np = namedParamsList[i];
		doc.namedParFields.push([np[0], localaddFiledToTable(doc, table, np[1])]);
	}
	body.appendChild(table);
	body.appendChild(doc.createElement("p"));
	var p = doc.createElement("p");
	var checkboxes = {refCheckBox: " הערת שוליים:", listCheckBox: " פריט ברשימה:"}
	for (var box in checkboxes) {
		p.appendChild(doc.createTextNode(checkboxes[box]));
		doc[box] = localcopyAttributes(doc.createElement('input'), {type: "checkbox", doc: doc, onchange: localupdatePreview});
		p.appendChild(doc[box]);
	}
	body.appendChild(p);
	body.appendChild(p = doc.createElement("p"));
	localcopyAttributes(p.style, {background: "blue", color: "white", fontSize: "0.85em"} );
	p.appendChild(doc.previewNode = doc.createTextNode(' '));
	body.appendChild(doc.createElement("p"));
	b = localcopyAttributes(doc.createElement("input"), {type:"button", value:"אישור", doc: doc, popup: popup});
	doc.problematic = regexDict && regexDict.problematic && true;
	b.onclick = function() {
		insertTags("", localcreateTemplate(this.doc), "");
		this.popup.close();
	}
	body.appendChild(b);
	b = localcopyAttributes(doc.createElement("input"), {type: "button", value: "ביטול", popup: popup, onclick: function(){this.popup.close();}});
	body.appendChild(b);
	doc.refCheckBox.onchange();
}

function localfireLinkTemplatePopup(templateName) {
	var linkTemplates = localknownLinkTemplates();
	var templateParams = linkTemplates[templateName];
	if (templateParams && templateParams.constructor == Array && templateParams.length > 0)
		localpopupPredefinedLinkTemplate(templateName, templateParams, localtemplateRegex(templateName));
}

function localcreateSortedTemplatesList() {
	var fullList = localknownLinkTemplates();
	var names = [], hnames = [];
	for (x in fullList)
		if (x.match(/^[a-zA-Z]/))
			names.push(x);
		else
			hnames.push(x);
	hnames.sort();
	names.sort(function(a,b){var la=a.toLowerCase(),lb=b.toLowerCase();return la>lb?1:la<lb?-1:0;});
	return hnames.concat(names);
}

function localcreateLinkTemplatesSelections() {
	var select = document.createElement("select");
	select.onchange = function() {
		localfireLinkTemplatePopup(this.value);
		this.selectedIndex = 0;
		return false;
	}
	select.options.add(new Option("אשף תבניות קישורים", ""));
	var allnames = localcreateSortedTemplatesList();
	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 localupdatePreview() { this.doc.previewNode.data = localcreateTemplate(this.doc); }

function localadvancedFire(context) {
	localfireLinkTemplatePopup(this.template);
}

function localcreateAdvanceToolKit() {
    var gadget = {label: 'אשף תבניות קישורים', type: 'select', list: []};
	var templatesList = localcreateSortedTemplatesList();
	for (var i in templatesList)
        gadget.list.push({label: templatesList[i], action: {type: 'callback', execute: localadvancedFire, 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(localcreateAdvanceToolKit);
if (wgAction == 'edit')
	hookEvent("load", localcreateLinkTemplatesSelections);