// ==UserScript== // @name Dev_Multi_Open2 // @namespace http://phi.pf-control.de/apps/userscripts // @version 1.0 // @description Easier Opening in Deviantart Notification Center // @author Dediggefedde // @match https://www.deviantart.com/notifications/* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js // @require http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js // @grant GM.xmlHttpRequest // @downloadURL none // ==/UserScript== /* globals $*/ (function () { 'use strict'; var selfTrg = false; var selContainer; var selectees = "div._1FZFD>div,div.CMvV0>div,div.VG6bf>div,div._3igXW>div,div._1F-dq>div"; //,div._3KMiG var topBar = "div._24VFR._3zk0a._3Rgyb"; var checkedBox = "div._2qxrJ,div._15Po9"; var selcont = "div._3Pgai"; var viewAllBut = "button._9rMMY._1qwC7._3xVcb._1KcL_._21wpm"; var allButClass = "_9rMMY _1qwC7 _3xVcb _1KcL_ _21wpm"; var stackCount="div.Ey06z"; function prepareSite() { var scr = $(''); scr.appendTo(document.head); var sty = $(""); sty.append(".ui-selectable-helper{background-image:linear-gradient(rgb(0,255,0),rgb(0,100,0));opacity:0.3;}"); sty.append(".dmo_openAll{top: 68%;}"); sty.appendTo(document.head); scr.ready(function () { setInterval(dynamicInsertion, 1000); }); } function selecting(ev, ui) { var target = $(ui.selecting); var selecting = true; if (target.length == 0) { target = $(ui.unselecting); selecting = false; } var url = target.attr("url"); selfTrg = true; if (!selecting) { if (target.find(checkedBox).length == 1) target.find("label").click(); //unselecting DOM if (ev == 0) target.removeClass("ui-selected").addClass("ui-unselecting"); } else { if (target.find(checkedBox).length == 0) target.find("label").click(); //selecting DOM if (ev == 0) target.addClass("ui-selecting"); } selfTrg = false; } function insertOpenButton() { if ($("button.dmo2_openTab").length > 0) return; var btnOpen = $(""); $(topBar).append(btnOpen); $("button.eNvqE").addClass("_1BMgL"); //add space between buttons btnOpen.click(function () { $(selectees).has(checkedBox).each(function () { if ($(this).attr("url") != undefined) window.open($(this).attr("url")); }); }); } function getStackURLs(offset, userid,type) { return new Promise(function (resolve, reject) { GM.xmlHttpRequest({ method: "GET", url: "https://www.deviantart.com/_napi/da-messagecentre/api/stack?stackId=uq:devwatch:tg%3D"+type+",sender%3D" + userid + "&type=deviations&offset="+offset+"&limit=24", onerror: function (response) { reject(response); }, onload: function (response) { var resp=JSON.parse(response.responseText); //response.results[0].deviation.url; for (var el of resp.results) { window.open(el.deviation.url); } if (resp.hasMore) resolve(getStackURLs(24, userid)); else resolve(1); } }); }); } function requestAllOpen(event) { var userid = $(event.target).closest(selectees).find("a.user-link").attr("data-userid"); //keyword in div.Ey06z var type=$(this).closest(selectees).find(stackCount).text(); if(type.indexOf("Deviations")!=-1){ getStackURLs(0,userid,"deviations"); getStackURLs(0,userid,"groupdeviations"); }else if(type.indexOf("Journals")!=-1){ getStackURLs(0,userid,"journals"); }else if(type.indexOf("Polls")!=-1){ getStackURLs(0,userid,"polls"); } } function insertOpenAllButton() { $(viewAllBut).not("[dmo2_openAll]").attr("dmo2_openAll", true).after($("").click(requestAllOpen)); } function makeSelectable() { selContainer.selectable({ //jquery ui selectable filter: selectees, distance: 10, //allows clicking. deprecated, hopefully stays a while selecting: selecting, //during selection; select/unselect only regarding mark-area unselecting: selecting }); $(selectees).find("label input").change(function (event) { //change selection by hand if (!selfTrg) { event.stopPropagation(); var target = $(this).closest(selectees); var el = {}; if (target.find(checkedBox).length == 0) el.unselecting = target; else el.selecting = target; selecting(0, el); selContainer.selectable('refresh'); selContainer.data("ui-selectable")._mouseStop(null); } }); insertOpenButton(); } function dynamicInsertion() { $(selectees).not("[url]").each(function () { //href disappears for selected items. copy it beforehand $(this).attr("url", $(this).find("a[data-hook='deviation_link']").attr("href")); }); insertOpenAllButton(); if ($(selectees).not("[dmo2]").length == 0) return; //only do if you have selectees without attribute $(selectees).attr("dmo2", true); selContainer = $(selcont); makeSelectable(); } prepareSite(); })(); /* deviantart API https://www.deviantart.com/_napi/da-messagecentre/api/stack?stackId=uq:devwatch:tg%3Ddeviations,sender%3D4165994&type=deviations&offset=0&limit=24 stackId uq:devwatch:tg=deviations,sender=4165994 type deviations offset 0 limit 24 response response.results[0].deviation.url response.counts.total response.hasMore*/