Greasy Fork is available in English.

More Smileys Sidebar

Smiley Sidebar für das Forum http://mylittleforum.bplaced.net/

Skrip ini tidak untuk dipasang secara langsung. Ini adalah pustaka skrip lain untuk disertakan dengan direktif meta // @require https://update.greatest.deepsurf.us/scripts/5958/22264/More%20Smileys%20Sidebar.js

  1. // ==UserScript==
  2. // @name More Smileys Sidebar
  3. // @fullname More Smileys Sidebar für mylittleforum.bplaced.net
  4. // @author Merrx
  5. // @version 2013.02.12b
  6. // @include *mylittleforum.bplaced.net/*
  7. // @downloadURL http://merrx.bestpony.de/smiley/smile.user.js
  8. // @grant GM_getValue
  9. // @grant GM_setValue
  10. // @grant GM_deleteValue
  11. // @description Smiley Sidebar für das Forum http://mylittleforum.bplaced.net/
  12. // ==/UserScript==
  13.  
  14. // Smiley-Fix, sodass die Smileys mittig ausgerichtet werden
  15. var imgs = document.getElementsByTagName("img");
  16. for(var i = 0; i < imgs.length; i++) {
  17. if(imgs[i].src.indexOf("merrx.bestpony.de/smiley") >= 0)
  18. imgs[i].setAttribute("style", "vertical-align: middle; margin: 1px;");
  19. }
  20.  
  21. // Prüfen ob angemeldet
  22. if((document.getElementById('message') != null) || (document.getElementById('message_new') != null) || (document.getElementById('shout_data') != null) || (document.getElementById('smiley-sidebar') != null) ) {
  23.  
  24. // Bereitstellen der Lade und Speicherfunkionen, falls sie nicht vorhanden sind
  25. if (typeof GM_deleteValue == 'undefined') {
  26. // Natives Chrome und Opera abfangen, da Tampermonkey die Funktionen bereitstellt
  27. if((navigator.userAgent.search('Chrome') != -1) || (navigator.userAgent.search('Opera') != -1) ) {
  28. GM_getValue = function(name, defaultValue) {
  29. var value = window.localStorage.getItem(name);
  30. if (!value)
  31. return defaultValue;
  32. var type = value[0];
  33. value = value.substring(1);
  34. switch (type) {
  35. case 'b':
  36. return value == 'true';
  37. case 'n':
  38. return Number(value);
  39. default:
  40. return value;
  41. }
  42. }
  43.  
  44. GM_setValue = function(name, value) {
  45. value = (typeof value)[0] + value;
  46. window.localStorage.setItem(name, value);
  47. }
  48. }
  49. }
  50. // Seite in ein neues div schieben
  51. var site = document.createElement('div');
  52. document.body.insertBefore(site,document.body.firstChild);
  53. document.body.style.margin = "0px";
  54. while(document.body.children[1]) {
  55. site.appendChild(document.body.children[1]);
  56. }
  57. //Styleattribute des Containers der Hauptseite auslesen und in Variablen speichern
  58. //Diese werden später bei der Generierung der Sidebar verwendet. (by Rapti)
  59. function getStyle(x, styleProp) {
  60. if (x.currentStyle) var y = x.currentStyle[styleProp];
  61. else if (window.getComputedStyle) var y = document.defaultView.getComputedStyle(x, null).getPropertyValue(styleProp);
  62. return y;
  63. };
  64. var container = document.getElementById("container");
  65. var bgimg = getStyle(container, "background-image");
  66. var border = getStyle(container, "border");
  67. var shadow = getStyle(container, "box-shadow");
  68. if(new String(bgimg) == "undefined" || new String(bgimg) == "") {bgimg = getStyle(container, "backgroundImage");}
  69. if(new String(border) == "undefined" || new String(border) == "") border = getStyle(container, "border-left-color") + " " + getStyle(container, "border-left-style") + " " + getStyle(container, "border-left-width");
  70. if(new String(border) == "undefined" || new String(border) == "") border = getStyle(container, "borderLeftColor") + " " + getStyle(container, "borderLeftStyle") + " " + getStyle(container, "borderLeftWidth");
  71. if(new String(shadow) == "undefined" || new String(shadow) == "") {shadow = getStyle(container, "boxShadow");}
  72. // Sidebar erzeugen
  73. var sidebar = document.createElement("div");
  74. document.body.appendChild(sidebar);
  75. sidebar.id = "smiley-sidebar";
  76. sidebar.setAttribute("style", "position:fixed; top:0px; width:250px; height:100%; background: " + bgimg + " repeat scroll 0 0; overflow:auto; z-index:2; box-shadow:" + shadow + ";");
  77.  
  78. // Element erzeugen, dass die Sidebar einblendet und ausblendet
  79. if(document.getElementsByName('postoptions[signature]').length > 0) {
  80. var toggle = document.getElementsByName('postoptions[signature]')[0].parentNode.parentNode;
  81. toggle.appendChild(document.createElement("br"));
  82. }
  83. if(document.getElementsByName('options[signature]').length > 0) {
  84. var toggle = document.getElementsByName('options[signature]')[0].parentNode.parentNode;
  85. }
  86. if(document.getElementById('shout_data') != null) {
  87. var toggle = document.getElementById('smilies').parentNode;
  88. toggle.appendChild(document.createElement("br"));
  89. toggle.appendChild(document.createElement("br"));
  90. }
  91. var fakeform = document.createElement("form");
  92. toggle.appendChild(fakeform);
  93. // Sidebar einblenden
  94. var label = document.createElement("label");
  95. fakeform.appendChild(label);
  96. var ele = document.createElement("input");
  97. ele.setAttribute("class", "checkbox");
  98. ele.setAttribute("type", "checkbox");
  99. label.appendChild(ele);
  100. //Anzeigen Funktion
  101. var firstChange = GM_getValue('dateSmiley',0);
  102. function ShowSidebar(st) {
  103. if(arguments.length == 0) {
  104. var status = (GM_getValue("showSidebar",false)) ? false : true ;
  105. } else {
  106. var status = st;
  107. }
  108. if(status) {
  109. document.getElementById('smiley-sidebar').style.display = "block";
  110. if(GM_getValue("leftSidebar",true)) {
  111. if(GM_getValue("boxSidebar",true)) {site.style.marginLeft = "250px"; site.style.marginRight = "0px";}
  112. else{site.style.margin = "";}
  113. sidebar.style.float="left"; sidebar.style.right=""; sidebar.style.left="0px";
  114. sidebar.style.borderRight = border; sidebar.style.borderLeft = "";
  115. if (switchButton) switchButton.src="http://merrx.bestpony.de/smiley/arrowbutton-right.png";
  116. } else {
  117. if(GM_getValue("boxSidebar",true)) {site.style.marginLeft = "0px"; site.style.marginRight = "250px";}
  118. else{site.style.margin = "";}
  119. sidebar.style.float="right"; sidebar.style.left=""; sidebar.style.right="0px";
  120. sidebar.style.borderLeft = border; sidebar.style.borderRight = "";
  121. if (switchButton) switchButton.src="http://merrx.bestpony.de/smiley/arrowbutton-left.png";
  122. }
  123. if(GM_getValue("boxSidebar",true)) {
  124. window.onresize = function() {
  125. var bg = getStyle(document.body, "background-image");
  126. if(new String(bg) == "undefined" || new String(bg) == "") {bg = getStyle(document.body, "backgroundImage");}
  127. var image = new Image();
  128. image.src = bg.replace(/\"/g, '').slice(4, -1);
  129. var BGwidth = image.width;
  130. if(BGwidth == 0)
  131. image.onload = function() {
  132. BGwidth = image.width;
  133. if(GM_getValue("leftSidebar",true)) {
  134. var mid = (window.innerWidth + 230 - BGwidth)/2;
  135. } else {
  136. var mid = (window.innerWidth - 270 - BGwidth)/2;
  137. }
  138. document.body.style.backgroundPosition = mid + "px 0px";
  139. }
  140. if(GM_getValue("leftSidebar",true)) {
  141. var mid = (window.innerWidth + 230 - BGwidth)/2;
  142. } else {
  143. var mid = (window.innerWidth - 270 - BGwidth)/2;
  144. }
  145. document.body.style.backgroundPosition = mid + "px 0px";
  146. };
  147. window.onresize();
  148. if (boxButton) boxButton.src = "http://merrx.bestpony.de/smiley/boxbutton-inside.png";
  149. } else {
  150. document.body.style.backgroundPosition = "50% 0px";
  151. if (boxButton) boxButton.src = "http://merrx.bestpony.de/smiley/boxbutton-aside.png";
  152. }
  153. ele.checked = true;
  154. GM_setValue("showSidebar",true);
  155. } else {
  156. document.getElementById('smiley-sidebar').style.display = "none";
  157. site.style.margin = "0px";
  158. document.body.style.backgroundPosition = "50% 0px";
  159. window.onresize = function() {};
  160. ele.checked = false;
  161. GM_setValue("showSidebar",false);
  162. }
  163. var zeit = new Date().getTime();
  164. GM_setValue('dateSmiley',JSON.stringify(zeit));
  165. firstChange = GM_getValue('dateSmiley',0);
  166. } ShowSidebar(GM_getValue("showSidebar",false));
  167. ele.addEventListener("change", function() {ShowSidebar()}, false);
  168.  
  169. var text = document.createElement("strong");
  170. text.innerHTML = " Smiley-Sidebar";
  171. label.appendChild(text);
  172. fakeform.appendChild(document.createElement("br"));
  173. // Sidebar-Rumpf
  174. var kopf = document.createElement("div");
  175. sidebar.appendChild(kopf);
  176. kopf.id = "smiley-kopf";
  177. var rumpf = document.createElement("div");
  178. sidebar.appendChild(rumpf);
  179. rumpf.id = "smiley-liste";
  180. // Überschrift + Schließkreuz
  181. var text = document.createElement("strong");
  182. text.innerHTML = "Smiley Sidebar ";
  183. kopf.appendChild(text);
  184. var text = document.createElement("small");
  185. text.innerHTML = "by Merrx";
  186. kopf.appendChild(text);
  187. var close = document.createElement("img");
  188. close.src = "http://merrx.bestpony.de/smiley/closebutton.png";
  189. close.setAttribute("style", "float:right;margin-top:2px;margin-right:2px;");
  190. close.addEventListener("click", function() {ShowSidebar(false);}, false);
  191. kopf.appendChild(close);
  192. var switchButton = document.createElement("img");
  193. if(GM_getValue("leftSidebar",true)) {switchButton.src = "http://merrx.bestpony.de/smiley/arrowbutton-right.png";}
  194. else{switchButton.src = "http://merrx.bestpony.de/smiley/arrowbutton-left.png";}
  195. switchButton.setAttribute("style", "float:right;margin-top:2px;");
  196. switchButton.addEventListener("click", function() {GM_setValue("leftSidebar",!GM_getValue("leftSidebar",true)); ShowSidebar(true);}, false);
  197. kopf.appendChild(switchButton);
  198. var boxButton = document.createElement("img");
  199. if(GM_getValue("boxSidebar",true)) {boxButton.src = "http://merrx.bestpony.de/smiley/boxbutton-inside.png";}
  200. else{boxButton.src = "http://merrx.bestpony.de/smiley/boxbutton-aside.png";}
  201. boxButton.setAttribute("style", "float:right;margin-top:2px;");
  202. boxButton.addEventListener("click", function() {GM_setValue("boxSidebar",!GM_getValue("boxSidebar",true)); ShowSidebar(true);}, false);
  203. kopf.appendChild(boxButton);
  204.  
  205. // Auswahl erzeugen
  206. var sform = document.createElement("form");
  207. sform.id="smiley-form";
  208. kopf.appendChild(sform);
  209. kopf = sform;
  210. // extra Element zum externen speichern
  211. var saveSmiley = GM_getValue('saveSmiley',"17101Applejack");
  212.  
  213. // Kategoriewahl
  214. var kat = document.createElement("span");
  215. kopf.appendChild(kat);
  216. var text = document.createElement("strong");
  217. text.innerHTML = "Kategorie:";
  218. text.style.marginTop = "2px";
  219. kat.appendChild(text);
  220. kat.appendChild(document.createTextNode(" "));
  221.  
  222. var label = document.createElement("label");
  223. kat.appendChild(label);
  224. var elem = document.createElement("input");
  225. elem.setAttribute("name", "kategorie");
  226. elem.setAttribute("value", "1");
  227. elem.setAttribute("type", "radio");
  228. if(saveSmiley[0] == 1) {elem.setAttribute("checked", true);}
  229. elem.addEventListener("change", function() {ChangeSmile();}, false);
  230. label.appendChild(elem);
  231. label.appendChild(document.createTextNode("Pony"));
  232. kat.appendChild(document.createTextNode(" "));
  233.  
  234. var label = document.createElement("label");
  235. kat.appendChild(label);
  236. var elem = document.createElement("input");
  237. elem.setAttribute("name", "kategorie");
  238. elem.setAttribute("value", "2");
  239. elem.setAttribute("type", "radio");
  240. if(saveSmiley[0] == 2) {elem.setAttribute("checked", true);}
  241. elem.addEventListener("change", function() {ChangeSmile();}, false);
  242. label.appendChild(elem);
  243. label.appendChild(document.createTextNode("Emote"));
  244. kat.appendChild(document.createTextNode(" "));
  245.  
  246. // Auswahlfeld
  247. var sel = document.createElement('select');
  248. sel.id="smiley-sel";
  249. sel.setAttribute("style", "width:100%;margin-top:5px;margin-bottom:5px;");
  250. sel.addEventListener("change", function(){ChangeSmile();}, false);
  251. kopf.appendChild(sel);
  252.  
  253. // 3 Checkboxen für Größe
  254. var gros = document.createElement("span");
  255. kopf.appendChild(gros);
  256. var text = document.createElement("strong");
  257. text.innerHTML = "Größe:";
  258. gros.appendChild(text);
  259. gros.appendChild(document.createTextNode(" "));
  260.  
  261. var label = document.createElement("label");
  262. gros.appendChild(label);
  263. var elem = document.createElement("input");
  264. elem.setAttribute("class", "checkbox");
  265. elem.setAttribute("id", "smiley-kl");
  266. elem.setAttribute("type", "checkbox");
  267. if((saveSmiley[1] & 1) != 0) {elem.setAttribute("checked", true);}
  268. elem.addEventListener("change", function(){ChangeSmile();}, false);
  269. label.appendChild(elem);
  270. label.appendChild(document.createTextNode("klein"));
  271. gros.appendChild(document.createTextNode(" "));
  272.  
  273. var label = document.createElement("label");
  274. gros.appendChild(label);
  275. var elem = document.createElement("input");
  276. elem.setAttribute("class", "checkbox");
  277. elem.setAttribute("id", "smiley-mi");
  278. elem.setAttribute("type", "checkbox");
  279. if((saveSmiley[1] & 2) != 0) {elem.setAttribute("checked", true);}
  280. elem.addEventListener("change", function(){ChangeSmile();}, false);
  281. label.appendChild(elem);
  282. label.appendChild(document.createTextNode("mittel"));
  283. gros.appendChild(document.createTextNode(" "));
  284.  
  285. var label = document.createElement("label");
  286. gros.appendChild(label);
  287. var elem = document.createElement("input");
  288. elem.setAttribute("class", "checkbox");
  289. elem.setAttribute("id", "smiley-gr");
  290. elem.setAttribute("type", "checkbox");
  291. if((saveSmiley[1] & 4) != 0) {elem.setAttribute("checked", true);}
  292. elem.addEventListener("change", function(){ChangeSmile();}, false);
  293. label.appendChild(elem);
  294. label.appendChild(document.createTextNode("groß"));
  295.  
  296. // Funktion, die Smileys einfügt
  297. function InsSmile(datei) {
  298. // Finden des Textfeldes
  299. if(document.getElementById('shout_data') != null) {
  300. var input = document.getElementById('shout_data');
  301. } else {
  302. var input = document.getElementsByTagName('textarea')[0];
  303. if(input.id == "to" ) input = document.getElementsByTagName('textarea')[2];
  304. }
  305. var insText = "[img]http://merrx.bestpony.de/smiley/"+datei+"[/img]";
  306. input.focus();
  307. if(typeof input.selectionStart != 'undefined') {
  308. // Einfügen des Formatierungscodes
  309. var start = input.selectionStart;
  310. var end = input.selectionEnd;
  311. input.value = input.value.substr(0, start) + insText + input.value.substr(end);
  312. // Anpassen der Cursorposition
  313. var pos = start + insText.length;
  314. input.selectionStart = pos;
  315. input.selectionEnd = pos;
  316. }
  317. }
  318.  
  319. // Klassenkonstruktion für die Quickbars
  320. var Quickbar = function($GMsave,$tops,$cbox,$label) {
  321. //lokal
  322. var tr, td1, td2, txt1; // Quickbar-Elemente
  323. var label, ele, txt2; // Checkbox-Elemente
  324. var list, showBar; //
  325. // aus der Listen entfernen (private)
  326. var remove = function(datei) {
  327. list = JSON.parse(GM_getValue('save'+$GMsave, '[]'));
  328. for(var i = 0; i < list.length; i++) {
  329. if(list[i] == datei) {
  330. list.splice(i,1);
  331. }
  332. }
  333. GM_setValue('save'+$GMsave, JSON.stringify(list));
  334. show(showBar);
  335. }
  336. //Quickbar ausblenden (private)
  337. var show = function(st) {
  338. tr.style.display = st ? "" : "none";
  339. ele.checked = st;
  340. showBar = st;
  341. GM_setValue('show'+$GMsave, showBar);
  342. list = JSON.parse(GM_getValue('save'+$GMsave, '[]'));
  343. td2.innerHTML = "";
  344. for(var i = 0; i < list.length; i++) {
  345. var img = document.createElement('img');
  346. img.setAttribute('src', 'http://merrx.bestpony.de/smiley/'+list[i]);
  347. img.addEventListener('click', function(e) { if(e.shiftKey) remove(this.src.substr(32)); else InsSmile(this.src.substr(32));},false );
  348. td2.appendChild(img);
  349. }
  350. }
  351. //Konstruktor (private)
  352. function constr() {
  353. list = JSON.parse(GM_getValue('save'+$GMsave, '[]'));
  354. showBar = GM_getValue('show'+$GMsave, false);
  355. tr = document.createElement("tr"); /*tr.id=$qid;*/ $tops.parentNode.insertBefore(tr, $tops);
  356. td1 = document.createElement("td"); td1.setAttribute('class', 'trow1'); td1.setAttribute('valign', 'top'); tr.appendChild(td1);
  357. td2 = document.createElement("td"); td2.setAttribute('class', 'trow1'); tr.appendChild(td2);
  358. txt1 = document.createElement("strong"); txt1.innerHTML = $label+":"; td1.appendChild(txt1);
  359. label = document.createElement("label"); $cbox.appendChild(label); $cbox.appendChild(document.createElement("br"));
  360. ele = document.createElement("input"); ele.setAttribute("class", "checkbox"); ele.setAttribute("type", "checkbox"); label.appendChild(ele);
  361. ele.addEventListener("change", function() {show(!showBar); }, false);
  362. txt2 = document.createElement("strong"); txt2.innerHTML = " "+$label; label.appendChild(txt2);
  363. show(showBar);
  364. }; constr();
  365. // in die Liste aufnehmen (public)
  366. this.add = function(datei){
  367. list = JSON.parse(GM_getValue('save'+$GMsave, '[]'));
  368. list.reverse();
  369. var vorhanden = false;
  370. for(var i = 0; i < list.length; i++) {
  371. if(list[i] == datei) {
  372. return true;
  373. }
  374. }
  375. list.push(datei); list.reverse();
  376. if(list.length > 12) list.pop();
  377. GM_setValue('save'+$GMsave, JSON.stringify(list));
  378. show(showBar);
  379. }
  380. // zum Aktualisieren
  381. this.update = function() {
  382. showBar = GM_getValue('show'+$GMsave, false);
  383. show(showBar);
  384. }
  385. // Shoutbox
  386. this.shout = function() {
  387. tr.appendChild(td1);
  388. td1.setAttribute("style", "border-right: 1px solid #323232; border-bottom: 1px solid #323232; border-left: 1px solid #323232;");
  389. td2.setAttribute("style", "width: 800px; border-left: 1px solid #323232; border-bottom: 1px solid #323232;");
  390. txt1.innerHTML = $label;
  391. }
  392. }
  393.  
  394. // Ort für die Quickbars
  395. if (document.getElementById('message_old') != null) var tops = document.getElementById('message_old').parentNode.parentNode;
  396. if (document.getElementById('message') != null) var tops = document.getElementById('message').parentNode.parentNode;
  397. if (document.getElementById('quickreply_e') != null) var tops = document.getElementById('message').parentNode.parentNode.parentNode.nextElementSibling;
  398. if (document.getElementById('shout_data') != null) var tops = document.getElementById('shout_data').parentNode.parentNode.parentNode;
  399. fbar = new Quickbar('Favorite',tops,fakeform,'Favorite-Smileys');
  400. hbar = new Quickbar('History',tops,fakeform,'letzte Smileys');
  401.  
  402. if (document.getElementById('shout_data') != null) { hbar.shout(); fbar.shout(); }
  403. // Smiley Seite wechseln
  404. function ChangeSmile() {
  405. var rumpf = document.getElementById('smiley-liste');
  406. rumpf.innerHTML = "";
  407.  
  408. var dir = document.getElementById('smiley-sel').value;
  409. if (dir == "") dir = GM_getValue('saveSmiley',"17101Applejack").substr(2);
  410. var kat = document.getElementsByName('kategorie')[0].checked ? 1 : 2;
  411. if(GM_getValue('saveSmiley',"17101Applejack")[0] != kat) {dir = "";}
  412.  
  413. var gr = 0;
  414. if(document.getElementById('smiley-kl').checked) gr += 1;
  415. if(document.getElementById('smiley-mi').checked) gr += 2;
  416. if(document.getElementById('smiley-gr').checked) gr += 4;
  417. var srumpf = document.createElement('script');
  418. srumpf.type = 'text/javascript';
  419. srumpf.id = 'smiley-skript';
  420. srumpf.src = 'http://merrx.bestpony.de/smiley/smiley2.php?k='+kat+'&d='+dir+'&g='+gr;
  421. srumpf.addEventListener('load', function() {
  422. dir = document.getElementById('smiley-sel').value;
  423. GM_setValue('saveSmiley',"" + kat + gr + dir);
  424. var zeit = new Date().getTime();
  425. GM_setValue('dateSmiley',JSON.stringify(zeit));
  426. firstChange = GM_getValue('dateSmiley',0);
  427. // Hinzufügen der EventListener an die Smileys
  428. var imgs = document.getElementById('smiley-liste').getElementsByTagName("img");
  429. for(var i = 0; i < imgs.length; i++) {
  430. imgs[i].addEventListener('click', function(e) { if(e.shiftKey) fbar.add(this.src.substr(32)); else { InsSmile(this.src.substr(32)); hbar.add(this.src.substr(32)); }},false );
  431. }
  432. },false);
  433. rumpf.appendChild(srumpf);
  434.  
  435. } ChangeSmile();
  436. window.addEventListener("focus", function() {
  437. var lastChange = GM_getValue('dateSmiley',0);
  438. hbar.update();
  439. fbar.update();
  440. if(lastChange != firstChange) {
  441. saveSmiley = GM_getValue('saveSmiley',"17101Applejack");
  442. var kat = document.getElementsByName('kategorie')[0].checked ? 1 : 2;
  443. var newkat = saveSmiley[0];
  444. if(newkat == 1) {document.getElementsByName('kategorie')[0].checked = true;}
  445. else {document.getElementsByName('kategorie')[1].checked = true;}
  446. document.getElementById('smiley-kl').checked = ((saveSmiley[1] & 1) != 0) ? true : false;
  447. document.getElementById('smiley-mi').checked = ((saveSmiley[1] & 2) != 0) ? true : false;
  448. document.getElementById('smiley-gr').checked = ((saveSmiley[1] & 4) != 0) ? true : false;
  449. var dir = saveSmiley.substr(2);
  450. if(kat != newkat){
  451. var ch = document.createElement('option');
  452. ch.setAttribute('value', dir);
  453. document.getElementById('smiley-sel').appendChild(ch);
  454. }
  455. document.getElementById('smiley-sel').value = dir;
  456. ChangeSmile();
  457. document.getElementById('smiley-skript').addEventListener('load', function() {
  458. GM_setValue('dateSmiley',lastChange);
  459. firstChange = GM_getValue('dateSmiley',0);
  460. },false);
  461. GM_setValue('dateSmiley',lastChange);
  462. firstChange = GM_getValue('dateSmiley',0);
  463. ShowSidebar(GM_getValue("showSidebar",false));
  464. }
  465. },false);
  466. }