מדיה ויקי:Common.js/externalsmaker.js

מתוך חב"דפדיה, אנציקלופדיה חב"דית חופשית
גרסה מ־20:45, 12 באוגוסט 2014 מאת שמוליק-ויקיפדיה (שיחה | תרומות) (הוספת תמיכה באתרים שבוקשו בחב"דפדיה:פיתוח התשתית, חלק מהתבניות לא קיימות עדיין)
קפיצה לניווט קפיצה לחיפוש

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
function wikiit() {

	function dateFormat(dateArr)
	{
		var m = ["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"];
		if (dateArr instanceof Array)
		{
			if (dateArr.length != 3)
				return '';

			dateArr[1] = m[Number(dateArr[1])-1];
			if (Number(dateArr[2])<=50)
				dateArr[2]=20+dateArr[2];
			else if (Number(dateArr[2])>=50&&Number(dateArr[2])<100)
				dateArr[2]=19+dateArr[2];

			if (dateArr[0].charAt(0) == '0')
				dateArr[0] = dateArr[0].substring(1, dateArr[0].length);

			dateArr = dateArr[0]+" ב"+dateArr[1]+" "+dateArr[2];
		}
		return jQuery.trim(dateArr);
	}

 function dateFormatShortHeb(dateArr)
	{
		var m = ["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"];
		if (dateArr instanceof Array)
		{
			if (dateArr.length != 3)
				return '';

      if (dateArr[1][dateArr[1].length-1] == '\'')
      {
        for (i in m)
          if (m[i].indexOf(dateArr[1].substr(0,dateArr[1].length-1)) == 0)
          {
            dateArr[1] = m[i];
            break;
          }
      }

			if (Number(dateArr[2])<=50)
				dateArr[2]=20+dateArr[2];
			else if (Number(dateArr[2])>=50&&Number(dateArr[2])<100)
				dateArr[2]=19+dateArr[2];

			if (dateArr[0].charAt(0) == '0')
				dateArr[0] = dateArr[0].substring(1, dateArr[0].length);

			dateArr = dateArr[0]+" ב"+dateArr[1]+" "+dateArr[2];
		}
		return jQuery.trim(dateArr);
	}

	function engDateParse(engDate)
	{
		var m = ["January" , "February" , "March" , "April", "May", "June", "July", "August", "September", "October","November", "December"];
		engDate = engDate.match(/(\w+) (\d+), (\d+)/);
		return [engDate[2], (m.indexOf(engDate[1]) + 1) , engDate[3] ];
	}

	var ATags = [/<a .*?>/gi, /<\/a>/gi];

	function match (str, expr){str = str?str.match(expr):str; return (str&&str.length>1)?str[1]:'';}

  function getParameterByName(name)
  {
    /* http://james.padolsey.com/javascript/bujs-1-getparameterbyname/ */
    var match = RegExp('[?&]' + name + '=([^&]*)')
                    .exec(window.location.href);
    return match && decodeURIComponent(match[1].replace(/\+/gi, ' '));
  }

	var data = [
		{
			hostname: 'www.chabad.info',
			params: [
				{ str: 'קישור חבד אינפו' },
				{ urlparam: 'id' },
				{ telem: 'div.art_title' },
				{ telem: 'div.art_author' },
				{ telem: 'div.art_time_id', match:/(\d+\.\d+\.\d+)/, split:'.', func:dateFormat}
			]
		},
		{
			hostname: 'www.chabad.co.il',
			params: [
				{ str: 'קישור חבד בישראל' },
				{ urlparam: 'topic' },
				{ urlparam: 'article' },
				{ telem: 'div.art_title' },
				{ telem: 'div.art_author' },
				{ telem: 'div.art_date', match:/(\d+\.\d+\.\d+)/, split:'.', func:dateFormat }
			]
		},
		{
			hostname: 'hageula.com',
			params: [
				{ str: 'קישור הגאולה' },
				{ str:  location.href, match: /hageula.com\/news\/([^/]+)\/\d+.html/ },
				{ str:  location.href, match: /hageula.com\/news\/[^/]+\/(\d+).html/ },
				{ telem: 'h1:first' },
				{ elem: ['a[href^="/author"]', 'parent', 'text']},
				{ telem: 'table.Aborder tr:first td:last div', split:'.', func:dateFormat}
			]
		},
		{
			hostname: 'col.org.il',
			params: [
				{ str: 'קישור חבד און ליין' },
				[
          { urlparam: 'artID'},
          { str:location.href, match:/_(\d+)\.html?$/}
        ],
				{ telem: 'table:eq(6) div:first' },
				{ str: '' }, //author
				{ telem: 'table:eq(6) div:eq(1)', match:/\(יום .+, (.*?)\)/ }
			]
		},
		{
			hostname: 'www.shturem.net',
			params: [
				{ str: 'קישור שטורעם' },
				{ urlparam:'section' },
				{ urlparam:'id' },
				{ telem: 'artTitle' },
				{ telem: 'artReporter' },
				{ telem: 'artDate' }
			]
		},
		{
			hostname: 'www.chabad.org.il', hrefmatch:/Magazines/,
			params: [
				{ str: 'קישור התקשרות צאח' },
				{ urlparam: 'CategoryID' },
				{ urlparam: 'ArticleID' },
				{ telem: "a.navigationTab:contains('התקשרות')" , match:/(\d+)/ },
				{ telem: "CategoryTitle" },
				{ telem: '.bodyinsmall' , match:/מאת:?(.*?)\n/ },
			]
		},
		{
      hostname: "www.scribd.com",
      params: [
        { str: 'קישור בית משיח'},
        { func: function(){return $(".pager input").val()+1;} },
        { telem: "h1.book_title"},
        { func: function(){return prompt("שם כתב")}},
        { func: function(){return prompt("כותרת כתבה")}}
      ]
		},
		{
			hostname: /otzar770.com/,
			params: [
				{ str: 'קישור אוצר 770' },
				[
          { urlparam:"nBookId"},
          { str:'', func: function(_){return $($($("frame[name='site']")[0].contentWindow.document)
                                .find("frame[name='main']")[0].contentWindow.document)
                                .find("iframe#mainArea").contents().get(0).location.href.match(/nBookId=(\d+)/)[1]}
          }
        ]
        [
          { urlparam:"nPageNumber"},
          { str:'', func: function(_){return $($($($("frame[name='site']")[0].contentWindow.document)
                                .find("frame[name='main']")[0].contentWindow.document)
                                .find("iframe#mainArea").contents()
                                .find("frame[name='navFrame']")[0]
                                .contentWindow.document).find("input[name=nCurrentPage]").val()}}
        ],
				{str:'', func: function(_){
                              var main = $("frame[name='site']").length ?
                                $($($("frame[name='site']")[0].contentWindow.document).find("frame[name='main']")[0].contentWindow.document):
                                document;
                              var title = $($(main)
                              .find("iframe#mainArea").contents()
                              .find("frame[name='navFrame']")[0]
                              .contentWindow.document).find("#titleSpan").text();
                              rm = ["(מוגה)","(בלתי מוגה)", /^מאמרים/g, "ספרים שונים", "(Edited)","(Unedited)"];
                              for (x in rm) title = title.trim().replace(rm[x],'');
                              return title},
        },
        {func:function(_){return prompt("האדמו\"ר מחבר הספר?");}}
			]
		},
	];

  var isFound = false;
  for (var i = 0; i < data.length; i++)
  {
    if (location.hostname.match(data[i].hostname)
    && (!data[i].hrefmatch || location.href.match(data[i].hrefmatch))
    && (!data[i].condition || data[i].condition())
    )
    {
      var params = [];
      var k = 0;
      for (var j = 0; j < data[i].params.length; j++)
		try {
			var curParam = (data[i].params[j] instanceof Array)?(data[i].params[j][k]):(data[i].params[j]);
			params[j] = '';
			if (typeof curParam.str != "undefined")
			  params[j] = curParam.str;
			else if (typeof curParam.urlparam!= "undefined")
                          params[j] = getParameterByName(curParam.urlparam)||"";
			else if (typeof curParam.elem != "undefined")
			{
			  if (curParam.elem instanceof Array)
			  {
				params[j] = $(curParam.elem[0]);
				for(var elemIdx = 1; elemIdx < curParam.elem.length; elemIdx++)
				{
				  var func = curParam.elem[elemIdx].split(',');
				  params[j] = params[j][func[0]](func.length>0?func[1]:null);
				}
				if (typeof(params[j]) != "string")
          params[j] = params[j].html();
			  }
			  else
				params[j] = $(curParam.elem).html();
			}
			else if (typeof curParam.elements != "undefined")
			{
			  params[j] = $(curParam.elements[0]).map(function(el){return $(this).html();}).toArray().join(curParam.elements[1]);
			}
			else if (typeof curParam.telements != "undefined")
			{
			  params[j] = $(curParam.telements[0]).map(function(el){return $(this).text();}).toArray().join(curParam.telements[1]);
			}
			else if (typeof curParam.telem != "undefined")
			{
				params[j] = $(curParam.telem).first().text();
			}

			if (typeof curParam.match != "undefined")
			{
			  if (!(curParam.match instanceof Array))
				params[j] = match(params[j], curParam.match);
			  else for (patIdx = 0; patIdx < curParam.match.length; patIdx++)
			  {
				temp = match(params[j], curParam.match[patIdx]);
				if (temp != '')
				{
				  params[j] = temp;
				  break;
				}
			  }
			}


			if (typeof curParam.remove != "undefined")
			  for (var removeIdx = 0; removeIdx < curParam.remove.length; removeIdx++)
				params[j] =  params[j].replace(curParam.remove[removeIdx],"");

			if (typeof curParam.split != "undefined")
			  params[j] =  params[j].split(curParam.split);


			if (typeof curParam.func != "undefined")
			{
			  if (!(curParam.func instanceof Array))
				curParam.func = [curParam.func];
			  for (var funcIdx = 0; funcIdx < curParam.func.length; funcIdx++)
			  {
				params[j] = curParam.func[funcIdx](params[j]);
			  }
			}

			if (typeof params[j] == "string")
			{
            params[j] = jQuery.trim(unescape(params[j].replace(/&nbsp;|\u202B|\u202C/gm," ").replace(/\s+/gm, ' '))
                                                            .replace("=","{{=}}")
                                                            .replace(/(\|\|?)/gm,function(x){return "{{" + x.replace(/\|/g,"!") + "}}";}));
      }
      else if (jQuery.isArray(params[j]))
      {
        params[j] = jQuery.trim(params[j].join("|"));
      }

			if (typeof curParam.prefix != "undefined")
				params[j] = curParam.prefix + params[j];

 			if (typeof curParam.defvalue != "undefined" && params[j] == curParam.defvalue)
				params[j] = '';

			if (typeof curParam.shouldnt != "undefined" && typeof params[j] == "string" && params[j].match(curParam.shouldnt))
				params[j] = '';


			if ((params[j] == '') && (data[i].params[j] instanceof Array) && (k < data[i].params[j].length - 1))
			{
				k++;
				j--;
				continue;
			}

			k = 0;

		}
			catch(e) {}


		var minimum = (typeof data[i].minimum != "undefined") ? (data[i].minimum) : (0);

		while (params[params.length-1]=="" && params.length > minimum) //remove all last empty params
			params.pop();

		prompt("Your template:", '{{' + params.join('|') + '}}');
		isFound = true;
		break;
	}
  }

  if (!isFound)  alert("This site\\page isn't supported by the bookmarklet.");
}
(function ()
{
	if (typeof(jQuery)!="undefined")
		window.$ = jQuery;
	var s=document.createElement('script');
	s.setAttribute('src',"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
	s.onload=wikiit;
	try {
	 document.getElementsByTagName('body')[0].appendChild(s);
	}
	catch (e) {
	 document.getElementsByTagName('head')[0].appendChild(s);
	}
	
})();