您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Planetdp portalında kendinize özel listeler oluşturmasına olanak sağlar.
// ==UserScript== // @name [DP] PlanetDP Listeler // @description Planetdp portalında kendinize özel listeler oluşturmasına olanak sağlar. // @version 1.2 // @author nht.ctn // @namespace https://github.com/nhtctn // @icon data:image/png;base64,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 // @run-at document-end // @include *://*planetdp.org* // @include *://*forum.planetdp.org* // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_addValueChangeListener // @grant GM_xmlhttpRequest /* global $ */ // ==/UserScript== /*jshint esversion: 6 */ (function() { 'use strict'; var defaultQueueForm = {name: "", description: "", counter: 1, delay: 0, note: 1, sortBy: "created", color: "olive"}; var version = 1.1; // var defaultContentForm = {}; // var oldContentDeleteTime = millisecondConverter(2, "year", "ms"); // 2 Year var checkWaitingTime = millisecondConverter(10, "minute", "ms"); // 10 minutes var pageUrl = window.location.href; var x; var enter = ` `; if (pageUrl.search(/forum\.planetdp\.org\/.+/) > 0) { waitForKeyElements('.cke_toolbar.cke_toolbar_last > .cke_toolbar_end', function() {addForumExport();}, false); } else { if (pageUrl.search( /planetdp\.org\/title\// ) >= 0) { var babaMain = document.querySelector('div.baba_main'); var cardId = pageUrl.replace(/.+planetdp\.org\/title\/.+-dp(\d+)(.+)?/,"$1"); var cardInfos = getCardInfos(babaMain, cardId); } if (document.querySelector( '[href="/logout"]' ) != null) { // Üye menüsüne Kuyruk ikonu ve içine kuyruk oluştur seçeneğini yerleştir. var queueHtmlZero = ` <li class="dropdown"> <a data-toggle="dropdown" data-placement="bottom" class="lists-menu648" title="Listeler" class="dropdown-toggle" data-secondary-toggle="tooltip"> <span class="badge"></span> <i class="fa fa-tasks"></i> </a> <ul class="dropdown-menu user-dropdown"><li id="queue648"><a href="#">Liste Oluştur</a></li></ul> </li> `; $('.user-buttons > .seperator:first').after(queueHtmlZero); document.getElementById("queue648").onclick = function() {insertQueueForm("new");}; // Varsa mevcut kuyrukları da ekle. isertQueues(); // Kuyruklar güncellendiğinde eski seçenek ve butonları temizle, baştan oluşturan fonksiyonu çlıştır. GM_addValueChangeListener("queueArray", function(name, old_value, new_value, remote) { var oldOptions = document.querySelectorAll('[id^="queue648_"]'); for (x = 0; x < oldOptions.length; x++) { oldOptions[x].remove(); } isertQueues(); }); } // CSS eklemeleri (Her sayfada gerekli css'ler yok.) GM_addStyle(` .window-header { padding-bottom: 15px; border-bottom: 1px solid #000; display: contents; } .mfp-close-btn-in .mfp-close { color: #333; } button.mfp-close, button.mfp-arrow { overflow: visible; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; display: block; outline: none; padding: 0; z-index: 1046; -webkit-box-shadow: none; box-shadow: none; } .mfp-close { width: 44px; height: 44px; line-height: 44px; position: absolute; right: 0; top: 0; text-decoration: none; text-align: center; opacity: .65; filter: alpha(opacity=65); padding: 0 0 18px 10px; color: #fff; font-style: normal; font-size: 28px; font-family: Arial,Baskerville,monospace; } .mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .mfp-bg { top: 0; left: 0; width: 100%; height: 100%; z-index: 1042; overflow: hidden; position: fixed; background: #0b0b0b; opacity: .8; filter: alpha(opacity=80); } .mfp-wrap { top: 0; left: 0; width: 100%; height: 100%; z-index: 1043; position: fixed; outline: none!important; -webkit-backface-visibility: hidden; } .mfp-container { text-align: center; position: absolute; width: 100%; height: 100%; left: 0; top: 0; padding: 0 8px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .mfp-container:before { content: ''; display: inline-block; height: 100%; vertical-align: middle; } .mfp-auto-cursor .mfp-content { cursor: auto; } .mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content { width: 100%; cursor: auto; } .mfp-content { position: relative; display: inline-block; vertical-align: middle; margin: 0 auto; text-align: left; z-index: 1045; } .window-content .btn { margin-right: 15px; } .btn { display: inline-block; padding: 6px 12px; margin-bottom: 0; font-size: 14px; font-weight: 400; line-height: 1.42857143; text-align: center; white-space: nowrap; vertical-align: middle; -ms-touch-action: manipulation; touch-action: manipulation; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-image: none; border: 1px solid transparent; border-radius: 4px; } .btn-default { color: #333; background-color: #fff; border-color: #ccc; }` + // Ekstra CSS'ler ` ul[id^="queueWindow_list"] { height: 450px; overflow-y: auto; } ul[id^="queueWindow_list"] > li { padding: 7px 5px; border-bottom: 1px dotted #000; list-style: none; display: flex; } .div-left { display: inline-block; width: 70%; padding-right: 15px; } .div-right { display: inline-block; width: 30%; } .div-left > *, .div-right > * { display: block; width: 100%; word-break: break-word; } .queue_list_hide { display: none; } .queButtons { display: flex; flex-direction: row-reverse; align-items: center; } .waitingButtons { flex: 1; } .editButtons > i { font-size: 15px; border-radius: 15px; margin-left: 10px; user-select: none; } #deleteQueue:hover, #editQueue:hover, #exportQueue:hover { color: #f00; } .badge.no-counter { opacity: 0.6; } /* MOBİL GÖRÜNÜM */ @media only screen and (max-width: 767px) and (min-width: 320px){ #queueWindow-form {margin: 0;} .queButtons { flex-direction: column; } .queButtons > * { width: 100%; text-align: left; } .editButtons > i { margin: 0 15px 0 0; } .waitingButtons { margin-top: 10px; } ul[id^="queueWindow_list"] > li { flex-direction: column; } .div-right, .div-left { width: 100%; } } `); $('#dpDarkCss').after('<style id="queueCss_dark">queueWindow-form li, [id*="-form"] .window-header { border-color: #4c4c4c!important; }</style>'); darkToggle(); $('#darkSwitchButton').on("click", function() {darkToggle();} ); } function darkToggle() { if ($('#dpDarkCss').attr("disabled")) { $('#queueCss_dark').prop("disabled", "disabled"); } else { $('#queueCss_dark').prop("disabled", ""); } } function getCardInfos(page, c_ID) { var cardTitle = page.querySelector( 'h1[itemprop="name"]' ).textContent.trim(); var year = page.querySelector('span[itemprop="copyrightYear"]'); year = (year) ? year.textContent.trim().replace(/\n/gi,"").replace(/(\d{4})\s?-?\s?(\d{4})?/,"$1") : "?"; var dpRaiting = page.querySelector('span[itemprop="ratingValue"]'); dpRaiting = (dpRaiting) ? dpRaiting.textContent.trim() : "-"; var imdbBoxLink = page.querySelector('ul.pd [href*="imdb.com/title/tt"]'); var imdbID = (imdbBoxLink) ? imdbBoxLink.href.replace(/.+imdb\.com\/title\/tt(\d+)/,"$1") : "-"; var imdbRating = (imdbBoxLink) ? imdbBoxLink.closest("ul").querySelector('li.active').textContent.trim().replace(/\/10/,"") : "-"; imdbRating = (imdbRating == "") ? "-" : imdbRating; return {cardId: c_ID, cardTitle: cardTitle, year: year, dpRaiting: dpRaiting, imdbID: imdbID, imdbRating: imdbRating}; } function activateElements() { var db = GM_getValue("queueArray"); var lastActivate = GM_getValue("lastActivateTime"); var currentTime = new Date().getTime(); if (currentTime - lastActivate >= checkWaitingTime || lastActivate == null) { for (let y = 0; y < db.length; y++) { var activeWitingArray = db[y][1]; for (let z = 0; z < activeWitingArray.length; z++) { var w = activeWitingArray[z]; if (w != null) { if (w.active == 0) { if (currentTime >= w.activateTime) { w.active = 1; } } } } } GM_setValue("queueArray", db); GM_setValue("lastActivateTime", currentTime); } } function downloadQueue(no) { var queue = GM_getValue("queueArray")[no]; var infos = queue[0]; var s = ` `; var d = new Date(); var date = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate(); var filename = infos.name + "_" + date; var array = []; arrayFilter(queue[1], array); arraySorter(array, "object", infos.sortBy); var data = `Yapım Adı` + s + `Yıl` + s + `IMDb ID` + s + `DP ID` + s + `Aktif mi?` + s + `Not` + s + `Gecikme` + s + `Oluşturma Zamanı` + s + `Aktifleşme Zamanı` + enter; for (let x = 0; x < array.length; x++) { var q = array[x]; if (q != null) { data += q.cardTitle + s + q.year + s + q.imdbID + s + q.cardId + s + q.active + s + q.note + s + q.delay + s + q.created + s + q.activateTime + enter; } } var element = document.createElement('a'); element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(data)); element.setAttribute('download', filename); element.style.display = 'none'; document.body.appendChild(element); element.click(); document.body.removeChild(element); } function isUpToDate(no) { var infos = GM_getValue("queueArray")[no][0]; if (infos.version == version) { return true; } else { upDateQueue(no); } } function upDateQueue(no) { var queueArray = GM_getValue("queueArray"); var infos = queueArray[no][0]; var array = queueArray[no][1]; var filtredArray = []; arrayFilter(queueArray[no][1], filtredArray); if(confirm("Bu listenin yeni versiyona göre güncellenmesi gerekmektedir." + enter +"Sürüm " + infos.version + " => Sürüm " + version + enter + enter + "Bu işlem birkaç dakika sürebilir. Lütfen sekmeyi kapatmayın.")) { try { // İlk verisonlu sürüme geçiş. ======== if (infos.version == null) { var change1 = (function(t) { // Version no ekle. Sıralama türü ekle[addedtime]. return function (e) { var n_que = GM_getValue("queueArray"); infos.version = version; infos.sortBy = "created"; n_que[no][0] = infos; GM_setValue("queueArray", n_que); }; })(no); upDateQueueContent(no, filtredArray, 0, change1); // Öğe bilgilerini güncellemek için request at. [yıl,imdb ID,imdb puan,dp puan] alert("Güncelleme işlemi tamamlandı."); } // 1.1'e geçiş. ======================= (Henüz yayınlanmadı.) else if (infos.version == 1.0) { for (let x = 0; x < filtredArray.length; x++) { array[filtredArray[x].cardId].year = array[filtredArray[x].cardId].year.replace(/(\d{4})\s?-?\s?(\d{4})?/,"$1"); } queueArray[no][0].version = version; queueArray[no][1] = array; GM_setValue("queueArray", queueArray); alert("Güncelleme işlemi tamamlandı."); } } catch(err) { alert("Güncelleme işlemi sırasında bir sorun oluştu." + enter +"Sürüm " + infos.version + " => Sürüm " + version + enter + enter + "Lütfen aşağıdaki hata mesajı ile birlikte uygulama yazarına haber verin." + enter + enter + err.message); } } } function upDateQueueContent(no, array, index, myFunction) { if (index < array.length) { var ax = array[index]; var id = ax.cardId; GM_xmlhttpRequest({ method: "GET", url: "https://www.planetdp.org/title/-" + id, onload: function(response) { var json = response.responseText; var htmlObj = $(json); var page = htmlObj.find( 'div.baba_main' )[0]; var cardInfos2 = getCardInfos(page, id); createContentLog(id, no, ax.delay, ax.note, cardInfos2, ax.created); setTimeout(function() {upDateQueueContent(no, array, index+1, myFunction);}, 500); } }); } else if (index == array.length) { myFunction(); } } function createQueueWindow(queueNo) { if (isUpToDate(queueNo) == true) { var infos = GM_getValue("queueArray")[queueNo][0]; insertWindow("queueWindow", "tasks", infos.name, false, infos.color); var buttons = ` <div class="queButtons"> <div class="editButtons"> <i id="exportQueue" class="fa fa-file-excel-o" aria-hidden="true" title="Bu Listenin Çıktısını Al"> Çıktı Al</i> <i id="editQueue" class="fa fa-pencil" aria-hidden="true" title="Bu Listeyi Düzenle"> Düzenle</i> <i id="deleteQueue" class="fa fa-trash" aria-hidden="true" title="Bu Listeyi Sil"> Sil</i> </div> <div class="waitingButtons"> <a id="queueWindow_button_active" href="#" class="btn btn-info">Aktif</a> <a id="queueWindow_button_waiting" href="#" class="btn btn-default">Beklemede</a> <a id="queueWindow_button_done" href="#" class="btn btn-default" style="display: none;">Tamamlanmış</a> </div> </div> `; var listCovers = ` <fieldset class="window-content margintop10"> <ul id="queueWindow_list_active" class="queue_list_show"> </ul> <ul id="queueWindow_list_waiting" class="queue_list_hide"> </ul> <ul id="queueWindow_list_done" class="queue_list_hide"> </ul> </fieldset> `; var listFieldset = document.querySelector('#queueWindow-form > .window-content'); listFieldset.insertAdjacentHTML("beforeend", buttons + listCovers); // Sil, düzenle, çıktı al butonlarına fonksiyonları bağla. document.querySelector('#queueWindow-form #exportQueue').onclick = function() { if (confirm("İnecek olan Txt dosyasının içindekileri kopyalayıp bir Excel dosyasına yapıştırabilirsiniz.")) { downloadQueue(queueNo); } }; document.querySelector('#queueWindow-form #editQueue').onclick = function() {removeForm("queueWindow"); insertQueueForm("edit", queueNo);}; document.querySelector('#queueWindow-form #deleteQueue').onclick = (function(t, inf) { return function (e) { if (confirm("Bu listeyi silmek istediğinize emin misiniz? Bu işlem geri alınamaz.")) { var library = GM_getValue("queueArray"); library.splice(t, 1); GM_setValue("queueArray", library); removeForm("queueWindow"); alert("\"" + infos.name + "\" adlı kuruk silindi."); } }; })(queueNo, infos); // Listelerin içini doldur ve güncelle insertLists(queueNo); GM_addValueChangeListener("queueArray", function(name, old_value, new_value, remote) { var oldLists = document.querySelectorAll('[id^="queueWindow_list"]'); for (x = 0; x < oldLists.length; x++) { oldLists[x].innerHTML = ""; } insertLists(queueNo); }); // Listelerin ve butonların toggle'larını ayarla var listButtons = listFieldset.querySelectorAll('[id^="queueWindow_button"]'); for (let x = 0; x < listButtons.length; x++) { listButtons[x].onclick = (function(t) { return function (e) { // Butonlar var oldButton = listFieldset.querySelector('a.btn-info'); classToogle( oldButton, ["btn-info", "btn-default"] ); classToogle( listButtons[x], ["btn-info", "btn-default"] ); // Listeler var oldListElement = listFieldset.querySelector( 'ul.queue_list_show' ); classToogle( oldListElement, ["queue_list_show", "queue_list_hide"] ); var listElement = listFieldset.querySelector( '#' + listButtons[x].id.replace('button','list') ); classToogle( listElement, ["queue_list_show", "queue_list_hide"] ); }; })(x); } } } function insertLists(queueNo) { var library = GM_getValue("queueArray"); var sortBy = library[queueNo][0].sortBy; sortBy = sortBy ? sortBy : "cardTitle"; // Aktif var activeArray = []; arrayFilter(library[queueNo][1], activeArray, "active"); arraySorter(activeArray, "object", sortBy); var activeList = document.querySelector('#queueWindow_list_active'); activeList.innerHTML = listHTML(activeArray); // Beklemede var waitingArray = []; arrayFilter(library[queueNo][1], waitingArray, "waiting"); arraySorter(activeArray, "object", sortBy); var waitingList = document.querySelector('#queueWindow_list_waiting'); waitingList.innerHTML = listHTML(waitingArray); // Tamamlanmış (Sonra) } function listHTML(array) { var result = ''; for (let x = 0; x < array.length; x++) { var a = array[x]; var d = new Date(a.created); var date = d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear(); result += ` <li> <div class="div-left"> <a href="/title/-` + a.cardId + `"><strong>` + a.cardTitle + ` (` + a.year + `)</strong></a> <span>` + (a.note == "" ? "" : "<strong>Not:</strong> " + a.note) + `</span> </div> <div class="div-right"> <span><strong>Eklenme:</strong> ` + date + `</span> <span><strong>Gecikme:</strong> ` + (a.delay == 0 ? "Yok" : a.delay + " gün") + `</span> </div> </li> `; } result = (result == '') ? "Bu listede hiçbir öğe yok." : result; return result; } function isertQueues() { var queues = GM_getValue("queueArray"); if (queues != null && Array.isArray(queues) && queues.length >= 1) { // Aktifleşecek varsa aktifleştir. activateElements(); // Üst menüye eklemeleri yap. for (x = 0; x < queues.length; x++) { var infos = queues[x][0]; var activeArray = []; arrayFilter(queues[x][1], activeArray, "active"); var queueOption = '<li id="queue648_' + infos.id + '_menu"><a href="#">' + infos.name + (infos.counter == 0 ? ' <span class="badge">' + activeArray.length + '</span>' : ' <span class="badge no-counter">' + activeArray.length + '</span>') + '</a></li>'; $('#queue648').parent().append(queueOption); // Aktif öğe penceresi için fonksiyonu bağla. document.querySelector('#queue648_' + infos.id + '_menu').onclick = (function(t) { return function (e) { createQueueWindow(t); }; })(x); } // Üst menü için tooltip ve bildirimi çalıştır. // $('script[src^="/js/jquery.min.12.4.js"]').remove(); $('.lists-menu648').tooltip(); $('.user-buttons > li.dropdown').each(function() { var counter = countCalculator(this); $(this).find('a[data-toggle="dropdown"] > .badge').html( (counter > 0 ? counter : "") ); }); // Yapım sayfasındaysa karta eklemeleri yap. if (pageUrl.search( /planetdp\.org\/title\// ) >= 0) { var readMore = document.querySelector('div[itemprop="description"] + a[data-readmore-moretext="Devamını gör"]'); if (readMore) { readMore.style.position = "relative"; readMore.style.marginRight = "15px"; } for (x = 0; x < queues.length; x++) { var queueNo = queues.length - (x + 1); var infos2 = queues[queueNo][0]; var isInQueue = queues[queueNo][1][cardId] != null; var buttonTitle = (isInQueue ? 'Listeden çıkar: ' : 'Listeye ekle: ') + infos2.name; if (isInQueue) { var q = queues[queueNo][1][cardId]; var currentTime = new Date().getTime(); buttonTitle += (q.active == 1 ? '' : enter + 'Aktifleşme: ' + millisecondConverter( (q.activateTime - currentTime) , "ms", "day") + ' gün sonra') + enter + (q.note == '' ? '' : 'Not: ' + q.note); } var queuButton = '<a href="#" id="queue648_' + infos2.id + '" title="' + buttonTitle + '" onclick="this.classList.toggle(`inQueue`)" class="' + (isInQueue ? 'inQueue': '') + '" style="margin-right: 10px; float: left;"><i class="fa fa-tasks" aria-hidden="true"></i></a>'; document.querySelector('div.baba_main_right > div.text-right.marginver10').insertAdjacentHTML('afterbegin', queuButton); GM_addStyle('#queue648_' + infos2.id + ':hover, #queue648_' + infos2.id + '.inQueue {color: ' + infos2.color + '!important;}'); // Kuyruğa yapım ekleme/çıkarma fonksiyonunu bağla. if (isInQueue) { document.querySelector('div.baba_main_right #queue648_' + infos2.id).onclick = (function(t, id) { return function (e) { removeQueueContent(t, id); }; })(x, cardId); } else { document.querySelector('div.baba_main_right #queue648_' + infos2.id).onclick = (function(t) { return function (e) { createQueueContent(t); }; })(x); } } } } } function countCalculator(dropdownLi) { var number = 0; $(dropdownLi).find('a:not([data-toggle="dropdown"]) > .badge:not(.no-counter)').each(function() { number += parseInt( this.textContent.trim().replace( /(\d+) - \d+/, "$1" ) ); }); return number; } function createQueueContent(queueNo) { var queues = GM_getValue("queueArray"); var r_queueNo = queues.length - (queueNo + 1); var infos = queues[r_queueNo][0]; var c_delay = infos.delay; var c_note = infos.note; var note = ''; var delay = c_delay; // Lazımsa notu ve/veya gecikme süresini al. if (c_note == 0 || c_delay == "?") { insertWindow("content", "tasks", "Listeye ekle: " + infos.name, true, infos.color); var formContent = []; if (c_note == 0) {formContent.push( {name: 'Açıklama', element: 'textarea', elementProperties: 'id="queue_content_note" placeholder="Yapılacak iş ile ilgili bir not bırakabilirsiniz. Bu alan zorunlu değildir." style="resize: vertical;"'} );} if (c_delay == "?") {formContent.push( {name: 'Öğe Aktifleşme Gecikmesi', element: 'select', elementProperties: 'id="queue_content_delay"', inside: function() {return optionsHTML(this.options);}, options: [ {value: '0', text: 'Yok'}, {value: '1', text: '1 gün sonra'}, {value: '2', text: '2 gün sonra'}, {value: '3', text: '3 gün sonra'}, {value: '7', text: '7 gün sonra'}, {value: '15', text: '15 gün sonra'}, {value: '30', text: '30 gün sonra'}, {value: '*', text: 'Gün sayısını elle gir'}] } );} document.querySelector('#content-form > .window-content').insertAdjacentHTML("afterbegin", createformHTML(formContent) ); if (c_delay == "?") {askToPerson( document.querySelector('select#queue_content_delay'), 7 );} // Gün sayısını elle girme fonksiyonu document.querySelector('button#save_content').onclick = function() { note = (c_note == 0 ? document.querySelector("#queue_content_note").value : ''); delay = (c_delay == "?" ? getSelected("queue_content_delay") : c_delay); // Öğeyi oluştur. createContentLog(cardId, r_queueNo, delay, note, cardInfos, new Date().getTime()); removeForm("content"); }; } else { // Öğeyi oluştur. createContentLog(cardId, r_queueNo, delay, note, cardInfos, new Date().getTime()); } } function createContentLog(c_id, c_no, delay, note, c_Infos, added) { let que = GM_getValue("queueArray"); var created = added; var activateTime = created + (delay*86400000); var active = (delay == 0 ? 1 : 0); var contentInfos = {cardId: c_id, cardTitle: c_Infos.cardTitle, active: active, note: note, created: created, activateTime: activateTime, delay: delay, year: c_Infos.year, dpRaiting: c_Infos.dpRaiting, imdbID: c_Infos.imdbID, imdbRating: c_Infos.imdbRating}; que[c_no][1][c_id] = contentInfos; console.log(contentInfos); GM_setValue("queueArray", que); activateElements(); // Bekleyenleri kontrol ederek kaydet. } function removeQueueContent(queueNo, c_cardId) { var validation = confirm("Bu yapımı listeden çıkarmak istediğinize emin misiniz?"); if (validation) { var queues = GM_getValue("queueArray"); var r_queueNo = queues.length - (queueNo + 1); queues[r_queueNo][1][c_cardId] = null; GM_setValue("queueArray",queues); console.log("removed"); } } function insertQueueForm(newOrEdit, queueNo) { var windowTitle, queueColor, oldInfos; if (newOrEdit == "new") { windowTitle = "Liste Oluştur"; } else if (newOrEdit == "edit") { var library = GM_getValue("queueArray"); oldInfos = library[queueNo][0]; queueColor = oldInfos.color; windowTitle = "Listeyi Düzenle"; } insertWindow("queue", "tasks", windowTitle, true, queueColor); var formContent = [ { name: 'Liste Adı', element: 'input', elementProperties: 'id ="queue_name" type="text"' }, { name: 'Açıklama', element: 'textarea', elementProperties: 'id="queue_description" placeholder="Listenin amacı, kullanışı vs. Bu alan zorunlu değildir." style="resize: vertical;"' }, { name: 'Bildirim Olarak Göster', element: 'select', elementProperties: 'id="queue_counter"', inside: function() {return optionsHTML(this.options);}, options: [ {value:'0', text:'Evet'}, {value:'1', text:'Hayır'} ] }, { name: 'Öğe Notu', element: 'select', elementProperties: 'id="queue_note"', inside: function() {return optionsHTML(this.options);}, options: [ {value:'0', text:'Evet'}, {value:'1', text:'Hayır'}] }, { name: 'Öğe Aktifleşme Gecikmesi', element: 'select', elementProperties: 'id="queue_delay"', inside: function() {return optionsHTML(this.options);}, options: [ {value: '?', text: 'Ekleyişte sor'}, {value: '0', text: 'Yok'}, {value: '1', text: '1 gün sonra'}, {value: '2', text: '2 gün sonra'}, {value: '3', text: '3 gün sonra'}, {value: '7', text: '7 gün sonra'}, {value: '15', text: '15 gün sonra'}, {value: '30', text: '30 gün sonra'}, {value: '*', text: 'Gün sayısını elle gir'}, ] }, { name: 'Sıralama', element: 'select', elementProperties: 'id="queue_sortBy"', inside: function() {return optionsHTML(this.options);}, options: [ {value: 'created', text: 'Ekleme Tarihine Göre'}, {value: 'activateTime', text: 'Aktifleşme Tarihine Göre'}, {value: 'cardTitle', text: 'Alfabetik'}, {value: 'year', text: 'Yıla Göre'}, {value: 'imdbRating', text: 'IMDb Puanına Göre'}, {value: 'dpRaiting', text: 'PlanetDP Puanına Göre'}, ] }, { name: 'Liste Rengi', element: 'select', elementProperties: 'id="queue_color" onchange="this.className = `form-control ` + this.options[this.selectedIndex].value"', inside: function() {return colorOptionsHTML();} } ]; document.querySelector('#queue-form > .window-content').insertAdjacentHTML("afterbegin", createformHTML(formContent) ); askToPerson( document.querySelector('select#queue_delay'), 8 ); // Gün sayısını elle girme fonksiyonu if (newOrEdit == "new") { document.querySelector('button#save_queue').onclick = function() { createEditQueue(); }; fillNewEditQueueForm(defaultQueueForm); } else if (newOrEdit == "edit") { fillNewEditQueueForm(oldInfos); document.querySelector('button#save_queue').onclick = function() { createEditQueue(queueNo); createQueueWindow(queueNo); }; document.querySelector('#queue-form button#close').onclick = function() { removeForm("queue"); createQueueWindow(queueNo); }; } } function fillNewEditQueueForm(i_infos) { document.querySelector('input#queue_name').value = i_infos.name; document.querySelector('textarea#queue_description').value = i_infos.description; setSelected("queue_counter", i_infos.counter); setSelected("queue_note", i_infos.note); setSelected("queue_delay", i_infos.delay); setSelected("queue_sortBy", i_infos.sortBy); setSelected("queue_color", i_infos.color); } function setSelected(selectId, option) { $('select#' + selectId + ' option[value="' + option + '"]').prop('selected', true); } function askToPerson(delaySelection, askIndex) { delaySelection.onchange = function() { if(delaySelection.selectedIndex === askIndex) { var manualDelay; for (x = 0; !Number.isInteger( parseInt(manualDelay) ); x++) { manualDelay = prompt("Listeye eklenen öğeler kaç gün sonra aktifleşsin?"); if (manualDelay == null) { break; } } if (manualDelay != null) { delaySelection.insertAdjacentHTML("beforeend", '<option value="' + manualDelay + '">' + manualDelay + ' gün sonra</option>'); delaySelection.querySelector('option[value="' + manualDelay + '"]').selected = true; } else { delaySelection.firstElementChild.selected = true; } } }; } function createformHTML(object) { var formContentHTML = ''; for (x = 0; x < object.length; x++) { var f = object[x]; formContentHTML += ` <div class="row margintop10"> <div class="col-md-4">` + f.name + `</div> <div class="col-md-8"> <` + f.element + ` ` + f.elementProperties + ` class="form-control">` + (f.inside ? f.inside(): '') + `</` + f.element + `> </div> </div>`; } return formContentHTML; } function optionsHTML(object) { var html = ''; for (var y = 0; y < object.length; y++ ) { html += '<option value="' + object[y].value + '">' + object[y].text + '</option>'; } return html; } function colorOptionsHTML() { var queueColorsHTML = ""; var queueColors = ["blueviolet", "brown", "cadetblue", "chocolate", "crimson", "darkgoldenrod", "dodgerblue", "forestgreen", "lightseagreen", "mediumvioletred", "olive", "orangered", "orchid", "palevioletred", "peru", "rebeccapurple", "royalblue", "teal", "tomato"]; for (x = 0; x < queueColors.length; x++) { queueColorsHTML += '<option value="' + queueColors[x] + '" style="background-color: ' + queueColors[x] + '"' + (x==0 ? 'selected': '') + '>' + queueColors[x] + '</option>'; GM_addStyle('.' + queueColors[x] + ' {background-color: ' + queueColors[x] + '}'); } return queueColorsHTML; } function createEditQueue(c_queueNo) { var name = document.querySelector('input#queue_name').value; var description = document.querySelector('textarea#queue_description').value; var counter = getSelected("queue_counter"); var note = getSelected("queue_note"); var delay = getSelected("queue_delay"); var sortBy = getSelected("queue_sortBy"); var color = getSelected("queue_color"); if (name == "") { alert("Bir liste adı girmeniz gerekiyor."); } else { var id = name.replace(/[\[\]\(\)\"\!\'\^\#\+\%\&\/\\\{\}\=\*\|\-\_\@\,\;\`\:\.<>\¨\~]/gi,"").replace(/\s+/g,"_").toLowerCase(); var currentTime = new Date().getTime(); var queueArray = GM_getValue("queueArray"); if (queueArray == null) { queueArray = []; } if (c_queueNo == null) { var infos = {id: id, created: currentTime, name: name, description: description, counter: counter, note: note, delay: delay, sortBy: sortBy, color: color, version: version}; var newQueue = [ infos, [], [] ]; // infos, active/waiting, completed queueArray.push(newQueue); } else { var oldInfos = queueArray[c_queueNo][0]; var editedInfos = {id: id, created: oldInfos.created, name: name, description: description, counter: counter, note: note, delay: delay, sortBy: sortBy, color: color, version: version}; queueArray[c_queueNo][0] = editedInfos; } // Kaydet ve pencereyi kapat. GM_setValue("queueArray", queueArray); removeForm("queue"); } } function getSelected(selectId) { var selected = document.querySelector('select#' + selectId); if (selected != null) { selected = selected.options[selected.selectedIndex].value; return selected; } else { return null; } } function insertWindow(formName, faIcon, title, saveButton, iconColor) { // Formu ekle var formContainerHTML = ` <div class="mfp-bg mfp-ready"></div> <div class="mfp-wrap mfp-close-btn-in mfp-auto-cursor mfp-ready" tabindex="-1" style="overflow: hidden auto;"><div class="mfp-container mfp-inline-holder"><div class="mfp-content"> <form id="` + formName + `-form" class="white-popup-block" style="padding-top: 30px"> <fieldset class="window-header"> <h1 style="font-size: 25px;"> <i class="fa fa-` + faIcon + `" aria-hidden="true" style="margin-right: 10px; color:` + (iconColor =! null ? iconColor : 'inherit') + `"></i>` + title + ` </h1> </fieldset> <fieldset class="window-content margintop10">` + (saveButton ? `<div class="row margintop10 text-center"><button id="save_` + formName + `" type="button" class="btn btn-info" style="margin-top: 10px;">KAYDET</button></div>` : '') + ` </fieldset> <button id="close" title="Kapat (Esc)" type="button" class="mfp-close">×</button> </form></div></div></div> `; document.querySelector('body').insertAdjacentHTML("afterbegin", formContainerHTML); // Kapat tuşuyla formu kapat document.querySelector('#' + formName + '-form > button#close').onclick = function() { removeForm(formName); }; // Esc ile formu kapat function doc_keyUp(e) { if (e.key === "Escape") { removeForm(formName); } } document.addEventListener('keyup', doc_keyUp, false); /* Bu kod firefox'da her daim çalıştığı için sorun çıkardı. // Form dışı bir yere tıklama ile formu kapat window.onclick = function(event) { if (event.target.closest('#' + formName + '-form') == null) { removeForm(formName); } }; */ } function removeForm(formName) { if ( document.querySelector('#' + formName + '-form') ) { var formDiv = document.querySelector('#' + formName + '-form').parentElement.parentElement.parentElement; formDiv.previousElementSibling.remove(); formDiv.remove(); } } function classToogle(element, classes) { for (let x = 0; x < classes.length; x++) { element.classList.toggle( classes[x] ); } } function arrayFilter(sourceArray, targetArray, type) { for (let x = 0; x < sourceArray.length; x++) { if (sourceArray[x] != null) { if (type == "active") { if (sourceArray[x].active == 1) targetArray.push(sourceArray[x]); } else if (type == "waiting") { if (sourceArray[x].active == 0) targetArray.push(sourceArray[x]); } else { targetArray.push(sourceArray[x]); } } } } function arraySorter(array, objectOrNot, objectType) { if (objectOrNot == "object") { array.sort(function(a, b) { var x = ( isFinite(a[objectType]) ) ? Number(a[objectType]) : a[objectType].toString().toLowerCase(); var y = ( isFinite(b[objectType]) ) ? Number(b[objectType]) : b[objectType].toString().toLowerCase(); if (x < y) {return -1;} if (x > y) {return 1;} return 0; }); if (objectType == "imdbRating" || objectType == "dpRaiting") array.reverse(); } else if (objectOrNot == "nonObject") { array.sort(); } } function millisecondConverter( unit, from, to ) { var result; switch (from) { case "ms" : switch (to) { case "year": result = Math.round(unit / 31556952000); break; case "month" : result = Math.round(unit / 2592000000); break; case "week" : result = Math.round(unit / 604800000); break; case "day" : result = Math.round(unit / 86400000); break; case "hour" : result = Math.round(unit / 3600000); break; case "minute" : result = Math.round(unit / 60000); break; case "second" : result = Math.round(unit / 1000); break; } break; case "year": switch (to) {case "ms": result = unit * 31556952000; break;} break; case "month": switch (to) {case "ms": result = unit * 2592000000; break;} break; case "week": switch (to) {case "ms": result = unit * 604800000; break;} break; case "day": switch (to) {case "ms": result = unit * 86400000; break;} break; case "hour": switch (to) {case "ms": result = unit * 3600000; break;} break; case "minute": switch (to) {case "ms": result = unit * 60000; break;} break; case "second": switch (to) {case "ms": result = unit * 1000; break;} break; } return result; } function addForumExport() { var appsArea = document.querySelector('.cke_toolbar.cke_toolbar_last > .cke_toolbar_end').previousElementSibling; var appButton = ` <a id="cke_queue" class="cke_button cke_button_off" href="javascript:void('Queue')" title="Liste Çıktısı Al" role="button"> <span class="cke_button_icon" style="background-image: url('https://images2.imgbox.com/6a/18/KWBxXjc7_o.png'); background-position: 0 0px; background-size: 16px;"></span> </a> `; appsArea.insertAdjacentHTML("beforeend", appButton); appsArea.querySelector('#cke_queue').onclick = function() { var library = GM_getValue("queueArray"); var promtText = 'Aşağıdaki listelerden çıktısını almak istediğinizin numarısını girin:' + enter; for (let x = 0; x < library.length; x++) { promtText += enter + x + " - " + library[x][0].name; } var queueNo = prompt(promtText); if (queueNo) { var infos = library[queueNo][0]; var array = []; arrayFilter(library[queueNo][1], array); arraySorter(array, "object", infos.sortBy); var queueHTMLli = ''; for (let x = 0; x < array.length; x++) { var a =array[x]; queueHTMLli += `<li><strong><a href="https://www.planetdp.org/title/-dp` + a.cardId + `" rel="external nofollow">PlanetDP</a> | <a href="https://www.imdb.com/title/tt` + a.imdbID + `" rel="external nofollow">IMDb</a></strong> >> <strong>` + a.cardTitle + ` (` + a.year + `)</strong></li>`; } var queueHTML = '<p>Liste: <strong>' + infos.name + ' (' + array.length + ')</strong></p><ul>' + queueHTMLli + '</ul>'; appsArea.closest('.cke_inner.cke_reset').querySelector('div.cke_enable_context_menu.cke_editable[role="textbox"]').insertAdjacentHTML("beforeend", queueHTML); } }; } function waitForKeyElements ( selectorTxt, /* Required: The jQuery selector string that specifies the desired element(s). */ actionFunction, /* Required: The code to run when elements are found. It is passed a jNode to the matched element. */ bWaitOnce, /* Optional: If false, will continue to scan for new elements even after the first match is found. */ iframeSelector /* Optional: If set, identifies the iframe to search. */ ) { var targetNodes, btargetsFound; if (typeof iframeSelector == "undefined") targetNodes = $(selectorTxt); else targetNodes = $(iframeSelector).contents () .find (selectorTxt); if (targetNodes && targetNodes.length > 0) { btargetsFound = true; /*--- Found target node(s). Go through each and act if they are new. */ targetNodes.each ( function () { var jThis = $(this); var alreadyFound = jThis.data ('alreadyFound') || false; if (!alreadyFound) { //--- Call the payload function. var cancelFound = actionFunction (jThis); if (cancelFound) btargetsFound = false; else jThis.data ('alreadyFound', true); } } ); } else { btargetsFound = false; } //--- Get the timer-control variable for this selector. var controlObj = waitForKeyElements.controlObj || {}; var controlKey = selectorTxt.replace (/[^\w]/g, "_"); var timeControl = controlObj [controlKey]; //--- Now set or clear the timer as appropriate. if (btargetsFound && bWaitOnce && timeControl) { //--- The only condition where we need to clear the timer. clearInterval (timeControl); delete controlObj [controlKey]; } else { //--- Set a timer, if needed. if ( ! timeControl) { timeControl = setInterval ( function () { waitForKeyElements ( selectorTxt, actionFunction, bWaitOnce, iframeSelector ); }, 300 ); controlObj [controlKey] = timeControl; } } waitForKeyElements.controlObj = controlObj; } })();