Участник:Жеводанский зверь/monobook.js

Материал из Lurkmore
Версия от 17:20, 23 января 2010; imported>Жеводанский зверь
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
window.addEventListener("DOMContentLoaded",function(){
$=jQuery;
$(function(){
	// Helpers
	function postEditForm(form,submit,action,callback) {
		var req='',boundary = '--------ololololo';
		function addData(n,v) {req+='--'+boundary+'\nContent-Disposition: form-data; name="'+n+'"\n\n'+(v||'')+'\n'}
		
		$(form[0].elements).each(function(){
			switch(this.type){
				case'submit':break;
				case'checkbox':if(!this.checked)break;
				default:addData(this.name,this.value)
			}
		})
		addData(submit,submit);
		req+='--'+boundary
		$.ajax({
			type:'POST',
			url:action,
			contentType:'multipart/form-data; boundary='+boundary,
			data:req,
			processData:false,
			success:function(s){$('body').css('cursor','default');callback(s)},
			error:function(s){$('body').css('cursor','default');alert('Error '+textstat+'\nWhile sending data to '+action+'\n'+'Request body:\n'+req)}
		})
	}
	// -----

	// Edit tools
	var TabSwitchTimer=null;
	var TabSwitchGlobState=0;

	var MyEditTools = {
	  extraCSS : "\
		#switcher { font-family: sans-serif; }\
		#switcher div          { padding: 0px 3px; top: 1px; position: relative; z-index:3; margin: 0 0.3em 0 0; overflow-y: visible; background: #ffffff; border: 1px solid #aaaaaa; display: inline; display: inline-block; margin-right: 2px; margin-left: 2px; font-size: 95%; cursor:pointer;}\
		#switcher div.selected { padding: 3px 3px 0px 3px; font-weight: normal; border: 1px solid #fabd23; border-bottom: none; top: 2px; margin-right: 2px; margin-left: 2px; background-color: #ffffff; text-decoration: none;}\
		#switcher div.fixed    { padding: 2px 3px 0px 3px; font-weight: bold; border: 1px solid #009933; border-bottom: dotted 1px #009933; top: 1px; margin-right: 2px; margin-left: 2px; }\
		#switcher div u { text-decoration:none; }\
		#switcher div.swoff { font-weight: bold; float:right; text-decoration: underline; color: blue; border: none; }\
		#switcher div.swon { font-weight: bold; float:right; text-decoration: underline; color: blue; }\
		#switcher div#pageHelp { padding-left: 10pt; border: none; font-weight: bold; float:right; text-decoration: underline; color: blue; }\
		#editpage-specialchars table { width: 100%; border:solid 1px #aaaaaa; }\
		#editpage-specialchars table tr { z-index: 0; }\
		#editpage-specialchars table tr td:first-child { width: 9em; }\
		#editpage-specialchars table tr.first { height: 9ex; }\
		#editpage-specialchars table tr.visible { display: table-row; }\
		#editpage-specialchars table tr.hidden { display: none; }\
	  ",
	  
	  updateFirstVisible : function() {
		$('.first').removeClass('first'); $("#editpage-specialchars table tr:visible").eq(0).addClass('first')
	  },
	  
	  setAll : function(t) {
		var rows=$('#editpage-specialchars table tr'),sw=$("#switcher div");
		if(t){
			var cl=t>0?"visible":"hidden";rows.each(function(i){if(!TabSwitchGlobState)$(this).data('prevstate',this.className);this.className=cl})
			var cl=t>0?"fixed":"";sw.each(function(i){if(!TabSwitchGlobState)$(this).data('prevstate',this.className);this.className=cl})
		} else {
			rows.each(function(i){this.className=$(this).data('prevstate')||''})
			sw.each(function(i){this.className=$(this).data('prevstate')||''})
		}
		TabSwitchGlobState=t;
		$('#pageShowAll').attr('class',t>0?'swon':'swoff');$('#pageHideAll').attr('class',t<0?'swon':'swoff');
		MyEditTools.updateFirstVisible();
	  },
	  
	  clearTimer : function(){
		if(TabSwitchTimer){window.clearTimeout(TabSwitchTimer);TabSwitchTimer=null}
	  },
	  
	  clearSelected : function() {
		$('#switcher div.selected').removeClass('selected')
		$('#editpage-specialchars table tr.selected').removeClass('visible').addClass('hidden').removeClass('selected');
	  },
	  
	  init : function() {
		if(!$('#editpage-specialchars').size())return;
		
		$('#editpage-specialchars').css('border',"none")
		
		var switcher=$('<div id="switcher"/>').insertBefore($("#editpage-specialchars table"));
		var rows=$("#editpage-specialchars table tr");
		rows.each(function(i){
			var id="page"+i,td=$('td:first',this);
			var row=$(this).attr('id','r'+id).addClass(i==0?"visible":"hidden").toggleClass("first",!i).toggleClass("selected",!i);
			var sw=$('<div/>')
				.attr("id","sw"+id).html((td.html()||'').replace(/:/,''))			
				.hover(function(e){
					MyEditTools.clearTimer();
					if(sw.hasClass("fixed")) return;
					TabSwitchTimer=window.setTimeout(function(){
						MyEditTools.clearSelected();
						sw.addClass('selected'); row.addClass('selected').removeClass('hidden').addClass('visible');
						MyEditTools.updateFirstVisible();
					},150);
				},MyEditTools.clearTimer)
				.click(function(e){
					MyEditTools.clearTimer();
					if(!sw.hasClass('fixed')) {
						sw.removeClass("selected").addClass("fixed");
						row.removeClass("selected").removeClass("hidden").addClass("visible");
					} else {
						MyEditTools.clearSelected();
						sw.removeClass("fixed").addClass("selected");
					}
					MyEditTools.updateFirstVisible();
				})
				.appendTo(switcher)
				.toggleClass("selected",!i)
		});
		
		with(switcher){
			append('<div id="pageHelp"><a href="http://lurkmore.ru/Lurkmore:FAQ">Справка</a></div>')
			append($('<div id="pageHideAll" class="swoff">Hide All</div>').click(function() {
				MyEditTools.clearTimer();MyEditTools.setAll(TabSwitchGlobState<0?0:-1);
			}))
			append($('<div id="pageShowAll" class="swoff">Show All</div>').click(function() {
				MyEditTools.clearTimer();MyEditTools.setAll(TabSwitchGlobState>0?0:1);
			}))
		}

		$.globcss(MyEditTools.extraCSS);
		$('#toolbar').before($('#editpage-specialchars'));
	  }
	};
	// -----

	// Misc UI tweaks
	if(window.location.search.match('action=render')){
		wgScript="/index.php";
		wgNamespaceNumber=0;
		wgPageName=window.location.search.replace(/title=(.*)?&/,'$1')
		wgAction='render'
	}
	
	if(wgAction=='edit')MyEditTools.init()
	var r=$('#n-recentchanges');r.html((r.html()||'').replace("Свежие правки","Несвежие правки"));
	$('#p-logo a').css('background-image',"url('/images/6/65/Magenlurk.png')")
	if(location.href.match(/diff=/))
		$('#p-cactions .pBody ul').append('<li><a href="'+location.href.replace(/^(.+\?).*&?(diff=(?:\d+|prev|next)).*?(&oldid=\d+)?.*$/,"$1$2$3")+'">diff</a></li>')
	// -----

	// Style fixes
	$('dl:odd').css({'border-top':'solid 1px #F0F080','border-left':'solid 1px #F0F080','background':'#F8FCF0'});$('dl:even').css('background','#F8FCFE');
	$.globcss(":target+*{background:#def}ol.references{display:none}.tooltip{overflow:hidden;width:40ex;font-size:90%;border-width:1px 2px 2px 1px;border-style:solid;padding:2px;background:#ffb;position:absolute;display:none;z-index:9999}")
	$.globcss(".lm_b_link a{color:#FF6600}.bpost:target{background-color:#eedacb !important;border:#ee6600 dashed 2px !important}");
	// -----
		
	// Image and movies pop-ups
	_createImgPopups($('.thumb .image'),function(e){var f=e.find('img').attr('src');if(f.match("thumb/"))f=f.replace("thumb/","").replace(/(.*)\/.*/,'$1');return{full:f,title:e.attr('title')}});
	$('object').each(function(){
		var w=800, h=600;
		var em=$(this).find('embed').clone().width(w).height(h);
		var dlg=$('<div/>').append(em).dialog({width:w,height:h+18,resizable:true,autoOpen:false});
		$(this).replaceWith(
			$('<img/>')
				.attr('src',em.attr('src').replace(/.*\/(.*)/,'http://i.ytimg.com/vi/$1/default.jpg'))
				.width($(this).attr('width')).height($(this).attr('height')-16).css('border','solid 3px red')
				.click(function(e){dlg.dialog('open');$(this).effect('transfer',{to:dlg.parent()},300)})
		);
	});
	// -----
	
	// Refoyobstvo lol
	var baaaaad=$('.references li,s').size();
	if(baaaaad>10) {
		var warning=$('<div class="ui-state-error"/>')
			.html('Статья подозрительно похожа на говно!<br/><span style="font-size:80%;">Общее количество рефов и страйков: '+baaaaad+'. </span>');
		$('span',warning).append($('<a/>').attr('href',wgScript+'?'+$.param({title:wgPageName,action:'edit'})).text("Исправить?"));
		$('#content').prepend(warning)
	}
	// -----
	
	// Ref tooltips	
	$('.reference a').live('click',function(e){_ev(e);var x=$(this).addClass('areference'),par=x.parent(),i=$('.tooltip').hide(250),o=par.offset(),l=o.left,t=o.top,b=$('body'),mh=b.height(),mw=b.width(),c=$(x.attr('href')).clone().find('a:first').remove().end().html();if(!i.size())i=$('<div/>').addClass('tooltip');i.appendTo(b).queue(function(){i.empty().append(c).css({'left':l-((l+i.width()>=mw)&&i.width()),'top':t-((t+i.height()>=mh)&&i.height())}).dequeue()}).show(250)});
	$(window).click(function(e){if(!($(e.target).hasClass('areference')||$(e.target).hasClass('tooltip')))$('.tooltip').hide(250);});
	// -----
	
	// Live preview
	if(wgAction=="edit") {
		$('#wpPreview').click(function(e) {
			if(e.ctrlKey) return;
			_ev(e); 
			var t=$("#wpTextbox1"),txt=t.val(), sel=t.getSelection();
			if(sel.length) t.val(sel.text)
			postEditForm($("#editform"),'wpSave',wgScript+'?'+$.param({title:wgPageName,action:'submit'})+'&live',function(d){
				var p=$($('preview',d).text()).wrapAll('<div/>').parent();
				$('h2:first,.previewnote',p).remove()
				p.css({'overflow':'auto','background':'white','padding':'5px'}).dialog({height:600,width:800})
			})
			t.val(txt)
		})
	}
	// -----
})},false);