mmmturkeybacon Embiggen Radio Buttons and Checkboxes

Adds a colored label around radio buttons and checkboxes that increases the area that registers a click. If the button/box is clicked the label turns green. This script lets you more effectively click while requiring less precision and makes it easier to see which items are selected. I can't guarantee this script won't foul up a page's layout. If it does disable it. mmmturkeybacon Unclick Radio Button is a helpful companion to this script.

当前为 2015-03-23 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name mmmturkeybacon Embiggen Radio Buttons and Checkboxes
  3. // @author mmmturkeybacon
  4. // @description Adds a colored label around radio buttons and checkboxes that increases the area that registers a click. If the button/box is clicked the label turns green. This script lets you more effectively click while requiring less precision and makes it easier to see which items are selected. I can't guarantee this script won't foul up a page's layout. If it does disable it. mmmturkeybacon Unclick Radio Button is a helpful companion to this script.
  5. // @namespace http://userscripts.org/users/523367
  6. // @match http://*/*
  7. // @match https://*/*
  8. // //@match https://*.mturk.com/mturk/preview*
  9. // //@match https://*.mturk.com/mturk/accept*
  10. // //@match https://*.mturk.com/mturk/continue*
  11. // //@match https://*.mturk.com/mturk/submit*
  12. // //@match https://*.mturk.com/mturk/return*
  13. // //@match https://*.mturkcontent.com/dynamic/hit?*
  14. // //@match https://*.amazonaws.com/mturk_bulk/hits*
  15. // //@match https://*.crowdcomputingsystems.com/mturk-web/*
  16. // //@match https://*.qualtrics.com/*
  17. // //@match https://*.surveygizmo.com/*
  18. // //@match https://*.surveymonkey.com/*
  19. // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js
  20. // @version 1.10
  21. // @grant GM_addStyle
  22. // ==/UserScript==
  23.  
  24. /*
  25. Examples:
  26. http://i.imgur.com/6AK6fqq.png
  27. http://i.imgur.com/ZmKaA1o.png
  28.  
  29. For testing and debugging:
  30. https://www.surveymonkey.com/s/ProfessionalProcesses
  31. https://www.surveygizmo.com/s3/2046887/73e44deab261
  32. https://msuccas.co1.qualtrics.com/SE/?SID=SV_0ilMmQXcdpZQ04d
  33. https://princetonsurvey.az1.qualtrics.com/SE/?SID=SV_8jDoy6P7ibFZN0p
  34. https://www.mturkcontent.com/dynamic/hit?assignmentId=ASSIGNMENT_ID_NOT_AVAILABLE&hitId=3DIIW4IV8PEUCG2TZJS01EOATJII4F
  35. https://s3.amazonaws.com/mturk_bulk/hits/138816851/qUqSeewj13pzxUGTsERnXg.html?assignmentId=ASSIGNMENT_ID_NOT_AVAILABLE&hitId=39KMGHJ4RY9B0N33T566YLUDOYX006
  36. https://s3.amazonaws.com/mturk_bulk/hits/138909729/mndG5I_WE1o9e66s6lB8ZA.html?assignmentId=ASSIGNMENT_ID_NOT_AVAILABLE&hitId=3DGDV62G7OEP3AI3W6SRGMH1P9TP2S
  37. http://fordhambusiness.az1.qualtrics.com/jfe/form/SV_5sv1TzUahXAxhch?MID=
  38. https://hbs.qualtrics.com/jfe/form/SV_cwjMpy2RQqAJbFz
  39. */
  40.  
  41. var SIZE = 54; // pixels
  42.  
  43. var TOP_SPACING = (1/2)*SIZE + 1;
  44. var RIGHT_SPACING = (2/10)*SIZE;
  45. var BOTTOM_SPACING = (1/2)*SIZE + 1;
  46. var LEFT_SPACING = (4/10)*SIZE;
  47.  
  48. var UNCHECKED_COLOR = '#00f';
  49. var CHECKED_COLOR = '#0f0';
  50. var DISABLED_COLOR = '#999';
  51. var OPACITY = 0.25;
  52.  
  53. var radio_button_index = 0;
  54. var checkbox_index = 0;
  55. var radio_button_queue_count = 0;
  56. var checkbox_queue_count = 0;
  57. var already_ran = false;
  58.  
  59.  
  60.  
  61. function addstyle()
  62. {
  63. if (already_ran == false)
  64. {
  65. already_ran = true;
  66. GM_addStyle(' \
  67. @font-face { \
  68. font-family: "icomoon"; \
  69. src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SB4AAAAC8AAAAYGNtYXDqkerYAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZkY5wa4AAAF4AAAB9GhlYWQFf52VAAADbAAAADZoaGVhB8IDyQAAA6QAAAAkaG10eBIAAAAAAAPIAAAAIGxvY2EBkgEcAAAD6AAAABJtYXhwAAwAOQAAA/wAAAAgbmFtZVcZpu4AAAQcAAABRXBvc3QAAwAAAAAFZAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADqVgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAEAAAAAMAAgAAgAEAAEAIOpU6lb//f//AAAAAAAg6lLqVv/9//8AAf/jFbIVsQADAAEAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACAAD/wAQAA8AAEAAXAAABISIGFREUFjMhMjY1ETQmIwEnNxcBFwEDgP0ANUtLNQMANUtLNf5A7VqTATNa/nMDwEs1/QA1S0s1AwA1S/zl7lqSATJa/nIAAgAA/8AEAAPAABAAFQAAASEiBhURFBYzITI2NRE0JiMRIREhEQOA/QA1S0s1AwA1S0s1/QADAAPASzX9ADVLSzUDADVL/IADAP0AAAMAAP/ABAADwAAUACkANgAAASIOAhUUHgIzMj4CNTQuAiMRIi4CNTQ+AjMyHgIVFA4CIwM0NjMyFhUUBiMiJjUCAGq7i1BQi7tqaruLUFCLu2pQi2k8PGmLUFCLaTw8aYtQwHBQUHBwUFBwA8BQi7tqaruLUFCLu2pqu4tQ/IA8aYtQUItpPDxpi1BQi2k8AYBQcHBQUHBwUAAAAAIAAP/ABAADwAAUACkAAAEiDgIVFB4CMzI+AjU0LgIjESIuAjU0PgIzMh4CFRQOAiMCAGq7i1BQi7tqaruLUFCLu2pQi2k8PGmLUFCLaTw8aYtQA8BQi7tqaruLUFCLu2pqu4tQ/IA8aYtQUItpPDxpi1BQi2k8AAEAAAABAADOghiAXw889QALBAAAAAAA0TAsjAAAAADRMCyMAAD/wAQAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAACAAAABAAAAAQAAAAEAAAABAAAAAAAAAAACgAUAB4ASgBwAL4A+gAAAAEAAAAIADcAAwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format("truetype"), \
  70. url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAXQAAsAAAAABYQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIHgGNtYXAAAAFoAAAAVAAAAFTqkerYZ2FzcAAAAbwAAAAIAAAACAAAABBnbHlmAAABxAAAAfQAAAH0RjnBrmhlYWQAAAO4AAAANgAAADYFf52VaGhlYQAAA/AAAAAkAAAAJAfCA8lobXR4AAAEFAAAACAAAAAgEgAAAGxvY2EAAAQ0AAAAEgAAABIBkgEcbWF4cAAABEgAAAAgAAAAIAAMADluYW1lAAAEaAAAAUUAAAFFVxmm7nBvc3QAAAWwAAAAIAAAACAAAwAAAAMEAAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6lYDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABABAAAAADAAIAAIABAABACDqVOpW//3//wAAAAAAIOpS6lb//f//AAH/4xWyFbEAAwABAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAgAA/8AEAAPAABAAFwAAASEiBhURFBYzITI2NRE0JiMBJzcXARcBA4D9ADVLSzUDADVLSzX+QO1akwEzWv5zA8BLNf0ANUtLNQMANUv85e5akgEyWv5yAAIAAP/ABAADwAAQABUAAAEhIgYVERQWMyEyNjURNCYjESERIREDgP0ANUtLNQMANUtLNf0AAwADwEs1/QA1S0s1AwA1S/yAAwD9AAADAAD/wAQAA8AAFAApADYAAAEiDgIVFB4CMzI+AjU0LgIjESIuAjU0PgIzMh4CFRQOAiMDNDYzMhYVFAYjIiY1AgBqu4tQUIu7amq7i1BQi7tqUItpPDxpi1BQi2k8PGmLUMBwUFBwcFBQcAPAUIu7amq7i1BQi7tqaruLUPyAPGmLUFCLaTw8aYtQUItpPAGAUHBwUFBwcFAAAAACAAD/wAQAA8AAFAApAAABIg4CFRQeAjMyPgI1NC4CIxEiLgI1ND4CMzIeAhUUDgIjAgBqu4tQUIu7amq7i1BQi7tqUItpPDxpi1BQi2k8PGmLUAPAUIu7amq7i1BQi7tqaruLUPyAPGmLUFCLaTw8aYtQUItpPAABAAAAAQAAzoIYgF8PPPUACwQAAAAAANEwLIwAAAAA0TAsjAAA/8AEAAPAAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAgAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAoAFAAeAEoAcAC+APoAAAABAAAACAA3AAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format("woff"); \
  71. font-weight: normal; \
  72. font-style: normal; \
  73. } \
  74. input[type=radio], \
  75. input[type=checkbox] { \
  76. display: visible; \
  77. } \
  78. input[type=radio] + div[id^="mtb_div_for_"], \
  79. input[type=checkbox] + div[id^="mtb_div_for_"] { \
  80. /*float: left; !important;*/ \
  81. display: inline-block !important; \
  82. width: 0px !important; \
  83. height: 0px !important; \
  84. z-index: 100 !important; \
  85. } \
  86. input[type=radio] + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"], \
  87. input[type=checkbox] + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"] { \
  88. margin: 0px !important; \
  89. padding: 0px !important; \
  90. z-index: 100 !important; \
  91. } \
  92. input[type=radio] + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before, \
  93. input[type=checkbox] + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before { \
  94. font-family: "icomoon" !important; \
  95. speak: none !important; \
  96. font-style: normal !important; \
  97. font-weight: normal !important; \
  98. font-variant: normal !important; \
  99. font-size: '+SIZE+'px !important; \
  100. text-transform: none !important; \
  101. line-height: 1 !important; \
  102. opacity: '+OPACITY+' !important; \
  103. /* Better Font Rendering =========== */ \
  104. -webkit-font-smoothing: antialiased !important; \
  105. -moz-osx-font-smoothing: grayscale !important; \
  106. } \
  107. input[type=radio]:disabled + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before, \
  108. input[type=checkbox]:disabled + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before { \
  109. color: '+DISABLED_COLOR+'; \
  110. } \
  111. input[type=radio]:focus + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before, \
  112. input[type=checkbox]:focus + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before { \
  113. outline: 1px dotted !important; \
  114. } \
  115. input[type=radio] + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before { \
  116. content: "\\ea56" !important; \
  117. color: '+UNCHECKED_COLOR+'; \
  118. } \
  119. input[type=radio]:checked + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before { \
  120. content: "\\ea54" !important; \
  121. color: '+CHECKED_COLOR+'; \
  122. } \
  123. input[type=checkbox] + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before { \
  124. content: "\\ea53" !important; \
  125. color: '+UNCHECKED_COLOR+'; \
  126. } \
  127. input[type=checkbox]:checked + div[id^="mtb_div_for_"] > label[id^="mtb_label_for_"]::before { \
  128. content: "\\ea52" !important; \
  129. color: '+CHECKED_COLOR+'; \
  130. } \
  131. ');
  132. }
  133. }
  134.  
  135. function embiggen_radio_button(new_radio_button)
  136. {
  137. addstyle();
  138. var $radio_button = $(new_radio_button);
  139. $radio_button.attr('mtb_embiggened', 'true');
  140. var offset = {};
  141. var center_offset = {};
  142.  
  143. var id = $radio_button.attr('id');
  144. if (id == null)
  145. {
  146. id = 'mtb_big_radio_button_id' + radio_button_index;
  147. radio_button_index++;
  148. $radio_button.attr('id', id);
  149. }
  150.  
  151. $radio_button.css('display', 'visible');
  152.  
  153. var container_height = $radio_button.outerHeight(true);
  154. var container_width = $radio_button.outerWidth(true);
  155. var TOP_MARGIN = TOP_SPACING - container_height/2;
  156. var RIGHT_MARGIN = RIGHT_SPACING - container_width/2;
  157. var BOTTOM_MARGIN = BOTTOM_SPACING - container_height/2;
  158. var LEFT_MARGIN = LEFT_SPACING - container_width/2;
  159. //var MARGIN = TOP_MARGIN+'px '+RIGHT_MARGIN+' px'+BOTTOM_MARGIN+' px'+LEFT_MARGIN+' px';
  160.  
  161. $radio_button.wrap('<div style="display: inline-block; height: '+container_height+'px; width: '+container_width+'px; margin: '+TOP_MARGIN+'px '+RIGHT_MARGIN+'px '+BOTTOM_MARGIN+'px '+LEFT_MARGIN+'px ">');
  162. var $this_container = $radio_button.parent();
  163. $this_container.append('<div id="mtb_div_for_'+id+'"><label for="'+id+'" id="mtb_label_for_'+id+'"></label></div>');
  164.  
  165. var $this_div = $('div[id="mtb_div_for_'+id+'"]');
  166. var $this_label = $('label[id="mtb_label_for_'+id+'"]');
  167.  
  168. var label_abs_top = -SIZE/2+'px';
  169. var label_abs_left = -SIZE/2+'px';
  170.  
  171. $this_label.css({"position": "absolute", "top": label_abs_top, "left": label_abs_left});
  172.  
  173. if (document.domain.indexOf('surveymonkey') > -1)
  174. {
  175. var $next_label = $radio_button.parent().parent('.qOption').children('label');
  176. if ($next_label.length > 0)
  177. {
  178. $next_label.css('display', 'inline');
  179. $next_label.find('img').css('visibility', 'hidden');
  180. }
  181. }
  182. else if (document.domain.indexOf('surveygizmo') > -1)
  183. {
  184. $radio_button.css('position', 'static');
  185. }
  186. else if (document.domain.indexOf('qualtrics') > -1)
  187. {
  188. $radio_button.css('float', 'none');
  189. $('span[class="LabelWrapper"]').css('float', 'none');
  190. }
  191.  
  192. offset = $radio_button.offset();
  193. center_offset.top = offset.top + $radio_button.height()/2;
  194. center_offset.left = offset.left + $radio_button.width()/2;
  195. $this_div.offset(center_offset);
  196.  
  197. // Don't hide the radio buttons so that the Tab key can still be used to navigate to between them.
  198. //$radio_button.css('visibility', 'hidden');
  199.  
  200. radio_button_queue_count--;
  201. }
  202.  
  203. function embiggen_checkbox(new_checkbox)
  204. {
  205. addstyle();
  206. var $checkbox = $(new_checkbox);
  207. $checkbox.attr('mtb_embiggened', 'true');
  208. var offset = {};
  209. var center_offset = {};
  210.  
  211. var id = $checkbox.attr('id');
  212. if (id == null)
  213. {
  214. id = 'mtb_big_checkbox_id' + checkbox_index;
  215. checkbox_index++;
  216. $checkbox.attr('id', id);
  217. }
  218.  
  219. $checkbox.css('display', 'visible');
  220.  
  221. var container_height = $checkbox.outerHeight(true);
  222. var container_width = $checkbox.outerWidth(true);
  223. var TOP_MARGIN = TOP_SPACING - container_height/2;
  224. var RIGHT_MARGIN = RIGHT_SPACING - container_width/2;
  225. var BOTTOM_MARGIN = BOTTOM_SPACING - container_height/2;
  226. var LEFT_MARGIN = LEFT_SPACING - container_width/2;
  227. //var MARGIN = TOP_MARGIN+'px '+RIGHT_MARGIN+' px'+BOTTOM_MARGIN+' px'+LEFT_MARGIN+' px';
  228.  
  229. $checkbox.wrap('<div style="display: inline-block; height: '+container_height+'px; width: '+container_width+'px; margin: '+TOP_MARGIN+'px '+RIGHT_MARGIN+'px '+BOTTOM_MARGIN+'px '+LEFT_MARGIN+'px ">');
  230. var $this_container = $checkbox.parent();
  231. $this_container.append('<div id="mtb_div_for_'+id+'"><label for="'+id+'" id="mtb_label_for_'+id+'"></label></div>');
  232.  
  233. var $this_div = $('div[id="mtb_div_for_'+id+'"]');
  234. var $this_label = $('label[id="mtb_label_for_'+id+'"]');
  235.  
  236. var label_abs_top = -SIZE/2+'px';
  237. var label_abs_left = -SIZE/2+'px';
  238.  
  239. $this_label.css({"position": "absolute", "top": label_abs_top, "left": label_abs_left});
  240.  
  241. if (document.domain.indexOf('surveymonkey') > -1)
  242. {
  243. var $next_label = $checkbox.parent().parent('.qOption').children('label');
  244. if ($next_label.length > 0)
  245. {
  246. $next_label.css('display', 'inline');
  247. $next_label.find('img').css('visibility', 'hidden');
  248. }
  249. }
  250. else if (document.domain.indexOf('surveygizmo') > -1)
  251. {
  252. $checkbox.css('position', 'static');
  253. }
  254. else if (document.domain.indexOf('qualtrics') > -1)
  255. {
  256. $checkbox.css('float', 'none');
  257. $('span[class="LabelWrapper"]').css('float', 'none');
  258. }
  259.  
  260. offset = $checkbox.offset();
  261. center_offset.top = offset.top + $checkbox.height()/2;
  262. center_offset.left = offset.left + $checkbox.width()/2;
  263. $this_div.offset(center_offset);
  264.  
  265. // Don't hide the radio buttons so that the Tab key can still be used to navigate to between them.
  266. //$checkbox.css('visibility', 'hidden');
  267.  
  268. checkbox_queue_count--;
  269. }
  270.  
  271. function queue_radio_button(new_radio_button)
  272. {
  273. (function(new_radio_button, radio_button_queue_count){setTimeout(function(){embiggen_radio_button(new_radio_button)}, radio_button_queue_count*10) })(new_radio_button, radio_button_queue_count);
  274. radio_button_queue_count++;
  275. }
  276.  
  277. function queue_checkbox(new_checkbox)
  278. {
  279. (function(new_checkbox, checkbox_queue_count){setTimeout(function(){embiggen_checkbox(new_checkbox)}, checkbox_queue_count*10) })(checkbox_button, checkbox_queue_count);
  280. checkbox_queue_count++;
  281. }
  282.  
  283. $(window).load(function()
  284. //$(document).ready(function()
  285. {
  286.  
  287. var selector_prefix = ($('div[id="hit-wrapper"]').length > 0) ? 'div[id="hit-wrapper"] ' : '';
  288. if (selector_prefix || document.domain != 'www.mturk.com')
  289. { // if selector_prefix is non-empty then it is an internal HIT
  290. var radio_buttons = document.querySelectorAll(selector_prefix+'input[type="radio"]:not([mtb_embiggened="true"])');
  291. Array.prototype.forEach.call(radio_buttons, queue_radio_button);
  292.  
  293. //http://stackoverflow.com/questions/25711476/why-is-my-mutationobserver-callback-not-being-executed-for-some-new-tags
  294. var observer = new MutationObserver(function(mutations, obs)
  295. {
  296. for(var i=0; i<mutations.length; ++i)
  297. {
  298. for(var j=0; j<mutations[i].addedNodes.length; ++j)
  299. {
  300. var newTag = mutations[i].addedNodes[j];
  301. if (newTag.querySelectorAll)
  302. {
  303. Array.prototype.forEach.call(
  304. newTag.querySelectorAll('input[type="radio"]:not([mtb_embiggened="true"])'), queue_radio_button);
  305. }
  306. }
  307. }
  308. });
  309.  
  310. observer.observe(document.documentElement,
  311. {
  312. childList: true,
  313. subtree: true
  314. });
  315. }
  316.  
  317. });