// ==UserScript== // @name MyDealz Enhancer // @namespace mydealz_enhancer // @description Verbessert Funktionen von MyDealz, oder stellt sie wieder her // @author BAERnado // @include http://www.mydealz.de/* // @version 0.97 // @require http://code.jquery.com/jquery-2.1.4.min.js // @grant GM_getValue // @grant GM_setValue // @grant GM_log // @downloadURL none // ==/UserScript== function ModifyPage() { var defaultSettings = {comments: {maxQuoteLevel: 1, editReason: ''}, userMenuDirect : {pn: false, account: false}, hideAds: {topBar: true, gsWidget: true, inside: true,nlSection: true, app: true}, moveButtons: {_: true, deals: true, gutscheine: true, freebies: true, custom: true, gesuche: false, diverses: false, kleinanzeigen: false}, fromTo: {deals: 'deals-new', gutscheine: 'gutscheine-new', freebies: 'freebies-new', gesuche: 'gesuche', diverses: 'diverses', kleinanzeigen: 'kleinanzeigen', bugreports: 'bugreports'}}; var settings = {}; var timer = {}; var save = {pn: {}}; var userName; $.fn.hasAttr = function(name) { return this.attr(name) !== undefined; }; $.fn.extend({ insertAtCaret: function(myValue) { var elem = this[0]; if (document.selection) { elem.focus(); sel = document.selection.createRange(); sel.text = myValue; elem.focus(); } else if (elem.selectionStart || elem.selectionStart == '0') { var startPos = elem.selectionStart; var endPos = elem.selectionEnd; var scrollTop = elem.scrollTop; elem.value = elem.value.substring(0, startPos)+myValue+elem.value.substring(endPos,elem.value.length); elem.focus(); elem.selectionStart = startPos + myValue.length; elem.selectionEnd = startPos + myValue.length; elem.scrollTop = scrollTop; } else { elem.value += myValue; elem.focus(); } } }); function printUTCDate(_date) { return ('0'+_date.getUTCHours().toString()).replace(/^0*([0-9]{2})$/, '$1') + ':' + ('0'+_date.getUTCMinutes().toString()).replace(/^0*([0-9]{2})$/, '$1') + ':' + ('0'+_date.getUTCSeconds().toString()).replace(/^0*([0-9]{2})$/, '$1'); } function printDate(_date) { return ('0'+_date.getHours().toString()).replace(/^0*([0-9]{2})$/, '$1') + ':' + ('0'+_date.getMinutes().toString()).replace(/^0*([0-9]{2})$/, '$1') + ':' + ('0'+_date.getSeconds().toString()).replace(/^0*([0-9]{2})$/, '$1'); } function timeTick() { var _allTimes = document.getElementsByClassName('bf-carousel-date'); var _remain; var _until; var _diffDate; var _toDate; var _now = new Date(); for(var _i = 0; _i < _allTimes.length; _i++) { _until = _allTimes[_i]; _remain = _allTimes[_i].parentNode.getElementsByClassName('bf-carousel-date-remain')[0]; _toDate = new Date(); _toDate.setTime(parseInt(_until.innerHTML, 10)*1000); _diffDate = new Date(); _diffDate.setTime(_toDate.getTime() - _now.getTime()); _remain.innerHTML = printUTCDate(_diffDate); // + ' (' + printDate(_toDate) + ')'; } } function addTimes() { var _allTimes = document.getElementsByClassName('bf-carousel-date'); var _newSpan; for(var _i = 0; _i < _allTimes.length; _i++) { _allTimes[_i].style.display = 'none'; _newSpan = document.createElement('span'); _newSpan.setAttribute('class', 'bf-carousel-date-remain'); _allTimes[_i].parentNode.insertBefore(_newSpan, null); } timeTick(); window.setInterval(timeTick, 1000); } function fixPositions() { var _allElems = document.getElementsByTagName('article'); for(var _i = 0;_i < _allElems.length; _i++) { _allElems[_i].setAttribute('style', 'position: absolute; width: 1200px; left: 0px; top: ' + _i*404 + 'px'); } window.setTimeout("document.getElementsByTagName('article')[0].parentNode.setAttribute('style', 'height: " + _allElems.length * 404 + "px;');", 20); } function changeLinks() { var _allLinks = $('a.navTrigger1, .navTrigger1-row-items .menu:last .menu-list .navMenu1-item'); var _fromTo = settings.fromTo; var _loc; $(_allLinks).each(function (_lInd, _lVal) { var _link = $(_lVal); if(_link.hasAttr('href')) { _loc = _link.attr('href').replace(/^https?:\/\/www\.mydealz\.de(\/(hot|discussed|new)?)?$/, '/').replace(/^https?:\/\/www\.mydealz\.de\/([a-zA-Z-]+)?$/, '$1').replace(/-?(new|discussed)?$/,''); if(_loc in _fromTo) { _link.attr('href', _link.attr('href').replace(/^(https?:\/\/www\.mydealz\.de).*$/, '$1' + '/' + _fromTo[_loc])); } } }); } function remodelNavBar() { // Besten Dank an lolnickname für die Vorlage var _subMenu = $('header strong[data-handler="menu"]'); _subMenu.find('span[class!="navTrigger-arrow"]').remove(); _subMenu = _subMenu.parent().parent(); var _buttonIndex = 1; var _buttonBeforeSubIndex = 0; var _button; var _subHiddenButton; var _selected; var _moreHighlight = true; for(_bInd in settings.moveButtons) { if(_bInd == '_') { _button = $('.navTrigger1-row-items > li > a.navTrigger1[href="http://www.mydealz.de/"], .navTrigger1-row-items li.menu ul.menu-list li.hide--downThrough- a[href="http://www.mydealz.de/"]'); } else { _button = $('.navTrigger1-row-items > li > a.navTrigger1[href*="' + _bInd + '"], .navTrigger1-row-items li.menu ul.menu-list li.hide--downThrough- a[href*="' + _bInd + '"]'); } _selected = _button.hasClass('navTrigger1--selected') || _button.hasClass('navMenu1-item--selected'); if(_button.hasClass('navTrigger1') && settings.moveButtons[_bInd]) { _button.attr('class', 'navTrigger1 navTrigger1hide--upTo-menu' + _buttonIndex++); } else if (_button.hasClass('navTrigger1') && !settings.moveButtons[_bInd]) { // Verschiebe in Untermenu _subMenu.find('li.hide--downThrough- a.navMenu1-item').eq(_buttonBeforeSubIndex++).parent().before(_button.attr('class', 'navMenu1-item').parent().attr('class', 'hide--downThrough-')); } else if(_button.hasClass('navMenu1-item') && settings.moveButtons[_bInd]) { // Verschiebe ins Hauptmenu _subMenu.before(_button.removeClass('navMenu1-item navMenu1-item--selected').addClass('navTrigger1').parent().removeClass('navMenu1-item hide--downThrough-').addClass('tGrid-cell hide--upTo-menu' + _buttonIndex)); } if(_selected) { if(_button.hasClass('navTrigger1')) { _button.addClass('navTrigger1--selected'); _moreHighlight = false; } else { _button.addClass('navMenu1-item--selected'); if($('header.header .navTrigger1-row .navTrigger1-row-items a.navTrigger1[href="' + _button.attr('href') + '"]').length == 0) { _moreHighlight = true; } else { _moreHighlight = false; } } } } for(_buttonIndex = 1; _buttonIndex <= 4; _buttonIndex++) { _button = $('.navTrigger1-row-items > li.hide--upTo-menu' + _buttonIndex + ' > a.navTrigger1'); if(_button.length) { _subHiddenButton = $('.navTrigger1-row-items li.menu ul.menu-list li.hide--downThrough-menu' + _buttonIndex + ' a'); _subHiddenButton.attr('href', _button.attr('href')).html(_button.html()); } else { $('.navTrigger1-row-items li.menu ul.menu-list li.hide--downThrough-menu' + _buttonIndex).remove(); } } $('header strong[data-handler="menu"]').removeClass('navTrigger1--selected'); if(_moreHighlight) { $('header strong[data-handler="menu"]').addClass('navTrigger1--selected'); } if(settings.userMenuDirect.pn) { var _menuElem = $('ul.userBar label.userBar-button--pm').removeAttr('data-menu').removeAttr('data-handler'); _menuElem.find('input').removeAttr('data-handler').click(function() { window.location.href = document.location.protocol + '//' + document.location.hostname + '/profile/' + userName + '/messages'; }); } if(settings.userMenuDirect.account) { var _menuElem = $('ul.userBar label.userBar-button--user').removeAttr('data-menu').removeAttr('data-handler'); _menuElem.find('input').removeAttr('data-handler').click(function() { window.location.href = document.location.protocol + '//' + document.location.hostname + '/profile/' + userName; }); } } function addCyberDealz() { var _newMenu = $('
Informationen und Verbesserungsvorschläge im MyDealz-Enhancer-Thread.');
_section.appendTo(_sections);
_section = $('Werbung ausblenden
');
_section.appendTo(_sections);
for(var _sInd in settings.hideAds) {
if(settings.hideAds[_sInd]) {
_section.find('#adForm-hideAds_' + _sInd).prop('checked', 'checked').attr('checked', 'checked');
} else {
_section.find('#adForm-hideAds_' + _sInd).prop('checked', false).removeAttr('checked');
}
}
_section = $('Buttons im Hauptmenu
');
_section.appendTo(_sections);
for(var _sInd in settings.moveButtons) {
if(settings.moveButtons[_sInd]) {
_section.find('#buttonForm-moveButtons_' + _sInd).prop('checked', 'checked').attr('checked', 'checked');
} else {
_section.find('#buttonForm-moveButtons_' + _sInd).prop('checked', false).removeAttr('checked');
}
}
_section = $('UserMenu Direktlinks
');
_section.appendTo(_sections);
for(var _sInd in settings.userMenuDirect) {
if(settings.userMenuDirect[_sInd]) {
_section.find('#userMenuForm-direct_' + _sInd).prop('checked', 'checked').attr('checked', 'checked');
} else {
_section.find('#userMenuForm-direct_' + _sInd).prop('checked', false).removeAttr('checked');
}
}
_section = $('Kommentieren
');
_section.appendTo(_sections);
for(var _sInd in settings.comments) {
_section.find('#commentForm-comments_' + _sInd).val(settings.comments[_sInd]).attr('value', settings.comments[_sInd]);
}
_section.find('ul').append($('
Seite neu laden zum Anwenden.', 'success');
} else {
createMessageWindow('Ein Fehler trat beim Speichern auf.', 'error');
}
}
function init() {
var _noError = true;
try {
var _path = document.location.pathname.replace(/^\/([^\?]+).*$/, '$1');
if(/^(visit|image)/.test(_path) || /^JavaScript Shell/.test(document.title)) {
return;
}
retrieveUserName();
loadSettings();
addMenuSwitcher(filterPath());
remodelNavBar();
removeAds();
addCyberDealz();
addSetupLink();
changeLinks();
if(document.location.hash == '#mydealz-enhancer') {
showSetup();
}
switch(_path) {
case 'cyber-monday/cyberdeals':
addTimes();
case 'profile/' + userName + '/messages':
markPnRead();
}
addImageZoom();
insertDirectLink();
addFeedbackButtons();
addFuncLinks();
modifyComments();
addDealLinks();
} catch (e) {
alert(e);
_noError = false;
}
// Danke an lolnickname für die Idee
$('.userBar-link .avatar-image').css( 'border', '1px dotted ' + (_noError ? '#00ff00' : '#aa0000' ) );
}
init();
}
// Erst laden, wenn DOM fertig ist
if(document.readyState == 'interactive') {
ModifyPage();
} else {
$(document).ready(ModifyPage);
}