├── Emp++_Tag_Highlighter.user.js ├── Emp++_Tag_Highlighter07.user.js └── Emp++_Tag_Highlighter08beta.user.js /Emp++_Tag_Highlighter.user.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name Emp++ Tag Highlighter 3 | // @version 0.6.3 4 | // @description highlights liked/disliked tags 5 | // @grant GM_getValue 6 | // @grant GM_setValue 7 | // @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js 8 | // @match http://*.empornium.me/* 9 | // @match https://*.empornium.me/* 10 | // @match http://empornium.me/* 11 | // @match https://empornium.me/* 12 | // @match http://*.empornium.sx/* 13 | // @match https://*.empornium.sx/* 14 | // @match http://empornium.sx/* 15 | // @match https://empornium.sx/* 16 | // @match http://pornbay.org/* 17 | // @match https://pornbay.org/* 18 | // @namespace LaMa 19 | // ==/UserScript== 20 | 21 | 22 | // Changelog: 23 | // Version 0.6.3 24 | // - Added text to inform of update 25 | // Version 0.6.2 26 | // - Preparing for new "branch". 27 | // - "Tag config" renamed "old tag config". 28 | // Version 0.6.1 29 | // - updated taglinks 30 | // Version 0.6.0 31 | // - Added more tag-groups 32 | // - Removed autodownvote, it shouldn't be used anyway (it's still in the code if you need to deactivate it or notice problems) 33 | // - Changed Useless tags to only be toggle-able on Disliked tags to save space. Let me know if you disagree with this decision 34 | // - Loved Performers/tags can be toggled after you liked a perfomer/tag 35 | // - few size changes to fit all in the config window 36 | 37 | function runScript(){ 38 | var $j = $.noConflict(true); 39 | 40 | var defaults = { 41 | majorVersion : 0.6, 42 | //Options 43 | truncateTags : true, 44 | //Browse Page Options 45 | usePercentBar : false, 46 | useTorrentOpacity : false, 47 | useTorrentColoring : false, 48 | //Tag types to use 49 | useGoodTags : true, 50 | useLovedTags : true, 51 | usePerformerTags : true, 52 | useLoveperfTags : true, 53 | useNewperfTags : true, 54 | useBadTags : true, 55 | useTerribleTags : false, 56 | useUselessTags : false 57 | }; 58 | 59 | var settings = getSettings(); 60 | 61 | settings = $j.extend(true, defaults, settings); 62 | 63 | if(settings.majorVersion < defaults.majorVersion){ 64 | settings.majorVersion = defaults.majorVersion; 65 | saveSettings(); 66 | //handle upgrade 67 | } 68 | 69 | //import tags from pre-v0.4 ETH 70 | if(!settings.tags){ 71 | settings.tags = { 72 | good : getValue("good_tags", "").split(' '), 73 | loved : getValue("loved_tags", "").split(' '), 74 | performer : getValue("performer_tags", "").split(' '), 75 | loveperf : getValue("loveperf_tags", "").split(' '), 76 | newperf : getValue("newperf_tags", "").split(' '), 77 | bad : getValue("bad_tags", "").split(' '), 78 | terrible : getValue("terrible_tags", "").split(' '), 79 | useless : getValue("useless_tags", "").split(' ') 80 | }; 81 | saveSettings(); 82 | } 83 | 84 | var configHTML = 85 | "
" + 86 | "
" + 87 | "

Old Empornium++Tag Highlighter Settings

" + 88 | "
" + 89 | "" + 100 | "
" + 101 | "
" + 102 | "
" + 103 | "

New version is out. Check Github

" + 104 | "
" + 105 | "

Enable/Disable Tag Types:

" + 106 | "" + 107 | "" + 108 | "" + 109 | "" + 110 | "" + 111 | "" + 112 | "" + 113 | "" + 114 | "

Torrent Display Options:

" + 115 | "" + 117 | "" + 119 | "" + 121 | "
" + 122 | "" + 123 | "
" + 124 | "
" + 125 | "
" + 126 | "
" + 130 | "
" + 134 | "" + 136 | "
" + 137 | "
" + 138 | "
" + 142 | "
" + 146 | "" + 148 | "
" + 149 | "
" + 150 | "
" + 154 | "
" + 158 | "" + 160 | "
" + 161 | "
" + 162 | "
" + 166 | "
" + 170 | "" + 172 | "
" + 173 | "
" + 174 | "
" + 178 | "
" + 182 | "" + 184 | "
" + 185 | "
" + 186 | "
" + 190 | "
" + 194 | "" + 196 | "
" + 197 | "
" + 198 | "
" + 202 | "
" + 206 | "" + 208 | "
" + 209 | "
" + 210 | "
" + 214 | "
" + 218 | "" + 220 | "
" + 221 | "
" + 222 | "
" + 223 | "
" + 224 | "" + 225 | "
" + 226 | "
" + 227 | "
"; 228 | 229 | var stylesheet = ""; 321 | (function init() { 322 | // add stylesheet 323 | $j(stylesheet).appendTo("head"); 324 | var test = $j('#torrent_table tbody tr.torrent.rowb').css('background-color'); 325 | $j('#torrent_table').css('background-color',test); 326 | 327 | 328 | 329 | // add config link 330 | $j("
  • Old Tag-Config
  • ").insertAfter("#nav_userinfo").on("click", function(e){ 331 | e.preventDefault(); 332 | initConfig($j(configHTML).prependTo("body")); 333 | }); 334 | 335 | if(/torrents\.php/.test(window.location.href)){ 336 | // torrent details 337 | if(/\bid\=/.test(window.location.href)){ 338 | processDetailsPage(); 339 | } 340 | // torrents overview 341 | else{ 342 | processBrowsePage(".torrent", "torrent"); 343 | } 344 | } 345 | // collage details/overview 346 | else if(/collages\.php/.test(window.location.href)){ 347 | processBrowsePage(".rowa, .rowb", "collage"); 348 | } 349 | // subscribed collages with new additions 350 | else if(/userhistory\.php(.+)\bsubscribed_collages/.test(window.location.href)){ 351 | processBrowsePage(".torrent", "torrent"); 352 | } 353 | // user details 354 | else if(/user\.php(.+)\bid\=/.test(window.location.href)){ 355 | processBrowsePage(".torrent", "torrent"); 356 | } 357 | // top 10 358 | else if(/top10\.php/.test(window.location.href)){ 359 | processBrowsePage(".torrent", "torrent"); 360 | } 361 | else if(/bookmarks\.php/.test(window.location.href)){ 362 | processBrowsePage(".rowa, .rowb", "request"); 363 | } 364 | else if(/requests\.php/.test(window.location.href)){ 365 | if(/\bid\=/.test(window.location.href)){ 366 | processDetailsPage(); 367 | } 368 | else{ 369 | processBrowsePage(".rowa, .rowb", "request"); 370 | } 371 | } 372 | }()); 373 | 374 | function processBrowsePage(rowSelector, type){ 375 | var rows = $j(rowSelector); 376 | 377 | rows.each(function(i, row){ 378 | row = $j(row); 379 | var tagContainer = row.find(".tags").addClass("s-browse-tag-holder").css({ 380 | "line-height" : "18px" 381 | }), 382 | totalTagNum = tagContainer.find("a").length, 383 | goodNum = 0, badNum = 0, terribleNum = 0, uselessNum = 0; 384 | 385 | if(!totalTagNum){ 386 | return; 387 | } 388 | tagContainer.find("a").each(function(i, tagLink){ 389 | tagLink = $j(tagLink); 390 | var tag = tagLink.text(); 391 | 392 | tagLink = tagLink.wrap("").parent().addClass("s-tag"); 393 | tag = tag.toLowerCase(); 394 | 395 | if(settings.useLovedTags && isTag(settings.tags.loved, tag)){ 396 | goodNum++; 397 | tagLink.addClass("s-loved"); 398 | } 399 | else if(settings.useGoodTags && isTag(settings.tags.good, tag)){ 400 | goodNum++; 401 | tagLink.addClass("s-good"); 402 | } 403 | else if(settings.useLoveperfTags && isTag(settings.tags.loveperf, tag)){ 404 | goodNum++; 405 | tagLink.addClass("s-loveperf"); 406 | } 407 | else if(settings.usePerformerTags && isTag(settings.tags.performer, tag)){ 408 | goodNum++; 409 | tagLink.addClass("s-performer"); 410 | } 411 | else if(settings.useNewperfTags && isTag(settings.tags.newperf, tag)){ 412 | goodNum++; 413 | tagLink.addClass("s-newperf"); 414 | } 415 | else if(settings.useTerribleTags && isTag(settings.tags.terrible, tag)){ 416 | if(!terribleNum){ 417 | var colspan = row.children().length; 418 | row.hide(); 419 | $j("").insertAfter(row).html( 420 | "" + capitaliseFirstLetter(type) + 421 | " hidden because of the blacklisted tag: " + tag + 422 | ". Click here to display the " + type + " listing."). 423 | on("click", function(){ 424 | $j(this).hide(); 425 | row.show(); 426 | }); 427 | } 428 | terribleNum++; 429 | badNum++; 430 | tagLink.addClass("s-terrible s-bad"); 431 | } 432 | else if(settings.useUselessTags && isTag(settings.tags.useless, tag)){ 433 | totalTagNum--; 434 | tagLink.addClass("s-useless"); 435 | } 436 | else if(settings.useBadTags && isTag(settings.tags.bad, tag)){ 437 | badNum++; 438 | tagLink.addClass("s-bad"); 439 | } 440 | 441 | 442 | }); 443 | var goodPercent = Math.round(goodNum/totalTagNum * 100); 444 | var badPercent = Math.round(badNum/totalTagNum * 100); 445 | 446 | if(settings.usePercentBar){ 447 | var percentContainer = $j("
    )").insertBefore(tagContainer); 448 | percentContainer.width(tagContainer.parent().width() - 2); 449 | $j("
    ").appendTo(percentContainer).addClass("s-percent s-percent-good").width(goodPercent + "%"); 450 | $j("
    ").appendTo(percentContainer).addClass("s-percent s-percent-bad").width(badPercent + "%"); 451 | } 452 | 453 | if(settings.useTorrentOpacity && badPercent > goodPercent){ 454 | //opacity range: 0.5 - 1 455 | row.css("opacity", (100 - ((badPercent - goodPercent)/2))/100); 456 | } 457 | 458 | if(settings.useTorrentColoring){ 459 | //range -1 to 1 460 | var netPercent = (goodPercent - badPercent)/100; 461 | var absPercent = Math.abs(netPercent); 462 | var green = [120, 200, 120]; 463 | var red = [210, 120, 120]; 464 | var color; 465 | if(netPercent > 0){ 466 | color= green; 467 | } 468 | else if(netPercent < 0){ 469 | color = red; 470 | } 471 | else{ 472 | //color = [239,243,246]; 473 | } 474 | if(color && !row.hasClass("redbar") && /torrents\.php/.test(window.location.href) && !/userid\=/.test(window.location.href)){ 475 | row.css({"background-color" : "rgba("+color[0]+","+color[1]+","+color[2]+","+absPercent+""}); 476 | } 477 | } 478 | }); 479 | } 480 | 481 | function processDetailsPage(){ 482 | var isTagsLoaded = false; 483 | 484 | var handleTagListLoad = function(){ 485 | isTagsLoaded = false; 486 | var checkTagList = function(){ 487 | if($j("#torrent_tags li a").hasClass("tags-loaded")){ 488 | setTimeout(checkTagList, 30); 489 | } 490 | else{ 491 | highlightDetailTags(); 492 | } 493 | }; 494 | checkTagList(); 495 | }; 496 | 497 | $j(".tag_header span a, #form_addtag input[type='button']").on("click", handleTagListLoad); 498 | $j("#tagname").on("keydown", function(e){ 499 | if(e.keyCode === 13){ 500 | handleTagListLoad(); 501 | } 502 | }); 503 | 504 | var highlightDetailTags = function(){ 505 | if(isTagsLoaded) return; 506 | //Timeout to ensure we run after everything else 507 | var tagLinks = $j("#torrent_tags").find("a[href*='\\?taglist=']"); 508 | 509 | isTagsLoaded = tagLinks.length > 0; 510 | 511 | if(!isTagsLoaded){ 512 | setTimeout(highlightDetailTags, 200); 513 | return; 514 | } 515 | 516 | $j("").appendTo("#torrent_tags").on("spyder.change", function(){ 517 | var hiddenTagHolder = $j(this), 518 | hiddenTags = hiddenTagHolder.find("span.s-tag"); 519 | 520 | if(hiddenTags.length){ 521 | $j(".s-useless-msg").text("There's " + hiddenTags.length + " useless tag" + (hiddenTags.length > 1 ? "s" : "") + " on this torrent "); 522 | $j(".s-useless-msg, .s-useless-toggle").show(); 523 | } 524 | else{ 525 | $j(".s-useless-msg, .s-useless-toggle").hide(); 526 | } 527 | }).before("
    SHOW
    "); 528 | 529 | $j(".s-useless-toggle").on("click", function(){ 530 | $j(".s-useless-tags").slideToggle("fast", function(){ 531 | if($j(this).is(":visible")){ 532 | $j(".s-useless-toggle").text("HIDE"); 533 | } 534 | else{ 535 | $j(".s-useless-toggle").text("SHOW"); 536 | } 537 | }); 538 | }); 539 | 540 | tagLinks.each(function(i, tagLink){ 541 | tagLink = $j(tagLink).addClass("tags-loaded"); 542 | var tag = tagLink.text(), 543 | tagHolder = tagLink.wrap("").parent().addClass("s-tag"); 544 | 545 | tag = tag.toLowerCase(); 546 | 547 | if(settings.useLovedTags && isTag(settings.tags.loved, tag)){ 548 | tagHolder.addClass("s-loved"); 549 | } 550 | else if(settings.useGoodTags && isTag(settings.tags.good, tag)){ 551 | tagHolder.addClass("s-good"); 552 | } 553 | else if(settings.useLoveperfTags && isTag(settings.tags.loveperf, tag)){ 554 | tagHolder.addClass("s-loveperf"); 555 | } 556 | else if(settings.usePerformerTags && isTag(settings.tags.performer, tag)){ 557 | tagHolder.addClass("s-performer"); 558 | } 559 | else if(settings.useNewperfTags && isTag(settings.tags.newperf, tag)){ 560 | tagHolder.addClass("s-newperf"); 561 | } 562 | else if(settings.useUselessTags && isTag(settings.tags.useless, tag)){ 563 | var uselessTag = tagHolder.addClass("s-useless"); 564 | 565 | 566 | 567 | uselessTag.parent().detach().appendTo(".s-useless-tags").trigger("spyder.change"); 568 | } 569 | else if(settings.useTerribleTags && isTag(settings.tags.terrible, tag)){ 570 | tagHolder.addClass("s-terrible"); 571 | } 572 | else if(settings.useBadTags && isTag(settings.tags.bad, tag)){ 573 | tagHolder.addClass("s-bad"); 574 | } 575 | var buttons = $j(); 576 | if(settings.useGoodTags){ 577 | buttons = buttons.add($j("
    +
    "). 578 | data("action", {fn : addTagElement, type : "good", tag : tag})); 579 | buttons = buttons.add($j("
    "). 580 | data("action", {fn : removeTagElement, type : "good", tag : tag})); 581 | } 582 | if(settings.useLovedTags){ 583 | buttons = buttons.add($j("
    +
    "). 584 | data("action", {fn : addLovedTagElement, type : "loved", tag : tag})); 585 | buttons = buttons.add($j("
    "). 586 | data("action", {fn : removeLovedTagElement, type : "loved", tag : tag})); 587 | } 588 | if(settings.usePerformerTags){ 589 | buttons = buttons.add($j("
    +
    "). 590 | data("action", {fn : addTagElement, type : "performer", tag : tag})); 591 | buttons = buttons.add($j("
    "). 592 | data("action", {fn : removeTagElement, type : "performer", tag : tag})); 593 | } 594 | if(settings.useLoveperfTags){ 595 | buttons = buttons.add($j("
    +
    "). 596 | data("action", {fn : addLoveperfTagElement, type : "loveperf", tag : tag})); 597 | buttons = buttons.add($j("
    "). 598 | data("action", {fn : removeLoveperfTagElement, type : "loveperf", tag : tag})); 599 | } 600 | if(settings.useNewperfTags){ 601 | buttons = buttons.add($j("
    +
    "). 602 | data("action", {fn : addTagElement, type : "newperf", tag : tag})); 603 | buttons = buttons.add($j("
    "). 604 | data("action", {fn : removeTagElement, type : "newperf", tag : tag})); 605 | } 606 | if(settings.useBadTags){ 607 | buttons = buttons.add($j("
    ×
    "). 608 | data("action", {fn : addTagElement, type : "bad", tag : tag})); 609 | buttons = buttons.add($j("
    "). 610 | data("action", {fn : removeTagElement, type : "bad", tag : tag})); 611 | } 612 | if(settings.useTerribleTags){ 613 | buttons = buttons.add($j("
    !
    "). 614 | data("action", {fn : addTerribleTagElement, type : "terrible", tag : tag})); 615 | buttons = buttons.add($j("
    "). 616 | data("action", {fn : removeTerribleTagElement, type : "terrible", tag : tag})); 617 | } 618 | if(settings.useUselessTags){ 619 | buttons = buttons.add($j("
    -
    "). 620 | data("action", {fn : addUselessTagElement, type : "useless", tag : tag})); 621 | buttons = buttons.add($j("
    "). 622 | data("action", {fn : removeUselessTagElement, type : "useless", tag : tag})); 623 | } 624 | $j(buttons).addClass("s-button").prependTo(tagHolder); 625 | 626 | // create more horizontal space by hiding "tag action" placeholder spans 627 | tagHolder.next().find("span:contains('\xa0\xa0\xa0')").hide(); 628 | // staff/mods have additional "tag actions", allow for additional styling 629 | if (tagHolder.next().find("a").length > 2){ 630 | tagHolder.addClass("s-staff"); 631 | } 632 | }); 633 | 634 | $j(".s-button").on("click", function(e){ 635 | var data = $j(this).data("action"); 636 | data.fn(data.type, $j(this).parent(), data.tag); 637 | }); 638 | }; 639 | 640 | highlightDetailTags(); 641 | 642 | $j(".s-useless-tags").trigger("spyder.change"); 643 | } 644 | 645 | //Configuration 646 | function initConfig(base){ 647 | //Init Display 648 | for(var name in settings){ 649 | if(settings.hasOwnProperty(name)){ 650 | if(name == "tags"){ 651 | for(var tagType in settings[name]){ 652 | if(settings[name].hasOwnProperty(tagType)){ 653 | displayTags(tagType); 654 | } 655 | } 656 | } 657 | else{ 658 | $j("input[name='"+name+"']").prop("checked", settings[name]); 659 | } 660 | } 661 | } 662 | 663 | //Init Listeners 664 | $j(".s-conf-tab").on("click", function(){ 665 | var tab = $j(this); 666 | if(!tab.hasClass("s-selected")){ 667 | $j(".s-conf-tab, .s-conf-page").removeClass("s-selected"); 668 | tab.addClass("s-selected"); 669 | $j(".s-conf-page#" + tab.data("page")).addClass("s-selected"); 670 | } 671 | }); 672 | 673 | $j(".s-conf-gen-checkbox").on("change", function(){ 674 | var checkbox = $j(this); 675 | var name = checkbox.attr("name"); 676 | var isChecked = checkbox.is(":checked"); 677 | 678 | if(name == "autoDownvoteTags" && isChecked && 679 | !confirm("Auto downvoting of tags should only be enabled if the tags you have marked as useless are tags " + 680 | "you would consider to ALWAYS be inappropriate for a torrent.\nAre you sure you want to enable this feature?")){ 681 | $j("input[name='autoDownvoteTags']").prop("checked", false); 682 | return; 683 | } 684 | 685 | settings[name] = isChecked; 686 | if(name == "useTerribleTags" && isChecked){ 687 | $j("input[name='useBadTags']").prop("checked", true).trigger("change"); 688 | } 689 | else if(name == "useBadTags" && !isChecked){ 690 | $j("input[name='useTerribleTags']").prop("checked", false).trigger("change"); 691 | } 692 | }); 693 | 694 | $j("#s-conf-save").on("click", function(e){ 695 | e.preventDefault(); 696 | saveSettings(); 697 | displayStatus("success", "Settings updated successfully"); 698 | }); 699 | 700 | $j("#s-conf-close").on("click", function(){ 701 | base.remove(); 702 | }); 703 | 704 | $j("#s-conf-status").on("click", "#s-conf-status-close", function(){ 705 | $j(this).parent().fadeOut("fast"); 706 | }); 707 | 708 | $j(".s-conf-add-btn, .s-conf-remove-btn").on("click", function(){ 709 | var button = $j(this); 710 | var method = button.hasClass("s-conf-remove-btn") ? removeTags : addTags; 711 | var type = button.data("type"); 712 | var input = button.prev(); 713 | var tags = $j.grep(input.val().toLowerCase().split(" "), function(tag){return tag;}); 714 | if(tags.length){ 715 | method(type, tags); 716 | input.val(""); 717 | displayTags(type); 718 | displayStatus("success", type + " tags have been updated successfully."); 719 | } 720 | else{ 721 | displayStatus("error", "Tags not updated becuase none were provided"); 722 | } 723 | }); 724 | 725 | function displayTags(type){ 726 | $j("#s-conf-text-" + type).val(settings.tags[type].join(" ")); 727 | } 728 | 729 | function displayStatus(type, msg){ 730 | $j("#s-conf-status").fadeOut("fast", function(){ 731 | $j(this).removeClass().addClass("s-" + type).html(msg + " (×)").fadeIn("fast"); 732 | }); 733 | } 734 | } 735 | 736 | //General Purpose Funcitons 737 | function addTerribleTagElement(type, holder, tag){ 738 | holder.removeClass("s-bad"); 739 | addTagElement(type, holder, tag); 740 | } 741 | function removeTerribleTagElement(type, holder, tag){ 742 | removeTagElement(type, holder, tag); 743 | holder.addClass("s-bad"); 744 | } 745 | function addLovedTagElement(type, holder, tag){ 746 | holder.removeClass("s-good"); 747 | addTagElement(type, holder, tag); 748 | } 749 | function removeLovedTagElement(type, holder, tag){ 750 | removeTagElement(type, holder, tag); 751 | holder.addClass("s-good"); 752 | } 753 | function addLoveperfTagElement(type, holder, tag){ 754 | holder.removeClass("s-perfomer"); 755 | addTagElement(type, holder, tag); 756 | } 757 | function removeLoveperfTagElement(type, holder, tag){ 758 | removeTagElement(type, holder, tag); 759 | holder.addClass("s-perfomer"); 760 | } 761 | 762 | function addUselessTagElement(type, holder, tag){ 763 | holder.parent().detach().appendTo($j(".s-useless-tags")); 764 | $j(".s-useless-tags").trigger("spyder.change"); 765 | 766 | 767 | 768 | addTagElement(type, holder, tag); 769 | } 770 | function removeUselessTagElement(type, holder, tag){ 771 | holder.parent().detach().insertBefore($j(".s-useless-desc")); 772 | $j(".s-useless-tags").trigger("spyder.change"); 773 | //undo auto-downvote if removing from useless tag list 774 | 775 | 776 | 777 | removeTagElement(type, holder, tag); 778 | } 779 | function addTagElement(type, holder, tag){ 780 | holder.addClass("s-" + type); 781 | addTags(type, tag); 782 | } 783 | function removeTagElement(type, holder, tag){ 784 | holder.removeClass("s-good s-loved s-performer s-loveperf s-newperf s-bad s-terrible s-useless"); 785 | removeTags(type, tag); 786 | } 787 | function addTags(type, tags){ 788 | settings = getSettings(); 789 | var tagArray = settings.tags[type]; 790 | var tmp = getEquivalentTags(tags); 791 | for(var i=0; i 0){ 794 | var idx = tagArray.indexOf(tag); 795 | if (idx < 0){ 796 | tagArray.push(tag); 797 | } 798 | } 799 | } 800 | saveTags(type, tagArray); 801 | } 802 | function removeTags(type, tags){ 803 | settings = getSettings(); 804 | var tagArray = settings.tags[type]; 805 | var tmp = getEquivalentTags(tags); 806 | for(var i=0; i 0){ 809 | var idx = tagArray.indexOf(tag); 810 | if (idx >= 0){ 811 | tagArray.splice(idx, 1); 812 | } 813 | } 814 | } 815 | saveTags(type, tagArray); 816 | } 817 | function isTag(allTags, tag){ 818 | if(allTags.indexOf(tag) >= 0){ 819 | return true; 820 | } 821 | else if(allTags.indexOf(tag.replace(".", "")) >= 0){ 822 | return true; 823 | } 824 | else{ 825 | return false; 826 | } 827 | } 828 | function getValue(name, def){ 829 | 830 | return GM_getValue(name, def); 831 | 832 | 833 | } 834 | function setValue(name, value){ 835 | 836 | GM_setValue(name, value); 837 | 838 | 839 | } 840 | function saveTags(name, tagArray){ 841 | var tmp = $j.grep(tagArray, function(tag){return tag;}); 842 | tmp.sort(); 843 | settings.tags[name] = tmp; 844 | saveSettings(); 845 | } 846 | function getSettings(){ 847 | return JSON.parse(getValue("spyderSettings", "{}")); 848 | } 849 | function saveSettings(){ 850 | setValue("spyderSettings", JSON.stringify(settings)); 851 | } 852 | function getEquivalentTags(tagArray){ 853 | if(typeof tagArray == "string"){ 854 | tagArray = tagArray.split(" "); 855 | } 856 | var allTags = []; 857 | for(var i = 0, length = tagArray.length; i < length; i++){ 858 | var tag = tagArray[i]; 859 | if(/\./g.test(tag)){ 860 | allTags.push(tag.replace(".", "")); 861 | } 862 | allTags.push(tag); 863 | } 864 | return allTags; 865 | } 866 | function capitaliseFirstLetter(string){ 867 | return string.charAt(0).toUpperCase() + string.slice(1); 868 | } 869 | } 870 | 871 | if(typeof jQuery == "undefined"){ 872 | addJQuery(runScript); 873 | } 874 | else{ 875 | runScript(); 876 | } 877 | 878 | function addJQuery(callback) { 879 | var script = document.createElement("script"); 880 | script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"); 881 | script.addEventListener('load', function() { 882 | var script = document.createElement("script"); 883 | script.textContent = "(" + callback.toString() + ")();"; 884 | document.body.appendChild(script); 885 | }, false); 886 | document.body.appendChild(script); 887 | } 888 | -------------------------------------------------------------------------------- /Emp++_Tag_Highlighter07.user.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name Emp++ Tag Highlighter 0.7 3 | // @version 0.7.9b 4 | // @description highlights liked/disliked tags 5 | // @grant GM_getValue 6 | // @grant GM_setValue 7 | // @require https://code.jquery.com/jquery-1.12.4.min.js 8 | // @include /^https://www\.empornium\.(me|sx|is)/ 9 | // @include /^https://www\.enthralled\.me/ 10 | // @include /^https://pornbay\.org/ 11 | // @include /^https://femdomcult\.org/ 12 | // @include /^https://www\.homeporntorrents\.club/ 13 | // ==/UserScript== 14 | 15 | // Changelog: 16 | // Version 0.7.9(b) 17 | // - fix for notifications not properly working 18 | // Version 0.7.8 19 | // - Fixed new collage address 20 | // Version 0.7.7 21 | // - Add options to ignore blacklist in bookmarks and/or collages. 22 | // - Do note that next update might be the 0.8.x-branch which might change lots of stuff from the 0.7.x 23 | // Version 0.7.6b 24 | // - Fixed a bug in Blacklisted tags not triggering properly 25 | // Version 0.7.6 26 | // - A few improvements or changes that has been suggested. 27 | // - Added checkbox for showing the blacklisted notice. 28 | // - Removed the the feature of ignoring "." in tags for performance issues. 29 | // note this will remove the "big.tits also saves bigtits automatically" feature 30 | // - Minor fixes 31 | // Version 0.7.5e 32 | // - Simplify website rules 33 | // - Fix old http links (Torrent Display Options) 34 | // - Add support for femdomcult.org 35 | // - Add support for homeporntorrents.club 36 | // Version 0.7.5d 37 | // - Add support for enthralled.me 38 | // Version 0.7.5c 39 | // - Fixing some bugs that appear after the cleaning. 40 | // Version 0.7.5b 41 | // - Cleaning up 42 | // Version 0.7.5 43 | // - Added Import/Export feature. 44 | // - Added [ESC] to close Tag Highlighter. 45 | // - Fixed some spelling mistakes 46 | // Version 0.7.3 47 | // - Updated for better/more domain handling and added some updates suggested by SturmB: 48 | // - - Adds better support for Pornbay. (Subdomains and Tag-Config link) 49 | // - - Updates jQuery to latest stable version on the v1 track. 50 | // Version 0.7.2 51 | // - Corrected a wrong placement of a 'amateur' instead of a 'loveamat' 52 | // Version 0.7.1 53 | // - Reorganized settings page to accommodate low resolution monitors 54 | // Version 0.7.0 55 | // - Added more tag-groups 56 | // - Color change to accommodate more tag-groups 57 | // - Added option to hide tag buttons 58 | // - Few renames and corrections of variables 59 | // - Few size changes to fit all text 60 | // Version 0.6.2 61 | // - Preparing for new "branch". 62 | // - "Tag config" renamed "old tag config". 63 | // Version 0.6.1 64 | // - updated taglinks 65 | // Version 0.6.0 66 | // - Added more tag-groups 67 | // - Removed autodownvote, it shouldn't be used anyway (it's still in the code if you need to deactivate it or notice problems) 68 | // - Changed Useless tags to only be toggle-able on Disliked tags to save space. Let me know if you disagree with this decision 69 | // - Loved Performers/tags can be toggled after you liked a perfomer/tag 70 | // - few size changes to fit all in the config window 71 | 72 | function runScript(){ 73 | var $j = $.noConflict(true); 74 | 75 | var defaults = { 76 | majorVersion : 0.7, 77 | //Options 78 | truncateTags : true, 79 | //Browse Page Options 80 | usePercentBar : false, 81 | useTorrentOpacity : false, 82 | useTorrentColoring : false, 83 | useTorrentBlacklistNotice : true, 84 | useBlacklistNoticeBookmark : false, 85 | useBlacklistNoticeCollages : false, 86 | //Tag types to use 87 | useGoodTags : false, 88 | useLovedTags : false, 89 | usePerformerTags : false, 90 | useLoveperfTags : false, 91 | useNewperfTags : false, 92 | useAmateurTags : false, 93 | useLoveamatTags : false, 94 | useMaleperfTags : false, 95 | useLovemaleTags : false, 96 | useLikesiteTags : false, 97 | useLovesiteTags : false, 98 | useDislikedTags : false, 99 | useHatedTags : false, 100 | useTerribleTags : false, 101 | useUselessTags : false, 102 | //Tag Button Options 103 | buttonGoodTags : false, 104 | buttonPerformerTags : false, 105 | buttonNewperfTags : false, 106 | buttonAmateurTags : false, 107 | buttonMaleperfTags : false, 108 | buttonLikesiteTags : false, 109 | buttonDislikedTags : false, 110 | }; 111 | 112 | var settings = getSettings(); 113 | 114 | settings = $j.extend(true, defaults, settings); 115 | 116 | if(settings.majorVersion < defaults.majorVersion){ 117 | settings.majorVersion = defaults.majorVersion; 118 | saveSettings(); 119 | //handle upgrade 120 | } 121 | 122 | //import tags from pre-v0.4 ETH 123 | if(!settings.tags){ 124 | settings.tags = { 125 | good : getValue("good_tags", "").split(' '), 126 | loved : getValue("loved_tags", "").split(' '), 127 | performer : getValue("performer_tags", "").split(' '), 128 | loveperf : getValue("loveperf_tags", "").split(' '), 129 | newperf : getValue("newperf_tags", "").split(' '), 130 | amateur : getValue("amateur_tags", "").split(' '), 131 | loveamat : getValue("loveamat_tags", "").split(' '), 132 | maleperf : getValue("maleperf_tags", "").split(' '), 133 | lovemale : getValue("lovemale_tags", "").split(' '), 134 | likesite : getValue("likesite_tags", "").split(' '), 135 | lovesite : getValue("lovesite_tags", "").split(' '), 136 | disliked : getValue("bad_tags", "").split(' '), 137 | hated : getValue("hated_tags", "").split(' '), 138 | terrible : getValue("terrible_tags", "").split(' '), 139 | useless : getValue("useless_tags", "").split(' ') 140 | }; 141 | saveSettings(); 142 | } 143 | 144 | 145 | var configHTML = 146 | "
    " + 147 | "
    " + 148 | "

    Empornium++Tag Highlighter Settings

    " + 149 | "
    " + 150 | 151 | // Tabs 152 | "
    " + 154 | "
  • General
  • " + 155 | "
  • Liked Tags
  • " + 156 | "
  • Loved Tags
  • " + 157 | "
  • Performer Tags
  • " + 158 | "
  • Loved Performer Tags
  • " + 159 | "
  • New Performer Tags
  • " + 160 | "
  • Amateur Tags
  • " + 161 | "
  • Loved Amateur Tags
  • " + 162 | "
  • Male Performer Tags
  • " + 163 | "" + 164 | "
    "+ 165 | "
    " + 167 | "
  • Loved Male Performer Tags
  • " + 168 | "
  • Liked Site Tags
  • " + 169 | "
  • Loved Site Tags
  • " + 170 | "
  • Disliked Tags
  • " + 171 | "
  • Hated Tags
  • " + 172 | "
  • Blacklisted Tags
  • " + 173 | "
  • Useless Tags
  • " + 174 | "
  • Import/Export
  • " + 175 | "
  • " + 176 | "" + 177 | "
    "+ 178 | // End Tabs 179 | "
    " + 180 | "
    " + 181 | "
    " + 182 | "" + 183 | "

    Enable/Disable Tag Types:

    " + 184 | "" + 185 | "" + 186 | "" + 187 | "" + 188 | "" + 189 | "" + 190 | "" + 191 | "" + 192 | "" + 193 | "" + 194 | "" + 195 | "" + 196 | "" + 197 | "" + 198 | "" + 199 | "

    Torrent Display Options:

    " + 200 | "" + 202 | "" + 204 | "" + 206 | "" + 207 | "
    " + 208 | "" + 209 | "
    " + 210 | "
    " + 211 | "
    " + 212 | "
    " + 216 | "
    " + 220 | "" + 222 | "
    " + 223 | "
    " + 224 | "
    " + 228 | "
    " + 232 | "" + 234 | "
    " + 235 | "
    " + 236 | "
    " + 240 | "
    " + 244 | "" + 246 | "
    " + 247 | "
    " + 248 | "
    " + 252 | "
    " + 256 | "" + 258 | "
    " + 259 | "
    " + 260 | "
    " + 264 | "
    " + 268 | "" + 270 | "
    " + 271 | "
    " + 272 | "
    " + 276 | "
    " + 280 | "" + 282 | "
    " + 283 | "
    " + 284 | "
    " + 288 | "
    " + 292 | "" + 294 | "
    " + 295 | "
    " + 296 | "
    " + 300 | "
    " + 304 | "" + 306 | "
    " + 307 | "
    " + 308 | "
    " + 312 | "
    " + 316 | "" + 318 | "
    " + 319 | "
    " + 320 | "
    " + 324 | "
    " + 328 | "" + 330 | "
    " + 331 | "
    " + 332 | "
    " + 336 | "
    " + 340 | "" + 342 | "
    " + 343 | "
    " + 344 | "
    " + 348 | "
    " + 352 | "" + 354 | "
    " + 355 | "
    " + 356 | "
    " + 360 | "
    " + 364 | "" + 366 | "
    " + 367 | "
    " + 368 | "
    " + 372 | "
    " + 376 | "" + 378 | "
    " + 379 | "
    " + 380 | "
    " + 384 | "
    " + 388 | "" + 390 | "
    " + 391 | // Import/Export panel 392 | "
    " + 393 | "

    Export Settings

    " + 394 | "
    " + 395 | "

    To backup your settings, copy below text to a local file. You can import these settings in the Import Settings area.

    " + 396 | "

    " + 397 | "
    " + 398 | "

    Import Settings

    " + 399 | "

    " + 400 | "

    " + 401 | "" + 402 | "
    " + 403 | // End Import/Export 404 | "
    " + 405 | "
    " + 406 | "
    " + 407 | "" + 408 | "
    " + 409 | "
    " + 410 | "
    "; 411 | 412 | 413 | var stylesheet = ""; 529 | let userInfoID = "#nav_userinfo"; // The selector that Empornium uses 530 | if ($j(userInfoID).length < 1) { 531 | userInfoID = "#nav_useredit"; // // The selector that Pornbay uses 532 | } 533 | (function init() { 534 | // add stylesheet 535 | $j(stylesheet).appendTo("head"); 536 | var test = $j('#torrent_table tbody tr.torrent.rowb').css('background-color'); 537 | $j('#torrent_table').css('background-color',test); 538 | 539 | // add config link 540 | $j("
  • Tag-Config
  • ").insertAfter(userInfoID).on("click", function(e){ e.preventDefault(); 541 | initConfig($j(configHTML).prependTo("body")); 542 | }); 543 | 544 | if(/torrents\.php/.test(window.location.href)){ 545 | // torrent details 546 | if(/\bid\=/.test(window.location.href)){ 547 | processDetailsPage(); 548 | } 549 | // torrents overview 550 | else{ 551 | processBrowsePage(".torrent", "torrent"); 552 | } 553 | } 554 | // subscribed collages with new additions 555 | else if(/userhistory\.php(.+)\bsubscribed_collages/.test(window.location.href)){ 556 | processBrowsePage(".torrent", "torrent"); 557 | } 558 | // collage details/overview 559 | else if(/collage/.test(window.location.href)){ 560 | processBrowsePage(".rowa, .rowb", "collage"); 561 | } 562 | // user details 563 | else if(/user\.php(.+)\bid\=/.test(window.location.href)){ 564 | processBrowsePage(".torrent", "torrent"); 565 | } 566 | // top 10 567 | else if(/top10\.php/.test(window.location.href)){ 568 | processBrowsePage(".torrent", "torrent"); 569 | } 570 | else if(/bookmarks\.php/.test(window.location.href)){ 571 | processBrowsePage(".rowa, .rowb", "request"); 572 | } 573 | else if(/requests\.php/.test(window.location.href)){ 574 | if(/\bid\=/.test(window.location.href)){ 575 | processDetailsPage(); 576 | } 577 | else{ 578 | processBrowsePage(".rowa, .rowb", "request"); 579 | } 580 | } 581 | }()); 582 | 583 | function processBrowsePage(rowSelector, type){ 584 | var rows = $j(rowSelector); 585 | 586 | rows.each(function(i, row){ 587 | row = $j(row); 588 | var tagContainer = row.find(".tags").addClass("s-browse-tag-holder").css({ 589 | "line-height" : "18px" 590 | }), 591 | totalTagNum = tagContainer.find("a").length, 592 | goodNum = 0, badNum = 0, terribleNum = 0, uselessNum = 0; 593 | 594 | if(!totalTagNum){ 595 | return; 596 | } 597 | tagContainer.find("a").each(function(i, tagLink){ 598 | tagLink = $j(tagLink); 599 | var tag = tagLink.text(); 600 | 601 | tagLink = tagLink.wrap("").parent().addClass("s-tag"); 602 | tag = tag.toLowerCase(); 603 | 604 | if(settings.useTerribleTags && isTag(settings.tags.terrible, tag)){ 605 | if(window.location.href.indexOf("bookmarks")!=-1 && settings.useBlacklistNoticeBookmark ){ 606 | } 607 | else if(window.location.href.indexOf("collage")!=-1 && settings.useBlacklistNoticeCollages ) { 608 | } 609 | else if(!terribleNum){ 610 | var colspan = row.children().length; 611 | row.hide(); 612 | if ( settings.useTorrentBlacklistNotice ) { 613 | $j("").insertAfter(row).html( 614 | "" + capitaliseFirstLetter(type) + 615 | " hidden because of the blacklisted tag: " + tag + 616 | ". Click here to display the " + type + " listing."). 617 | on("click", function(){ 618 | $j(this).hide(); 619 | row.show(); 620 | }); 621 | } // if 622 | } // if 623 | terribleNum++; 624 | badNum++; 625 | tagLink.addClass("s-terrible s-disliked"); 626 | } 627 | 628 | else if(settings.useLovedTags && isTag(settings.tags.loved, tag)){ 629 | goodNum++; 630 | tagLink.addClass("s-loved"); 631 | } 632 | 633 | else if(settings.useGoodTags && isTag(settings.tags.good, tag)){ 634 | goodNum++; 635 | tagLink.addClass("s-good"); 636 | } 637 | else if(settings.useLoveperfTags && isTag(settings.tags.loveperf, tag)){ 638 | goodNum++; 639 | tagLink.addClass("s-loveperf"); 640 | } 641 | else if(settings.usePerformerTags && isTag(settings.tags.performer, tag)){ 642 | goodNum++; 643 | tagLink.addClass("s-performer"); 644 | } 645 | else if(settings.useNewperfTags && isTag(settings.tags.newperf, tag)){ 646 | goodNum++; 647 | tagLink.addClass("s-newperf"); 648 | } 649 | else if(settings.useLoveamatTags && isTag(settings.tags.loveamat, tag)){ 650 | goodNum++; 651 | tagLink.addClass("s-loveamat"); 652 | } 653 | else if(settings.useAmateurTags && isTag(settings.tags.amateur, tag)){ 654 | goodNum++; 655 | tagLink.addClass("s-amateur"); 656 | } 657 | else if(settings.useLovemaleTags && isTag(settings.tags.lovemale, tag)){ 658 | goodNum++; 659 | tagLink.addClass("s-lovemale"); 660 | } 661 | else if(settings.useMaleperfTags && isTag(settings.tags.maleperf, tag)){ 662 | goodNum++; 663 | tagLink.addClass("s-maleperf"); 664 | } 665 | else if(settings.useLovesiteTags && isTag(settings.tags.lovesite, tag)){ 666 | goodNum++; 667 | tagLink.addClass("s-lovesite"); 668 | } 669 | else if(settings.useLikesiteTags && isTag(settings.tags.likesite, tag)){ 670 | goodNum++; 671 | tagLink.addClass("s-likesite"); 672 | } 673 | else if(settings.useHatedTags && isTag(settings.tags.hated, tag)){ 674 | badNum++; 675 | tagLink.addClass("s-hated"); 676 | } 677 | else if(settings.useUselessTags && isTag(settings.tags.useless, tag)){ 678 | totalTagNum--; 679 | tagLink.addClass("s-useless"); 680 | } 681 | else if(settings.useDislikedTags && isTag(settings.tags.disliked, tag)){ 682 | badNum++; 683 | tagLink.addClass("s-disliked"); 684 | } 685 | 686 | 687 | }); 688 | var goodPercent = Math.round(goodNum/totalTagNum * 100); 689 | var badPercent = Math.round(badNum/totalTagNum * 100); 690 | 691 | if(settings.usePercentBar){ 692 | var percentContainer = $j("
    )").insertBefore(tagContainer); 693 | percentContainer.width(tagContainer.parent().width() - 2); 694 | $j("
    ").appendTo(percentContainer).addClass("s-percent s-percent-good").width(goodPercent + "%"); 695 | $j("
    ").appendTo(percentContainer).addClass("s-percent s-percent-bad").width(badPercent + "%"); 696 | } 697 | 698 | if(settings.useTorrentOpacity && badPercent > goodPercent){ 699 | //opacity range: 0.5 - 1 700 | row.css("opacity", (100 - ((badPercent - goodPercent)/2))/100); 701 | } 702 | 703 | if(settings.useTorrentColoring){ 704 | //range -1 to 1 705 | var netPercent = (goodPercent - badPercent)/100; 706 | var absPercent = Math.abs(netPercent); 707 | var green = [120, 200, 120]; 708 | var red = [210, 120, 120]; 709 | var color; 710 | if(netPercent > 0){ 711 | color= green; 712 | } 713 | else if(netPercent < 0){ 714 | color = red; 715 | } 716 | else{ 717 | //color = [239,243,246]; 718 | } 719 | if(color && !row.hasClass("redbar") && /torrents\.php/.test(window.location.href) && !/userid\=/.test(window.location.href)){ 720 | row.css({"background-color" : "rgba("+color[0]+","+color[1]+","+color[2]+","+absPercent+""}); 721 | } 722 | } 723 | }); 724 | } 725 | 726 | function processDetailsPage(){ 727 | var isTagsLoaded = false; 728 | 729 | var handleTagListLoad = function(){ 730 | isTagsLoaded = false; 731 | var checkTagList = function(){ 732 | if($j("#torrent_tags li a").hasClass("tags-loaded")){ 733 | setTimeout(checkTagList, 30); 734 | } 735 | else{ 736 | highlightDetailTags(); 737 | } 738 | }; 739 | checkTagList(); 740 | }; 741 | 742 | $j(".tag_header span a, #form_addtag input[type='button']").on("click", handleTagListLoad); 743 | $j("#tagname").on("keydown", function(e){ 744 | if(e.keyCode === 13){ 745 | handleTagListLoad(); 746 | } 747 | }); 748 | 749 | var highlightDetailTags = function(){ 750 | if(isTagsLoaded) return; 751 | //Timeout to ensure we run after everything else 752 | var tagLinks = $j("#torrent_tags").find("a[href*='\\?taglist=']"); 753 | 754 | isTagsLoaded = tagLinks.length > 0; 755 | 756 | if(!isTagsLoaded){ 757 | setTimeout(highlightDetailTags, 200); 758 | return; 759 | } 760 | 761 | $j("
      ").appendTo("#torrent_tags").on("spyder.change", function(){ 762 | var hiddenTagHolder = $j(this), 763 | hiddenTags = hiddenTagHolder.find("span.s-tag"); 764 | 765 | if(hiddenTags.length){ 766 | $j(".s-useless-msg").text("There's " + hiddenTags.length + " useless tag" + (hiddenTags.length > 1 ? "s" : "") + " on this torrent "); 767 | $j(".s-useless-msg, .s-useless-toggle").show(); 768 | } 769 | else{ 770 | $j(".s-useless-msg, .s-useless-toggle").hide(); 771 | } 772 | }).before(""); 773 | 774 | $j(".s-useless-toggle").on("click", function(){ 775 | $j(".s-useless-tags").slideToggle("fast", function(){ 776 | if($j(this).is(":visible")){ 777 | $j(".s-useless-toggle").text("HIDE"); 778 | } 779 | else{ 780 | $j(".s-useless-toggle").text("SHOW"); 781 | } 782 | }); 783 | }); 784 | 785 | tagLinks.each(function(i, tagLink){ 786 | tagLink = $j(tagLink).addClass("tags-loaded"); 787 | var tag = tagLink.text(), 788 | tagHolder = tagLink.wrap("").parent().addClass("s-tag"); 789 | 790 | tag = tag.toLowerCase(); 791 | 792 | if(settings.useLovedTags && isTag(settings.tags.loved, tag)){ 793 | tagHolder.addClass("s-loved"); 794 | } 795 | else if(settings.useGoodTags && isTag(settings.tags.good, tag)){ 796 | tagHolder.addClass("s-good"); 797 | } 798 | else if(settings.useLoveperfTags && isTag(settings.tags.loveperf, tag)){ 799 | tagHolder.addClass("s-loveperf"); 800 | } 801 | else if(settings.usePerformerTags && isTag(settings.tags.performer, tag)){ 802 | tagHolder.addClass("s-performer"); 803 | } 804 | else if(settings.useNewperfTags && isTag(settings.tags.newperf, tag)){ 805 | tagHolder.addClass("s-newperf"); 806 | } 807 | else if(settings.useLoveamatTags && isTag(settings.tags.loveamat, tag)){ 808 | tagHolder.addClass("s-loveamat"); 809 | } 810 | else if(settings.useAmateurTags && isTag(settings.tags.amateur, tag)){ 811 | tagHolder.addClass("s-amateur"); 812 | } 813 | else if(settings.useLovemaleTags && isTag(settings.tags.lovemale, tag)){ 814 | tagHolder.addClass("s-lovemale"); 815 | } 816 | else if(settings.useMaleperfTags && isTag(settings.tags.maleperf, tag)){ 817 | tagHolder.addClass("s-maleperf"); 818 | } 819 | else if(settings.useLovesiteTags && isTag(settings.tags.lovesite, tag)){ 820 | tagHolder.addClass("s-lovesite"); 821 | } 822 | else if(settings.useLikesiteTags && isTag(settings.tags.likesite, tag)){ 823 | tagHolder.addClass("s-likesite"); 824 | } 825 | else if(settings.useHatedTags && isTag(settings.tags.hated, tag)){ 826 | tagHolder.addClass("s-hated"); 827 | } 828 | else if(settings.useUselessTags && isTag(settings.tags.useless, tag)){ 829 | var uselessTag = tagHolder.addClass("s-useless"); 830 | uselessTag.parent().detach().appendTo(".s-useless-tags").trigger("spyder.change"); 831 | } 832 | else if(settings.useTerribleTags && isTag(settings.tags.terrible, tag)){ 833 | tagHolder.addClass("s-terrible"); 834 | } 835 | else if(settings.useDislikedTags && isTag(settings.tags.disliked, tag)){ 836 | tagHolder.addClass("s-disliked"); 837 | } 838 | 839 | var buttons = $j(); 840 | 841 | if(settings.useGoodTags){ 842 | if(!settings.buttonGoodTags){ 843 | buttons = buttons.add($j("
      +
      "). 844 | data("action", {fn : addTagElement, type : "good", tag : tag})); 845 | } 846 | buttons = buttons.add($j("
      "). 847 | data("action", {fn : removeTagElement, type : "good", tag : tag})); 848 | } 849 | if(settings.useLovedTags){ 850 | buttons = buttons.add($j("
      +
      "). 851 | data("action", {fn : addLovedTagElement, type : "loved", tag : tag})); 852 | buttons = buttons.add($j("
      "). 853 | data("action", {fn : removeLovedTagElement, type : "loved", tag : tag})); 854 | } 855 | if(settings.usePerformerTags){ 856 | if(!settings.buttonPerformerTags){ 857 | buttons = buttons.add($j("
      +
      "). 858 | data("action", {fn : addTagElement, type : "performer", tag : tag})); 859 | } 860 | buttons = buttons.add($j("
      "). 861 | data("action", {fn : removeTagElement, type : "performer", tag : tag})); 862 | } 863 | if(settings.useLoveperfTags){ 864 | buttons = buttons.add($j("
      +
      "). 865 | data("action", {fn : addLoveperfTagElement, type : "loveperf", tag : tag})); 866 | buttons = buttons.add($j("
      "). 867 | data("action", {fn : removeLoveperfTagElement, type : "loveperf", tag : tag})); 868 | } 869 | if(settings.useNewperfTags){ 870 | if(!settings.buttonNewperfTags){ 871 | buttons = buttons.add($j("
      +
      "). 872 | data("action", {fn : addTagElement, type : "newperf", tag : tag})); 873 | } 874 | buttons = buttons.add($j("
      "). 875 | data("action", {fn : removeTagElement, type : "newperf", tag : tag})); 876 | } 877 | if(settings.useAmateurTags){ 878 | if(!settings.buttonAmateurTags){ 879 | buttons = buttons.add($j("
      +
      "). 880 | data("action", {fn : addTagElement, type : "amateur", tag : tag})); 881 | } 882 | buttons = buttons.add($j("
      "). 883 | data("action", {fn : removeTagElement, type : "amateur", tag : tag})); 884 | } 885 | if(settings.useLoveamatTags){ 886 | buttons = buttons.add($j("
      +
      "). 887 | data("action", {fn : addLoveamatTagElement, type : "loveamat", tag : tag})); 888 | buttons = buttons.add($j("
      "). 889 | data("action", {fn : removeLoveamatTagElement, type : "loveamat", tag : tag})); 890 | } 891 | if(settings.useMaleperfTags){ 892 | if(!settings.buttonMaleperfTags){ 893 | buttons = buttons.add($j("
      +
      "). 894 | data("action", {fn : addTagElement, type : "maleperf", tag : tag})); 895 | } 896 | buttons = buttons.add($j("
      "). 897 | data("action", {fn : removeTagElement, type : "maleperf", tag : tag})); 898 | } 899 | if(settings.useLovemaleTags){ 900 | buttons = buttons.add($j("
      +
      "). 901 | data("action", {fn : addLovemaleTagElement, type : "lovemale", tag : tag})); 902 | buttons = buttons.add($j("
      "). 903 | data("action", {fn : removeLovemaleTagElement, type : "lovemale", tag : tag})); 904 | } 905 | if(settings.useLikesiteTags){ 906 | if(!settings.buttonLikesiteTags){ 907 | buttons = buttons.add($j("
      +
      "). 908 | data("action", {fn : addTagElement, type : "likesite", tag : tag})); 909 | } 910 | buttons = buttons.add($j("
      "). 911 | data("action", {fn : removeTagElement, type : "likesite", tag : tag})); 912 | } 913 | if(settings.useLovesiteTags){ 914 | buttons = buttons.add($j("
      +
      "). 915 | data("action", {fn : addLovesiteTagElement, type : "lovesite", tag : tag})); 916 | buttons = buttons.add($j("
      "). 917 | data("action", {fn : removeLovesiteTagElement, type : "lovesite", tag : tag})); 918 | } 919 | if(settings.useDislikedTags){ 920 | if(!settings.buttonDislikedTags){ 921 | buttons = buttons.add($j("
      ×
      "). 922 | data("action", {fn : addTagElement, type : "disliked", tag : tag})); 923 | } 924 | buttons = buttons.add($j("
      "). 925 | data("action", {fn : removeTagElement, type : "disliked", tag : tag})); 926 | } 927 | if(settings.useHatedTags){ 928 | buttons = buttons.add($j("
      ×
      "). 929 | data("action", {fn : addHatedTagElement, type : "hated", tag : tag})); 930 | buttons = buttons.add($j("
      "). 931 | data("action", {fn : removeHatedTagElement, type : "hated", tag : tag})); 932 | } 933 | if(settings.useTerribleTags){ 934 | buttons = buttons.add($j("
      !
      "). 935 | data("action", {fn : addTerribleTagElement, type : "terrible", tag : tag})); 936 | buttons = buttons.add($j("
      "). 937 | data("action", {fn : removeTerribleTagElement, type : "terrible", tag : tag})); 938 | } 939 | if(settings.useUselessTags){ 940 | buttons = buttons.add($j("
      -
      "). 941 | data("action", {fn : addUselessTagElement, type : "useless", tag : tag})); 942 | buttons = buttons.add($j("
      "). 943 | data("action", {fn : removeUselessTagElement, type : "useless", tag : tag})); 944 | } 945 | $j(buttons).addClass("s-button").prependTo(tagHolder); 946 | 947 | 948 | // create more horizontal space by hiding "tag action" placeholder spans 949 | tagHolder.next().find("span:contains('\xa0\xa0\xa0')").hide(); 950 | // staff/mods have additional "tag actions", allow for additional styling 951 | if (tagHolder.next().find("a").length > 2){ 952 | tagHolder.addClass("s-staff"); 953 | } 954 | }); 955 | 956 | $j(".s-button").on("click", function(e){ 957 | var data = $j(this).data("action"); 958 | data.fn(data.type, $j(this).parent(), data.tag); 959 | }); 960 | }; 961 | 962 | highlightDetailTags(); 963 | 964 | $j(".s-useless-tags").trigger("spyder.change"); 965 | } 966 | 967 | //Configuration 968 | function initConfig(base){ 969 | //Init Display 970 | for(var name in settings){ 971 | if(settings.hasOwnProperty(name)){ 972 | if(name == "tags"){ 973 | for(var tagType in settings[name]){ 974 | if(settings[name].hasOwnProperty(tagType)){ 975 | displayTags(tagType); 976 | } 977 | } 978 | } 979 | else{ 980 | $j("input[name='"+name+"']").prop("checked", settings[name]); 981 | } 982 | } 983 | } 984 | 985 | //Init Listeners 986 | $j(".s-conf-tab").parent().on("click", function(){ 987 | var tab = $j(this); 988 | if(!tab.hasClass("s-selected")){ 989 | $j('.tab-row-container li').removeClass('s-selected'); 990 | $j('.s-conf-page').removeClass("s-selected"); 991 | tab.addClass("s-selected"); 992 | $j(".s-conf-page#" + tab.data("page")).addClass("s-selected"); 993 | } 994 | }); 995 | 996 | $j(".s-conf-gen-checkbox").on("change", function(){ 997 | var checkbox = $j(this); 998 | var name = checkbox.attr("name"); 999 | var isChecked = checkbox.is(":checked"); 1000 | 1001 | settings[name] = isChecked; 1002 | if((name == "useTerribleTags" && isChecked) || (name == "useHatedTags" && isChecked) || (name == "useUselessTags" && isChecked)){ 1003 | $j("input[name='useDislikedTags']").prop("checked", true).trigger("change"); 1004 | } 1005 | else if(name == "useDislikedTags" && !isChecked){ 1006 | $j("input[name='useTerribleTags']").prop("checked", false).trigger("change"); 1007 | $j("input[name='useHatedTags']").prop("checked", false).trigger("change"); 1008 | $j("input[name='useUselessTags']").prop("checked", false).trigger("change"); 1009 | } 1010 | else if((name == "useLovesiteTags" && isChecked) ){ 1011 | $j("input[name='useLikesiteTags']").prop("checked", true).trigger("change"); 1012 | } 1013 | else if(name == "useLikesiteTags" && !isChecked){ 1014 | $j("input[name='useLovesiteTags']").prop("checked", false).trigger("change"); 1015 | } 1016 | else if((name == "useLovemaleTags" && isChecked) ){ 1017 | $j("input[name='useMaleperfTags']").prop("checked", true).trigger("change"); 1018 | } 1019 | else if(name == "useMaleperfTags" && !isChecked){ 1020 | $j("input[name='useLovemaleTags']").prop("checked", false).trigger("change"); 1021 | } 1022 | else if((name == "useLoveamatTags" && isChecked) ){ 1023 | $j("input[name='useAmateurTags']").prop("checked", true).trigger("change"); 1024 | } 1025 | else if(name == "useAmateurTags" && !isChecked){ 1026 | $j("input[name='useLoveamatTags']").prop("checked", false).trigger("change"); 1027 | } 1028 | else if((name == "useLoveperfTags" && isChecked) ){ 1029 | $j("input[name='usePerformerTags']").prop("checked", true).trigger("change"); 1030 | } 1031 | else if(name == "usePerformerTags" && !isChecked){ 1032 | $j("input[name='useLoveperfTags']").prop("checked", false).trigger("change"); 1033 | } 1034 | else if((name == "useLovedTags" && isChecked) ){ 1035 | $j("input[name='useGoodTags']").prop("checked", true).trigger("change"); 1036 | } 1037 | else if(name == "useGoodTags" && !isChecked){ 1038 | $j("input[name='useLovedTags']").prop("checked", false).trigger("change"); 1039 | } 1040 | 1041 | 1042 | }); 1043 | 1044 | $j("#s-conf-save").on("click", function(e){ 1045 | e.preventDefault(); 1046 | saveSettings(); 1047 | displayStatus("success", "Settings updated successfully"); 1048 | }); 1049 | 1050 | $j("#s-conf-close").on("click", function(){ 1051 | base.remove(); 1052 | }); 1053 | 1054 | $j("#s-conf-status").on("click", "#s-conf-status-close", function(){ 1055 | $j(this).parent().fadeOut("fast"); 1056 | }); 1057 | 1058 | $j(".s-conf-add-btn, .s-conf-remove-btn").on("click", function(){ 1059 | var button = $j(this); 1060 | var method = button.hasClass("s-conf-remove-btn") ? removeTags : addTags; 1061 | var type = button.data("type"); 1062 | var input = button.prev(); 1063 | var tags = $j.grep(input.val().toLowerCase().split(" "), function(tag){return tag;}); 1064 | if(tags.length){ 1065 | method(type, tags); 1066 | input.val(""); 1067 | displayTags(type); 1068 | displayStatus("success", type + " tags have been updated successfully."); 1069 | } 1070 | else{ 1071 | displayStatus("error", "Tags not updated becuase none were provided"); 1072 | } 1073 | }); 1074 | 1075 | function displayTags(type){ 1076 | $j("#s-conf-text-" + type).val(settings.tags[type].join(" ")); 1077 | } 1078 | 1079 | function displayStatus(type, msg){ 1080 | $j("#s-conf-status").fadeOut("fast", function(){ 1081 | $j(this).removeClass().addClass("s-" + type).html(msg + " (×)").fadeIn("fast"); 1082 | }); 1083 | } 1084 | 1085 | function refreshUI() { 1086 | $j('#s-conf-background').remove(); 1087 | initConfig($j(configHTML).prependTo("body")); 1088 | } 1089 | 1090 | // Import/export settings related code 1091 | function importSettings(rawSettings) { 1092 | try { 1093 | const trimmedSettings = rawSettings.trim(); 1094 | if (trimmedSettings.length === 0) { 1095 | throw new Error('Settings empty.'); 1096 | } 1097 | const importedSettings = JSON.parse(trimmedSettings); 1098 | // setValue("spyderSettings", trimmedSettings); 1099 | settings = importedSettings; 1100 | saveSettings(); 1101 | } catch (e) { 1102 | throw e; 1103 | } 1104 | } 1105 | 1106 | $j('#import-settings-button').on('click', (e) => { 1107 | e.preventDefault(); 1108 | try { 1109 | const textArea = $j('#import-settings-textarea'); 1110 | 1111 | importSettings(textArea.val()); 1112 | 1113 | // Refresh UI with new settings. 1114 | refreshUI(); 1115 | displayStatus("success", "Imported settings successfully."); 1116 | } catch (e) { 1117 | displayStatus("error", `Unable to import settings: ${e.message}`) 1118 | } 1119 | 1120 | }); 1121 | 1122 | // Populate export settings textarea with settings 1123 | const ta = document.querySelector('#export-settings-textarea'); 1124 | ta.textContent = JSON.stringify(getSettings()); 1125 | 1126 | // Escape closes ETH 1127 | $j(document).keyup(function(e) { 1128 | if (e.key === "Escape") { 1129 | base.remove(); 1130 | } 1131 | }); 1132 | } 1133 | 1134 | //General Purpose Funcitons 1135 | function addTerribleTagElement(type, holder, tag){ 1136 | holder.removeClass("s-disliked"); 1137 | addTagElement(type, holder, tag); 1138 | } 1139 | function removeTerribleTagElement(type, holder, tag){ 1140 | removeTagElement(type, holder, tag); 1141 | holder.addClass("s-disliked"); 1142 | } 1143 | function addHatedTagElement(type, holder, tag){ 1144 | holder.removeClass("s-disliked"); 1145 | addTagElement(type, holder, tag); 1146 | } 1147 | function removeHatedTagElement(type, holder, tag){ 1148 | removeTagElement(type, holder, tag); 1149 | holder.addClass("s-disliked"); 1150 | } 1151 | function addLovedTagElement(type, holder, tag){ 1152 | holder.removeClass("s-good"); 1153 | addTagElement(type, holder, tag); 1154 | } 1155 | function removeLovedTagElement(type, holder, tag){ 1156 | removeTagElement(type, holder, tag); 1157 | holder.addClass("s-good"); 1158 | } 1159 | function addLoveperfTagElement(type, holder, tag){ 1160 | holder.removeClass("s-performer"); 1161 | addTagElement(type, holder, tag); 1162 | } 1163 | function removeLoveperfTagElement(type, holder, tag){ 1164 | removeTagElement(type, holder, tag); 1165 | holder.addClass("s-performer"); 1166 | } 1167 | function addLoveamatTagElement(type, holder, tag){ 1168 | holder.removeClass("s-amateur"); 1169 | addTagElement(type, holder, tag); 1170 | } 1171 | function removeLoveamatTagElement(type, holder, tag){ 1172 | removeTagElement(type, holder, tag); 1173 | holder.addClass("s-amateur"); 1174 | } 1175 | function addLovemaleTagElement(type, holder, tag){ 1176 | holder.removeClass("s-maleperf"); 1177 | addTagElement(type, holder, tag); 1178 | } 1179 | function removeLovemaleTagElement(type, holder, tag){ 1180 | removeTagElement(type, holder, tag); 1181 | holder.addClass("s-maleperf"); 1182 | } 1183 | function addLovesiteTagElement(type, holder, tag){ 1184 | holder.removeClass("s-likesite"); 1185 | addTagElement(type, holder, tag); 1186 | } 1187 | function removeLovesiteTagElement(type, holder, tag){ 1188 | removeTagElement(type, holder, tag); 1189 | holder.addClass("s-likesite"); 1190 | } 1191 | function addUselessTagElement(type, holder, tag){ 1192 | holder.parent().detach().appendTo($j(".s-useless-tags")); 1193 | $j(".s-useless-tags").trigger("spyder.change"); 1194 | addTagElement(type, holder, tag); 1195 | } 1196 | function removeUselessTagElement(type, holder, tag){ 1197 | holder.parent().detach().insertBefore($j(".s-useless-desc")); 1198 | $j(".s-useless-tags").trigger("spyder.change"); 1199 | removeTagElement(type, holder, tag); 1200 | } 1201 | function addTagElement(type, holder, tag){ 1202 | holder.addClass("s-" + type); 1203 | addTags(type, tag); 1204 | } 1205 | function removeTagElement(type, holder, tag){ 1206 | holder.removeClass("s-good s-loved s-performer s-loveperf s-newperf s-amateur s-loveamat s-maleperf s-lovemale s-likesite s-lovesite s-disliked s-hated s-terrible s-useless"); 1207 | removeTags(type, tag); 1208 | } 1209 | function addTags(type, tags){ 1210 | settings = getSettings(); 1211 | var tagArray = settings.tags[type]; 1212 | var tmp = getEquivalentTags(tags); 1213 | for(var i=0; i 0){ 1216 | var idx = tagArray.indexOf(tag); 1217 | if (idx < 0){ 1218 | tagArray.push(tag); 1219 | } 1220 | } 1221 | } 1222 | saveTags(type, tagArray); 1223 | } 1224 | function removeTags(type, tags){ 1225 | settings = getSettings(); 1226 | var tagArray = settings.tags[type]; 1227 | var tmp = getEquivalentTags(tags); 1228 | for(var i=0; i 0){ 1231 | var idx = tagArray.indexOf(tag); 1232 | if (idx >= 0){ 1233 | tagArray.splice(idx, 1); 1234 | } 1235 | } 1236 | } 1237 | saveTags(type, tagArray); 1238 | } 1239 | function isTag(allTags, tag){ 1240 | if(allTags.indexOf(tag) >= 0){ 1241 | return true; 1242 | } 1243 | else if(allTags.indexOf(tag.replace(".", "")) >= 0){ 1244 | return true; 1245 | } 1246 | else{ 1247 | return false; 1248 | } 1249 | } 1250 | function getValue(name, def){ 1251 | 1252 | return GM_getValue(name, def); 1253 | 1254 | } 1255 | function setValue(name, value){ 1256 | GM_setValue(name, value); 1257 | } 1258 | function saveTags(name, tagArray){ 1259 | var tmp = $j.grep(tagArray, function(tag){return tag;}); 1260 | tmp.sort(); 1261 | settings.tags[name] = tmp; 1262 | saveSettings(); 1263 | } 1264 | function getSettings(){ 1265 | return JSON.parse(getValue("spyderSettings", "{}")); 1266 | } 1267 | function saveSettings(){ 1268 | setValue("spyderSettings", JSON.stringify(settings)); 1269 | } 1270 | function getEquivalentTags(tagArray){ 1271 | if(typeof tagArray == "string"){ 1272 | tagArray = tagArray.split(" "); 1273 | } 1274 | var allTags = []; 1275 | for(var i = 0, length = tagArray.length; i < length; i++){ 1276 | var tag = tagArray[i]; 1277 | //if(/\./g.test(tag)){ 1278 | // allTags.push(tag.replace(".", "")); 1279 | //} 1280 | allTags.push(tag); 1281 | } 1282 | return allTags; 1283 | } 1284 | function capitaliseFirstLetter(string){ 1285 | return string.charAt(0).toUpperCase() + string.slice(1); 1286 | } 1287 | } 1288 | 1289 | if(typeof jQuery == "undefined"){ 1290 | addJQuery(runScript); 1291 | } 1292 | else{ 1293 | runScript(); 1294 | } 1295 | 1296 | function addJQuery(callback) { 1297 | var script = document.createElement("script"); 1298 | script.setAttribute("src", "https://code.jquery.com/jquery-1.12.4.min.js"); 1299 | script.addEventListener('load', function() { 1300 | var script = document.createElement("script"); 1301 | script.textContent = "(" + callback.toString() + ")();"; 1302 | document.body.appendChild(script); 1303 | }, false); 1304 | document.body.appendChild(script); 1305 | } 1306 | -------------------------------------------------------------------------------- /Emp++_Tag_Highlighter08beta.user.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name Emp++ Tag Highlighter 0.8 (beta) 3 | // @version 0.8.0.5 4 | // @description highlights liked/disliked tags 5 | // @grant GM_getValue 6 | // @grant GM_setValue 7 | // @require https://code.jquery.com/jquery-1.12.4.min.js 8 | // @include /^https://www\.empornium\.(me|sx|is)/ 9 | // @include /^https://www\.enthralled\.me/ 10 | // @include /^https://pornbay\.org/ 11 | // @include /^https://femdomcult\.org/ 12 | // @include /^https://www\.homeporntorrents\.club/ 13 | // @updateURL https://raw.githubusercontent.com/allebady/Tag-Highlighter/master/Emp%2B%2B_Tag_Highlighter08beta.user.js 14 | // ==/UserScript== 15 | 16 | // Changelog: 17 | // Version 0.8.0 beta5 18 | // - added (testing) options to hide torrents with bad score. For now its less than -5 it (should) trigger on. 19 | // Version 0.8.0 beta4 20 | // - Updated the updateURL-link to one that hopefully work better. 21 | // Version 0.8.0 beta3 22 | // - fix for notifications not properly working 23 | // Version 0.8.0 beta2 24 | // - Removed Torrent Coloring and Torrent Opacity features due to issues with styles (sorry) Use Percent Bar instead 25 | // - Added options to use group coloring in Percent bar (Percent Bar 2.0) 26 | // Version 0.8.0 beta1 27 | // Added UpdateURL to automate updates. 28 | // Replaced male with MILF 29 | // Add options to ignore blacklist in bookmarks and/or collages. 30 | // minor fixes (forgot what they were) 31 | // Version 0.7.6b 32 | // - Fixed a bug in Blacklisted tags not triggering properly 33 | // Version 0.7.6 34 | // - A few improvements or changes that has been suggested. 35 | // - Added checkbox for showing the blacklisted notice. 36 | // - Removed the the feature of ignoring "." in tags for performance issues. 37 | // note this will remove the "big.tits also saves bigtits automatically" feature 38 | // - Minor fixes 39 | // Version 0.7.5e 40 | // - Simplify website rules 41 | // - Fix old http links (Torrent Display Options) 42 | // - Add support for femdomcult.org 43 | // - Add support for homeporntorrents.club 44 | // Version 0.7.5d 45 | // - Add support for enthralled.me 46 | // Version 0.7.5c 47 | // - Fixing some bugs that appear after the cleaning. 48 | // Version 0.7.5b 49 | // - Cleaning up 50 | // Version 0.7.5 51 | // - Added Import/Export feature. 52 | // - Added [ESC] to close Tag Highlighter. 53 | // - Fixed some spelling mistakes 54 | // Version 0.7.3 55 | // - Updated for better/more domain handling and added some updates suggested by SturmB: 56 | // - - Adds better support for Pornbay. (Subdomains and Tag-Config link) 57 | // - - Updates jQuery to latest stable version on the v1 track. 58 | // Version 0.7.2 59 | // - Corrected a wrong placement of a 'amateur' instead of a 'loveamat' 60 | // Version 0.7.1 61 | // - Reorganized settings page to accommodate low resolution monitors 62 | // Version 0.7.0 63 | // - Added more tag-groups 64 | // - Color change to accommodate more tag-groups 65 | // - Added option to hide tag buttons 66 | // - Few renames and corrections of variables 67 | // - Few size changes to fit all text 68 | // Version 0.6.2 69 | // - Preparing for new "branch". 70 | // - "Tag config" renamed "old tag config". 71 | // Version 0.6.1 72 | // - updated taglinks 73 | // Version 0.6.0 74 | // - Added more tag-groups 75 | // - Removed autodownvote, it shouldn't be used anyway (it's still in the code if you need to deactivate it or notice problems) 76 | // - Changed Useless tags to only be toggle-able on Disliked tags to save space. Let me know if you disagree with this decision 77 | // - Loved Performers/tags can be toggled after you liked a perfomer/tag 78 | // - few size changes to fit all in the config window 79 | 80 | function runScript(){ 81 | var $j = $.noConflict(true); 82 | 83 | var defaults = { 84 | majorVersion : 0.8, 85 | //Options 86 | truncateTags : true, 87 | //Browse Page Options 88 | usePercentBar : false, 89 | usePercentMoreColors : false, 90 | useTorrentBlacklistNotice : true, 91 | useBlacklistNoticeBookmark : false, 92 | useBlacklistNoticeCollages : false, 93 | useBadvaluehide : false, 94 | //Tag types to use 95 | useGoodTags : false, 96 | useLovedTags : false, 97 | usePerformerTags : false, 98 | useLoveperfTags : false, 99 | useNewperfTags : false, 100 | useAmateurTags : false, 101 | useLoveamatTags : false, 102 | useMilfperfTags : false, 103 | useLovemilfTags : false, 104 | useLikesiteTags : false, 105 | useLovesiteTags : false, 106 | useDislikedTags : false, 107 | useHatedTags : false, 108 | useTerribleTags : false, 109 | useUselessTags : false, 110 | //Tag Button Options 111 | buttonGoodTags : false, 112 | buttonPerformerTags : false, 113 | buttonNewperfTags : false, 114 | buttonAmateurTags : false, 115 | buttonMilfperfTags : false, 116 | buttonLikesiteTags : false, 117 | buttonDislikedTags : false, 118 | }; 119 | 120 | var settings = getSettings(); 121 | 122 | settings = $j.extend(true, defaults, settings); 123 | 124 | if(settings.majorVersion < defaults.majorVersion){ 125 | settings.majorVersion = defaults.majorVersion; 126 | saveSettings(); 127 | //handle upgrade 128 | } 129 | 130 | //import tags from pre-v0.4 ETH 131 | if(!settings.tags){ 132 | settings.tags = { 133 | good : getValue("good_tags", "").split(' '), 134 | loved : getValue("loved_tags", "").split(' '), 135 | performer : getValue("performer_tags", "").split(' '), 136 | loveperf : getValue("loveperf_tags", "").split(' '), 137 | newperf : getValue("newperf_tags", "").split(' '), 138 | amateur : getValue("amateur_tags", "").split(' '), 139 | loveamat : getValue("loveamat_tags", "").split(' '), 140 | milfperf : getValue("milfperf_tags", "").split(' '), 141 | lovemilf : getValue("lovemilf_tags", "").split(' '), 142 | likesite : getValue("likesite_tags", "").split(' '), 143 | lovesite : getValue("lovesite_tags", "").split(' '), 144 | disliked : getValue("bad_tags", "").split(' '), 145 | hated : getValue("hated_tags", "").split(' '), 146 | terrible : getValue("terrible_tags", "").split(' '), 147 | useless : getValue("useless_tags", "").split(' ') 148 | }; 149 | saveSettings(); 150 | } 151 | 152 | var configHTML = 153 | "
      " + 154 | "
      " + 155 | "

      Empornium++Tag Highlighter Settings

      " + 156 | "
      " + 157 | 158 | // Tabs 159 | "
      " + 161 | "
    • General
    • " + 162 | "
    • Liked Tags
    • " + 163 | "
    • Loved Tags
    • " + 164 | "
    • Performer Tags
    • " + 165 | "
    • Loved Performer Tags
    • " + 166 | "
    • New Performer Tags
    • " + 167 | "
    • Amateur Tags
    • " + 168 | "
    • Loved Amateur Tags
    • " + 169 | "
    • Milf Performer Tags
    • " + 170 | "" + 171 | "
      "+ 172 | "
      " + 174 | "
    • Loved Milf Performer Tags
    • " + 175 | "
    • Liked Site Tags
    • " + 176 | "
    • Loved Site Tags
    • " + 177 | "
    • Disliked Tags
    • " + 178 | "
    • Hated Tags
    • " + 179 | "
    • Blacklisted Tags
    • " + 180 | "
    • Useless Tags
    • " + 181 | "
    • Import/Export
    • " + 182 | "
    • " + 183 | "" + 184 | "
      "+ 185 | // End Tabs 186 | "
      " + 187 | "
      " + 188 | "
      " + 189 | "" + 190 | "

      Enable/Disable Tag Types:

      " + 191 | "" + 192 | "" + 193 | "" + 194 | "" + 195 | "" + 196 | "" + 197 | "" + 198 | "" + 199 | "" + 200 | "" + 201 | "" + 202 | "" + 203 | "" + 204 | "" + 205 | "" + 206 | "

      Torrent Display Options:

      " + 207 | "" + 209 | "
      " + 216 | "
      " + 217 | "
      " + 221 | "
      " + 225 | "" + 227 | "
      " + 228 | "
      " + 229 | "
      " + 233 | "
      " + 237 | "" + 239 | "
      " + 240 | "
      " + 241 | "
      " + 245 | "
      " + 249 | "" + 251 | "
      " + 252 | "
      " + 253 | "
      " + 257 | "
      " + 261 | "" + 263 | "
      " + 264 | "
      " + 265 | "
      " + 269 | "
      " + 273 | "" + 275 | "
      " + 276 | "
      " + 277 | "
      " + 281 | "
      " + 285 | "" + 287 | "
      " + 288 | "
      " + 289 | "
      " + 293 | "
      " + 297 | "" + 299 | "
      " + 300 | "
      " + 301 | "
      " + 305 | "
      " + 309 | "" + 311 | "
      " + 312 | "
      " + 313 | "
      " + 317 | "
      " + 321 | "" + 323 | "
      " + 324 | "
      " + 325 | "
      " + 329 | "
      " + 333 | "" + 335 | "
      " + 336 | "
      " + 337 | "
      " + 341 | "
      " + 345 | "" + 347 | "
      " + 348 | "
      " + 349 | "
      " + 353 | "
      " + 357 | "" + 359 | "
      " + 360 | "
      " + 361 | "
      " + 365 | "
      " + 369 | "" + 371 | "
      " + 372 | "
      " + 373 | "
      " + 377 | "
      " + 381 | "" + 383 | "
      " + 384 | "
      " + 385 | "
      " + 389 | "
      " + 393 | "" + 395 | "
      " + 396 | // Import/Export panel 397 | "
      " + 398 | "

      Export Settings

      " + 399 | "
      " + 400 | "

      To backup your settings, copy below text to a local file. You can import these settings in the Import Settings area.

      " + 401 | "

      " + 402 | "
      " + 403 | "

      Import Settings

      " + 404 | "

      " + 405 | "

      " + 406 | "" + 407 | "
      " + 408 | // End Import/Export 409 | "
      " + 410 | "
      " + 411 | "
      " + 412 | "" + 413 | "
      " + 414 | "
      " + 415 | "
      "; 416 | 417 | 418 | var stylesheet = ""; 548 | let userInfoID = "#nav_userinfo"; // The selector that Empornium uses 549 | if ($j(userInfoID).length < 1) { 550 | userInfoID = "#nav_useredit"; // // The selector that Pornbay uses 551 | } 552 | (function init() { 553 | // add stylesheet 554 | $j(stylesheet).appendTo("head"); 555 | var test = $j('#torrent_table tbody tr.torrent.rowb').css('background-color'); 556 | $j('#torrent_table').css('background-color',test); 557 | 558 | // add config link 559 | $j("
    • Tag-Config (beta)
    • ").insertAfter(userInfoID).on("click", function(e){ e.preventDefault(); 560 | initConfig($j(configHTML).prependTo("body")); 561 | }); 562 | 563 | if(/torrents\.php/.test(window.location.href)){ 564 | // torrent details 565 | if(/\bid\=/.test(window.location.href)){ 566 | processDetailsPage(); 567 | } 568 | // torrents overview 569 | else{ 570 | processBrowsePage(".torrent", "torrent"); 571 | } 572 | } 573 | // subscribed collages with new additions 574 | else if(/userhistory\.php(.+)\bsubscribed_collages/.test(window.location.href)){ 575 | processBrowsePage(".torrent", "torrent"); 576 | } 577 | // collage details/overview 578 | else if(/collage/.test(window.location.href)){ 579 | processBrowsePage(".rowa, .rowb", "collage"); 580 | } 581 | // user details 582 | else if(/user\.php(.+)\bid\=/.test(window.location.href)){ 583 | processBrowsePage(".torrent", "torrent"); 584 | } 585 | // top 10 586 | else if(/top10\.php/.test(window.location.href)){ 587 | processBrowsePage(".torrent", "torrent"); 588 | } 589 | else if(/bookmarks\.php/.test(window.location.href)){ 590 | processBrowsePage(".rowa, .rowb", "request"); 591 | } 592 | else if(/requests\.php/.test(window.location.href)){ 593 | if(/\bid\=/.test(window.location.href)){ 594 | processDetailsPage(); 595 | } 596 | else{ 597 | processBrowsePage(".rowa, .rowb", "request"); 598 | } 599 | } 600 | }()); 601 | 602 | function processBrowsePage(rowSelector, type){ 603 | var rows = $j(rowSelector); 604 | 605 | rows.each(function(i, row){ 606 | row = $j(row); 607 | var tagContainer = row.find(".tags").addClass("s-browse-tag-holder").css({ 608 | "line-height" : "18px" 609 | }), 610 | totalTagNum = tagContainer.find("a").length, 611 | goodNum = 0, badNum = 0, terribleNum = 0, uselessNum = 0, lovedNum = 0, performerNum = 0, loveperfNum = 0, newperfNum = 0, amateurNum = 0, loveamatNum = 0, milfperfNum = 0, lovemilfNum = 0, likesiteNum = 0, lovesiteNum = 0, hatedNum = 0, likedNum = 0, dislikedNum = 0; 612 | 613 | 614 | if(!totalTagNum){ 615 | return; 616 | } 617 | tagContainer.find("a").each(function(i, tagLink){ 618 | tagLink = $j(tagLink); 619 | var tag = tagLink.text(); 620 | 621 | tagLink = tagLink.wrap("").parent().addClass("s-tag"); 622 | tag = tag.toLowerCase(); 623 | 624 | 625 | if(settings.useTerribleTags && isTag(settings.tags.terrible, tag)){ 626 | 627 | 628 | 629 | if(window.location.href.indexOf("bookmarks")!=-1 && settings.useBlacklistNoticeBookmark ){ 630 | } 631 | 632 | 633 | else if(window.location.href.indexOf("collage")!=-1 && settings.useBlacklistNoticeCollages ) { 634 | } 635 | 636 | else if(!terribleNum){ 637 | var colspan = row.children().length; 638 | row.hide(); 639 | if ( settings.useTorrentBlacklistNotice ) { 640 | $j("").insertAfter(row).html( 641 | "" + capitaliseFirstLetter(type) + 642 | " hidden because of the blacklisted tag: " + tag + 643 | ". Click here to display the " + type + " listing."). 644 | on("click", function(){ 645 | $j(this).hide(); 646 | row.show(); 647 | testPrintForTest(); 648 | if(settings.usePercentBar&& !settings.usePercentMoreColors){ 649 | var percentContainer = $j("
      ").insertBefore(tagContainer); 650 | percentContainer.width(tagContainer.parent().width() - 2); 651 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-good").width(goodPercent + "%"); 652 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-bad").width(badPercent + "%"); 653 | } 654 | if(settings.usePercentMoreColors && settings.usePercentBar){ 655 | var percentContainer = $j("
      ").insertBefore(tagContainer); 656 | percentContainer.width(tagContainer.parent().width() - 2); 657 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-liked").width(likedPercent + "%"); 658 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-loved").width(lovedPercent + "%"); 659 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-performer").width(performerPercent + "%"); 660 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-loveperf").width(loveperfPercent + "%"); 661 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-newperf").width(newperfPercent + "%"); 662 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-amateur").width(amateurPercent + "%"); 663 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-loveamat").width(loveamatPercent + "%"); 664 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-milfperf").width(milfperfPercent + "%"); 665 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-lovemilf").width(lovemilfPercent + "%"); 666 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-likesite").width(likesitePercent + "%"); 667 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-lovesite").width(lovesitePercent + "%"); 668 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-disliked").width(dislikedPercent + "%"); 669 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-terrible").width(hatedPercent + "%"); 670 | } 671 | }); 672 | } // if 673 | } // if 674 | terribleNum++; 675 | badNum++; 676 | hatedNum++; 677 | tagLink.addClass("s-terrible s-disliked"); 678 | } 679 | 680 | 681 | 682 | else if(settings.useLovedTags && isTag(settings.tags.loved, tag)){ 683 | goodNum++; 684 | lovedNum++; 685 | tagLink.addClass("s-loved"); 686 | } 687 | 688 | else if(settings.useGoodTags && isTag(settings.tags.good, tag)){ 689 | goodNum++; 690 | likedNum++; 691 | tagLink.addClass("s-good"); 692 | } 693 | else if(settings.useLoveperfTags && isTag(settings.tags.loveperf, tag)){ 694 | goodNum++; 695 | loveperfNum++; 696 | tagLink.addClass("s-loveperf"); 697 | } 698 | else if(settings.usePerformerTags && isTag(settings.tags.performer, tag)){ 699 | goodNum++; 700 | performerNum++; 701 | tagLink.addClass("s-performer"); 702 | } 703 | else if(settings.useNewperfTags && isTag(settings.tags.newperf, tag)){ 704 | goodNum++; 705 | newperfNum++; 706 | tagLink.addClass("s-newperf"); 707 | } 708 | else if(settings.useLoveamatTags && isTag(settings.tags.loveamat, tag)){ 709 | goodNum++; 710 | loveamatNum++; 711 | tagLink.addClass("s-loveamat"); 712 | } 713 | else if(settings.useAmateurTags && isTag(settings.tags.amateur, tag)){ 714 | goodNum++; 715 | amateurNum++; 716 | tagLink.addClass("s-amateur"); 717 | } 718 | else if(settings.useLovemilfTags && isTag(settings.tags.lovemilf, tag)){ 719 | goodNum++; 720 | lovemilfNum++; 721 | tagLink.addClass("s-lovemilf"); 722 | } 723 | else if(settings.useMilfperfTags && isTag(settings.tags.milfperf, tag)){ 724 | goodNum++; 725 | milfperfNum++; 726 | tagLink.addClass("s-milfperf"); 727 | } 728 | else if(settings.useLovesiteTags && isTag(settings.tags.lovesite, tag)){ 729 | goodNum++; 730 | lovesiteNum++; 731 | tagLink.addClass("s-lovesite"); 732 | } 733 | else if(settings.useLikesiteTags && isTag(settings.tags.likesite, tag)){ 734 | goodNum++; 735 | likesiteNum++; 736 | tagLink.addClass("s-likesite"); 737 | } 738 | else if(settings.useHatedTags && isTag(settings.tags.hated, tag)){ 739 | badNum++; 740 | hatedNum++; 741 | tagLink.addClass("s-hated"); 742 | } 743 | else if(settings.useUselessTags && isTag(settings.tags.useless, tag)){ 744 | totalTagNum--; 745 | tagLink.addClass("s-useless"); 746 | } 747 | else if(settings.useDislikedTags && isTag(settings.tags.disliked, tag)){ 748 | badNum++; 749 | dislikedNum++; 750 | tagLink.addClass("s-disliked"); 751 | } 752 | 753 | 754 | 755 | 756 | }); 757 | var goodPercent = Math.round(goodNum/totalTagNum * 100); 758 | var badPercent = Math.round(badNum/totalTagNum * 100); 759 | 760 | var likedPercent = Math.round(likedNum/totalTagNum * 100); 761 | var dislikedPercent = Math.round(dislikedNum/totalTagNum * 100); 762 | var lovedPercent = Math.round(lovedNum/totalTagNum * 100); 763 | var performerPercent = Math.round(performerNum/totalTagNum * 100); 764 | var loveperfPercent = Math.round(loveperfNum/totalTagNum * 100); 765 | var newperfPercent = Math.round(newperfNum/totalTagNum * 100); 766 | var amateurPercent = Math.round(amateurNum/totalTagNum * 100); 767 | var loveamatPercent = Math.round(loveamatNum/totalTagNum * 100); 768 | var milfperfPercent = Math.round(milfperfNum/totalTagNum * 100); 769 | var lovemilfPercent = Math.round(lovemilfNum/totalTagNum * 100); 770 | var likesitePercent = Math.round(likesiteNum/totalTagNum * 100); 771 | var lovesitePercent = Math.round(lovesiteNum/totalTagNum * 100); 772 | var hatedPercent = Math.round(hatedNum/totalTagNum * 100); 773 | 774 | if(settings.usePercentBar&& !settings.usePercentMoreColors){ 775 | var percentContainer = $j("
      ").insertBefore(tagContainer); 776 | percentContainer.width(tagContainer.parent().width() - 2); 777 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-good").width(goodPercent + "%"); 778 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-bad").width(badPercent + "%"); 779 | } 780 | if(settings.usePercentMoreColors && settings.usePercentBar){ 781 | var percentContainer = $j("
      ").insertBefore(tagContainer); 782 | percentContainer.width(tagContainer.parent().width() - 2); 783 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-liked").width(likedPercent + "%"); 784 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-loved").width(lovedPercent + "%"); 785 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-performer").width(performerPercent + "%"); 786 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-loveperf").width(loveperfPercent + "%"); 787 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-newperf").width(newperfPercent + "%"); 788 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-amateur").width(amateurPercent + "%"); 789 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-loveamat").width(loveamatPercent + "%"); 790 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-milfperf").width(milfperfPercent + "%"); 791 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-lovemilf").width(lovemilfPercent + "%"); 792 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-likesite").width(likesitePercent + "%"); 793 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-lovesite").width(lovesitePercent + "%"); 794 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-disliked").width(dislikedPercent + "%"); 795 | $j("
      ").appendTo(percentContainer).addClass("s-percent s-percent-terrible").width(hatedPercent + "%"); 796 | } 797 | 798 | 799 | 800 | if(settings.useBadvaluehide){ 801 | console.log("badvalue running"); 802 | var netPercent = (goodNum - badNum - hatedNum - hatedNum); 803 | // console.log(netPercent); 804 | if(netPercent < -5){ 805 | // console.log("torrent hidden"); 806 | var colspan = row.children().length; 807 | row.hide(); 808 | if ( settings.useTorrentBlacklistNotice ) { 809 | $j("").insertAfter(row).html( 810 | "" + capitaliseFirstLetter(type) + 811 | " hidden because of the negative value: "+ netPercent + 812 | ". Click here to display the " + type + " listing."). 813 | on("click", function(){ 814 | $j(this).hide(); 815 | row.show(); 816 | 817 | }); 818 | } // if 819 | } 820 | } 821 | }); 822 | } 823 | 824 | function processDetailsPage(){ 825 | var isTagsLoaded = false; 826 | 827 | var handleTagListLoad = function(){ 828 | isTagsLoaded = false; 829 | var checkTagList = function(){ 830 | if($j("#torrent_tags li a").hasClass("tags-loaded")){ 831 | setTimeout(checkTagList, 30); 832 | } 833 | else{ 834 | highlightDetailTags(); 835 | } 836 | }; 837 | checkTagList(); 838 | }; 839 | 840 | $j(".tag_header span a, #form_addtag input[type='button']").on("click", handleTagListLoad); 841 | $j("#tagname").on("keydown", function(e){ 842 | if(e.keyCode === 13){ 843 | handleTagListLoad(); 844 | } 845 | }); 846 | 847 | var highlightDetailTags = function(){ 848 | if(isTagsLoaded) return; 849 | //Timeout to ensure we run after everything else 850 | var tagLinks = $j("#torrent_tags").find("a[href*='\\?taglist=']"); 851 | 852 | isTagsLoaded = tagLinks.length > 0; 853 | 854 | if(!isTagsLoaded){ 855 | setTimeout(highlightDetailTags, 200); 856 | return; 857 | } 858 | 859 | $j("
        ").appendTo("#torrent_tags").on("spyder.change", function(){ 860 | var hiddenTagHolder = $j(this), 861 | hiddenTags = hiddenTagHolder.find("span.s-tag"); 862 | 863 | if(hiddenTags.length){ 864 | $j(".s-useless-msg").text("There's " + hiddenTags.length + " useless tag" + (hiddenTags.length > 1 ? "s" : "") + " on this torrent "); 865 | $j(".s-useless-msg, .s-useless-toggle").show(); 866 | } 867 | else{ 868 | $j(".s-useless-msg, .s-useless-toggle").hide(); 869 | } 870 | }).before(""); 871 | 872 | $j(".s-useless-toggle").on("click", function(){ 873 | $j(".s-useless-tags").slideToggle("fast", function(){ 874 | if($j(this).is(":visible")){ 875 | $j(".s-useless-toggle").text("HIDE"); 876 | } 877 | else{ 878 | $j(".s-useless-toggle").text("SHOW"); 879 | } 880 | }); 881 | }); 882 | 883 | tagLinks.each(function(i, tagLink){ 884 | tagLink = $j(tagLink).addClass("tags-loaded"); 885 | var tag = tagLink.text(), 886 | tagHolder = tagLink.wrap("").parent().addClass("s-tag"); 887 | 888 | tag = tag.toLowerCase(); 889 | 890 | if(settings.useLovedTags && isTag(settings.tags.loved, tag)){ 891 | tagHolder.addClass("s-loved"); 892 | } 893 | else if(settings.useGoodTags && isTag(settings.tags.good, tag)){ 894 | tagHolder.addClass("s-good"); 895 | } 896 | else if(settings.useLoveperfTags && isTag(settings.tags.loveperf, tag)){ 897 | tagHolder.addClass("s-loveperf"); 898 | } 899 | else if(settings.usePerformerTags && isTag(settings.tags.performer, tag)){ 900 | tagHolder.addClass("s-performer"); 901 | } 902 | else if(settings.useNewperfTags && isTag(settings.tags.newperf, tag)){ 903 | tagHolder.addClass("s-newperf"); 904 | } 905 | else if(settings.useLoveamatTags && isTag(settings.tags.loveamat, tag)){ 906 | tagHolder.addClass("s-loveamat"); 907 | } 908 | else if(settings.useAmateurTags && isTag(settings.tags.amateur, tag)){ 909 | tagHolder.addClass("s-amateur"); 910 | } 911 | else if(settings.useLovemilfTags && isTag(settings.tags.lovemilf, tag)){ 912 | tagHolder.addClass("s-lovemilf"); 913 | } 914 | else if(settings.useMilfperfTags && isTag(settings.tags.milfperf, tag)){ 915 | tagHolder.addClass("s-milfperf"); 916 | } 917 | else if(settings.useLovesiteTags && isTag(settings.tags.lovesite, tag)){ 918 | tagHolder.addClass("s-lovesite"); 919 | } 920 | else if(settings.useLikesiteTags && isTag(settings.tags.likesite, tag)){ 921 | tagHolder.addClass("s-likesite"); 922 | } 923 | else if(settings.useHatedTags && isTag(settings.tags.hated, tag)){ 924 | tagHolder.addClass("s-hated"); 925 | } 926 | else if(settings.useUselessTags && isTag(settings.tags.useless, tag)){ 927 | var uselessTag = tagHolder.addClass("s-useless"); 928 | uselessTag.parent().detach().appendTo(".s-useless-tags").trigger("spyder.change"); 929 | } 930 | else if(settings.useTerribleTags && isTag(settings.tags.terrible, tag)){ 931 | tagHolder.addClass("s-terrible"); 932 | } 933 | else if(settings.useDislikedTags && isTag(settings.tags.disliked, tag)){ 934 | tagHolder.addClass("s-disliked"); 935 | } 936 | 937 | var buttons = $j(); 938 | 939 | if(settings.useGoodTags){ 940 | if(!settings.buttonGoodTags){ 941 | buttons = buttons.add($j("
        +
        "). 942 | data("action", {fn : addTagElement, type : "good", tag : tag})); 943 | } 944 | buttons = buttons.add($j("
        "). 945 | data("action", {fn : removeTagElement, type : "good", tag : tag})); 946 | } 947 | if(settings.useLovedTags){ 948 | buttons = buttons.add($j("
        +
        "). 949 | data("action", {fn : addLovedTagElement, type : "loved", tag : tag})); 950 | buttons = buttons.add($j("
        "). 951 | data("action", {fn : removeLovedTagElement, type : "loved", tag : tag})); 952 | } 953 | if(settings.usePerformerTags){ 954 | if(!settings.buttonPerformerTags){ 955 | buttons = buttons.add($j("
        +
        "). 956 | data("action", {fn : addTagElement, type : "performer", tag : tag})); 957 | } 958 | buttons = buttons.add($j("
        "). 959 | data("action", {fn : removeTagElement, type : "performer", tag : tag})); 960 | } 961 | if(settings.useLoveperfTags){ 962 | buttons = buttons.add($j("
        +
        "). 963 | data("action", {fn : addLoveperfTagElement, type : "loveperf", tag : tag})); 964 | buttons = buttons.add($j("
        "). 965 | data("action", {fn : removeLoveperfTagElement, type : "loveperf", tag : tag})); 966 | } 967 | if(settings.useNewperfTags){ 968 | if(!settings.buttonNewperfTags){ 969 | buttons = buttons.add($j("
        +
        "). 970 | data("action", {fn : addTagElement, type : "newperf", tag : tag})); 971 | } 972 | buttons = buttons.add($j("
        "). 973 | data("action", {fn : removeTagElement, type : "newperf", tag : tag})); 974 | } 975 | if(settings.useAmateurTags){ 976 | if(!settings.buttonAmateurTags){ 977 | buttons = buttons.add($j("
        +
        "). 978 | data("action", {fn : addTagElement, type : "amateur", tag : tag})); 979 | } 980 | buttons = buttons.add($j("
        "). 981 | data("action", {fn : removeTagElement, type : "amateur", tag : tag})); 982 | } 983 | if(settings.useLoveamatTags){ 984 | buttons = buttons.add($j("
        +
        "). 985 | data("action", {fn : addLoveamatTagElement, type : "loveamat", tag : tag})); 986 | buttons = buttons.add($j("
        "). 987 | data("action", {fn : removeLoveamatTagElement, type : "loveamat", tag : tag})); 988 | } 989 | if(settings.useMilfperfTags){ 990 | if(!settings.buttonMilfperfTags){ 991 | buttons = buttons.add($j("
        +
        "). 992 | data("action", {fn : addTagElement, type : "milfperf", tag : tag})); 993 | } 994 | buttons = buttons.add($j("
        "). 995 | data("action", {fn : removeTagElement, type : "milfperf", tag : tag})); 996 | } 997 | if(settings.useLovemilfTags){ 998 | buttons = buttons.add($j("
        +
        "). 999 | data("action", {fn : addlovemilfTagElement, type : "lovemilf", tag : tag})); 1000 | buttons = buttons.add($j("
        "). 1001 | data("action", {fn : removelovemilfTagElement, type : "lovemilf", tag : tag})); 1002 | } 1003 | if(settings.useLikesiteTags){ 1004 | if(!settings.buttonLikesiteTags){ 1005 | buttons = buttons.add($j("
        +
        "). 1006 | data("action", {fn : addTagElement, type : "likesite", tag : tag})); 1007 | } 1008 | buttons = buttons.add($j("
        "). 1009 | data("action", {fn : removeTagElement, type : "likesite", tag : tag})); 1010 | } 1011 | if(settings.useLovesiteTags){ 1012 | buttons = buttons.add($j("
        +
        "). 1013 | data("action", {fn : addLovesiteTagElement, type : "lovesite", tag : tag})); 1014 | buttons = buttons.add($j("
        "). 1015 | data("action", {fn : removeLovesiteTagElement, type : "lovesite", tag : tag})); 1016 | } 1017 | if(settings.useDislikedTags){ 1018 | if(!settings.buttonDislikedTags){ 1019 | buttons = buttons.add($j("
        ×
        "). 1020 | data("action", {fn : addTagElement, type : "disliked", tag : tag})); 1021 | } 1022 | buttons = buttons.add($j("
        "). 1023 | data("action", {fn : removeTagElement, type : "disliked", tag : tag})); 1024 | } 1025 | if(settings.useHatedTags){ 1026 | buttons = buttons.add($j("
        ×
        "). 1027 | data("action", {fn : addHatedTagElement, type : "hated", tag : tag})); 1028 | buttons = buttons.add($j("
        "). 1029 | data("action", {fn : removeHatedTagElement, type : "hated", tag : tag})); 1030 | } 1031 | if(settings.useTerribleTags){ 1032 | buttons = buttons.add($j("
        !
        "). 1033 | data("action", {fn : addTerribleTagElement, type : "terrible", tag : tag})); 1034 | buttons = buttons.add($j("
        "). 1035 | data("action", {fn : removeTerribleTagElement, type : "terrible", tag : tag})); 1036 | } 1037 | if(settings.useUselessTags){ 1038 | buttons = buttons.add($j("
        -
        "). 1039 | data("action", {fn : addUselessTagElement, type : "useless", tag : tag})); 1040 | buttons = buttons.add($j("
        "). 1041 | data("action", {fn : removeUselessTagElement, type : "useless", tag : tag})); 1042 | } 1043 | $j(buttons).addClass("s-button").prependTo(tagHolder); 1044 | 1045 | 1046 | // create more horizontal space by hiding "tag action" placeholder spans 1047 | tagHolder.next().find("span:contains('\xa0\xa0\xa0')").hide(); 1048 | // staff/mods have additional "tag actions", allow for additional styling 1049 | if (tagHolder.next().find("a").length > 2){ 1050 | tagHolder.addClass("s-staff"); 1051 | } 1052 | }); 1053 | 1054 | $j(".s-button").on("click", function(e){ 1055 | var data = $j(this).data("action"); 1056 | data.fn(data.type, $j(this).parent(), data.tag); 1057 | }); 1058 | }; 1059 | 1060 | highlightDetailTags(); 1061 | 1062 | $j(".s-useless-tags").trigger("spyder.change"); 1063 | } 1064 | 1065 | //Configuration 1066 | function initConfig(base){ 1067 | //Init Display 1068 | for(var name in settings){ 1069 | if(settings.hasOwnProperty(name)){ 1070 | if(name == "tags"){ 1071 | for(var tagType in settings[name]){ 1072 | if(settings[name].hasOwnProperty(tagType)){ 1073 | displayTags(tagType); 1074 | } 1075 | } 1076 | } 1077 | else{ 1078 | $j("input[name='"+name+"']").prop("checked", settings[name]); 1079 | } 1080 | } 1081 | } 1082 | 1083 | //Init Listeners 1084 | $j(".s-conf-tab").parent().on("click", function(){ 1085 | var tab = $j(this); 1086 | if(!tab.hasClass("s-selected")){ 1087 | $j('.tab-row-container li').removeClass('s-selected'); 1088 | $j('.s-conf-page').removeClass("s-selected"); 1089 | tab.addClass("s-selected"); 1090 | $j(".s-conf-page#" + tab.data("page")).addClass("s-selected"); 1091 | } 1092 | }); 1093 | 1094 | $j(".s-conf-gen-checkbox").on("change", function(){ 1095 | var checkbox = $j(this); 1096 | var name = checkbox.attr("name"); 1097 | var isChecked = checkbox.is(":checked"); 1098 | 1099 | settings[name] = isChecked; 1100 | if((name == "useTerribleTags" && isChecked) || (name == "useHatedTags" && isChecked) || (name == "useUselessTags" && isChecked)){ 1101 | $j("input[name='useDislikedTags']").prop("checked", true).trigger("change"); 1102 | } 1103 | else if(name == "useDislikedTags" && !isChecked){ 1104 | $j("input[name='useTerribleTags']").prop("checked", false).trigger("change"); 1105 | $j("input[name='useHatedTags']").prop("checked", false).trigger("change"); 1106 | $j("input[name='useUselessTags']").prop("checked", false).trigger("change"); 1107 | } 1108 | else if((name == "useLovesiteTags" && isChecked) ){ 1109 | $j("input[name='useLikesiteTags']").prop("checked", true).trigger("change"); 1110 | } 1111 | else if(name == "useLikesiteTags" && !isChecked){ 1112 | $j("input[name='useLovesiteTags']").prop("checked", false).trigger("change"); 1113 | } 1114 | else if((name == "useLovemilfTags" && isChecked) ){ 1115 | $j("input[name='useMilfperfTags']").prop("checked", true).trigger("change"); 1116 | } 1117 | else if(name == "useMilfperfTags" && !isChecked){ 1118 | $j("input[name='useLovemilfTags']").prop("checked", false).trigger("change"); 1119 | } 1120 | else if((name == "useLoveamatTags" && isChecked) ){ 1121 | $j("input[name='useAmateurTags']").prop("checked", true).trigger("change"); 1122 | } 1123 | else if(name == "useAmateurTags" && !isChecked){ 1124 | $j("input[name='useLoveamatTags']").prop("checked", false).trigger("change"); 1125 | } 1126 | else if((name == "useLoveperfTags" && isChecked) ){ 1127 | $j("input[name='usePerformerTags']").prop("checked", true).trigger("change"); 1128 | } 1129 | else if(name == "usePerformerTags" && !isChecked){ 1130 | $j("input[name='useLoveperfTags']").prop("checked", false).trigger("change"); 1131 | } 1132 | else if((name == "useLovedTags" && isChecked) ){ 1133 | $j("input[name='useGoodTags']").prop("checked", true).trigger("change"); 1134 | } 1135 | else if(name == "useGoodTags" && !isChecked){ 1136 | $j("input[name='useLovedTags']").prop("checked", false).trigger("change"); 1137 | } 1138 | 1139 | 1140 | }); 1141 | 1142 | $j("#s-conf-save").on("click", function(e){ 1143 | e.preventDefault(); 1144 | saveSettings(); 1145 | displayStatus("success", "Settings updated successfully"); 1146 | }); 1147 | 1148 | $j("#s-conf-close").on("click", function(){ 1149 | base.remove(); 1150 | }); 1151 | 1152 | $j("#s-conf-status").on("click", "#s-conf-status-close", function(){ 1153 | $j(this).parent().fadeOut("fast"); 1154 | }); 1155 | 1156 | $j(".s-conf-add-btn, .s-conf-remove-btn").on("click", function(){ 1157 | var button = $j(this); 1158 | var method = button.hasClass("s-conf-remove-btn") ? removeTags : addTags; 1159 | var type = button.data("type"); 1160 | var input = button.prev(); 1161 | var tags = $j.grep(input.val().toLowerCase().split(" "), function(tag){return tag;}); 1162 | if(tags.length){ 1163 | method(type, tags); 1164 | input.val(""); 1165 | displayTags(type); 1166 | displayStatus("success", type + " tags have been updated successfully."); 1167 | } 1168 | else{ 1169 | displayStatus("error", "Tags not updated becuase none were provided"); 1170 | } 1171 | }); 1172 | 1173 | function displayTags(type){ 1174 | $j("#s-conf-text-" + type).val(settings.tags[type].join(" ")); 1175 | } 1176 | 1177 | function displayStatus(type, msg){ 1178 | $j("#s-conf-status").fadeOut("fast", function(){ 1179 | $j(this).removeClass().addClass("s-" + type).html(msg + " (×)").fadeIn("fast"); 1180 | }); 1181 | } 1182 | 1183 | function refreshUI() { 1184 | $j('#s-conf-background').remove(); 1185 | initConfig($j(configHTML).prependTo("body")); 1186 | } 1187 | 1188 | // Import/export settings related code 1189 | function importSettings(rawSettings) { 1190 | try { 1191 | const trimmedSettings = rawSettings.trim(); 1192 | if (trimmedSettings.length === 0) { 1193 | throw new Error('Settings empty.'); 1194 | } 1195 | const importedSettings = JSON.parse(trimmedSettings); 1196 | // setValue("spyderSettings", trimmedSettings); 1197 | settings = importedSettings; 1198 | saveSettings(); 1199 | } catch (e) { 1200 | throw e; 1201 | } 1202 | } 1203 | 1204 | $j('#import-settings-button').on('click', (e) => { 1205 | e.preventDefault(); 1206 | try { 1207 | const textArea = $j('#import-settings-textarea'); 1208 | 1209 | importSettings(textArea.val()); 1210 | 1211 | // Refresh UI with new settings. 1212 | refreshUI(); 1213 | displayStatus("success", "Imported settings successfully."); 1214 | } catch (e) { 1215 | displayStatus("error", `Unable to import settings: ${e.message}`) 1216 | } 1217 | 1218 | }); 1219 | 1220 | // Populate export settings textarea with settings 1221 | const ta = document.querySelector('#export-settings-textarea'); 1222 | ta.textContent = JSON.stringify(getSettings()); 1223 | 1224 | // Escape closes ETH 1225 | $j(document).keyup(function(e) { 1226 | if (e.key === "Escape") { 1227 | base.remove(); 1228 | } 1229 | }); 1230 | } 1231 | 1232 | //General Purpose Funcitons 1233 | function addTerribleTagElement(type, holder, tag){ 1234 | holder.removeClass("s-disliked"); 1235 | addTagElement(type, holder, tag); 1236 | } 1237 | function removeTerribleTagElement(type, holder, tag){ 1238 | removeTagElement(type, holder, tag); 1239 | holder.addClass("s-disliked"); 1240 | } 1241 | function addHatedTagElement(type, holder, tag){ 1242 | holder.removeClass("s-disliked"); 1243 | addTagElement(type, holder, tag); 1244 | } 1245 | function removeHatedTagElement(type, holder, tag){ 1246 | removeTagElement(type, holder, tag); 1247 | holder.addClass("s-disliked"); 1248 | } 1249 | function addLovedTagElement(type, holder, tag){ 1250 | holder.removeClass("s-good"); 1251 | addTagElement(type, holder, tag); 1252 | } 1253 | function removeLovedTagElement(type, holder, tag){ 1254 | removeTagElement(type, holder, tag); 1255 | holder.addClass("s-good"); 1256 | } 1257 | function addLoveperfTagElement(type, holder, tag){ 1258 | holder.removeClass("s-performer"); 1259 | addTagElement(type, holder, tag); 1260 | } 1261 | function removeLoveperfTagElement(type, holder, tag){ 1262 | removeTagElement(type, holder, tag); 1263 | holder.addClass("s-performer"); 1264 | } 1265 | function addLoveamatTagElement(type, holder, tag){ 1266 | holder.removeClass("s-amateur"); 1267 | addTagElement(type, holder, tag); 1268 | } 1269 | function removeLoveamatTagElement(type, holder, tag){ 1270 | removeTagElement(type, holder, tag); 1271 | holder.addClass("s-amateur"); 1272 | } 1273 | function addlovemilfTagElement(type, holder, tag){ 1274 | holder.removeClass("s-milfperf"); 1275 | addTagElement(type, holder, tag); 1276 | } 1277 | function removelovemilfTagElement(type, holder, tag){ 1278 | removeTagElement(type, holder, tag); 1279 | holder.addClass("s-milfperf"); 1280 | } 1281 | function addLovesiteTagElement(type, holder, tag){ 1282 | holder.removeClass("s-likesite"); 1283 | addTagElement(type, holder, tag); 1284 | } 1285 | function removeLovesiteTagElement(type, holder, tag){ 1286 | removeTagElement(type, holder, tag); 1287 | holder.addClass("s-likesite"); 1288 | } 1289 | function addUselessTagElement(type, holder, tag){ 1290 | holder.parent().detach().appendTo($j(".s-useless-tags")); 1291 | $j(".s-useless-tags").trigger("spyder.change"); 1292 | addTagElement(type, holder, tag); 1293 | } 1294 | function removeUselessTagElement(type, holder, tag){ 1295 | holder.parent().detach().insertBefore($j(".s-useless-desc")); 1296 | $j(".s-useless-tags").trigger("spyder.change"); 1297 | removeTagElement(type, holder, tag); 1298 | } 1299 | function addTagElement(type, holder, tag){ 1300 | holder.addClass("s-" + type); 1301 | addTags(type, tag); 1302 | } 1303 | function removeTagElement(type, holder, tag){ 1304 | holder.removeClass("s-good s-loved s-performer s-loveperf s-newperf s-amateur s-loveamat s-milfperf s-lovemilf s-likesite s-lovesite s-disliked s-hated s-terrible s-useless"); 1305 | removeTags(type, tag); 1306 | } 1307 | function addTags(type, tags){ 1308 | settings = getSettings(); 1309 | var tagArray = settings.tags[type]; 1310 | var tmp = getEquivalentTags(tags); 1311 | for(var i=0; i 0){ 1314 | var idx = tagArray.indexOf(tag); 1315 | if (idx < 0){ 1316 | tagArray.push(tag); 1317 | } 1318 | } 1319 | } 1320 | saveTags(type, tagArray); 1321 | } 1322 | function removeTags(type, tags){ 1323 | settings = getSettings(); 1324 | var tagArray = settings.tags[type]; 1325 | var tmp = getEquivalentTags(tags); 1326 | for(var i=0; i 0){ 1329 | var idx = tagArray.indexOf(tag); 1330 | if (idx >= 0){ 1331 | tagArray.splice(idx, 1); 1332 | } 1333 | } 1334 | } 1335 | saveTags(type, tagArray); 1336 | } 1337 | function isTag(allTags, tag){ 1338 | if(allTags.indexOf(tag) >= 0){ 1339 | return true; 1340 | } 1341 | else if(allTags.indexOf(tag.replace(".", "")) >= 0){ 1342 | return true; 1343 | } 1344 | else{ 1345 | return false; 1346 | } 1347 | } 1348 | function getValue(name, def){ 1349 | 1350 | return GM_getValue(name, def); 1351 | 1352 | } 1353 | function setValue(name, value){ 1354 | GM_setValue(name, value); 1355 | } 1356 | function saveTags(name, tagArray){ 1357 | var tmp = $j.grep(tagArray, function(tag){return tag;}); 1358 | tmp.sort(); 1359 | settings.tags[name] = tmp; 1360 | saveSettings(); 1361 | } 1362 | function getSettings(){ 1363 | return JSON.parse(getValue("spyderSettings", "{}")); 1364 | } 1365 | function saveSettings(){ 1366 | setValue("spyderSettings", JSON.stringify(settings)); 1367 | } 1368 | function getEquivalentTags(tagArray){ 1369 | if(typeof tagArray == "string"){ 1370 | tagArray = tagArray.split(" "); 1371 | } 1372 | var allTags = []; 1373 | for(var i = 0, length = tagArray.length; i < length; i++){ 1374 | var tag = tagArray[i]; 1375 | //if(/\./g.test(tag)){ 1376 | // allTags.push(tag.replace(".", "")); 1377 | //} 1378 | allTags.push(tag); 1379 | } 1380 | return allTags; 1381 | } 1382 | function capitaliseFirstLetter(string){ 1383 | return string.charAt(0).toUpperCase() + string.slice(1); 1384 | } 1385 | } 1386 | 1387 | function testPrintForTest(){ 1388 | console.log("testprint running"); 1389 | } 1390 | 1391 | function basicPercentContainer(){ 1392 | var percentContainer = $j("
        ").insertBefore(tagContainer); 1393 | percentContainer.width(tagContainer.parent().width() - 2); 1394 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-good").width(goodPercent + "%"); 1395 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-bad").width(badPercent + "%"); 1396 | } 1397 | 1398 | 1399 | function colorPercentContainer(){ 1400 | var percentContainer = $j("
        ").insertBefore(tagContainer); 1401 | percentContainer.width(tagContainer.parent().width() - 2); 1402 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-liked").width(likedPercent + "%"); 1403 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-loved").width(lovedPercent + "%"); 1404 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-performer").width(performerPercent + "%"); 1405 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-loveperf").width(loveperfPercent + "%"); 1406 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-newperf").width(newperfPercent + "%"); 1407 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-amateur").width(amateurPercent + "%"); 1408 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-loveamat").width(loveamatPercent + "%"); 1409 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-milfperf").width(milfperfPercent + "%"); 1410 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-lovemilf").width(lovemilfPercent + "%"); 1411 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-likesite").width(likesitePercent + "%"); 1412 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-lovesite").width(lovesitePercent + "%"); 1413 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-disliked").width(dislikedPercent + "%"); 1414 | $j("
        ").appendTo(percentContainer).addClass("s-percent s-percent-terrible").width(hatedPercent + "%"); 1415 | } 1416 | 1417 | 1418 | 1419 | 1420 | if(typeof jQuery == "undefined"){ 1421 | addJQuery(runScript); 1422 | } 1423 | else{ 1424 | runScript(); 1425 | } 1426 | 1427 | function addJQuery(callback) { 1428 | var script = document.createElement("script"); 1429 | script.setAttribute("src", "https://code.jquery.com/jquery-1.12.4.min.js"); 1430 | script.addEventListener('load', function() { 1431 | var script = document.createElement("script"); 1432 | script.textContent = "(" + callback.toString() + ")();"; 1433 | document.body.appendChild(script); 1434 | }, false); 1435 | document.body.appendChild(script); 1436 | } 1437 | --------------------------------------------------------------------------------