Участник:Зелёный Кошак/edittools.js

Материал из Википедии — свободной энциклопедии
Страница персонального оформления. У этого JS-кода есть документация: Участник:Зелёный Кошак/edittools.Связанный CSS-файл: Участник:Зелёный Кошак/edittools.css.
После сохранения очистите кэш браузера.
/* <source javascript> */

var auto_comment = 0;

/* hasClass from en-wiki */
 
 var hasClass = (function () {
     var reCache = {};
     return function (element, className) {
         return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
     };
 })();


/** Tabbed Edittools *************************************
  *
  *  Description: Делает из таблицы edittools страницы с табами.
  *  Made by:  Tachikoma, Anotubus
  */

(function(){
	var TabSwitchTimer = null
	var TabSwitchGlobState = 0
	var MyEditTools = {
		
		 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').length) return

			$('#editpage-specialchars').css('border', "none")
			
			//var switcher = $('<div id="switcher"/>').insertBefore($("#editpage-specialchars table"))
            var switcher = $('<caption style="text-align:left" id="switcher"/>').prependTo($("#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()
						}, 50)
					}, 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="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)
				}))
			}

			$('#toolbar').before($('.mw-editTools'))
		}
	}

    $(MyEditTools.init);
})();

/** /Tabbed Edittools ************************************/

/* </source> */