// ==UserScript== // @name pcp - pr0gramm color picker // @author N0ui // @namespace pcp // @include *://pr0gramm.com* // @version 2.5.1 // @updateURL https://raw.githubusercontent.com/N0ui/pr0gramm-color-picker/master/pcp.user.js // @downloadURL https://raw.githubusercontent.com/N0ui/pr0gramm-color-picker/master/pcp.user.js // @icon http://pr0gramm.com/media/pr0gramm-favicon.png // @grant none // @run-at document-end // ==/UserScript== // by mopsalarm const pu = { addRoute(path, view) { p.addRoute(view, path); const tmpRoute = p._routes[p._routes.length - 2]; p._routes[p._routes.length - 2] = p._routes[p._routes.length - 1]; p._routes[p._routes.length - 1] = tmpRoute; if (p.getURL() === path) { p.navigateTo(path, p.NAVIGATE.FORCE); } } }; const PCP = { // colors and html colorNames: [{ key: 'html', html: '

Hauptfarben

' }, { desc: 'Hauptfarbe', key: 'main-color', value: '#ee4d2e' }, { desc: 'Hintergrund', key: 'bg-color', value: '#161618' }, { desc: 'Standard Schriftfarbe', key: 'main-font-color', value: '#f2f5f4' }, { desc: 'Standard Schriftfarbe 2 (grau)', key: 'second-main-font-color', value: '#888888' }, { desc: 'Linkfarbe', key: 'link-color', value: '#75c0c7' }, { desc: 'Linkfarbe Hover', key: 'link-color-hover', value: '#F5F7F6' }, { key: 'html', html: '

Buttons

' }, { desc: 'Buttontext', key: 'btn-color', value: '#f2f5f4' }, { desc: 'Abbrechen Button Hintergrund', key: 'cancelBtn-bg-color', value: '#212425' }, { desc: 'Abbrechen Button Text', key: 'cancelBtn-color', value: '#888888' }, { desc: 'Button Hover Hintergrund', key: 'btn-hover-bg-color', value: '#F5F7F6' }, { desc: 'Button Hover Text', key: 'btn-hover-color', value: '#555555' }, { key: 'html', html: '

Video & Tags

' }, { desc: 'Tag Hintergrund', key: 'tag-bg-color', value: '#2A2E31' }, { desc: 'Tag Text', key: 'tag-color', value: '#F5F7F6' }, { desc: 'Video Prozessbalken', key: 'video-bg-color', value: '#75c0c7' }, { key: 'html', html: '

Sonstiges

' }, { desc: 'Warnung', key: 'warn-color', value: '#fc8833' } ], // theme array theming: [{ name: 'Angenehmes Grün', data: [{ key: 'main-color', value: '#1db992' }] }, { name: 'Olivgrün des Friedens', data: [{ key: 'main-color', value: '#B0AD05' }] }, { name: 'Altes Pink', data: [{ key: 'main-color', value: '#FF0082' }] }, { name: 'Altschwuchtel Grün', data: [{ key: 'main-color', value: '#5BB91C' }] }, { name: 'Mega Episches Blau', data: [{ key: 'main-color', value: '#008FFF' }] }, { name: 'Aggressionsförderndes Dunkelgelb', data: [{ key: 'main-color', value: '#FF9900' }] }, { name: 'Lebhaftes Limettengrün', data: [{ key: 'main-color', value: '#b9cc5a' }] }, { name: 'Wohliges Warmgelb', data: [{ key: 'main-color', value: '#e3af12' }] }, { name: 'Sonniges Steppenrot', data: [{ key: 'main-color', value: '#cc674b' }] }, { name: 'Samtweiches Stahlweiß', data: [{ key: 'main-color', value: '#b0b0b0' }] } ], // calculate brightness (http://www.sitepoint.com/javascript-generate-lighter-darker-color/) colorLuminance(hex, lum) { // validate hex string hex = String(hex).replace(/[^0-9a-f]/gi, ''); if (hex.length < 6) { hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; } lum = lum || 0; // convert to decimal and change luminosity let rgb = '#', c, i; for (i = 0; i < 3; i++) { c = parseInt(hex.substr(i * 2, 2), 16); c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16); rgb += ('00' + c).substr(c.length); } return rgb; }, // check if hex color is valid // http://stackoverflow.com/questions/8027423/how-to-check-if-a-string-is-a-valid-hex-color-representation?answertab=active#tab-top isValidateHex(value) { return /^#([A-Fa-f0-9]{3}$)|([A-Fa-f0-9]{6}$)/.test(value) && value.length === 7; }, // convert hex to rgba convertHex(_hex, _opacity) { const hex = _hex.replace('#', ''); const r = parseInt(hex.substring(0, 2), 16); const g = parseInt(hex.substring(2, 4), 16); const b = parseInt(hex.substring(4, 6), 16); return 'rgba(' + r + ',' + g + ',' + b + ',' + _opacity / 100 + ')'; }, // style cssStyle() { const $styleEl = $('#pcp-style'); let cssStr = ''; let logoSvg = ''; cssStr += ` body { --theme-main-color: ${localStorage['main-color']}; } .comments .comment.own-comment { color: ${localStorage['main-color']}; } html, body, h3, .tab-bar a, .head-link, #search-submit-inline, .user, .user-score, #inboxLink.empty { color: ${localStorage['main-font-color']}; } input.box-from-label:checked + label:before { background-color: ${localStorage['main-font-color']}; } input.box-from-label + label:before { border: 1px solid ${localStorage['main-font-color']}; } #filter-save, .confirm-button, span.user-comment-op, input[type=button], input[type=submit], .filter-setting.active .filter-check, .loader > div, div.stream-next:hover span.stream-next-icon, div.stream-prev:hover span.stream-prev-icon, .user-follow, .user-unfollow { background-color: ${this.colorLuminance(localStorage['main-color'], -0.1)}; } #filter-save:hover,#loader > div{ background-color: ${localStorage['main-color']}; color: #fff; } .filter-setting.active .filter-check, #upload-droparea { border: 1px solid ${localStorage['main-color']}; } #inbox-link, #inbox-link.empty:hover,div.overlay-tabs span.overlay-link:hover, div.overlay-tabs span.active,#upload-droparea.active, #key-indicator, a.item-fullsize-link:hover, .vote-up:hover, .voted-down .vote-up:hover, .voted-up .vote-up:hover, .voted-up .vote-up, a.bookmarklet, #search-submit-inline:hover, #settings-logout-link,.action, .filter-setting.active .filter-name, .head-link:hover,.tab-bar a:hover, .tab-bar a.active,a.head-tab.active, a.head-tab:hover,a#inboxLink, a#inboxLink, #inboxLink.empty:hover,.head-link:hover, div.tagsinput span.tag a, .vote-fav.faved, .vote-fav:hover, #inbox-link.empty:hover { color: ${localStorage['main-color']}; } a, .link, a.user:hover, a.tag-link:hover, span.tag.voted-down a.tag-link:hover { color: ${localStorage['link-color']}; } a:hover, .link:hover, .action:hover { color: ${localStorage['link-color-hover']}; } .confirm-button, input[type=button], input[type=submit], .user-follow, .user-unfollow { color: ${localStorage['btn-color']}; } .warn{ color: ${localStorage['warn-color']}; } .confirm-button:hover, input[type=button]:hover, input[type=button]:focus, input[type=submit]:hover, input[type=submit]:focus { background-color: ${localStorage['link-color-hover']}; } input[type=button].cancel, input[type=button]:disabled, input[type=submit]:disabled, input[type=submit].cancel { background-color: ${localStorage['cancelBtn-bg-color']}; color: ${localStorage['cancelBtn-color']}; } .confirm-button:hover, input[type=button]:hover, input[type=button]:focus, input[type=submit]:hover, input[type=submit]:focus, .user-follow:hover, .user-unfollow:hover { background-color: ${localStorage['btn-hover-bg-color']}; color: ${localStorage['btn-hover-color']}; } span.tag { background-color: ${localStorage['tag-bg-color']} !important; } a.tag-link { color: ${localStorage['tag-color']}; } div.video-position { background-color: ${localStorage['video-bg-color']}; } .tab-bar span, .user-stats, div.comment-foot { color: ${localStorage['second-main-font-color']}; } a.head-tab { color: ${this.colorLuminance(localStorage['second-main-font-color'], 0.2)}; } html, body, div.item-container { background-color: ${localStorage['bg-color']}; } #footer-links { background-color: transparent; } #footer-links a { color: ${localStorage['second-main-font-color']} !important; } #footer-links a:hover { color: ${localStorage['link-color-hover']}!important; } #head-content { background-color: ${this.convertHex(this.colorLuminance(localStorage['bg-color'], -0.6), 80)}; } input, textarea { background-color: ${this.colorLuminance(localStorage['bg-color'], 0.3)}; } input:focus, textarea:focus { background-color: ${this.colorLuminance(localStorage['bg-color'], 0.4)}; } div.comment-foot, div.comment-box div.comment-box { border-color: ${this.colorLuminance(localStorage['bg-color'], -0.3)}; } input.q { background-color: ${this.convertHex(this.colorLuminance(localStorage['bg-color'], 0.4), 80)}; } div.product-description { background-color: ${this.colorLuminance(localStorage['bg-color'], 0.4)}; } #pr0gramm-logo-link { margin: 18px 12px 4px 4px; } #pr0gramm-logo-link svg { width: 121px; } #pr0gramm-logo-link svg path, #pr0gramm-logo-link svg polygon, #pr0gramm-logo-link svg rect{ fill:${localStorage['main-font-color']} } #pr0gramm-logo-link svg .pr0-sign { fill:${localStorage['main-color']} } .pcp-input-outer { display:blofck;margin: 0 0 10px 0; } .pcp-label { width: 40%; display:inline-block !important; } .pcp-color{ padding: 0; height:26px; width: 24px; display: inline-block; border: 0; background-color:transparent; } #pcp-reset { background-color: #A21F1F; display: inline-block; padding: 10px 20px; cursor:pointer; } .pcp-theme-list { lists-style: none; margin: 0; padding: 0; } .pcp-theme-list .pcp-theme-btn { display: inline-block; margin: 0 25px 25px 0; padding: 10px 15px; border: 1px solid #fff; cursor: pointer; } .pcp-color-input { width: 150px; display:inline-block; margin-left: 20px; }`; // userscript styles for 'pr0gramm.com Dick by Seglors' cssStr += `.stream-next:hover, .stream-prev:hover { color: ${localStorage['main-color']} !important; } #com-top.active, #com-top:hover, #com-new.active, #com-new:hover { color:${localStorage['main-color']} !important; } .opuser .user:before { background-color:${localStorage['main-color']} !important; color: ${localStorage['main-font-color']} !important; } .comment-content a .preview, .comment-content a .preview { border-color:${localStorage['main-color']} !important; } .comment-content a .preview:before, .comment-content a .preview:after { border-color:${localStorage['main-color']} transparent !important; } .custom_seen::after { background: ${this.convertHex(localStorage['main-color'], 70)} !important; }`; // cust0m pr0gramm 2.0 cssStr += `div.stream-next:hover span.cust0m_stream-next-icon, div.stream-prev:hover span.cust0m_stream-prev-icon, .cust0m_menu:hover, .cust0m_menu.active, .cust0m_trigger.active, .cust0m_trigger:hover, .cust0m_button:hover { color:${localStorage['main-color']} !important; } div.comment-op div.comment-foot, .comment-foot.custom_op { border-bottom-color:${localStorage['main-color']} !important; } .highcharts-series path{stroke:${localStorage['main-color']}; stroke-width: 2px;} .highcharts-markers.highcharts-tracker path{fill:${localStorage['main-color']};} .highcharts-tooltip path:nth-child(4) {stroke:${localStorage['main-color']}; stroke-width: 1px;} .highcharts-series-group:first-child path {fill: #000;}`; //kfav cssStr += `.kfav-save:hover { color:${localStorage['main-color']} !important; }`; // op highlight cssStr += `.extension-is-op .user:before { background-color:${localStorage['main-color']} !important; }`; // visitenkarte cssStr += `.user.profile > .extended > ul > li > span > span:last-child { color:${localStorage['main-color']} !important; }`; // svg logoSvg = ` `; // add logo $('#pr0gramm-logo-link').html(logoSvg); // check if style tag is set if ($styleEl.length < 1) { $('body').append(''); } // insert css into style tag $styleEl.html(cssStr); }, // html form settingsHtml() { let settingsHtmlStr = ''; let themeHtml = ''; settingsHtmlStr += `

pr0gramm Farben

Stell einfach deine Farben ein

`; $.each(this.colorNames, (i, v) => { if (v.key !== 'html') { settingsHtmlStr += `
${v.desc}
`; } else { settingsHtmlStr += v.html; } }); settingsHtmlStr += `

theming

`; settingsHtmlStr += themeHtml; settingsHtmlStr += `

Alle Farben zurücksetzen (bewährtes Orange)



`; return settingsHtmlStr; }, // reset all colors reset() { $.each(this.colorNames, (i, v) => { if (v.key !== 'html') { localStorage.removeItem(v.key); } }); this.init(); }, // update colors update(_isInit, _isInputUpdate) { if (_isInit) { $('#pcp-style').html(this.cssStyle()); } $.each(this.colorNames, (i, v) => { if (v.key !== 'html') { if (!_isInit) { if (_isInputUpdate && PCP.isValidateHex($('#pcp-' + v.key + '-input').val())) { localStorage[v.key] = $('#pcp-' + v.key + '-input').val(); } else { localStorage[v.key] = $('#pcp-' + v.key).val(); } } $('#pcp-' + v.key).val(localStorage[v.key].toLowerCase()); $('#pcp-' + v.key + '-input').val(localStorage[v.key].toLowerCase()); } }); if (!_isInit) { $('#pcp-style').html(this.cssStyle()); } }, // set theme setTheme(e) { const $element = $(e.currentTarget); if (typeof PCP.theming[$element.index()] !== 'undefined') { $.each(PCP.theming[$element.index()].data, (i, v) => { localStorage[v.key] = v.value; }); } PCP.update(true, false); }, // init init() { const $styleEl = $('#pcp-style'); // set default colors if (typeof localStorage['main-color'] === 'undefined' || localStorage['main-color'] === '') { $.each(this.colorNames, (i, v) => { if (v.key !== 'html') { localStorage[v.key] = v.value; } }); } // check if form exists if ($('#settings-pcp').length < 1) { $('#settings-site-form').prepend(PCP.settingsHtml()); } // append style if ($styleEl.length < 1) { $('body').append(''); } this.update(true, false); } }; const PCPload = () => { // override native theming p.User.prototype.loadTheme = () => { $('#theme-style').remove(); }; // thanks to mopsalarm $('#footer-links div').append(`Theming`); const link = $('#tab-theming'); // add theme route pu.addRoute('theming', p.View.Base.extend({ template: `

pr0gramm Theming

${PCP.settingsHtml()}
`, init(container, parent) { this.parent(container, parent); p.mainView.setTab('theming'); this.render(); }, load() { // reset colors $(document).on('click', '#pcp-reset', () => { PCP.reset(); }); // update colors $(document).on('change', '.pcp-color', () => { PCP.update(false, false); }); // update input color $(document).on('focusout', '.pcp-color-input', () => { PCP.update(false, true); }); // set theme $(document).on('click', '.pcp-theme-btn', PCP.setTheme); this.render(); PCP.init(); return false; }, loaded() { this.render(); return false; } })); PCP.init(); // replace main color $('body').on('click', '.kfav-save', () => { $('style').not('#pcp-style').html((_, html) => html.replace(/#ee4d2e/g, localStorage['main-color'])); }); $('style').not('#pcp-style').html((_, html) => html.replace(/#ee4d2e/g, localStorage['main-color'])); }; PCPload();