flashingEscortButton

Rulesy's flashingEscortButton

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/31202/204644/flashingEscortButton.js

  1. var modules = modules || {};
  2.  
  3. modules.flashingEscortButton = {
  4.  
  5. name: 'Flashing Escort Button',
  6.  
  7. description: 'Makes your escort button flash, to remind you to click it!',
  8.  
  9. icon: '/gfx/icons/small_escort.gif',
  10.  
  11. pages: 'outside',
  12.  
  13. defaults: {
  14. background1: '#FF0000',
  15. background2: '#FFFF00',
  16. textColour1: '#FFFF00',
  17. textColour2: '#FF0000'
  18. },
  19.  
  20. init: function() {
  21.  
  22. this.setButtonStyles();
  23.  
  24. },
  25.  
  26. config: function() {
  27.  
  28. var content;
  29.  
  30. content = '<h2>Options</h2>';
  31. content += '<ul id="modules-flashingEscortButton-config-colours">';
  32. content += '<li class="color" data-id="background1">';
  33. content += '<label>Background colour #1</label>';
  34. content += '<div class="demo"></div>';
  35. content += '<div class="arrow"></div>';
  36. content += '<input disabled="disabled">';
  37. content += '</li>';
  38. content += '<li class="color" data-id="background2">';
  39. content += '<label>Background colour #2</label>';
  40. content += '<div class="demo"></div>';
  41. content += '<div class="arrow" style="display: none"></div>';
  42. content += '<input style="display: none" disabled="disabled">';
  43. content += '</li>';
  44. content += '<li class="color" data-id="textColour1">';
  45. content += '<label>Text colour #1</label>';
  46. content += '<div class="demo"></div>';
  47. content += '<div class="arrow" style="display: none"></div>';
  48. content += '<input style="display: none" disabled="disabled">';
  49. content += '</li>';
  50. content += '<li class="color" data-id="textColour2">';
  51. content += '<label>Text colour #2</label>';
  52. content += '<div class="demo"></div>';
  53. content += '<div class="arrow" style="display: none"></div>';
  54. content += '<input style="display: none" disabled="disabled">';
  55. content += '</li>';
  56. content += '<li>';
  57. content += '<div class="slider"></div><div class="sliderText"></div>';
  58. content += '</li>';
  59. content += '</ul>';
  60. content += '<div id="modules-flashingEscortButton-config-colourpicker" data-id="background1"></div>';
  61. content += '<a class="button modules-flashingEscortButton-config-escortButton"><img alt="" src="http://data.die2nite.com/gfx/icons/small_escort.gif"> Wait for an escort</a>';
  62.  
  63. return content;
  64.  
  65. },
  66.  
  67. configInit: function() {
  68.  
  69. modules.flashingEscortButton.setButtonStyles();
  70.  
  71. $('.slider').slider({
  72. value: localStorage.getItem('modules.flashingEscortButton.config.speed') || '2',
  73. min: 0,
  74. max: 5,
  75. slide: function( event, ui ) {
  76. var speed;
  77. localStorage.setItem('modules.flashingEscortButton.config.speed', ui.value);
  78. speed = modules.flashingEscortButton.getSpeed()
  79. $('#modules-flashingEscortButton-config-colours .sliderText').html(speed + ' second' + (speed == '1' ? '' : 's'));
  80. modules.flashingEscortButton.setButtonStyles();
  81.  
  82. }
  83. });
  84.  
  85. modules.flashingEscortButton.config.picker = $.farbtastic('#modules-flashingEscortButton-config-colourpicker', function() {
  86. var color = this.color.toUpperCase();
  87. var id = $('#modules-flashingEscortButton-config-colourpicker').attr('data-id');
  88.  
  89. $('#modules-flashingEscortButton-config-colours li[data-id="' + id + '"] input').css({
  90. 'backgroundColor': color,
  91. 'color': modules.flashingEscortButton.contrast(color)
  92. }).val(color);
  93.  
  94. if (color.match(/^#[0-9A-Fa-f]{6}/)) {
  95. localStorage.setItem('modules.flashingEscortButton.' + id, color);
  96. modules.flashingEscortButton.setButtonStyles();
  97. }
  98. })
  99.  
  100. var color = localStorage.getItem('modules.flashingEscortButton.background1') || modules.flashingEscortButton.defaults.background1;
  101. modules.flashingEscortButton.config.picker.setColor(color);
  102. $('#wee').css({
  103. 'backgroundColor': color,
  104. 'color': modules.flashingEscortButton.contrast(color)
  105. }).val(color);
  106.  
  107. $('#modules-flashingEscortButton-config-colours li.color').off().on('click', function() {
  108.  
  109. var id;
  110. var color;
  111.  
  112. id = $(this).attr('data-id');
  113. color = localStorage.getItem('modules.flashingEscortButton.' + id) || modules.flashingEscortButton.defaults[id];
  114.  
  115. $('#modules-flashingEscortButton-config-colours .arrow, #modules-flashingEscortButton-config-colours input').hide();
  116.  
  117. $('#modules-flashingEscortButton-config-colourpicker').attr('data-id', id);
  118. modules.flashingEscortButton.config.picker.setColor(color);
  119.  
  120. $('input', this).css({
  121. 'backgroundColor': color,
  122. 'color': modules.flashingEscortButton.contrast(color)
  123. }).val(color);
  124.  
  125. $('.arrow, input', this).show();
  126.  
  127. })
  128.  
  129. modules.flashingEscortButton.setButtonStyles();
  130. speed = modules.flashingEscortButton.getSpeed();
  131. $('#modules-flashingEscortButton-config-colours .sliderText').html(speed + ' second' + (speed == '1' ? '' : 's'));
  132. },
  133.  
  134. setButtonStyles: function() {
  135.  
  136. var backgroundCss;
  137. var css;
  138. var background1;
  139. var background2;
  140. var textColour1;
  141. var textColour2;
  142. var speedSeconds;
  143.  
  144. background1 = localStorage.getItem('modules.flashingEscortButton.background1') || modules.flashingEscortButton.defaults.background1;
  145. background2 = localStorage.getItem('modules.flashingEscortButton.background2') || modules.flashingEscortButton.defaults.background2;
  146. textColour1 = localStorage.getItem('modules.flashingEscortButton.textColour1') || modules.flashingEscortButton.defaults.textColour1;
  147. textColour2 = localStorage.getItem('modules.flashingEscortButton.textColour2') || modules.flashingEscortButton.defaults.textColour2;
  148. backgroundCss = 'from { color: ' + textColour1 + '; background: ' + background1 + '; }' +
  149. 'to { color: ' + textColour2 + '; background:' + background2 + '; }';
  150.  
  151. css = '@-moz-keyframes flash{' + backgroundCss + '}' +
  152. '@-webkit-keyframes flash{' + backgroundCss + '}';
  153.  
  154. speedSeconds = modules.flashingEscortButton.getSpeed()
  155. if (localStorage.getItem('modules.flashingEscortButton.enabled') != 'false') {
  156. css += '.who a.button[href*="waitForLeader"],';
  157. }
  158. css += 'a.button.modules-flashingEscortButton-config-escortButton {' +
  159. 'background-image: none !important;line-height: 20px; width: auto;' +
  160. '-moz-animation: flash ' + speedSeconds + 's infinite linear alternate;' +
  161. '-webkit-animation: flash ' + speedSeconds + 's infinite linear alternate; }';
  162. css += '#modules-flashingEscortButton-config-colours li[data-id="background1"] div.demo { background-color: ' + background1 + ';}' +
  163. '#modules-flashingEscortButton-config-colours li[data-id="background2"] div.demo { background-color: ' + background2 + ';}' +
  164. '#modules-flashingEscortButton-config-colours li[data-id="textColour1"] div.demo { background-color: ' + textColour1 + ';}' +
  165. '#modules-flashingEscortButton-config-colours li[data-id="textColour2"] div.demo { background-color: ' + textColour2 + ';}';
  166. app.addStyle(css, 'modules-flashingEscortButton-buttonStyle', true);
  167.  
  168. },
  169.  
  170. contrast: function(color) {
  171.  
  172. var brightness;
  173. var rgb, r, g, b;
  174.  
  175. rgb = color.match(/^#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);
  176. if (null == rgb) {
  177. return "#FF0000";
  178. }
  179. r = parseInt(rgb[1], 16);
  180. g = parseInt(rgb[2], 16);
  181. b = parseInt(rgb[3], 16);
  182.  
  183. brightness = ((r * 299) + (g * 587) + (b * 114)) / 1000 / 255;
  184.  
  185. return brightness >= 0.5 ? "#000000" : "#FFFFFF";
  186.  
  187. },
  188.  
  189. getSpeed: function() {
  190. var speed;
  191. var speedText;
  192. speed = localStorage.getItem('modules.flashingEscortButton.config.speed') || '2';
  193.  
  194. switch(speed) {
  195. case '0':
  196. speedText = '2';
  197. break;
  198. case '1':
  199. speedText = '1';
  200. break;
  201. case '2':
  202. default:
  203. speedText = '0.5';
  204. break;
  205. case '3':
  206. speedText = '0.25';
  207. break;
  208. case '4':
  209. speedText = '0.1';
  210. break;
  211. case '5':
  212. speedText = '0.01';
  213. break;
  214. }
  215. return speedText;
  216. }
  217.  
  218. }