Greasy Fork is available in English.

EnstylerJS

MyDealz Enstyler Frontend and enhanced features

Version vom 29.10.2016. Aktuellste Version

// ==UserScript==
// @name        EnstylerJS
// @namespace   Enstyler
// @description MyDealz Enstyler Frontend and enhanced features
// @include     http://www.mydealz.de/*
// @include     https://www.mydealz.de/*
// @version     2.10.301
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_log
// @grant       GM_xmlhttpRequest
// @require     http://code.jquery.com/jquery-latest.js
// @require     https://openuserjs.org/src/libs/sizzle/GM_config.js
// ==/UserScript==

// ========== INIT EnstylerJS =====================================
// create object for enstyler "Menu Button"
var input = document.createElement('input');
input.type = 'button';
input.value = 'Enstyler';
input.onclick = showEnstylerConfig;
input.className = 'box--all-i subNavMenu-link'
input.setAttribute('style', 'font-size: 1.28571em; font-weight: 700; top: 3px; left: -0.7em');

// EnstylerJS Config Panel anzeigen
function showEnstylerConfig() {
    GM_config.open();
}

// add button to SubNav if exist
var myElement = document.getElementById('tour-filter');
if (myElement !== null) {
  myElement.appendChild(input);
}

// hide Enstyler2 CSS (c) text because we have a button now
addStyleString('.threadWidget-footer::after {display: none !important};');

// basic config panel formatting, everything else is formatted by enstyler
var enCSS = ['#GM_config { left: 5% !important; top: 5% !important; height: auto !important; min-width: 19em; max-width: 33em !important;}',
             '#GM_config input[type=button], #GM_config button { border: 1px solid; margin: 0.5em 0em 0.2em 1em; padding: 0.1em;}',
             '#GM_config .reset { font-size: 9pt; padding-right: 1em; }',
            ].join(" ");
addStyleString(enCSS);
// ========= END INIT, we are ready to go ===============================

// ============ functions to modify page content =============================

// REGEX to detect external URL
var REGEX_THREAD     = /^https?:\/\/www\.mydealz\.de\/visit\/thread(image)?\/\d+$/;
var REGEX_DESC       = /^https?:\/\/www\.mydealz\.de\/visit\/threaddesc\/\d+\/\d+$/;
var REGEX_COMMENT    = /^https?:\/\/www\.mydealz\.de\/visit\/comment\/\d+\/\d+$/;
var REGEX_AMAZONMOB  = /^https?:\/\/www\.amazon\..*\/gp\/aw\/.*$/;

// abfangen aller links mit jQuery
// wird genutzt zum filtern und 
$('a').bind('click', function(){
     var url = this.href;

     // externer Link mit Redirect ...
     // Match REDIRECT URLs and open new Window with finalUrl
     if (GM_config.get('enConfFilterLink') && url.match(REGEX_THREAD) || url.match(REGEX_DESC) || url.match(REGEX_COMMENT)) {
         // Workaround: pre open window because of popup blockers
         // Workaround: if GM_xmlhttpRequest is not availible 
         var asyncWindow = window.open(url, '_blank');
         // now lookup redirecd external URL ...
         GM_xmlhttpRequest({
             method: 'GET',
             url: url,
             // here we get the final URL from redirect
             onload: function (response) {
               // process final URL
               var newUrl = response.finalUrl;
               // lets see ...
               if (newUrl.match(REGEX_AMAZONMOB)) {
                   newUrl = newUrl.replace("/gp/aw/d/", "/dp/");
                   newUrl = newUrl.replace("/gp/aw/ol/", "/gp/offer-listing/");
               }
               // load processed URL in preopened window
               asyncWindow.location = newUrl;
             }
         });
         // return without link processing by Browser
         return false;
     }
  
     // return with link processing in Browser
     return true;  
});

// ============= GM_config functions =======================================

// define GM_config elements
var fieldDefs = {
    // Part one: load external content --------
    'enstyler': { 
      'section': ['additonal features for Enstyler', ''],
      'label': 'Install / Update CSS...', // Appears on the button
      'type': 'button', // Makes this setting a button input
      'click': function() { // Function to call when button is clicked
               showUrl('https://userstyles.org/styles/128262#style-info'); }
    },

   'dontCookies': {
      'label': 'Mozilla no cookies...', // Appears on the button
      'type': 'button', // Makes this setting a button input
      'click': function() { // Function to call when button is clicked
               showUrl('https://addons.mozilla.org/de/addon/i-dont-care-about-cookies/'); }
    },

   // part two: EnstylerJS internal configuration options ------ 
   'hidden1': { // display next section, dont kow why ...
      'section': ['Configuration', ''],
        'type': 'hidden', // Makes this setting a hidden input
        'value': 'Some hidden value' // Value stored
   },

  // enable filtering of external links
  'enConfFilterLink': { 
      'label': 'Amazon mobile redirect', // Appears next to field
      'type': 'checkbox', // Makes this setting a checkbox input
      'default': true // Default value if user doesn't change it
    },
  
   // display copy message at end of section ...
   'copy': {
        'section': ['', '(c) Gnadelwartz - <a target="blank" href="https://www.mydealz.de/diskussion/enstyler2-style-your-mydealz-incl-pepper-sites-736219">Enstyler2 - Style your MyDealz</a>'],
        'type': 'hidden', // Makes this setting a hidden input
        'value': 'Some hidden value' // Value stored
   },
};


// display GM_copnfig as div, so we cam apply CSS!!
var frame = document.createElement('div');
document.body.appendChild(frame);

GM_config.init(
  {
    id: 'GM_config',
    title: 'EnstylerJS - Settings', 
    fields: fieldDefs, 
   'frame': frame // Element used for the panel
  }
);


//=========== Support functions for actual use =======

// display website in external window

function showUrl(str) {
    var myDeco = "innerheight=800,innerwidth=600";
    var myName = "enstyler";
    
    // workaround for not working window.focus(): close an existing window first
    var myWindowShow = window.open('', myName, "width=100,height=100").close();
    myWindowShow = window.open(str, myName, myDeco);
}

// add CSS in to document
function addStyleString(str) {
    var node = document.createElement('style');
    node.innerHTML = str;
    document.body.appendChild(node);
}