// ==UserScript== // @name ficbook.net old top notifications // @description Возвращает иконки обновлений в заголовок, больше не требуется лишнего клика по "колокольчику". // @namespace http://tampermonkey.net/ // @version 0.7 // @author AjiTae // @match *://ficbook.net/* // @icon https://www.google.com/s2/favicons?sz=64&domain=ficbook.net // @grant none // @run-at document-start // @downloadURL none // ==/UserScript== { const showNews = true; // показывать новости сайта const { decodeHTMLEntities, encodeHTMLEntities } = ((textarea) => ({ decodeHTMLEntities(text) { textarea.innerHTML = text; const { value } = textarea; textarea.innerHTML = ''; return value; }, encodeHTMLEntities(text) { textarea.setAttribute('encode', text); const value = textarea.outerHTML.match(/encode="(.*?)"/)[1]; textarea.setAttribute('encode', ''); return value; } }))(document.createElement("textarea")); const parse = (value) => JSON.parse(decodeHTMLEntities(value)); const stringify = (value) => encodeHTMLEntities(JSON.stringify(value)); const patchNotifications = (config) => { const [ , notifications, news ] = config.template.match(/:notification-?counts="(.*?)".*?:new-?news="(.*?)"/i); const importantCounts = stringify(parse(notifications).important); const siteNewsCount = showNews ? news : 0; config.components.TopNotifications = config.components.notifications.components.TopNotifications; config.template = `
${config.template.replace(/(:new-?news=")[^"]+(?=")/i, '$10')}
`; } document.documentElement.insertAdjacentHTML('beforeend', ``); Object.assign = ((assign) => (...args) => { const config = args[1]; if (config?.name === "notifications-app") { patchNotifications(config); Object.assign = assign; } return assign(...args); })(Object.assign); Object.defineProperty = ((defineProperty) => (obj, key, descriptor) => { if (key === 'createApp') { descriptor.get = ((get) => function() { return ((createApp) => (config, ...args) => { if (config?.name === 'notifications-app') { patchNotifications(config); } return createApp(config, ...args);; })(get.call(this)); })(descriptor.get); Object.defineProperty = defineProperty; } return defineProperty(obj, key, descriptor); })(Object.defineProperty); };