Change Facebook Notification Sound

Small script for a request https://greasyfork.org/uk/forum/discussion/6631/change-facebook-notification-sound-convert-chrome-extension-to-userscript

当前为 2015-10-25 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Change Facebook Notification Sound
  3. // @namespace cfs
  4. // @author Dexmaster
  5. // @date 2015-10-25
  6. // @description Small script for a request https://greasyfork.org/uk/forum/discussion/6631/change-facebook-notification-sound-convert-chrome-extension-to-userscript
  7. // @include https://facebook.com/*
  8. // @include https://www.facebook.com/*
  9. // @version 0.1.4
  10. // @require https://openuserjs.org/src/libs/sizzle/GM_config.js
  11. // @grant GM_getValue
  12. // @grant GM_setValue
  13. // @grant GM_log
  14. // @grant GM_addStyle
  15. // @grant GM_registerMenuCommand
  16. // @noframes
  17. // ==/UserScript==
  18. (function () {
  19. 'use strict';
  20. var counter = 0,
  21. soundUri,
  22. interval,
  23. status,
  24. audio,
  25. windowStatus = false;
  26. var openClose = function () {
  27. if (!!windowStatus) {
  28. GM_config.close();
  29. } else {
  30. GM_config.open();
  31. }
  32. };
  33. var countUnread = function () {
  34. var els = document.querySelectorAll('._51jx'),
  35. sum = Array.prototype.map.call(els, function (el) {
  36. return parseInt(el.innerHTML) || 0;
  37. }).reduce(function (a, b) {
  38. return a + b;
  39. }, 0);
  40. return sum;
  41. };
  42. var numberChange = function () {
  43. var num = countUnread();
  44. if (counter !== num) {
  45. counter = num;
  46. audio.play();
  47. }
  48. };
  49. var init = function () {
  50. soundUri = GM_config.get('soundUri');
  51. interval = GM_config.get('interval');
  52. status = GM_config.get('status');
  53. if (!status) {
  54. return;
  55. }
  56. if (!audio) {
  57. audio = document.createElement('audio');
  58. }
  59. audio.setAttribute('src', soundUri);
  60. setInterval(numberChange, interval * 1000);
  61. };
  62. GM_config.init({
  63. 'id': 'CFNS',
  64. 'title': 'Notification Sound Settings',
  65. 'fields': {
  66. 'status': {
  67. 'label': 'Enable',
  68. 'type': 'checkbox',
  69. 'default': true
  70. },
  71. 'soundUri': {
  72. 'label': 'Sound File Url',
  73. 'type': 'text',
  74. 'default': 'https://instaud.io/_/djS.mp3'
  75. },
  76. 'interval': {
  77. 'label': 'Notification check interval (in sec)',
  78. 'type': 'unsigned float',
  79. 'default': 5
  80. },
  81. },
  82. 'events': // Callback functions object
  83. {
  84. 'init': function () {
  85. 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}');
  86. init();
  87. GM_registerMenuCommand('Notification Sound Settings', openClose, "F");
  88. },
  89. 'save': function () {
  90. init();
  91. },
  92. 'close': function () {
  93. windowStatus = false;
  94. },
  95. 'open': function () {
  96. windowStatus = true;
  97. }
  98. },
  99. 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}'
  100. });
  101. }());