Greasy Fork is available in English.
displays a channel as footer on all pages
当前为
// ==UserScript==
// @name dA_Channel_Footer
// @namespace dA_Channel_Footer
// @description displays a channel as footer on all pages
// @match *://*.deviantart.com/*
// @exclude *.deviantart.com/submit/*
// @version 1.3
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
/*
unevinout[t_, order_] :=
If[2 t/d < 1, c/2*(2 t/d)^order + b,
c/2*((2 t/d - 2)^order + 2) + b] /. {d -> 1, c -> 5, b -> 0}
evinout[t_, order_] :=
If[2 t/d < 1,
c/2*(2 t/d)^order + b, -c/2*((2 t/d - 2)^order - 2) + b] /. {d ->
1, c -> 5, b -> 0}
Plot[{unevinout[t, 3], evinout[t, 8]}, {t, 0, 1}]
*/
var settingsForm=null;
var disablescroll=false;
var barHeight=150;
var step=1;
var scrolInt;
// var DelayPerScroll=30;
var DelayOnRow=3000;
// var channel=3;
var el;
var defaultsite="http://www.deviantart.com/dailydeviations/"
var site=defaultsite;
if(typeof GM_getValue("site")!="undefined")site=GM_getValue("site");
if(typeof GM_getValue("disablescroll")!="undefined")disablescroll=GM_getValue("disablescroll");
if(typeof GM_getValue("barHeight")!="undefined")barHeight=GM_getValue("barHeight");
// if(typeof GM_getValue("channel")!="undefined")channel=GM_getValue("channel");
var parrowright="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAOCAYAAADE84fzAAAAtklEQVQ4jdXUvQ6CMBQF4D4Sg0tBKPIPhTYKii46+PYdOvQFjgOBGHFBaaI36fqdk+bmEodR2HrEYRQ0T0CLBG6Zwi1TeFUGj2fY1jn8poAvCgSyBNtXCA8cYcux62pExwbRqUHcC8S9QHKWSC4S8t7/EK6Mtosro+3iymi7uDL6D5sv/vNNFKy2LfzWwRfpgBNChvYr7fnUehyHUWzi4Gt81vo5YAxZilfXdkJn8LuQjw7VyzwAJ99H0kJrFxkAAAAASUVORK5CYII=";
var parrowleft="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAOCAYAAADE84fzAAAAs0lEQVQ4jdXUvQ6CMBQF4D4SA0tBfoQChUIbBa0uOvj2DAy8wHEw9X9RaKI36fqdk5ubEieisPWIE1GokwbbK7CdQqolUi2RbBskmwbLrkbcCsRrgWhVIVQlAskRNByLuoAvcvhVDq/M4JUZKGegBftBvB8HO3g/DnZwA8+O38P/1XzSzgOZQRy72a7FTcILTgi5tZ/pzq+wwU37qbibho+4CTAh1aH9GDfoC/wu5KuP6mnOpi1H0rwh70QAAAAASUVORK5CYII="
var aktpos=0;
var sscroll;
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex ;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
function scrollto(el,startP,endP,time){
// el.scrollLeft=start;
var t=0;
var dt=(endP-startP)>0?1:(endP==startP)?0:-1;
clearInterval(sscroll);
sscroll=setInterval(function(){
//LeftV[t_] := startP + (1.1*ArcTan[(time - totaltime/2)/(totaltime/10)]/(0.78*\[Pi]/2) + 1)*(stop - start)/2
// var fac1=( 0.78 * Math.PI / 2);
// var fac2=Math.atan((t-time/2)/(time/5)*1.1);
// var fac3=(endP-startP)/2;
// el.scrollLeft=startP+fac3*(fac2/fac1 +1);
if(t<time){
var fac1=(endP-startP)/2.0;
var fac2=2.0*t/time;
el.scrollLeft=fac1*(fac2<1?Math.pow(fac2,3):+1*(Math.pow(fac2-2,3)+2))+startP;
// If[2 t/d < 1, c/2*(2 t/d)^order + b, -c/2*((2 t/d - 2)^order - 2) + b]
t++;
// console.log(el.scrollLeft,startP,endP,t,time,dt,fac1,fac2);
}
// if(el.scrollLeft-startP<Math.abs(endP-startP)/2)
// el.scrollLeft=startP+Math.sign(endP-startP)*Math.pow(t,2);
// else
// el.scrollLeft=startP+Math.sign(endP-startP)*Math.pow(t-Math.abs(endP+startP),2);
// console.log(fac2,fac3*(fac2/fac1 +1),startP,endP);
// console.log(el.scrollLeft,startP,Math.abs(endP-startP)/2);
if(t>=time||(dt==1&&el.scrollLeft>=endP)||(dt==-1&&el.scrollLeft<=endP)){
// console.log(el.scrollLeft,endP,fac1,fac2,dt);
clearInterval(sscroll);
}
},20);
}
function scroller(){
if(disablescroll){return;};
var ul = el.getElementsByClassName('tt-a');
if(ul.length==0)return;
scrollto(el,el.scrollLeft,ul[aktpos].offsetLeft,50);//50 ticks, 20ms per tick -> 1s per animation
// console.log(aktpos,step,el.scrollLeft,ul[aktpos].offsetLeft);
if(ul[aktpos-0].offsetLeft>=el.scrollWidth-el.clientWidth)step=-1;
if(aktpos==0)step=1;
aktpos+=step;
}
GM_addStyle("#dA_Channel_Footer {padding-top:3px;height: "+barHeight+"px; overflow-y: hidden; overflow-x: hidden;text-align:left;white-space: nowrap; }"+
"#dA_Channel_Wrapper img.buts{position:absolute;cursor:pointer;position: absolute;margin-top:3px;}"+
"#dA_Channel_Wrapper img.leftbut{left:10px;}"+
"#dA_Channel_Wrapper img.rightbut{right:10px;}"+
"#dA_Channel_Wrapper div.tt-a{display: inline-flex;vertical-align: middle;}"+
// "#dA_Channel_Wrapper div.tt-a a.thumb img{height:120px;width:auto;}"+
"#dA_Channel_Wrapper div.channelHeader>a, #dA_Channel_Wrapper div.channelHeader>div {display:inline-block;float:none; margin-top:3px;}"+
"#dA_Channel_Footer div.stream>div{width:200px;white-space: normal;}"+
"#dA_Channel_Footer a.thumb{margin:auto!important;}"+
"div#output footer#depths div#dA_Channel_Wrapper div#dA_Channel_Footer div.tt-a.huge.tt-ismature.ta span.tt-w span.shadow a.thumb.ismature div.thumb_agegate{white-space: normal;}"+
"div#output footer#depths div#dA_Channel_Wrapper div#dA_Channel_Footer div.tt-a.sq.tt-freeform span.tt-w span.shadow a.thumb.lit{white-space: normal; height:"+(barHeight-10)+"px; }"+
"#dA_Channel_Footer_scrolling,#dA_Channel_Footer_Ch{cursor:pointer;}"+
"#dA_Channel_Footer_Setting_wrapper{display:none;position:fixed; left:0;top:0;bottom:0;right:0;z-index:99999;}"+
"#dA_Channel_Footer_Setting{position:absolute;width:200px;height:200px; margin:auto auto; left:0;top:0;bottom:0; right:0;background-color:#fff;border-radius:15px;padding:15px; border:1px solid green;}"+
"#dA_Channel_Footer_Setting dl{display:flex;flex-wrap:wrap;line-height:3em;}"+
"#dA_Channel_Footer_Setting dl dt{width:40%;}"+
"#dA_Channel_Footer_Setting dl dd{width:55%;margin-left:auto;}"+
"#dA_Channel_Footer_Setting dl dd input[type='text']{width:100%;}"+
"#dA_Channel_Footer_Setting div.buttons{display:flex;}"+
"#dA_Channel_Footer_Setting div.buttons div{user-select:none;cursor:pointer;flex:1;margin:0 20px;border:1px solid green; border-radius:5px; background-color:#dfd;text-align:center;padding:5px;}"+
"#dA_Channel_Footer_Setting div.buttons div:hover{background-color:#bfb}"+
"#dA_Channel_Footer_Setting div.buttons div:active{background-color:#ded}"+
"");
function showSettingsWindow(){
settingsForm=document.getElementById("dA_Channel_Footer_Setting_wrapper");
if(!settingsForm)return;
settingsForm.getElementsByClassName("cb_scrolling")[0].checked=!disablescroll;
settingsForm.getElementsByClassName("edit_height")[0].value=barHeight;
settingsForm.getElementsByClassName("edit_channel")[0].value=site;
settingsForm.style.display="block";
}
function start(data){
var text=data.responseText;
var channels=[]; //0: garbage. after that: index
var Pos=text.indexOf('<div class="channelHeader"');
//---------- convert source to list of displayed images.
/* old
while(Pos!=-1){
channels.push("<"+text.substring(0,Pos))
text=text.substring(Pos+1);
Pos=text.indexOf('<div class="channelHeader"');
}
Pos=text.indexOf('<div id="slots-preload"');
channels.push("<"+text.substring(0,Pos));
if(channel>channels.length-1)channel=channels.length-1;
*/
// console.log(text);
var virtWrap=document.createElement("div");
virtWrap.innerHTML=text;
// console.log(virtWrap);
var imgs=virtWrap.querySelectorAll("div.tt-a");
// console.log(imgs);
// Pos=text.indexOf("<td class=\"f\">")
// while(Pos!=-1){
// channels.push("<"+text.substring(0,Pos))
// text=text.substring(Pos+1);
// Pos=text.indexOf('<div class="channelHeader"');
// }
var zwitab="";
var remEl;
for(var i=0;i<imgs.length;i++){
// imgs[i].className+="tt-a";
if(imgs[i].className.indexOf("stash-tt-a")!=-1)continue;
remEl=imgs[i].querySelector(".tt-bb");
if(remEl!=null)remEl.parentNode.removeChild(remEl);
if(imgs[i].querySelector("span.details")==null){
imgs[i].querySelector("div.tt-a a.thumb img").style='height:'+(barHeight-10)+'px;width:auto;'; //DDs
}else{
imgs[i].querySelector("div.tt-a a.thumb img").style='height:'+(barHeight-10)+'px;width:auto;'; //thumbs with descr
}
zwitab+=" "+imgs[i].outerHTML;
}
// zwitab+="</tr></table>";
channels.push(zwitab);
// console.log(channels[0]);
//---------------------------
el=document.createElement("div");
el.id="dA_Channel_Footer";
el.innerHTML=channels[0];
var ul = el.getElementsByClassName('tt-a');
if(ul.length>0&&typeof ul[0].parentNode!="undefined")
for (var i = ul.length; i >= 0; i--) {
ul[0].parentNode.appendChild(ul[Math.floor(Math.random() * ul.length)]);
}
var wel=document.createElement("div");
wel.id="dA_Channel_Wrapper";
var channelheader=el.getElementsByClassName("channelHeader")[0];
var img;
img=document.createElement("a");
img.id="dA_Channel_Footer_scrolling";
img.onclick="return false;";
img.innerHTML="Settigs";//disablescroll?"enable scrolling":"disable scrolling";
if(typeof channelheader=="undefined"){channelheader=document.createElement("div");channelheader.className="channelHeader";}
channelheader.appendChild(img);
img.addEventListener("click", showSettingsWindow
/*function(){
disablescroll=!disablescroll;
GM_setValue("disablescroll",disablescroll);
document.getElementById("dA_Channel_Footer_scrolling").innerHTML=disablescroll?"enable scrolling":"disable scrolling";
if(disablescroll)clearInterval(scrolInt);else scrolInt=setInterval(scroller,DelayOnRow);
}
*/,false);
/*img=document.createElement("a");
img.id="dA_Channel_Footer_Ch";
img.onclick="return false;";
img.innerHTML="Channel: "+site;
channelheader.appendChild(img);
img.addEventListener("click",function(){
// channel=parseInt(prompt("Insert the channel-Index you would like to display!\nTo display the first Channel, use 1, 4th: 4 etc.\nTo see or change your current channel-settings, visit http://www.deviantart.com/channels/"));
// if(channel<1||isNaN(channel))channel=1;
// if(channel>channels.length-1)channel=channels.length-1;
// GM_setValue("channel",channel);
// disablescroll=true;
// aktpos=0;
// clearInterval(scrolInt);
// clearInterval(sscroll);
// var wel=document.getElementById("dA_Channel_Wrapper");
// wel.parentNode.removeChild(wel);
// start(data);
site= prompt("Please paste the URL to the search result you want to have displayed here ,e.g. http://www.deviantart.com/browse/all/photography/nature/landscapes/?q=beach ",site);
GM_setValue("site",site);
disablescroll=true;
aktpos=0;
clearInterval(scrolInt);
clearInterval(sscroll);
var wel=document.getElementById("dA_Channel_Wrapper");
wel.parentNode.removeChild(wel);
GM_xmlhttpRequest({
url: site,
method: "get",
onload:start
});
},false);
*/
img=document.createElement("img");
img.className='leftbut buts';
img.src=parrowleft;
channelheader.appendChild(img);
img.addEventListener("click",function(){
if(aktpos>0)aktpos--;
if(typeof ul[aktpos]=="undefined")return;
step=-1;
disablescroll=true;
GM_setValue("disablescroll",disablescroll);
// document.getElementById("dA_Channel_Footer_scrolling").innerHTML="enable scrolling";
scrollto(el,el.scrollLeft,ul[aktpos].offsetLeft,25); //25 ticks, 20ms/tick = 0.5s animation
},false);
img=document.createElement("img");
img.className='rightbut buts';
img.src=parrowright;
channelheader.appendChild(img);
img.addEventListener("click",function(){
// console.log(aktpos,ul[aktpos],ul.length,ul[aktpos].offsetLeft,el,el.scrollWidth-el.clientWidth);
if(aktpos<ul.length-1&&ul[aktpos].offsetLeft<el.scrollWidth-el.clientWidth)aktpos++;
if(typeof ul[aktpos]=="undefined")return;
step=1;
disablescroll=true;
GM_setValue("disablescroll",disablescroll);
// document.getElementById("dA_Channel_Footer_scrolling").innerHTML="enable scrolling";
scrollto(el,el.scrollLeft,ul[aktpos].offsetLeft,25);
},false);
wel.appendChild(channelheader);
wel.appendChild(el);
document.getElementById("depths").insertBefore(wel,document.getElementById("depths").firstChild);
scrolInt=setInterval(scroller,DelayOnRow);
settingsForm=document.createElement("div");
settingsForm.id="dA_Channel_Footer_Setting_wrapper";
settingsForm.innerHTML="<div id='dA_Channel_Footer_Setting'><h1>Settings</h1>"+
"<dl>"+
"<dt>Scrolling</dt><dd><input type='checkbox' class='cb_scrolling'/></dd>"+
"<dt>Height (px)</dt><dd><input type='text' class='edit_height'/></dd>"+
"<dt>Channel</dt><dd><input type='text' class='edit_channel'/></dd>"+
"</dl>"+
"<div class='buttons'>"+
"<div class='cancel'>Cancel</div>"+
"<div class='save'>Save</div>"+
"</div></div>";
document.body.appendChild(settingsForm);
settingsForm.getElementsByClassName("cancel")[0].addEventListener("click",function(){
document.getElementById("dA_Channel_Footer_Setting_wrapper").style.display="none";
},false);
settingsForm.getElementsByClassName("save")[0].addEventListener("click",function(){
disablescroll=!settingsForm.getElementsByClassName("cb_scrolling")[0].checked;
barHeight=settingsForm.getElementsByClassName("edit_height")[0].value;
site=settingsForm.getElementsByClassName("edit_channel")[0].value;
if(site=="")site=defaultsite;
GM_setValue("site",site);
GM_setValue("disablescroll",disablescroll);
GM_setValue("barHeight",barHeight);
document.getElementById("dA_Channel_Footer").style.height=barHeight+"px";
document.getElementById("dA_Channel_Footer_Setting_wrapper").style.display="none";
},false);
document.getElementById("dA_Channel_Footer").style.height=barHeight+"px";
}
// console.log(site);
GM_xmlhttpRequest({
url: site,
method: "get",
onload:start
});