Guest User

m_filter.user

a guest
Jul 25th, 2017
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        m_filter
  3. // @namespace   m_filter
  4. // @description Фильтр анкет для сайта don-m.ru
  5. // @include     http://don-m.ru/*
  6. // @version     1.07
  7. // @grant       none
  8. // @author      Eumenes
  9. // @license     GNU GPL v3
  10. // ==/UserScript==
  11.  
  12. // Загружаем состояние из localStorage
  13. var blacklist = [];
  14. blacklist = localStorage.blacklist ? JSON.parse(localStorage.blacklist) : [];
  15. var FBlack;
  16. FBlack = localStorage.FBlack ? JSON.parse(localStorage.FBlack) : false;
  17. var FSideBar;
  18. FSideBar = localStorage.FSideBar ? JSON.parse(localStorage.FSideBar) : false;
  19. var FAddRef;
  20. FAddRef = localStorage.FAddRef ? JSON.parse(localStorage.FAddRef) : true;
  21. var RefList;
  22. RefList = localStorage.RefList ? JSON.parse(localStorage.RefList) : {};
  23.  
  24. // #region BlackList
  25. // ##############################
  26.  
  27. // функция для очистки BlackList
  28. function clearBlackList(){
  29.     blacklist = [];
  30.     localStorage.blacklist = JSON.stringify(blacklist);
  31.     window.location.reload();
  32. }
  33.  
  34. // функция для сохранения BlackList
  35. function showBlackList(){
  36.     prompt("BlackList", JSON.stringify(blacklist));
  37. }
  38.  
  39. // функция для внесения анкет в BlackList
  40. function enterBlackList(){
  41.     var new_JSON_black_list = prompt("Enter BlackList");
  42.     var new_removelist = [];
  43.     try {
  44.         new_removelist = JSON.parse(new_JSON_black_list);
  45.         for (var i = 0; i < new_removelist.length; i++) {
  46.             if (blacklist.indexOf(new_removelist[i]) == -1) {
  47.                 blacklist[blacklist.length] = new_removelist[i];
  48.             }
  49.         }
  50.         localStorage.blacklist = JSON.stringify(blacklist);
  51.         window.location.reload();
  52.     }
  53.     catch (e) {
  54.        
  55.     }
  56. }
  57.  
  58. // переключение между режимами White/Black List
  59. function inverseFBlack(){
  60.     FBlack = !FBlack;
  61.     localStorage.FBlack = JSON.stringify(FBlack);
  62.     window.location.reload();
  63. }
  64.  
  65. // функция для работы с BlackList
  66. function removethis(el){
  67.     var girlid = this.parentNode.getAttribute('data-girlid');
  68.     if (FBlack == false) {
  69.         blacklist[blacklist.length] = girlid;
  70.     } else {
  71.         var idx = blacklist.indexOf(girlid);
  72.         if (idx != -1) {
  73.             blacklist.splice(idx, 1);
  74.         }
  75.     }
  76.     localStorage.blacklist = JSON.stringify(blacklist);
  77.     this.parentNode.remove();
  78. }
  79. // ##############################
  80. // #endregion
  81.  
  82.  
  83. // #region ref
  84. // ##############################
  85.  
  86. // переключение между режимами Add/Del Ref
  87. function inverseFAddRef(){
  88.     FAddRef = !FAddRef;
  89.     localStorage.FAddRef = JSON.stringify(FAddRef);
  90.    
  91.     var btnAddRefList = document.querySelectorAll('.addref');
  92.     [].forEach.call(btnAddRefList, function(el) {
  93.         el.textContent = FAddRef ? '+' : '-';
  94.     });
  95. }
  96.  
  97. // функция для работы с RefList
  98. function AddHref(el){
  99.     var t = (this.className == 'addref') ? 1 : 0;
  100.     var girlid = this.parentNode.parentNode.getAttribute('data-girlid');
  101.     if (FAddRef == true) {
  102.         var ref = prompt('Enter ref URL');
  103.         if ( (ref !== null) && (ref !== '') ) {
  104.             if (typeof RefList[girlid] !== "undefined") {
  105.                 if (RefList[girlid].indexOf(ref) !== -1) {
  106.                     return;
  107.                 }
  108.             } else {
  109.                 RefList[girlid] = [];
  110.             }
  111.             RefList[girlid].push(ref);
  112.             localStorage.RefList = JSON.stringify(RefList);
  113.             var i = RefList[girlid].length;
  114.             var sref = document.createElement('div');
  115.             sref.textContent = i.toString();
  116.             var a = document.createElement('a');
  117.             a.href = RefList[girlid][i-1];
  118.             a.target = "_blank"
  119.             sref.className = "sref";
  120.             sref.style.top = parseInt(60*t + 20*i) + 'px';
  121.             this.parentNode.insertBefore(a, this.parentNode.children[0]);
  122.             a.insertBefore(sref, a.children[0]);
  123.         }
  124.     } else {
  125.         var refn = prompt('Enter DEL ref #');
  126.         var n = parseInt(refn);
  127.         if ( (n > 0) && (n <= RefList[girlid].length) ) {
  128.             RefList[girlid].splice(n - 1, 1);
  129.         } else {
  130.             return;
  131.         }
  132.         localStorage.RefList = JSON.stringify(RefList);
  133.         window.location.reload();
  134.     }
  135. }
  136.  
  137. // функция для очистки RefList
  138. function clearRefList(){
  139.     RefList = {};
  140.     localStorage.RefList = JSON.stringify(RefList);
  141.     window.location.reload();
  142. }
  143.  
  144. // функция для сохранения RefList
  145. function showRefList(){
  146.     prompt("RefList", JSON.stringify(RefList));
  147. }
  148.  
  149. // функция для внесения анкет в RefList
  150. function enterRefList(){
  151.     var new_JSON_RefList = prompt("Enter RefList");
  152.     var new_RefList = {};
  153.     try {
  154.         new_RefList = JSON.parse(new_JSON_RefList);
  155.         for (girlid in new_RefList) {
  156.             if (typeof RefList[girlid] == "undefined") {
  157.                 RefList[girlid] = [];
  158.             }
  159.             for (var i = 0; i < new_RefList[girlid].length; i++) {
  160.                 if (RefList[girlid].indexOf(new_RefList[girlid][i]) == -1) {
  161.                     RefList[girlid].push(new_RefList[girlid][i]);
  162.                 }
  163.             }
  164.         }
  165.         localStorage.RefList = JSON.stringify(RefList);
  166.         window.location.reload();
  167.     }
  168.     catch (e) {
  169.        
  170.     }
  171. }
  172.  
  173. // ##############################
  174. // #endregion
  175.  
  176.  
  177. // #region btn
  178. // ##############################
  179.  
  180. // скрыть/показать боковую панель
  181. function displaybar()
  182. {
  183.     var myprofile = document.querySelector('.myprofile');
  184.     if (myprofile.style.display == "block") {
  185.         myprofile.style.display = "none";
  186.     } else {
  187.         myprofile.style.display = "block";
  188.     }
  189.     FSideBar = !FSideBar;
  190.     localStorage.FSideBar = JSON.stringify(FSideBar);
  191. }
  192.  
  193. document.querySelector('body').insertAdjacentHTML('beforeend', '<style>.remthis{background-color:#008bec;color:#fff;cursor:pointer;font-size:10px;padding:1px 5px;z-index:100;}.remthis{margin-top:0px;}.remthis:hover{background-color:#cb4437}</style>');
  194. document.querySelector('body').insertAdjacentHTML('beforeend', '<style>.mbtn{background-color:#008bec;color:#fff;cursor:pointer;font-size:10px;padding:3px 5px;z-index:100;}.mbtn{margin:0px;top:0px;position:absolute;}.mbtn:hover{background-color:#cb4437}</style>');
  195. document.querySelector('body').insertAdjacentHTML('beforeend', '<style>.addref{background-color:#008bec;color:#fff;cursor:pointer;font-size:10px;padding:3px 5px;z-index:100;}.addref{margin:0px;top:60px;position:absolute;}.addref:hover{background-color:#cb4437}</style>');
  196. document.querySelector('body').insertAdjacentHTML('beforeend', '<style>.sref{background-color:#008bec;color:#fff;cursor:pointer;font-size:10px;padding:3px 5px;z-index:100;}.sref{margin:0px;top:61px;position:absolute;}.sref:hover{background-color:#cb4437}</style>');
  197. document.querySelector('body').insertAdjacentHTML('beforeend', '<style>.myprofile {width: 1px;height: 1px;background: #eee;display: none;position:fixed;left:0;top:115px;z-index:9999;}mybar {display: block;padding: 4px 8px;background: #666;color: #fff;position:fixed;left:0;top:115px;text-align: center;z-index:99999;}</style>');
  198. document.querySelector('body').insertAdjacentHTML('beforeend', '<div class="myprofile"></div><mybar>></mybar>');
  199. // Добавляем сбоку выдвижную панель с кнопками
  200. var title = document.querySelector('mybar');
  201. title.onclick = displaybar;
  202. var myprof = document.querySelector('.myprofile');
  203. var btnCSS = 'margin:5px 32px; text-align:  center; width: 160px; font-size:14px;';
  204. var btnText = ["black/white list", "clear blacklist", "save blacklist", "load blacklist", "add/del ref", "clear reflist", "save reflist", "load reflist"]; //, "on/off ref"];
  205. var btnFunc = {
  206.     Functions: [inverseFBlack, clearBlackList, showBlackList, enterBlackList, inverseFAddRef, clearRefList, showRefList, enterRefList]  
  207. }
  208. for (var i = 0; i < btnText.length; i++) {
  209.     var btn = document.createElement("BUTTON");
  210.     var t = document.createTextNode(btnText[i]);
  211.     btn.appendChild(t);
  212.     btn.style.cssText = btnCSS;
  213.     btn.onclick = btnFunc.Functions[i];
  214.     myprof.appendChild(btn);
  215. }
  216. if (FSideBar == true) {
  217.     myprof.style.display = "block";
  218. }
  219.  
  220. // ##############################
  221. // #endregion
  222.  
  223.  
  224. // #region main
  225. // ##############################
  226.  
  227. // Пробегаем по всем анкетам
  228. var titlelist = document.querySelectorAll('.list-girls-item');
  229. [].forEach.call(titlelist, function(el) {
  230.     var girlid = el.getAttribute('data-girlid');
  231.     // Если анкета находится в BlackList, то удаляем её
  232.     // Иначе добавляем в правый верхний угол кнопку 'Удалить'
  233.     // В режиме просмотра BlackList добавляем кнопку 'Исключить из BlackList'
  234.     if ( (blacklist.indexOf(girlid) !== -1) ? !FBlack : FBlack) {
  235.         el.remove();
  236.     } else {
  237.         var remthis = document.createElement('div');
  238.         if (FBlack == false) {
  239.             remthis.textContent = 'Удалить';
  240.         } else {
  241.             remthis.textContent = 'Исключить из BlackList';
  242.         }
  243.         remthis.onclick = removethis;
  244.         remthis.className = "remthis";
  245.         el.insertBefore(remthis, el.children[0]);
  246.        
  247.         var addref = document.createElement('div');
  248.         if (FAddRef == true) {
  249.             addref.textContent = '+';
  250.         } else {
  251.             addref.textContent = '-';
  252.         }
  253.         var d = document.createElement('a');
  254.         addref.className = "addref";
  255.         addref.onclick = AddHref;
  256.         el.insertBefore(d, el.children[0]);
  257.         d.insertBefore(addref, d.children[0]);
  258.        
  259.         if (typeof RefList[girlid] !== "undefined") {
  260.             for (var i = 1; i <= RefList[girlid].length; i++) {
  261.                 var sref = document.createElement('div');
  262.                 sref.textContent = i.toString();
  263.                 var a = document.createElement('a');
  264.                 a.href = RefList[girlid][i-1];
  265.                 a.target = "_blank"
  266.                 sref.className = "sref";
  267.                 sref.style.top = parseInt(60 + 20*i) + 'px';
  268.                 d.insertBefore(a, d.children[0]);
  269.                 a.insertBefore(sref, a.children[0]);
  270.             }
  271.         }
  272.     }
  273. });
  274.  
  275. // Пробегаем по всем миниатюрам анкет на вкладке салоны
  276. var salonlist = document.querySelectorAll('.salon-girl');
  277. [].forEach.call(salonlist, function(el) {
  278.     var girlid = el.getAttribute('data-girlid');
  279.     if ( (blacklist.indexOf(girlid) !== -1) ? !FBlack : FBlack) {
  280.         el.remove();
  281.     } else {
  282.         var remthis = document.createElement('div');
  283.         remthis.textContent = 'x';
  284.         remthis.onclick = removethis;
  285.         remthis.className = "mbtn";
  286.         remthis.style.right = parseInt(0) + 'px';
  287.         el.insertBefore(remthis, el.children[0]);
  288.        
  289.         var addref = document.createElement('div');
  290.         addref.textContent = '≡';
  291.        
  292.         var d = document.createElement('a');
  293.         addref.className = "mbtn";
  294.         addref.onclick = AddHref;
  295.         addref.style.top = parseInt(0) + 'px';
  296.         addref.style.position = 'absolute';
  297.         el.insertBefore(d, el.children[0]);
  298.         d.insertBefore(addref, d.children[0]);
  299.  
  300.         if (typeof RefList[girlid] !== "undefined") {
  301.             for (var i = 1; i <= RefList[girlid].length; i++) {
  302.                 var sref = document.createElement('div');
  303.                 sref.textContent = i.toString();
  304.                 var a = document.createElement('a');
  305.                 a.href = RefList[girlid][i-1];
  306.                 a.target = "_blank"
  307.                 sref.className = "sref";
  308.                 sref.style.top = parseInt(20*i) + 'px';
  309.                 d.insertBefore(a, d.children[0]);
  310.                 a.insertBefore(sref, a.children[0]);
  311.             }
  312.         }
  313.     }
  314. });
  315.  
  316. // ##############################
  317. // #endregion
Advertisement
Add Comment
Please, Sign In to add comment