// ==UserScript== // @name Change Facebook Notification Sound // @namespace cfs // @author Dexmaster // @date 2015-10-25 // @description Small script for a request https://greasyfork.org/uk/forum/discussion/6631/change-facebook-notification-sound-convert-chrome-extension-to-userscript // @include https://facebook.com/* // @include https://www.facebook.com/* // @version 0.1.4 // @require https://openuserjs.org/src/libs/sizzle/GM_config.js // @grant GM_getValue // @grant GM_setValue // @grant GM_log // @grant GM_addStyle // @grant GM_registerMenuCommand // @noframes // @downloadURL none // ==/UserScript== (function () { 'use strict'; var counter = 0, soundUri, interval, status, audio, windowStatus = false; var openClose = function () { if (!!windowStatus) { GM_config.close(); } else { GM_config.open(); } }; var countUnread = function () { var els = document.querySelectorAll('._51jx'), sum = Array.prototype.map.call(els, function (el) { return parseInt(el.innerHTML) || 0; }).reduce(function (a, b) { return a + b; }, 0); return sum; }; var numberChange = function () { var num = countUnread(); if (counter !== num) { counter = num; audio.play(); } }; var init = function () { soundUri = GM_config.get('soundUri'); interval = GM_config.get('interval'); status = GM_config.get('status'); if (!status) { return; } if (!audio) { audio = document.createElement('audio'); } audio.setAttribute('src', soundUri); setInterval(numberChange, interval * 1000); }; GM_config.init({ 'id': 'CFNS', 'title': 'Notification Sound Settings', 'fields': { 'status': { 'label': 'Enable', 'type': 'checkbox', 'default': true }, 'soundUri': { 'label': 'Sound File Url', 'type': 'text', 'default': 'https://instaud.io/_/djS.mp3' }, 'interval': { 'label': 'Notification check interval (in sec)', 'type': 'unsigned float', 'default': 5 }, }, 'events': // Callback functions object { 'init': function () { GM_addStyle('#CFNS {border:medium none!important;border-radius:3px;box-shadow:0 0 5px 0 #888,0 0 5px 0 #06f;height:260px!important;width:380px!important}'); init(); GM_registerMenuCommand('Notification Sound Settings', openClose, "F"); }, 'save': function () { init(); }, 'close': function () { windowStatus = false; }, 'open': function () { windowStatus = true; } }, css:'#CFNS_wrapper{max-width:400px;margin:0 auto;background:#fff;border-radius:2px;padding:0;font-family:Georgia,"Times New Roman",Times,serif}.config_header{display:block;text-align:center;padding:0;margin:0 0 20px;color:#5C5C5C;font-size:x-large}#CFNS_wrapper .config_var{display:block;padding:9px;border:1px solid #DDD;margin-bottom:10px;border-radius:3px}#CFNS_wrapper .config_var:last-child{border:none;margin-bottom:0;text-align:center}#CFNS_wrapper .config_var > label{display:block;float:left;margin-top:-19px;background:#FFF;height:14px;padding:2px 5px;color:#B9B9B9;font-size:14px;overflow:hidden;font-family:Arial,Helvetica,sans-serif}#CFNS_wrapper .config_var input[type="text"],#CFNS_wrapper .config_var input[type="date"],#CFNS_wrapper .config_var input[type="datetime"],#CFNS_wrapper .config_var input[type="email"],#CFNS_wrapper .config_var input[type="number"],#CFNS_wrapper .config_var input[type="search"],#CFNS_wrapper .config_var input[type="time"],#CFNS_wrapper .config_var input[type="url"],#CFNS_wrapper .config_var input[type="password"],#CFNS_wrapper .config_var textarea,#CFNS_wrapper .config_var select{box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;width:100%;display:block;outline:none;border:none;height:25px;line-height:25px;font-size:16px;padding:0;font-family:Georgia,"Times New Roman",Times,serif}#CFNS_wrapper textarea{resize:none}#CFNS_wrapper .saveclose_buttons{background:#2471FF;border:none;border-bottom:3px solid #5994FF;border-radius:3px;color:#D2E2FF;font-size:18px;margin:0 0 0 20px;padding:5px 20px;cursor: pointer;}#CFNS_wrapper .saveclose_buttons:hover{background:#6B9FFF;color:#fff}' }); }());