Участник:Tachikoma/Sandbox.js
Материал из Lurkmore
Перейти к навигацииПерейти к поиску
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
/** Tabbed Edittools *************************************
*
* Description: Делает из таблицы edittools страницы с табами.
* Made by: Tachikoma, Anotubus
*/
(function(){
function isClass(e,c) { return e.className.match(new RegExp("\\b"+c+"\\b")) }
function addClass(e,c) { if(!isClass(e,c)) e.className+=c+" " }
function remClass(e,c) { e.className=e.className.replace(new RegExp("\\b"+c+"\\b ?"),"") }
function replClass(e,o,n) { remClass(e,o); addClass(e,n) }
var TabSwitchTimer=null;
var TabSwitchState=[];
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-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() {
var first=document.querySelector(".first");
if(first) remClass(first,"first");
var rows=document.getElementById("editpage-specialchars").getElementsByTagName("table")[0].getElementsByTagName("tr");
for(i=0;i<rows.length;i++) if(isClass(rows[i],"visible")) { addClass(rows[i],"first"); return; }
},
setAll : function(t) {
var table=document.getElementById("editpage-specialchars").getElementsByTagName("table")[0];
var rows=table.getElementsByTagName("tr");
var sw=document.getElementById("switcher").getElementsByTagName("div");
if(t){
for(i=0;i<rows.length;i++) {
if(!TabSwitchGlobState)TabSwitchState[i]=[rows[i].className,sw[i].className];
rows[i].className=t>0?"visible":"hidden";
sw[i].className=t>0?"fixed":"";
};
} else {
for(i=0;i<rows.length;i++) {
rows[i].className=TabSwitchState[i][0];
sw[i].className=TabSwitchState[i][1];
}
}
TabSwitchGlobState=t;
document.getElementById("pageShowAll").className=t>0?"swon":"swoff";
document.getElementById("pageHideAll").className=t<0?"swon":"swoff";
MyEditTools.updateFirstVisible();
},
clearTimer : function(){
if(TabSwitchTimer)window.clearTimeout(TabSwitchTimer); TabSwitchTimer=null;
},
clearSelected : function() {
if(TabSwitchSelected!="") {
var sw0=document.getElementById("sw"+TabSwitchSelected);
var row0=document.getElementById("r"+TabSwitchSelected);
remClass(sw0,"selected");replClass(row0,"visible","hidden")
};
},
init : function() {
function createHoverCallback(i) {
return function() {
MyEditTools.clearTimer();
var sw=document.getElementById("sw"+i); var row=document.getElementById("r"+i);
if(isClass(sw,"fixed")) return;
TabSwitchTimer=window.setTimeout(function(){
MyEditTools.clearSelected();
addClass(sw,"selected");replClass(row,"hidden","visible");
TabSwitchSelected=i;
MyEditTools.updateFirstVisible();
}, 50);
};
};
function createOutCallback(i) {
return function() {
MyEditTools.clearTimer();
};
};
function createClickCallback(i) {
return function() {
MyEditTools.clearTimer();
var sw=document.getElementById("sw"+i); var row=document.getElementById("r"+i);
if(!isClass(sw,"fixed")) {
replClass(sw,"selected","fixed");
replClass(row,"hidden","visible");
TabSwitchSelected="";
} else {
MyEditTools.clearSelected();
replClass(sw,"fixed","selected");
TabSwitchSelected=i;
}
MyEditTools.updateFirstVisible();
};
};
var edittools_div=document.getElementById("editpage-specialchars");
if(!edittools_div)return;
var switcher=document.createElement("caption");
switcher.setAttribute("id","switcher");
switcher.style.textAlign = "left";
var table=edittools_div.getElementsByTagName("table")[0];
var rows=table.getElementsByTagName("tr");
for(i=0;i<rows.length;i++) {
var d=document.createElement("div");
var td=rows[i].getElementsByTagName("td")[0];
var id="page"+i;
d.setAttribute("id","sw"+id);
rows[i].setAttribute("id","r"+id);
d.innerHTML=td.innerHTML.replace(/:/,'');
addHandler(d, "mouseover", createHoverCallback(id));
addHandler(d, "mouseout",createOutCallback(id));
addHandler(d, "click",createClickCallback(id));
switcher.appendChild(d);
addClass(rows[i], i==0?"visible":"hidden");
if(i==0)addClass(d,"selected");
};
TabSwitchSelected="page0";
/*
var d=document.createElement("div");
d.innerHTML = "<a href="http://lurkmore.ru/Lurkmore:FAQ">Справка</a>";
switcher.appendChild(d);
*/
var d=document.createElement("div");
d.setAttribute("id","pageShowAll");
addClickHandler(d, function() {
MyEditTools.clearTimer();
MyEditTools.setAll(TabSwitchGlobState>0?0:1);
});
d.innerHTML="Show All";
d.className="swoff";
switcher.appendChild(d);
var d=document.createElement("div");
d.setAttribute("id","pageHideAll");
addClickHandler(d, function() {
MyEditTools.clearTimer();
MyEditTools.setAll(TabSwitchGlobState<0?0:-1);
});
d.innerHTML="Hide All";
d.className="swoff";
switcher.appendChild(d);
edittools_div.style.border="none";
table.insertBefore(switcher, table.firstChild);
appendCSS(MyEditTools.extraCSS);
}
};
addOnloadHook(MyEditTools.init());
})();