catscope 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (627) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +17 -2
  4. data/Rakefile +3 -0
  5. data/assets/bower.json +9 -7
  6. data/assets/bower_components/alertify.js/README.md +45 -0
  7. data/assets/bower_components/alertify.js/bower.json +16 -0
  8. data/assets/bower_components/alertify.js/lib/alertify.js +636 -0
  9. data/assets/bower_components/alertify.js/lib/alertify.min.js +2 -0
  10. data/assets/bower_components/alertify.js/themes/alertify.bootstrap.css +131 -0
  11. data/assets/bower_components/alertify.js/themes/alertify.core.css +137 -0
  12. data/assets/bower_components/alertify.js/themes/alertify.default.css +81 -0
  13. data/assets/bower_components/jquery-ui/bower.json +1 -1
  14. data/assets/bower_components/jquery-ui/component.json +1 -1
  15. data/assets/bower_components/jquery-ui/jquery-ui.js +268 -233
  16. data/assets/bower_components/jquery-ui/jquery-ui.min.js +10 -10
  17. data/assets/bower_components/jquery-ui/package.json +1 -1
  18. data/assets/bower_components/jquery-ui/themes/base/accordion.css +2 -2
  19. data/assets/bower_components/jquery-ui/themes/base/all.css +2 -2
  20. data/assets/bower_components/jquery-ui/themes/base/autocomplete.css +2 -2
  21. data/assets/bower_components/jquery-ui/themes/base/base.css +2 -2
  22. data/assets/bower_components/jquery-ui/themes/base/button.css +2 -2
  23. data/assets/bower_components/jquery-ui/themes/base/core.css +2 -2
  24. data/assets/bower_components/jquery-ui/themes/base/datepicker.css +2 -2
  25. data/assets/bower_components/jquery-ui/themes/base/dialog.css +2 -2
  26. data/assets/bower_components/jquery-ui/themes/base/draggable.css +2 -2
  27. data/assets/bower_components/jquery-ui/themes/base/images/ui-icons_444444_256x240.png +0 -0
  28. data/assets/bower_components/jquery-ui/themes/base/images/ui-icons_555555_256x240.png +0 -0
  29. data/assets/bower_components/jquery-ui/themes/base/images/ui-icons_777620_256x240.png +0 -0
  30. data/assets/bower_components/jquery-ui/themes/base/images/ui-icons_777777_256x240.png +0 -0
  31. data/assets/bower_components/jquery-ui/themes/base/images/ui-icons_cc0000_256x240.png +0 -0
  32. data/assets/bower_components/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png +0 -0
  33. data/assets/bower_components/jquery-ui/themes/base/jquery-ui.css +1225 -0
  34. data/assets/bower_components/jquery-ui/themes/base/jquery-ui.min.css +7 -0
  35. data/assets/bower_components/jquery-ui/themes/base/menu.css +2 -2
  36. data/assets/bower_components/jquery-ui/themes/base/progressbar.css +2 -2
  37. data/assets/bower_components/jquery-ui/themes/base/resizable.css +2 -2
  38. data/assets/bower_components/jquery-ui/themes/base/selectable.css +2 -2
  39. data/assets/bower_components/jquery-ui/themes/base/selectmenu.css +2 -2
  40. data/assets/bower_components/jquery-ui/themes/base/slider.css +2 -2
  41. data/assets/bower_components/jquery-ui/themes/base/sortable.css +2 -2
  42. data/assets/bower_components/jquery-ui/themes/base/spinner.css +2 -2
  43. data/assets/bower_components/jquery-ui/themes/base/tabs.css +2 -2
  44. data/assets/bower_components/jquery-ui/themes/base/theme.css +2 -2
  45. data/assets/bower_components/jquery-ui/themes/base/tooltip.css +2 -2
  46. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_diagonals-thick_8_333333_40x40.png +0 -0
  47. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_flat_65_ffffff_40x100.png +0 -0
  48. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_glass_40_111111_1x400.png +0 -0
  49. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_glass_55_1c1c1c_1x400.png +0 -0
  50. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
  51. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_highlight-hard_40_aaaaaa_1x100.png +0 -0
  52. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_highlight-soft_50_aaaaaa_1x100.png +0 -0
  53. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_inset-hard_45_cd0a0a_1x100.png +0 -0
  54. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-bg_inset-hard_55_ffeb80_1x100.png +0 -0
  55. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-icons_222222_256x240.png +0 -0
  56. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-icons_4ca300_256x240.png +0 -0
  57. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-icons_bbbbbb_256x240.png +0 -0
  58. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-icons_ededed_256x240.png +0 -0
  59. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-icons_ffcf29_256x240.png +0 -0
  60. data/assets/bower_components/jquery-ui/themes/black-tie/images/ui-icons_ffffff_256x240.png +0 -0
  61. data/assets/bower_components/jquery-ui/themes/black-tie/jquery-ui.css +2 -2
  62. data/assets/bower_components/jquery-ui/themes/black-tie/jquery-ui.min.css +2 -2
  63. data/assets/bower_components/jquery-ui/themes/black-tie/theme.css +2 -2
  64. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png +0 -0
  65. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png +0 -0
  66. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_flat_0_333333_40x100.png +0 -0
  67. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_flat_65_ffffff_40x100.png +0 -0
  68. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  69. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png +0 -0
  70. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png +0 -0
  71. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png +0 -0
  72. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png +0 -0
  73. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-icons_004276_256x240.png +0 -0
  74. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-icons_cc0000_256x240.png +0 -0
  75. data/assets/bower_components/jquery-ui/themes/blitzer/images/ui-icons_ffffff_256x240.png +0 -0
  76. data/assets/bower_components/jquery-ui/themes/blitzer/jquery-ui.css +2 -2
  77. data/assets/bower_components/jquery-ui/themes/blitzer/jquery-ui.min.css +2 -2
  78. data/assets/bower_components/jquery-ui/themes/blitzer/theme.css +2 -2
  79. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png +0 -0
  80. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png +0 -0
  81. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png +0 -0
  82. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_glass_50_3baae3_1x400.png +0 -0
  83. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png +0 -0
  84. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png +0 -0
  85. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png +0 -0
  86. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png +0 -0
  87. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png +0 -0
  88. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-icons_2694e8_256x240.png +0 -0
  89. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-icons_2e83ff_256x240.png +0 -0
  90. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-icons_3d80b3_256x240.png +0 -0
  91. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-icons_72a7cf_256x240.png +0 -0
  92. data/assets/bower_components/jquery-ui/themes/cupertino/images/ui-icons_ffffff_256x240.png +0 -0
  93. data/assets/bower_components/jquery-ui/themes/cupertino/jquery-ui.css +2 -2
  94. data/assets/bower_components/jquery-ui/themes/cupertino/jquery-ui.min.css +2 -2
  95. data/assets/bower_components/jquery-ui/themes/cupertino/theme.css +2 -2
  96. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
  97. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  98. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png +0 -0
  99. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png +0 -0
  100. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png +0 -0
  101. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png +0 -0
  102. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png +0 -0
  103. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
  104. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_loop_25_000000_21x21.png +0 -0
  105. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_222222_256x240.png +0 -0
  106. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_4b8e0b_256x240.png +0 -0
  107. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_a83300_256x240.png +0 -0
  108. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_cccccc_256x240.png +0 -0
  109. data/assets/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_ffffff_256x240.png +0 -0
  110. data/assets/bower_components/jquery-ui/themes/dark-hive/jquery-ui.css +2 -2
  111. data/assets/bower_components/jquery-ui/themes/dark-hive/jquery-ui.min.css +2 -2
  112. data/assets/bower_components/jquery-ui/themes/dark-hive/theme.css +2 -2
  113. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png +0 -0
  114. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_dots-medium_30_0b58a2_4x4.png +0 -0
  115. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_dots-small_20_333333_2x2.png +0 -0
  116. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_dots-small_30_a32d00_2x2.png +0 -0
  117. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_dots-small_40_00498f_2x2.png +0 -0
  118. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  119. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_flat_40_292929_40x100.png +0 -0
  120. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_gloss-wave_20_111111_500x100.png +0 -0
  121. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-icons_00498f_256x240.png +0 -0
  122. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-icons_98d2fb_256x240.png +0 -0
  123. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-icons_9ccdfc_256x240.png +0 -0
  124. data/assets/bower_components/jquery-ui/themes/dot-luv/images/ui-icons_ffffff_256x240.png +0 -0
  125. data/assets/bower_components/jquery-ui/themes/dot-luv/jquery-ui.css +2 -2
  126. data/assets/bower_components/jquery-ui/themes/dot-luv/jquery-ui.min.css +2 -2
  127. data/assets/bower_components/jquery-ui/themes/dot-luv/theme.css +2 -2
  128. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  129. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  130. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_flat_55_994d53_40x100.png +0 -0
  131. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_flat_55_fafafa_40x100.png +0 -0
  132. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png +0 -0
  133. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png +0 -0
  134. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png +0 -0
  135. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png +0 -0
  136. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png +0 -0
  137. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-icons_454545_256x240.png +0 -0
  138. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-icons_734d99_256x240.png +0 -0
  139. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-icons_8d78a5_256x240.png +0 -0
  140. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-icons_a8a3ae_256x240.png +0 -0
  141. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-icons_ebccce_256x240.png +0 -0
  142. data/assets/bower_components/jquery-ui/themes/eggplant/images/ui-icons_ffffff_256x240.png +0 -0
  143. data/assets/bower_components/jquery-ui/themes/eggplant/jquery-ui.css +2 -2
  144. data/assets/bower_components/jquery-ui/themes/eggplant/jquery-ui.min.css +2 -2
  145. data/assets/bower_components/jquery-ui/themes/eggplant/theme.css +2 -2
  146. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png +0 -0
  147. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png +0 -0
  148. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png +0 -0
  149. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png +0 -0
  150. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_flat_0_e69700_40x100.png +0 -0
  151. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png +0 -0
  152. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png +0 -0
  153. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png +0 -0
  154. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_0a82eb_256x240.png +0 -0
  155. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_0b54d5_256x240.png +0 -0
  156. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_5fa5e3_256x240.png +0 -0
  157. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_fcdd4a_256x240.png +0 -0
  158. data/assets/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_ffffff_256x240.png +0 -0
  159. data/assets/bower_components/jquery-ui/themes/excite-bike/jquery-ui.css +2 -2
  160. data/assets/bower_components/jquery-ui/themes/excite-bike/jquery-ui.min.css +2 -2
  161. data/assets/bower_components/jquery-ui/themes/excite-bike/theme.css +2 -2
  162. data/assets/bower_components/jquery-ui/themes/flick/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  163. data/assets/bower_components/jquery-ui/themes/flick/images/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  164. data/assets/bower_components/jquery-ui/themes/flick/images/ui-bg_flat_55_ffffff_40x100.png +0 -0
  165. data/assets/bower_components/jquery-ui/themes/flick/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  166. data/assets/bower_components/jquery-ui/themes/flick/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  167. data/assets/bower_components/jquery-ui/themes/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
  168. data/assets/bower_components/jquery-ui/themes/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
  169. data/assets/bower_components/jquery-ui/themes/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  170. data/assets/bower_components/jquery-ui/themes/flick/images/ui-icons_0073ea_256x240.png +0 -0
  171. data/assets/bower_components/jquery-ui/themes/flick/images/ui-icons_454545_256x240.png +0 -0
  172. data/assets/bower_components/jquery-ui/themes/flick/images/ui-icons_666666_256x240.png +0 -0
  173. data/assets/bower_components/jquery-ui/themes/flick/images/ui-icons_ff0084_256x240.png +0 -0
  174. data/assets/bower_components/jquery-ui/themes/flick/images/ui-icons_ffffff_256x240.png +0 -0
  175. data/assets/bower_components/jquery-ui/themes/flick/jquery-ui.css +2 -2
  176. data/assets/bower_components/jquery-ui/themes/flick/jquery-ui.min.css +2 -2
  177. data/assets/bower_components/jquery-ui/themes/flick/theme.css +2 -2
  178. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_diagonals-small_40_db4865_40x40.png +0 -0
  179. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_93c3cd_40x40.png +0 -0
  180. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_ff3853_40x40.png +0 -0
  181. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_diagonals-small_75_ccd232_40x40.png +0 -0
  182. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_dots-medium_80_ffff38_4x4.png +0 -0
  183. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_dots-small_35_35414f_2x2.png +0 -0
  184. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_flat_75_ba9217_40x100.png +0 -0
  185. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  186. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_white-lines_85_f7f7ba_40x100.png +0 -0
  187. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_454545_256x240.png +0 -0
  188. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_88a206_256x240.png +0 -0
  189. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_c02669_256x240.png +0 -0
  190. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_e1e463_256x240.png +0 -0
  191. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_ffeb33_256x240.png +0 -0
  192. data/assets/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_ffffff_256x240.png +0 -0
  193. data/assets/bower_components/jquery-ui/themes/hot-sneaks/jquery-ui.css +2 -2
  194. data/assets/bower_components/jquery-ui/themes/hot-sneaks/jquery-ui.min.css +2 -2
  195. data/assets/bower_components/jquery-ui/themes/hot-sneaks/theme.css +2 -2
  196. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-bg_flat_75_aaaaaa_40x100.png +0 -0
  197. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png +0 -0
  198. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-bg_glass_25_cb842e_1x400.png +0 -0
  199. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-bg_glass_70_ede4d4_1x400.png +0 -0
  200. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png +0 -0
  201. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png +0 -0
  202. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png +0 -0
  203. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png +0 -0
  204. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-icons_c47a23_256x240.png +0 -0
  205. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-icons_cb672b_256x240.png +0 -0
  206. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-icons_f08000_256x240.png +0 -0
  207. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-icons_f35f07_256x240.png +0 -0
  208. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-icons_ff7519_256x240.png +0 -0
  209. data/assets/bower_components/jquery-ui/themes/humanity/images/ui-icons_ffffff_256x240.png +0 -0
  210. data/assets/bower_components/jquery-ui/themes/humanity/jquery-ui.css +2 -2
  211. data/assets/bower_components/jquery-ui/themes/humanity/jquery-ui.min.css +2 -2
  212. data/assets/bower_components/jquery-ui/themes/humanity/theme.css +2 -2
  213. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
  214. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
  215. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_diagonals-thick_95_ffdc2e_40x40.png +0 -0
  216. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
  217. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_highlight-hard_30_285c00_1x100.png +0 -0
  218. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_highlight-soft_33_3a8104_1x100.png +0 -0
  219. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_highlight-soft_50_4eb305_1x100.png +0 -0
  220. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_highlight-soft_60_4ca20b_1x100.png +0 -0
  221. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-bg_inset-soft_10_285c00_1x100.png +0 -0
  222. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-icons_4eb305_256x240.png +0 -0
  223. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-icons_72b42d_256x240.png +0 -0
  224. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-icons_cd0a0a_256x240.png +0 -0
  225. data/assets/bower_components/jquery-ui/themes/le-frog/images/ui-icons_ffffff_256x240.png +0 -0
  226. data/assets/bower_components/jquery-ui/themes/le-frog/jquery-ui.css +2 -2
  227. data/assets/bower_components/jquery-ui/themes/le-frog/jquery-ui.min.css +2 -2
  228. data/assets/bower_components/jquery-ui/themes/le-frog/theme.css +2 -2
  229. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  230. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png +0 -0
  231. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png +0 -0
  232. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png +0 -0
  233. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png +0 -0
  234. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png +0 -0
  235. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png +0 -0
  236. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png +0 -0
  237. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_222222_256x240.png +0 -0
  238. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_9bcc60_256x240.png +0 -0
  239. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_add978_256x240.png +0 -0
  240. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_e3ddc9_256x240.png +0 -0
  241. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_f1fd86_256x240.png +0 -0
  242. data/assets/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_ffffff_256x240.png +0 -0
  243. data/assets/bower_components/jquery-ui/themes/mint-choc/jquery-ui.css +2 -2
  244. data/assets/bower_components/jquery-ui/themes/mint-choc/jquery-ui.min.css +2 -2
  245. data/assets/bower_components/jquery-ui/themes/mint-choc/theme.css +2 -2
  246. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  247. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  248. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_flat_55_c0402a_40x100.png +0 -0
  249. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_flat_55_eeeeee_40x100.png +0 -0
  250. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_glass_100_f8f8f8_1x400.png +0 -0
  251. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_glass_35_dddddd_1x400.png +0 -0
  252. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_glass_60_eeeeee_1x400.png +0 -0
  253. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_inset-hard_75_999999_1x100.png +0 -0
  254. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-bg_inset-soft_50_c9c9c9_1x100.png +0 -0
  255. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-icons_3383bb_256x240.png +0 -0
  256. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-icons_454545_256x240.png +0 -0
  257. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-icons_70b2e1_256x240.png +0 -0
  258. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-icons_999999_256x240.png +0 -0
  259. data/assets/bower_components/jquery-ui/themes/overcast/images/ui-icons_fbc856_256x240.png +0 -0
  260. data/assets/bower_components/jquery-ui/themes/overcast/jquery-ui.css +2 -2
  261. data/assets/bower_components/jquery-ui/themes/overcast/jquery-ui.min.css +2 -2
  262. data/assets/bower_components/jquery-ui/themes/overcast/theme.css +2 -2
  263. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_diagonal-maze_20_6e4f1c_10x10.png +0 -0
  264. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_diagonal-maze_40_000000_10x10.png +0 -0
  265. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png +0 -0
  266. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_10_f8f7f6_60x60.png +0 -0
  267. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_eceadf_60x60.png +0 -0
  268. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_f7f3de_60x60.png +0 -0
  269. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png +0 -0
  270. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_65_654b24_60x60.png +0 -0
  271. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png +0 -0
  272. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_222222_256x240.png +0 -0
  273. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_3572ac_256x240.png +0 -0
  274. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_8c291d_256x240.png +0 -0
  275. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_b83400_256x240.png +0 -0
  276. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_fbdb93_256x240.png +0 -0
  277. data/assets/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_ffffff_256x240.png +0 -0
  278. data/assets/bower_components/jquery-ui/themes/pepper-grinder/jquery-ui.css +2 -2
  279. data/assets/bower_components/jquery-ui/themes/pepper-grinder/jquery-ui.min.css +2 -2
  280. data/assets/bower_components/jquery-ui/themes/pepper-grinder/theme.css +2 -2
  281. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  282. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  283. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  284. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  285. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  286. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  287. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  288. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  289. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-icons_217bc0_256x240.png +0 -0
  290. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-icons_2e83ff_256x240.png +0 -0
  291. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-icons_469bdd_256x240.png +0 -0
  292. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-icons_6da8d5_256x240.png +0 -0
  293. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-icons_cd0a0a_256x240.png +0 -0
  294. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-icons_d8e7f3_256x240.png +0 -0
  295. data/assets/bower_components/jquery-ui/themes/redmond/images/ui-icons_f9bd01_256x240.png +0 -0
  296. data/assets/bower_components/jquery-ui/themes/redmond/jquery-ui.css +2 -2
  297. data/assets/bower_components/jquery-ui/themes/redmond/jquery-ui.min.css +2 -2
  298. data/assets/bower_components/jquery-ui/themes/redmond/theme.css +2 -2
  299. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  300. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  301. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  302. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  303. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  304. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  305. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  306. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  307. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-icons_222222_256x240.png +0 -0
  308. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  309. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-icons_454545_256x240.png +0 -0
  310. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-icons_888888_256x240.png +0 -0
  311. data/assets/bower_components/jquery-ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  312. data/assets/bower_components/jquery-ui/themes/smoothness/jquery-ui.css +2 -2
  313. data/assets/bower_components/jquery-ui/themes/smoothness/jquery-ui.min.css +2 -2
  314. data/assets/bower_components/jquery-ui/themes/smoothness/theme.css +2 -2
  315. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_glass_55_fcf0ba_1x400.png +0 -0
  316. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_gloss-wave_100_ece8da_500x100.png +0 -0
  317. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-hard_100_f5f3e5_1x100.png +0 -0
  318. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-hard_100_fafaf4_1x100.png +0 -0
  319. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-hard_15_459e00_1x100.png +0 -0
  320. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-hard_95_cccccc_1x100.png +0 -0
  321. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-soft_25_67b021_1x100.png +0 -0
  322. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-soft_95_ffedad_1x100.png +0 -0
  323. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-bg_inset-soft_15_2b2922_1x100.png +0 -0
  324. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-icons_808080_256x240.png +0 -0
  325. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-icons_847e71_256x240.png +0 -0
  326. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-icons_8DC262_256x240.png +0 -0
  327. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-icons_cd0a0a_256x240.png +0 -0
  328. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-icons_eeeeee_256x240.png +0 -0
  329. data/assets/bower_components/jquery-ui/themes/south-street/images/ui-icons_ffffff_256x240.png +0 -0
  330. data/assets/bower_components/jquery-ui/themes/south-street/jquery-ui.css +2 -2
  331. data/assets/bower_components/jquery-ui/themes/south-street/jquery-ui.min.css +2 -2
  332. data/assets/bower_components/jquery-ui/themes/south-street/theme.css +2 -2
  333. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_flat_55_999999_40x100.png +0 -0
  334. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_flat_75_aaaaaa_40x100.png +0 -0
  335. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_glass_45_0078ae_1x400.png +0 -0
  336. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_glass_55_f8da4e_1x400.png +0 -0
  337. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_glass_75_79c9ec_1x400.png +0 -0
  338. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_gloss-wave_45_e14f1c_500x100.png +0 -0
  339. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_gloss-wave_50_6eac2c_500x100.png +0 -0
  340. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_gloss-wave_75_2191c0_500x100.png +0 -0
  341. data/assets/bower_components/jquery-ui/themes/start/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  342. data/assets/bower_components/jquery-ui/themes/start/images/ui-icons_0078ae_256x240.png +0 -0
  343. data/assets/bower_components/jquery-ui/themes/start/images/ui-icons_056b93_256x240.png +0 -0
  344. data/assets/bower_components/jquery-ui/themes/start/images/ui-icons_d8e7f3_256x240.png +0 -0
  345. data/assets/bower_components/jquery-ui/themes/start/images/ui-icons_e0fdff_256x240.png +0 -0
  346. data/assets/bower_components/jquery-ui/themes/start/images/ui-icons_f5e175_256x240.png +0 -0
  347. data/assets/bower_components/jquery-ui/themes/start/images/ui-icons_f7a50d_256x240.png +0 -0
  348. data/assets/bower_components/jquery-ui/themes/start/images/ui-icons_fcd113_256x240.png +0 -0
  349. data/assets/bower_components/jquery-ui/themes/start/jquery-ui.css +2 -2
  350. data/assets/bower_components/jquery-ui/themes/start/jquery-ui.min.css +2 -2
  351. data/assets/bower_components/jquery-ui/themes/start/theme.css +2 -2
  352. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_diagonals-medium_20_d34d17_40x40.png +0 -0
  353. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
  354. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  355. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_gloss-wave_45_817865_500x100.png +0 -0
  356. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_gloss-wave_60_fece2f_500x100.png +0 -0
  357. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_gloss-wave_70_ffdd57_500x100.png +0 -0
  358. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_gloss-wave_90_fff9e5_500x100.png +0 -0
  359. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_highlight-soft_100_feeebd_1x100.png +0 -0
  360. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-bg_inset-soft_30_ffffff_1x100.png +0 -0
  361. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-icons_3d3d3d_256x240.png +0 -0
  362. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-icons_bd7b00_256x240.png +0 -0
  363. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-icons_d19405_256x240.png +0 -0
  364. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-icons_eb990f_256x240.png +0 -0
  365. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-icons_ed9f26_256x240.png +0 -0
  366. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-icons_fadc7a_256x240.png +0 -0
  367. data/assets/bower_components/jquery-ui/themes/sunny/images/ui-icons_ffe180_256x240.png +0 -0
  368. data/assets/bower_components/jquery-ui/themes/sunny/jquery-ui.css +2 -2
  369. data/assets/bower_components/jquery-ui/themes/sunny/jquery-ui.min.css +2 -2
  370. data/assets/bower_components/jquery-ui/themes/sunny/theme.css +2 -2
  371. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png +0 -0
  372. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png +0 -0
  373. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png +0 -0
  374. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png +0 -0
  375. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png +0 -0
  376. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png +0 -0
  377. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png +0 -0
  378. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png +0 -0
  379. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_070603_256x240.png +0 -0
  380. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_e8e2b5_256x240.png +0 -0
  381. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_e9cd86_256x240.png +0 -0
  382. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_efec9f_256x240.png +0 -0
  383. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_f2ec64_256x240.png +0 -0
  384. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_f9f2bd_256x240.png +0 -0
  385. data/assets/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_ff7519_256x240.png +0 -0
  386. data/assets/bower_components/jquery-ui/themes/swanky-purse/jquery-ui.css +2 -2
  387. data/assets/bower_components/jquery-ui/themes/swanky-purse/jquery-ui.min.css +2 -2
  388. data/assets/bower_components/jquery-ui/themes/swanky-purse/theme.css +2 -2
  389. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_diagonals-small_50_262626_40x40.png +0 -0
  390. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_flat_0_303030_40x100.png +0 -0
  391. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_flat_0_4c4c4c_40x100.png +0 -0
  392. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_glass_40_0a0a0a_1x400.png +0 -0
  393. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_glass_55_f1fbe5_1x400.png +0 -0
  394. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_glass_60_000000_1x400.png +0 -0
  395. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_gloss-wave_55_000000_500x100.png +0 -0
  396. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_gloss-wave_85_9fda58_500x100.png +0 -0
  397. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-bg_gloss-wave_95_f6ecd5_500x100.png +0 -0
  398. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-icons_000000_256x240.png +0 -0
  399. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-icons_1f1f1f_256x240.png +0 -0
  400. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-icons_9fda58_256x240.png +0 -0
  401. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-icons_b8ec79_256x240.png +0 -0
  402. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-icons_cd0a0a_256x240.png +0 -0
  403. data/assets/bower_components/jquery-ui/themes/trontastic/images/ui-icons_ffffff_256x240.png +0 -0
  404. data/assets/bower_components/jquery-ui/themes/trontastic/jquery-ui.css +2 -2
  405. data/assets/bower_components/jquery-ui/themes/trontastic/jquery-ui.min.css +2 -2
  406. data/assets/bower_components/jquery-ui/themes/trontastic/theme.css +2 -2
  407. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
  408. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  409. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_glass_20_555555_1x400.png +0 -0
  410. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png +0 -0
  411. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png +0 -0
  412. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png +0 -0
  413. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
  414. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png +0 -0
  415. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png +0 -0
  416. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_222222_256x240.png +0 -0
  417. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_4b8e0b_256x240.png +0 -0
  418. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_a83300_256x240.png +0 -0
  419. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_cccccc_256x240.png +0 -0
  420. data/assets/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_ffffff_256x240.png +0 -0
  421. data/assets/bower_components/jquery-ui/themes/ui-darkness/jquery-ui.css +2 -2
  422. data/assets/bower_components/jquery-ui/themes/ui-darkness/jquery-ui.min.css +2 -2
  423. data/assets/bower_components/jquery-ui/themes/ui-darkness/theme.css +2 -2
  424. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  425. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  426. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  427. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  428. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  429. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  430. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  431. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  432. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  433. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  434. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  435. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  436. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  437. data/assets/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  438. data/assets/bower_components/jquery-ui/themes/ui-lightness/jquery-ui.css +2 -2
  439. data/assets/bower_components/jquery-ui/themes/ui-lightness/jquery-ui.min.css +2 -2
  440. data/assets/bower_components/jquery-ui/themes/ui-lightness/theme.css +2 -2
  441. data/assets/bower_components/jquery-ui/themes/vader/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  442. data/assets/bower_components/jquery-ui/themes/vader/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  443. data/assets/bower_components/jquery-ui/themes/vader/images/ui-bg_gloss-wave_16_121212_500x100.png +0 -0
  444. data/assets/bower_components/jquery-ui/themes/vader/images/ui-bg_highlight-hard_15_888888_1x100.png +0 -0
  445. data/assets/bower_components/jquery-ui/themes/vader/images/ui-bg_highlight-hard_55_555555_1x100.png +0 -0
  446. data/assets/bower_components/jquery-ui/themes/vader/images/ui-bg_highlight-soft_35_adadad_1x100.png +0 -0
  447. data/assets/bower_components/jquery-ui/themes/vader/images/ui-bg_highlight-soft_60_dddddd_1x100.png +0 -0
  448. data/assets/bower_components/jquery-ui/themes/vader/images/ui-bg_inset-soft_15_121212_1x100.png +0 -0
  449. data/assets/bower_components/jquery-ui/themes/vader/images/ui-icons_666666_256x240.png +0 -0
  450. data/assets/bower_components/jquery-ui/themes/vader/images/ui-icons_aaaaaa_256x240.png +0 -0
  451. data/assets/bower_components/jquery-ui/themes/vader/images/ui-icons_bbbbbb_256x240.png +0 -0
  452. data/assets/bower_components/jquery-ui/themes/vader/images/ui-icons_c98000_256x240.png +0 -0
  453. data/assets/bower_components/jquery-ui/themes/vader/images/ui-icons_cccccc_256x240.png +0 -0
  454. data/assets/bower_components/jquery-ui/themes/vader/images/ui-icons_cd0a0a_256x240.png +0 -0
  455. data/assets/bower_components/jquery-ui/themes/vader/images/ui-icons_f29a00_256x240.png +0 -0
  456. data/assets/bower_components/jquery-ui/themes/vader/jquery-ui.css +2 -2
  457. data/assets/bower_components/jquery-ui/themes/vader/jquery-ui.min.css +2 -2
  458. data/assets/bower_components/jquery-ui/themes/vader/theme.css +2 -2
  459. data/assets/bower_components/jquery-ui/ui/accordion.js +14 -8
  460. data/assets/bower_components/jquery-ui/ui/autocomplete.js +3 -3
  461. data/assets/bower_components/jquery-ui/ui/button.js +4 -4
  462. data/assets/bower_components/jquery-ui/ui/core.js +4 -4
  463. data/assets/bower_components/jquery-ui/ui/datepicker.js +8 -4
  464. data/assets/bower_components/jquery-ui/ui/dialog.js +6 -5
  465. data/assets/bower_components/jquery-ui/ui/draggable.js +9 -5
  466. data/assets/bower_components/jquery-ui/ui/droppable.js +3 -3
  467. data/assets/bower_components/jquery-ui/ui/effect-blind.js +2 -2
  468. data/assets/bower_components/jquery-ui/ui/effect-bounce.js +2 -2
  469. data/assets/bower_components/jquery-ui/ui/effect-clip.js +2 -2
  470. data/assets/bower_components/jquery-ui/ui/effect-drop.js +2 -2
  471. data/assets/bower_components/jquery-ui/ui/effect-explode.js +2 -2
  472. data/assets/bower_components/jquery-ui/ui/effect-fade.js +2 -2
  473. data/assets/bower_components/jquery-ui/ui/effect-fold.js +2 -2
  474. data/assets/bower_components/jquery-ui/ui/effect-highlight.js +2 -2
  475. data/assets/bower_components/jquery-ui/ui/effect-puff.js +2 -2
  476. data/assets/bower_components/jquery-ui/ui/effect-pulsate.js +2 -2
  477. data/assets/bower_components/jquery-ui/ui/effect-scale.js +2 -2
  478. data/assets/bower_components/jquery-ui/ui/effect-shake.js +2 -2
  479. data/assets/bower_components/jquery-ui/ui/effect-size.js +2 -2
  480. data/assets/bower_components/jquery-ui/ui/effect-slide.js +2 -2
  481. data/assets/bower_components/jquery-ui/ui/effect-transfer.js +2 -2
  482. data/assets/bower_components/jquery-ui/ui/effect.js +3 -3
  483. data/assets/bower_components/jquery-ui/ui/i18n/datepicker-ar.js +7 -6
  484. data/assets/bower_components/jquery-ui/ui/menu.js +3 -3
  485. data/assets/bower_components/jquery-ui/ui/minified/accordion.min.js +3 -3
  486. data/assets/bower_components/jquery-ui/ui/minified/autocomplete.min.js +3 -3
  487. data/assets/bower_components/jquery-ui/ui/minified/button.min.js +3 -3
  488. data/assets/bower_components/jquery-ui/ui/minified/core.min.js +3 -3
  489. data/assets/bower_components/jquery-ui/ui/minified/datepicker.min.js +4 -4
  490. data/assets/bower_components/jquery-ui/ui/minified/dialog.min.js +3 -3
  491. data/assets/bower_components/jquery-ui/ui/minified/draggable.min.js +3 -3
  492. data/assets/bower_components/jquery-ui/ui/minified/droppable.min.js +3 -3
  493. data/assets/bower_components/jquery-ui/ui/minified/effect-blind.min.js +3 -3
  494. data/assets/bower_components/jquery-ui/ui/minified/effect-bounce.min.js +3 -3
  495. data/assets/bower_components/jquery-ui/ui/minified/effect-clip.min.js +3 -3
  496. data/assets/bower_components/jquery-ui/ui/minified/effect-drop.min.js +3 -3
  497. data/assets/bower_components/jquery-ui/ui/minified/effect-explode.min.js +3 -3
  498. data/assets/bower_components/jquery-ui/ui/minified/effect-fade.min.js +3 -3
  499. data/assets/bower_components/jquery-ui/ui/minified/effect-fold.min.js +3 -3
  500. data/assets/bower_components/jquery-ui/ui/minified/effect-highlight.min.js +3 -3
  501. data/assets/bower_components/jquery-ui/ui/minified/effect-puff.min.js +3 -3
  502. data/assets/bower_components/jquery-ui/ui/minified/effect-pulsate.min.js +3 -3
  503. data/assets/bower_components/jquery-ui/ui/minified/effect-scale.min.js +3 -3
  504. data/assets/bower_components/jquery-ui/ui/minified/effect-shake.min.js +3 -3
  505. data/assets/bower_components/jquery-ui/ui/minified/effect-size.min.js +3 -3
  506. data/assets/bower_components/jquery-ui/ui/minified/effect-slide.min.js +3 -3
  507. data/assets/bower_components/jquery-ui/ui/minified/effect-transfer.min.js +3 -3
  508. data/assets/bower_components/jquery-ui/ui/minified/effect.min.js +3 -3
  509. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-af.min.js +3 -3
  510. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ar-DZ.min.js +3 -3
  511. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ar.min.js +3 -3
  512. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-az.min.js +3 -3
  513. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-be.min.js +3 -3
  514. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-bg.min.js +3 -3
  515. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-bs.min.js +3 -3
  516. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ca.min.js +3 -3
  517. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-cs.min.js +3 -3
  518. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-cy-GB.min.js +3 -3
  519. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-da.min.js +3 -3
  520. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-de.min.js +3 -3
  521. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-el.min.js +3 -3
  522. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-en-AU.min.js +3 -3
  523. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-en-GB.min.js +3 -3
  524. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-en-NZ.min.js +3 -3
  525. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-eo.min.js +3 -3
  526. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-es.min.js +3 -3
  527. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-et.min.js +3 -3
  528. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-eu.min.js +3 -3
  529. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-fa.min.js +3 -3
  530. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-fi.min.js +3 -3
  531. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-fo.min.js +3 -3
  532. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-fr-CA.min.js +3 -3
  533. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-fr-CH.min.js +3 -3
  534. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-fr.min.js +3 -3
  535. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-gl.min.js +3 -3
  536. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-he.min.js +3 -3
  537. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-hi.min.js +3 -3
  538. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-hr.min.js +2 -2
  539. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-hu.min.js +2 -2
  540. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-hy.min.js +2 -2
  541. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-id.min.js +2 -2
  542. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-is.min.js +2 -2
  543. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-it-CH.min.js +2 -2
  544. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-it.min.js +2 -2
  545. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ja.min.js +2 -2
  546. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ka.min.js +2 -2
  547. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-kk.min.js +2 -2
  548. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-km.min.js +2 -2
  549. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ko.min.js +2 -2
  550. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ky.min.js +2 -2
  551. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-lb.min.js +2 -2
  552. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-lt.min.js +2 -2
  553. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-lv.min.js +2 -2
  554. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-mk.min.js +2 -2
  555. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ml.min.js +2 -2
  556. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ms.min.js +2 -2
  557. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-nb.min.js +2 -2
  558. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-nl-BE.min.js +2 -2
  559. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-nl.min.js +2 -2
  560. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-nn.min.js +2 -2
  561. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-no.min.js +2 -2
  562. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-pl.min.js +2 -2
  563. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-pt-BR.min.js +2 -2
  564. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-pt.min.js +2 -2
  565. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-rm.min.js +2 -2
  566. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ro.min.js +2 -2
  567. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ru.min.js +2 -2
  568. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-sk.min.js +2 -2
  569. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-sl.min.js +2 -2
  570. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-sq.min.js +2 -2
  571. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-sr-SR.min.js +2 -2
  572. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-sr.min.js +2 -2
  573. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-sv.min.js +2 -2
  574. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-ta.min.js +2 -2
  575. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-th.min.js +2 -2
  576. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-tj.min.js +2 -2
  577. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-tr.min.js +2 -2
  578. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-uk.min.js +2 -2
  579. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-vi.min.js +2 -2
  580. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-zh-CN.min.js +2 -2
  581. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-zh-HK.min.js +2 -2
  582. data/assets/bower_components/jquery-ui/ui/minified/i18n/datepicker-zh-TW.min.js +2 -2
  583. data/assets/bower_components/jquery-ui/ui/minified/menu.min.js +3 -3
  584. data/assets/bower_components/jquery-ui/ui/minified/mouse.min.js +3 -3
  585. data/assets/bower_components/jquery-ui/ui/minified/position.min.js +3 -3
  586. data/assets/bower_components/jquery-ui/ui/minified/progressbar.min.js +3 -3
  587. data/assets/bower_components/jquery-ui/ui/minified/resizable.min.js +3 -3
  588. data/assets/bower_components/jquery-ui/ui/minified/selectable.min.js +3 -3
  589. data/assets/bower_components/jquery-ui/ui/minified/selectmenu.min.js +3 -3
  590. data/assets/bower_components/jquery-ui/ui/minified/slider.min.js +3 -3
  591. data/assets/bower_components/jquery-ui/ui/minified/sortable.min.js +3 -3
  592. data/assets/bower_components/jquery-ui/ui/minified/spinner.min.js +3 -3
  593. data/assets/bower_components/jquery-ui/ui/minified/tabs.min.js +3 -3
  594. data/assets/bower_components/jquery-ui/ui/minified/tooltip.min.js +3 -3
  595. data/assets/bower_components/jquery-ui/ui/minified/widget.min.js +3 -3
  596. data/assets/bower_components/jquery-ui/ui/mouse.js +3 -3
  597. data/assets/bower_components/jquery-ui/ui/position.js +4 -4
  598. data/assets/bower_components/jquery-ui/ui/progressbar.js +3 -3
  599. data/assets/bower_components/jquery-ui/ui/resizable.js +36 -63
  600. data/assets/bower_components/jquery-ui/ui/selectable.js +3 -3
  601. data/assets/bower_components/jquery-ui/ui/selectmenu.js +6 -7
  602. data/assets/bower_components/jquery-ui/ui/slider.js +23 -5
  603. data/assets/bower_components/jquery-ui/ui/sortable.js +46 -35
  604. data/assets/bower_components/jquery-ui/ui/spinner.js +3 -3
  605. data/assets/bower_components/jquery-ui/ui/tabs.js +23 -17
  606. data/assets/bower_components/jquery-ui/ui/tooltip.js +22 -10
  607. data/assets/bower_components/jquery-ui/ui/widget.js +8 -7
  608. data/assets/bower_components/zeroclipboard/bower.json +43 -0
  609. data/assets/bower_components/zeroclipboard/dist/ZeroClipboard.Core.js +2017 -0
  610. data/assets/bower_components/zeroclipboard/dist/ZeroClipboard.Core.min.js +10 -0
  611. data/assets/bower_components/zeroclipboard/dist/ZeroClipboard.Core.min.map +1 -0
  612. data/assets/bower_components/zeroclipboard/dist/ZeroClipboard.js +2581 -0
  613. data/assets/bower_components/zeroclipboard/dist/ZeroClipboard.min.js +10 -0
  614. data/assets/bower_components/zeroclipboard/dist/ZeroClipboard.min.map +1 -0
  615. data/assets/bower_components/zeroclipboard/dist/ZeroClipboard.swf +0 -0
  616. data/assets/img/page_copy.png +0 -0
  617. data/assets/img/page_paste.png +0 -0
  618. data/assets/js/app.js +60 -3
  619. data/assets/scss/app.scss +11 -1
  620. data/assets/stylesheets/app.css +16 -4
  621. data/lib/catscope/app.rb +15 -1
  622. data/lib/catscope/cli.rb +5 -0
  623. data/lib/catscope/version.rb +1 -1
  624. data/lib/catscope/views/layout.erb +7 -0
  625. data/static/.gitkeep +0 -0
  626. metadata +28 -3
  627. data/assets/bower_components/jquery-ui/themes/base/images/animated-overlay.gif +0 -0
@@ -0,0 +1,2017 @@
1
+ /*!
2
+ * ZeroClipboard
3
+ * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.
4
+ * Copyright (c) 2009-2014 Jon Rohan, James M. Greene
5
+ * Licensed MIT
6
+ * http://zeroclipboard.org/
7
+ * v2.2.0
8
+ */
9
+ (function(window, undefined) {
10
+ "use strict";
11
+ /**
12
+ * Store references to critically important global functions that may be
13
+ * overridden on certain web pages.
14
+ */
15
+ var _window = window, _document = _window.document, _navigator = _window.navigator, _setTimeout = _window.setTimeout, _clearTimeout = _window.clearTimeout, _setInterval = _window.setInterval, _clearInterval = _window.clearInterval, _getComputedStyle = _window.getComputedStyle, _encodeURIComponent = _window.encodeURIComponent, _ActiveXObject = _window.ActiveXObject, _Error = _window.Error, _parseInt = _window.Number.parseInt || _window.parseInt, _parseFloat = _window.Number.parseFloat || _window.parseFloat, _isNaN = _window.Number.isNaN || _window.isNaN, _now = _window.Date.now, _keys = _window.Object.keys, _defineProperty = _window.Object.defineProperty, _hasOwn = _window.Object.prototype.hasOwnProperty, _slice = _window.Array.prototype.slice, _unwrap = function() {
16
+ var unwrapper = function(el) {
17
+ return el;
18
+ };
19
+ if (typeof _window.wrap === "function" && typeof _window.unwrap === "function") {
20
+ try {
21
+ var div = _document.createElement("div");
22
+ var unwrappedDiv = _window.unwrap(div);
23
+ if (div.nodeType === 1 && unwrappedDiv && unwrappedDiv.nodeType === 1) {
24
+ unwrapper = _window.unwrap;
25
+ }
26
+ } catch (e) {}
27
+ }
28
+ return unwrapper;
29
+ }();
30
+ /**
31
+ * Convert an `arguments` object into an Array.
32
+ *
33
+ * @returns The arguments as an Array
34
+ * @private
35
+ */
36
+ var _args = function(argumentsObj) {
37
+ return _slice.call(argumentsObj, 0);
38
+ };
39
+ /**
40
+ * Shallow-copy the owned, enumerable properties of one object over to another, similar to jQuery's `$.extend`.
41
+ *
42
+ * @returns The target object, augmented
43
+ * @private
44
+ */
45
+ var _extend = function() {
46
+ var i, len, arg, prop, src, copy, args = _args(arguments), target = args[0] || {};
47
+ for (i = 1, len = args.length; i < len; i++) {
48
+ if ((arg = args[i]) != null) {
49
+ for (prop in arg) {
50
+ if (_hasOwn.call(arg, prop)) {
51
+ src = target[prop];
52
+ copy = arg[prop];
53
+ if (target !== copy && copy !== undefined) {
54
+ target[prop] = copy;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ return target;
61
+ };
62
+ /**
63
+ * Return a deep copy of the source object or array.
64
+ *
65
+ * @returns Object or Array
66
+ * @private
67
+ */
68
+ var _deepCopy = function(source) {
69
+ var copy, i, len, prop;
70
+ if (typeof source !== "object" || source == null || typeof source.nodeType === "number") {
71
+ copy = source;
72
+ } else if (typeof source.length === "number") {
73
+ copy = [];
74
+ for (i = 0, len = source.length; i < len; i++) {
75
+ if (_hasOwn.call(source, i)) {
76
+ copy[i] = _deepCopy(source[i]);
77
+ }
78
+ }
79
+ } else {
80
+ copy = {};
81
+ for (prop in source) {
82
+ if (_hasOwn.call(source, prop)) {
83
+ copy[prop] = _deepCopy(source[prop]);
84
+ }
85
+ }
86
+ }
87
+ return copy;
88
+ };
89
+ /**
90
+ * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to keep.
91
+ * The inverse of `_omit`, mostly. The big difference is that these properties do NOT need to be enumerable to
92
+ * be kept.
93
+ *
94
+ * @returns A new filtered object.
95
+ * @private
96
+ */
97
+ var _pick = function(obj, keys) {
98
+ var newObj = {};
99
+ for (var i = 0, len = keys.length; i < len; i++) {
100
+ if (keys[i] in obj) {
101
+ newObj[keys[i]] = obj[keys[i]];
102
+ }
103
+ }
104
+ return newObj;
105
+ };
106
+ /**
107
+ * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to omit.
108
+ * The inverse of `_pick`.
109
+ *
110
+ * @returns A new filtered object.
111
+ * @private
112
+ */
113
+ var _omit = function(obj, keys) {
114
+ var newObj = {};
115
+ for (var prop in obj) {
116
+ if (keys.indexOf(prop) === -1) {
117
+ newObj[prop] = obj[prop];
118
+ }
119
+ }
120
+ return newObj;
121
+ };
122
+ /**
123
+ * Remove all owned, enumerable properties from an object.
124
+ *
125
+ * @returns The original object without its owned, enumerable properties.
126
+ * @private
127
+ */
128
+ var _deleteOwnProperties = function(obj) {
129
+ if (obj) {
130
+ for (var prop in obj) {
131
+ if (_hasOwn.call(obj, prop)) {
132
+ delete obj[prop];
133
+ }
134
+ }
135
+ }
136
+ return obj;
137
+ };
138
+ /**
139
+ * Determine if an element is contained within another element.
140
+ *
141
+ * @returns Boolean
142
+ * @private
143
+ */
144
+ var _containedBy = function(el, ancestorEl) {
145
+ if (el && el.nodeType === 1 && el.ownerDocument && ancestorEl && (ancestorEl.nodeType === 1 && ancestorEl.ownerDocument && ancestorEl.ownerDocument === el.ownerDocument || ancestorEl.nodeType === 9 && !ancestorEl.ownerDocument && ancestorEl === el.ownerDocument)) {
146
+ do {
147
+ if (el === ancestorEl) {
148
+ return true;
149
+ }
150
+ el = el.parentNode;
151
+ } while (el);
152
+ }
153
+ return false;
154
+ };
155
+ /**
156
+ * Get the URL path's parent directory.
157
+ *
158
+ * @returns String or `undefined`
159
+ * @private
160
+ */
161
+ var _getDirPathOfUrl = function(url) {
162
+ var dir;
163
+ if (typeof url === "string" && url) {
164
+ dir = url.split("#")[0].split("?")[0];
165
+ dir = url.slice(0, url.lastIndexOf("/") + 1);
166
+ }
167
+ return dir;
168
+ };
169
+ /**
170
+ * Get the current script's URL by throwing an `Error` and analyzing it.
171
+ *
172
+ * @returns String or `undefined`
173
+ * @private
174
+ */
175
+ var _getCurrentScriptUrlFromErrorStack = function(stack) {
176
+ var url, matches;
177
+ if (typeof stack === "string" && stack) {
178
+ matches = stack.match(/^(?:|[^:@]*@|.+\)@(?=http[s]?|file)|.+?\s+(?: at |@)(?:[^:\(]+ )*[\(]?)((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/);
179
+ if (matches && matches[1]) {
180
+ url = matches[1];
181
+ } else {
182
+ matches = stack.match(/\)@((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/);
183
+ if (matches && matches[1]) {
184
+ url = matches[1];
185
+ }
186
+ }
187
+ }
188
+ return url;
189
+ };
190
+ /**
191
+ * Get the current script's URL by throwing an `Error` and analyzing it.
192
+ *
193
+ * @returns String or `undefined`
194
+ * @private
195
+ */
196
+ var _getCurrentScriptUrlFromError = function() {
197
+ var url, err;
198
+ try {
199
+ throw new _Error();
200
+ } catch (e) {
201
+ err = e;
202
+ }
203
+ if (err) {
204
+ url = err.sourceURL || err.fileName || _getCurrentScriptUrlFromErrorStack(err.stack);
205
+ }
206
+ return url;
207
+ };
208
+ /**
209
+ * Get the current script's URL.
210
+ *
211
+ * @returns String or `undefined`
212
+ * @private
213
+ */
214
+ var _getCurrentScriptUrl = function() {
215
+ var jsPath, scripts, i;
216
+ if (_document.currentScript && (jsPath = _document.currentScript.src)) {
217
+ return jsPath;
218
+ }
219
+ scripts = _document.getElementsByTagName("script");
220
+ if (scripts.length === 1) {
221
+ return scripts[0].src || undefined;
222
+ }
223
+ if ("readyState" in scripts[0]) {
224
+ for (i = scripts.length; i--; ) {
225
+ if (scripts[i].readyState === "interactive" && (jsPath = scripts[i].src)) {
226
+ return jsPath;
227
+ }
228
+ }
229
+ }
230
+ if (_document.readyState === "loading" && (jsPath = scripts[scripts.length - 1].src)) {
231
+ return jsPath;
232
+ }
233
+ if (jsPath = _getCurrentScriptUrlFromError()) {
234
+ return jsPath;
235
+ }
236
+ return undefined;
237
+ };
238
+ /**
239
+ * Get the unanimous parent directory of ALL script tags.
240
+ * If any script tags are either (a) inline or (b) from differing parent
241
+ * directories, this method must return `undefined`.
242
+ *
243
+ * @returns String or `undefined`
244
+ * @private
245
+ */
246
+ var _getUnanimousScriptParentDir = function() {
247
+ var i, jsDir, jsPath, scripts = _document.getElementsByTagName("script");
248
+ for (i = scripts.length; i--; ) {
249
+ if (!(jsPath = scripts[i].src)) {
250
+ jsDir = null;
251
+ break;
252
+ }
253
+ jsPath = _getDirPathOfUrl(jsPath);
254
+ if (jsDir == null) {
255
+ jsDir = jsPath;
256
+ } else if (jsDir !== jsPath) {
257
+ jsDir = null;
258
+ break;
259
+ }
260
+ }
261
+ return jsDir || undefined;
262
+ };
263
+ /**
264
+ * Get the presumed location of the "ZeroClipboard.swf" file, based on the location
265
+ * of the executing JavaScript file (e.g. "ZeroClipboard.js", etc.).
266
+ *
267
+ * @returns String
268
+ * @private
269
+ */
270
+ var _getDefaultSwfPath = function() {
271
+ var jsDir = _getDirPathOfUrl(_getCurrentScriptUrl()) || _getUnanimousScriptParentDir() || "";
272
+ return jsDir + "ZeroClipboard.swf";
273
+ };
274
+ /**
275
+ * Keep track of if the page is framed (in an `iframe`). This can never change.
276
+ * @private
277
+ */
278
+ var _pageIsFramed = function() {
279
+ return window.opener == null && (!!window.top && window != window.top || !!window.parent && window != window.parent);
280
+ }();
281
+ /**
282
+ * Keep track of the state of the Flash object.
283
+ * @private
284
+ */
285
+ var _flashState = {
286
+ bridge: null,
287
+ version: "0.0.0",
288
+ pluginType: "unknown",
289
+ disabled: null,
290
+ outdated: null,
291
+ sandboxed: null,
292
+ unavailable: null,
293
+ degraded: null,
294
+ deactivated: null,
295
+ overdue: null,
296
+ ready: null
297
+ };
298
+ /**
299
+ * The minimum Flash Player version required to use ZeroClipboard completely.
300
+ * @readonly
301
+ * @private
302
+ */
303
+ var _minimumFlashVersion = "11.0.0";
304
+ /**
305
+ * The ZeroClipboard library version number, as reported by Flash, at the time the SWF was compiled.
306
+ */
307
+ var _zcSwfVersion;
308
+ /**
309
+ * Keep track of all event listener registrations.
310
+ * @private
311
+ */
312
+ var _handlers = {};
313
+ /**
314
+ * Keep track of the currently activated element.
315
+ * @private
316
+ */
317
+ var _currentElement;
318
+ /**
319
+ * Keep track of the element that was activated when a `copy` process started.
320
+ * @private
321
+ */
322
+ var _copyTarget;
323
+ /**
324
+ * Keep track of data for the pending clipboard transaction.
325
+ * @private
326
+ */
327
+ var _clipData = {};
328
+ /**
329
+ * Keep track of data formats for the pending clipboard transaction.
330
+ * @private
331
+ */
332
+ var _clipDataFormatMap = null;
333
+ /**
334
+ * Keep track of the Flash availability check timeout.
335
+ * @private
336
+ */
337
+ var _flashCheckTimeout = 0;
338
+ /**
339
+ * Keep track of SWF network errors interval polling.
340
+ * @private
341
+ */
342
+ var _swfFallbackCheckInterval = 0;
343
+ /**
344
+ * The `message` store for events
345
+ * @private
346
+ */
347
+ var _eventMessages = {
348
+ ready: "Flash communication is established",
349
+ error: {
350
+ "flash-disabled": "Flash is disabled or not installed. May also be attempting to run Flash in a sandboxed iframe, which is impossible.",
351
+ "flash-outdated": "Flash is too outdated to support ZeroClipboard",
352
+ "flash-sandboxed": "Attempting to run Flash in a sandboxed iframe, which is impossible",
353
+ "flash-unavailable": "Flash is unable to communicate bidirectionally with JavaScript",
354
+ "flash-degraded": "Flash is unable to preserve data fidelity when communicating with JavaScript",
355
+ "flash-deactivated": "Flash is too outdated for your browser and/or is configured as click-to-activate.\nThis may also mean that the ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity.\nMay also be attempting to run Flash in a sandboxed iframe, which is impossible.",
356
+ "flash-overdue": "Flash communication was established but NOT within the acceptable time limit",
357
+ "version-mismatch": "ZeroClipboard JS version number does not match ZeroClipboard SWF version number",
358
+ "clipboard-error": "At least one error was thrown while ZeroClipboard was attempting to inject your data into the clipboard",
359
+ "config-mismatch": "ZeroClipboard configuration does not match Flash's reality",
360
+ "swf-not-found": "The ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity"
361
+ }
362
+ };
363
+ /**
364
+ * The `name`s of `error` events that can only occur is Flash has at least
365
+ * been able to load the SWF successfully.
366
+ * @private
367
+ */
368
+ var _errorsThatOnlyOccurAfterFlashLoads = [ "flash-unavailable", "flash-degraded", "flash-overdue", "version-mismatch", "config-mismatch", "clipboard-error" ];
369
+ /**
370
+ * The `name`s of `error` events that should likely result in the `_flashState`
371
+ * variable's property values being updated.
372
+ * @private
373
+ */
374
+ var _flashStateErrorNames = [ "flash-disabled", "flash-outdated", "flash-sandboxed", "flash-unavailable", "flash-degraded", "flash-deactivated", "flash-overdue" ];
375
+ /**
376
+ * A RegExp to match the `name` property of `error` events related to Flash.
377
+ * @private
378
+ */
379
+ var _flashStateErrorNameMatchingRegex = new RegExp("^flash-(" + _flashStateErrorNames.map(function(errorName) {
380
+ return errorName.replace(/^flash-/, "");
381
+ }).join("|") + ")$");
382
+ /**
383
+ * A RegExp to match the `name` property of `error` events related to Flash,
384
+ * which is enabled.
385
+ * @private
386
+ */
387
+ var _flashStateEnabledErrorNameMatchingRegex = new RegExp("^flash-(" + _flashStateErrorNames.slice(1).map(function(errorName) {
388
+ return errorName.replace(/^flash-/, "");
389
+ }).join("|") + ")$");
390
+ /**
391
+ * ZeroClipboard configuration defaults for the Core module.
392
+ * @private
393
+ */
394
+ var _globalConfig = {
395
+ swfPath: _getDefaultSwfPath(),
396
+ trustedDomains: window.location.host ? [ window.location.host ] : [],
397
+ cacheBust: true,
398
+ forceEnhancedClipboard: false,
399
+ flashLoadTimeout: 3e4,
400
+ autoActivate: true,
401
+ bubbleEvents: true,
402
+ containerId: "global-zeroclipboard-html-bridge",
403
+ containerClass: "global-zeroclipboard-container",
404
+ swfObjectId: "global-zeroclipboard-flash-bridge",
405
+ hoverClass: "zeroclipboard-is-hover",
406
+ activeClass: "zeroclipboard-is-active",
407
+ forceHandCursor: false,
408
+ title: null,
409
+ zIndex: 999999999
410
+ };
411
+ /**
412
+ * The underlying implementation of `ZeroClipboard.config`.
413
+ * @private
414
+ */
415
+ var _config = function(options) {
416
+ if (typeof options === "object" && options !== null) {
417
+ for (var prop in options) {
418
+ if (_hasOwn.call(options, prop)) {
419
+ if (/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(prop)) {
420
+ _globalConfig[prop] = options[prop];
421
+ } else if (_flashState.bridge == null) {
422
+ if (prop === "containerId" || prop === "swfObjectId") {
423
+ if (_isValidHtml4Id(options[prop])) {
424
+ _globalConfig[prop] = options[prop];
425
+ } else {
426
+ throw new Error("The specified `" + prop + "` value is not valid as an HTML4 Element ID");
427
+ }
428
+ } else {
429
+ _globalConfig[prop] = options[prop];
430
+ }
431
+ }
432
+ }
433
+ }
434
+ }
435
+ if (typeof options === "string" && options) {
436
+ if (_hasOwn.call(_globalConfig, options)) {
437
+ return _globalConfig[options];
438
+ }
439
+ return;
440
+ }
441
+ return _deepCopy(_globalConfig);
442
+ };
443
+ /**
444
+ * The underlying implementation of `ZeroClipboard.state`.
445
+ * @private
446
+ */
447
+ var _state = function() {
448
+ _detectSandbox();
449
+ return {
450
+ browser: _pick(_navigator, [ "userAgent", "platform", "appName" ]),
451
+ flash: _omit(_flashState, [ "bridge" ]),
452
+ zeroclipboard: {
453
+ version: ZeroClipboard.version,
454
+ config: ZeroClipboard.config()
455
+ }
456
+ };
457
+ };
458
+ /**
459
+ * The underlying implementation of `ZeroClipboard.isFlashUnusable`.
460
+ * @private
461
+ */
462
+ var _isFlashUnusable = function() {
463
+ return !!(_flashState.disabled || _flashState.outdated || _flashState.sandboxed || _flashState.unavailable || _flashState.degraded || _flashState.deactivated);
464
+ };
465
+ /**
466
+ * The underlying implementation of `ZeroClipboard.on`.
467
+ * @private
468
+ */
469
+ var _on = function(eventType, listener) {
470
+ var i, len, events, added = {};
471
+ if (typeof eventType === "string" && eventType) {
472
+ events = eventType.toLowerCase().split(/\s+/);
473
+ } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") {
474
+ for (i in eventType) {
475
+ if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") {
476
+ ZeroClipboard.on(i, eventType[i]);
477
+ }
478
+ }
479
+ }
480
+ if (events && events.length) {
481
+ for (i = 0, len = events.length; i < len; i++) {
482
+ eventType = events[i].replace(/^on/, "");
483
+ added[eventType] = true;
484
+ if (!_handlers[eventType]) {
485
+ _handlers[eventType] = [];
486
+ }
487
+ _handlers[eventType].push(listener);
488
+ }
489
+ if (added.ready && _flashState.ready) {
490
+ ZeroClipboard.emit({
491
+ type: "ready"
492
+ });
493
+ }
494
+ if (added.error) {
495
+ for (i = 0, len = _flashStateErrorNames.length; i < len; i++) {
496
+ if (_flashState[_flashStateErrorNames[i].replace(/^flash-/, "")] === true) {
497
+ ZeroClipboard.emit({
498
+ type: "error",
499
+ name: _flashStateErrorNames[i]
500
+ });
501
+ break;
502
+ }
503
+ }
504
+ if (_zcSwfVersion !== undefined && ZeroClipboard.version !== _zcSwfVersion) {
505
+ ZeroClipboard.emit({
506
+ type: "error",
507
+ name: "version-mismatch",
508
+ jsVersion: ZeroClipboard.version,
509
+ swfVersion: _zcSwfVersion
510
+ });
511
+ }
512
+ }
513
+ }
514
+ return ZeroClipboard;
515
+ };
516
+ /**
517
+ * The underlying implementation of `ZeroClipboard.off`.
518
+ * @private
519
+ */
520
+ var _off = function(eventType, listener) {
521
+ var i, len, foundIndex, events, perEventHandlers;
522
+ if (arguments.length === 0) {
523
+ events = _keys(_handlers);
524
+ } else if (typeof eventType === "string" && eventType) {
525
+ events = eventType.split(/\s+/);
526
+ } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") {
527
+ for (i in eventType) {
528
+ if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") {
529
+ ZeroClipboard.off(i, eventType[i]);
530
+ }
531
+ }
532
+ }
533
+ if (events && events.length) {
534
+ for (i = 0, len = events.length; i < len; i++) {
535
+ eventType = events[i].toLowerCase().replace(/^on/, "");
536
+ perEventHandlers = _handlers[eventType];
537
+ if (perEventHandlers && perEventHandlers.length) {
538
+ if (listener) {
539
+ foundIndex = perEventHandlers.indexOf(listener);
540
+ while (foundIndex !== -1) {
541
+ perEventHandlers.splice(foundIndex, 1);
542
+ foundIndex = perEventHandlers.indexOf(listener, foundIndex);
543
+ }
544
+ } else {
545
+ perEventHandlers.length = 0;
546
+ }
547
+ }
548
+ }
549
+ }
550
+ return ZeroClipboard;
551
+ };
552
+ /**
553
+ * The underlying implementation of `ZeroClipboard.handlers`.
554
+ * @private
555
+ */
556
+ var _listeners = function(eventType) {
557
+ var copy;
558
+ if (typeof eventType === "string" && eventType) {
559
+ copy = _deepCopy(_handlers[eventType]) || null;
560
+ } else {
561
+ copy = _deepCopy(_handlers);
562
+ }
563
+ return copy;
564
+ };
565
+ /**
566
+ * The underlying implementation of `ZeroClipboard.emit`.
567
+ * @private
568
+ */
569
+ var _emit = function(event) {
570
+ var eventCopy, returnVal, tmp;
571
+ event = _createEvent(event);
572
+ if (!event) {
573
+ return;
574
+ }
575
+ if (_preprocessEvent(event)) {
576
+ return;
577
+ }
578
+ if (event.type === "ready" && _flashState.overdue === true) {
579
+ return ZeroClipboard.emit({
580
+ type: "error",
581
+ name: "flash-overdue"
582
+ });
583
+ }
584
+ eventCopy = _extend({}, event);
585
+ _dispatchCallbacks.call(this, eventCopy);
586
+ if (event.type === "copy") {
587
+ tmp = _mapClipDataToFlash(_clipData);
588
+ returnVal = tmp.data;
589
+ _clipDataFormatMap = tmp.formatMap;
590
+ }
591
+ return returnVal;
592
+ };
593
+ /**
594
+ * The underlying implementation of `ZeroClipboard.create`.
595
+ * @private
596
+ */
597
+ var _create = function() {
598
+ var previousState = _flashState.sandboxed;
599
+ _detectSandbox();
600
+ if (typeof _flashState.ready !== "boolean") {
601
+ _flashState.ready = false;
602
+ }
603
+ if (_flashState.sandboxed !== previousState && _flashState.sandboxed === true) {
604
+ _flashState.ready = false;
605
+ ZeroClipboard.emit({
606
+ type: "error",
607
+ name: "flash-sandboxed"
608
+ });
609
+ } else if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {
610
+ var maxWait = _globalConfig.flashLoadTimeout;
611
+ if (typeof maxWait === "number" && maxWait >= 0) {
612
+ _flashCheckTimeout = _setTimeout(function() {
613
+ if (typeof _flashState.deactivated !== "boolean") {
614
+ _flashState.deactivated = true;
615
+ }
616
+ if (_flashState.deactivated === true) {
617
+ ZeroClipboard.emit({
618
+ type: "error",
619
+ name: "flash-deactivated"
620
+ });
621
+ }
622
+ }, maxWait);
623
+ }
624
+ _flashState.overdue = false;
625
+ _embedSwf();
626
+ }
627
+ };
628
+ /**
629
+ * The underlying implementation of `ZeroClipboard.destroy`.
630
+ * @private
631
+ */
632
+ var _destroy = function() {
633
+ ZeroClipboard.clearData();
634
+ ZeroClipboard.blur();
635
+ ZeroClipboard.emit("destroy");
636
+ _unembedSwf();
637
+ ZeroClipboard.off();
638
+ };
639
+ /**
640
+ * The underlying implementation of `ZeroClipboard.setData`.
641
+ * @private
642
+ */
643
+ var _setData = function(format, data) {
644
+ var dataObj;
645
+ if (typeof format === "object" && format && typeof data === "undefined") {
646
+ dataObj = format;
647
+ ZeroClipboard.clearData();
648
+ } else if (typeof format === "string" && format) {
649
+ dataObj = {};
650
+ dataObj[format] = data;
651
+ } else {
652
+ return;
653
+ }
654
+ for (var dataFormat in dataObj) {
655
+ if (typeof dataFormat === "string" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === "string" && dataObj[dataFormat]) {
656
+ _clipData[dataFormat] = dataObj[dataFormat];
657
+ }
658
+ }
659
+ };
660
+ /**
661
+ * The underlying implementation of `ZeroClipboard.clearData`.
662
+ * @private
663
+ */
664
+ var _clearData = function(format) {
665
+ if (typeof format === "undefined") {
666
+ _deleteOwnProperties(_clipData);
667
+ _clipDataFormatMap = null;
668
+ } else if (typeof format === "string" && _hasOwn.call(_clipData, format)) {
669
+ delete _clipData[format];
670
+ }
671
+ };
672
+ /**
673
+ * The underlying implementation of `ZeroClipboard.getData`.
674
+ * @private
675
+ */
676
+ var _getData = function(format) {
677
+ if (typeof format === "undefined") {
678
+ return _deepCopy(_clipData);
679
+ } else if (typeof format === "string" && _hasOwn.call(_clipData, format)) {
680
+ return _clipData[format];
681
+ }
682
+ };
683
+ /**
684
+ * The underlying implementation of `ZeroClipboard.focus`/`ZeroClipboard.activate`.
685
+ * @private
686
+ */
687
+ var _focus = function(element) {
688
+ if (!(element && element.nodeType === 1)) {
689
+ return;
690
+ }
691
+ if (_currentElement) {
692
+ _removeClass(_currentElement, _globalConfig.activeClass);
693
+ if (_currentElement !== element) {
694
+ _removeClass(_currentElement, _globalConfig.hoverClass);
695
+ }
696
+ }
697
+ _currentElement = element;
698
+ _addClass(element, _globalConfig.hoverClass);
699
+ var newTitle = element.getAttribute("title") || _globalConfig.title;
700
+ if (typeof newTitle === "string" && newTitle) {
701
+ var htmlBridge = _getHtmlBridge(_flashState.bridge);
702
+ if (htmlBridge) {
703
+ htmlBridge.setAttribute("title", newTitle);
704
+ }
705
+ }
706
+ var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, "cursor") === "pointer";
707
+ _setHandCursor(useHandCursor);
708
+ _reposition();
709
+ };
710
+ /**
711
+ * The underlying implementation of `ZeroClipboard.blur`/`ZeroClipboard.deactivate`.
712
+ * @private
713
+ */
714
+ var _blur = function() {
715
+ var htmlBridge = _getHtmlBridge(_flashState.bridge);
716
+ if (htmlBridge) {
717
+ htmlBridge.removeAttribute("title");
718
+ htmlBridge.style.left = "0px";
719
+ htmlBridge.style.top = "-9999px";
720
+ htmlBridge.style.width = "1px";
721
+ htmlBridge.style.height = "1px";
722
+ }
723
+ if (_currentElement) {
724
+ _removeClass(_currentElement, _globalConfig.hoverClass);
725
+ _removeClass(_currentElement, _globalConfig.activeClass);
726
+ _currentElement = null;
727
+ }
728
+ };
729
+ /**
730
+ * The underlying implementation of `ZeroClipboard.activeElement`.
731
+ * @private
732
+ */
733
+ var _activeElement = function() {
734
+ return _currentElement || null;
735
+ };
736
+ /**
737
+ * Check if a value is a valid HTML4 `ID` or `Name` token.
738
+ * @private
739
+ */
740
+ var _isValidHtml4Id = function(id) {
741
+ return typeof id === "string" && id && /^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(id);
742
+ };
743
+ /**
744
+ * Create or update an `event` object, based on the `eventType`.
745
+ * @private
746
+ */
747
+ var _createEvent = function(event) {
748
+ var eventType;
749
+ if (typeof event === "string" && event) {
750
+ eventType = event;
751
+ event = {};
752
+ } else if (typeof event === "object" && event && typeof event.type === "string" && event.type) {
753
+ eventType = event.type;
754
+ }
755
+ if (!eventType) {
756
+ return;
757
+ }
758
+ eventType = eventType.toLowerCase();
759
+ if (!event.target && (/^(copy|aftercopy|_click)$/.test(eventType) || eventType === "error" && event.name === "clipboard-error")) {
760
+ event.target = _copyTarget;
761
+ }
762
+ _extend(event, {
763
+ type: eventType,
764
+ target: event.target || _currentElement || null,
765
+ relatedTarget: event.relatedTarget || null,
766
+ currentTarget: _flashState && _flashState.bridge || null,
767
+ timeStamp: event.timeStamp || _now() || null
768
+ });
769
+ var msg = _eventMessages[event.type];
770
+ if (event.type === "error" && event.name && msg) {
771
+ msg = msg[event.name];
772
+ }
773
+ if (msg) {
774
+ event.message = msg;
775
+ }
776
+ if (event.type === "ready") {
777
+ _extend(event, {
778
+ target: null,
779
+ version: _flashState.version
780
+ });
781
+ }
782
+ if (event.type === "error") {
783
+ if (_flashStateErrorNameMatchingRegex.test(event.name)) {
784
+ _extend(event, {
785
+ target: null,
786
+ minimumVersion: _minimumFlashVersion
787
+ });
788
+ }
789
+ if (_flashStateEnabledErrorNameMatchingRegex.test(event.name)) {
790
+ _extend(event, {
791
+ version: _flashState.version
792
+ });
793
+ }
794
+ }
795
+ if (event.type === "copy") {
796
+ event.clipboardData = {
797
+ setData: ZeroClipboard.setData,
798
+ clearData: ZeroClipboard.clearData
799
+ };
800
+ }
801
+ if (event.type === "aftercopy") {
802
+ event = _mapClipResultsFromFlash(event, _clipDataFormatMap);
803
+ }
804
+ if (event.target && !event.relatedTarget) {
805
+ event.relatedTarget = _getRelatedTarget(event.target);
806
+ }
807
+ return _addMouseData(event);
808
+ };
809
+ /**
810
+ * Get a relatedTarget from the target's `data-clipboard-target` attribute
811
+ * @private
812
+ */
813
+ var _getRelatedTarget = function(targetEl) {
814
+ var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute("data-clipboard-target");
815
+ return relatedTargetId ? _document.getElementById(relatedTargetId) : null;
816
+ };
817
+ /**
818
+ * Add element and position data to `MouseEvent` instances
819
+ * @private
820
+ */
821
+ var _addMouseData = function(event) {
822
+ if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {
823
+ var srcElement = event.target;
824
+ var fromElement = event.type === "_mouseover" && event.relatedTarget ? event.relatedTarget : undefined;
825
+ var toElement = event.type === "_mouseout" && event.relatedTarget ? event.relatedTarget : undefined;
826
+ var pos = _getElementPosition(srcElement);
827
+ var screenLeft = _window.screenLeft || _window.screenX || 0;
828
+ var screenTop = _window.screenTop || _window.screenY || 0;
829
+ var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft;
830
+ var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop;
831
+ var pageX = pos.left + (typeof event._stageX === "number" ? event._stageX : 0);
832
+ var pageY = pos.top + (typeof event._stageY === "number" ? event._stageY : 0);
833
+ var clientX = pageX - scrollLeft;
834
+ var clientY = pageY - scrollTop;
835
+ var screenX = screenLeft + clientX;
836
+ var screenY = screenTop + clientY;
837
+ var moveX = typeof event.movementX === "number" ? event.movementX : 0;
838
+ var moveY = typeof event.movementY === "number" ? event.movementY : 0;
839
+ delete event._stageX;
840
+ delete event._stageY;
841
+ _extend(event, {
842
+ srcElement: srcElement,
843
+ fromElement: fromElement,
844
+ toElement: toElement,
845
+ screenX: screenX,
846
+ screenY: screenY,
847
+ pageX: pageX,
848
+ pageY: pageY,
849
+ clientX: clientX,
850
+ clientY: clientY,
851
+ x: clientX,
852
+ y: clientY,
853
+ movementX: moveX,
854
+ movementY: moveY,
855
+ offsetX: 0,
856
+ offsetY: 0,
857
+ layerX: 0,
858
+ layerY: 0
859
+ });
860
+ }
861
+ return event;
862
+ };
863
+ /**
864
+ * Determine if an event's registered handlers should be execute synchronously or asynchronously.
865
+ *
866
+ * @returns {boolean}
867
+ * @private
868
+ */
869
+ var _shouldPerformAsync = function(event) {
870
+ var eventType = event && typeof event.type === "string" && event.type || "";
871
+ return !/^(?:(?:before)?copy|destroy)$/.test(eventType);
872
+ };
873
+ /**
874
+ * Control if a callback should be executed asynchronously or not.
875
+ *
876
+ * @returns `undefined`
877
+ * @private
878
+ */
879
+ var _dispatchCallback = function(func, context, args, async) {
880
+ if (async) {
881
+ _setTimeout(function() {
882
+ func.apply(context, args);
883
+ }, 0);
884
+ } else {
885
+ func.apply(context, args);
886
+ }
887
+ };
888
+ /**
889
+ * Handle the actual dispatching of events to client instances.
890
+ *
891
+ * @returns `undefined`
892
+ * @private
893
+ */
894
+ var _dispatchCallbacks = function(event) {
895
+ if (!(typeof event === "object" && event && event.type)) {
896
+ return;
897
+ }
898
+ var async = _shouldPerformAsync(event);
899
+ var wildcardTypeHandlers = _handlers["*"] || [];
900
+ var specificTypeHandlers = _handlers[event.type] || [];
901
+ var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);
902
+ if (handlers && handlers.length) {
903
+ var i, len, func, context, eventCopy, originalContext = this;
904
+ for (i = 0, len = handlers.length; i < len; i++) {
905
+ func = handlers[i];
906
+ context = originalContext;
907
+ if (typeof func === "string" && typeof _window[func] === "function") {
908
+ func = _window[func];
909
+ }
910
+ if (typeof func === "object" && func && typeof func.handleEvent === "function") {
911
+ context = func;
912
+ func = func.handleEvent;
913
+ }
914
+ if (typeof func === "function") {
915
+ eventCopy = _extend({}, event);
916
+ _dispatchCallback(func, context, [ eventCopy ], async);
917
+ }
918
+ }
919
+ }
920
+ return this;
921
+ };
922
+ /**
923
+ * Check an `error` event's `name` property to see if Flash has
924
+ * already loaded, which rules out possible `iframe` sandboxing.
925
+ * @private
926
+ */
927
+ var _getSandboxStatusFromErrorEvent = function(event) {
928
+ var isSandboxed = null;
929
+ if (_pageIsFramed === false || event && event.type === "error" && event.name && _errorsThatOnlyOccurAfterFlashLoads.indexOf(event.name) !== -1) {
930
+ isSandboxed = false;
931
+ }
932
+ return isSandboxed;
933
+ };
934
+ /**
935
+ * Preprocess any special behaviors, reactions, or state changes after receiving this event.
936
+ * Executes only once per event emitted, NOT once per client.
937
+ * @private
938
+ */
939
+ var _preprocessEvent = function(event) {
940
+ var element = event.target || _currentElement || null;
941
+ var sourceIsSwf = event._source === "swf";
942
+ delete event._source;
943
+ switch (event.type) {
944
+ case "error":
945
+ var isSandboxed = event.name === "flash-sandboxed" || _getSandboxStatusFromErrorEvent(event);
946
+ if (typeof isSandboxed === "boolean") {
947
+ _flashState.sandboxed = isSandboxed;
948
+ }
949
+ if (_flashStateErrorNames.indexOf(event.name) !== -1) {
950
+ _extend(_flashState, {
951
+ disabled: event.name === "flash-disabled",
952
+ outdated: event.name === "flash-outdated",
953
+ unavailable: event.name === "flash-unavailable",
954
+ degraded: event.name === "flash-degraded",
955
+ deactivated: event.name === "flash-deactivated",
956
+ overdue: event.name === "flash-overdue",
957
+ ready: false
958
+ });
959
+ } else if (event.name === "version-mismatch") {
960
+ _zcSwfVersion = event.swfVersion;
961
+ _extend(_flashState, {
962
+ disabled: false,
963
+ outdated: false,
964
+ unavailable: false,
965
+ degraded: false,
966
+ deactivated: false,
967
+ overdue: false,
968
+ ready: false
969
+ });
970
+ }
971
+ _clearTimeoutsAndPolling();
972
+ break;
973
+
974
+ case "ready":
975
+ _zcSwfVersion = event.swfVersion;
976
+ var wasDeactivated = _flashState.deactivated === true;
977
+ _extend(_flashState, {
978
+ disabled: false,
979
+ outdated: false,
980
+ sandboxed: false,
981
+ unavailable: false,
982
+ degraded: false,
983
+ deactivated: false,
984
+ overdue: wasDeactivated,
985
+ ready: !wasDeactivated
986
+ });
987
+ _clearTimeoutsAndPolling();
988
+ break;
989
+
990
+ case "beforecopy":
991
+ _copyTarget = element;
992
+ break;
993
+
994
+ case "copy":
995
+ var textContent, htmlContent, targetEl = event.relatedTarget;
996
+ if (!(_clipData["text/html"] || _clipData["text/plain"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {
997
+ event.clipboardData.clearData();
998
+ event.clipboardData.setData("text/plain", textContent);
999
+ if (htmlContent !== textContent) {
1000
+ event.clipboardData.setData("text/html", htmlContent);
1001
+ }
1002
+ } else if (!_clipData["text/plain"] && event.target && (textContent = event.target.getAttribute("data-clipboard-text"))) {
1003
+ event.clipboardData.clearData();
1004
+ event.clipboardData.setData("text/plain", textContent);
1005
+ }
1006
+ break;
1007
+
1008
+ case "aftercopy":
1009
+ _queueEmitClipboardErrors(event);
1010
+ ZeroClipboard.clearData();
1011
+ if (element && element !== _safeActiveElement() && element.focus) {
1012
+ element.focus();
1013
+ }
1014
+ break;
1015
+
1016
+ case "_mouseover":
1017
+ ZeroClipboard.focus(element);
1018
+ if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
1019
+ if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {
1020
+ _fireMouseEvent(_extend({}, event, {
1021
+ type: "mouseenter",
1022
+ bubbles: false,
1023
+ cancelable: false
1024
+ }));
1025
+ }
1026
+ _fireMouseEvent(_extend({}, event, {
1027
+ type: "mouseover"
1028
+ }));
1029
+ }
1030
+ break;
1031
+
1032
+ case "_mouseout":
1033
+ ZeroClipboard.blur();
1034
+ if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
1035
+ if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {
1036
+ _fireMouseEvent(_extend({}, event, {
1037
+ type: "mouseleave",
1038
+ bubbles: false,
1039
+ cancelable: false
1040
+ }));
1041
+ }
1042
+ _fireMouseEvent(_extend({}, event, {
1043
+ type: "mouseout"
1044
+ }));
1045
+ }
1046
+ break;
1047
+
1048
+ case "_mousedown":
1049
+ _addClass(element, _globalConfig.activeClass);
1050
+ if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
1051
+ _fireMouseEvent(_extend({}, event, {
1052
+ type: event.type.slice(1)
1053
+ }));
1054
+ }
1055
+ break;
1056
+
1057
+ case "_mouseup":
1058
+ _removeClass(element, _globalConfig.activeClass);
1059
+ if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
1060
+ _fireMouseEvent(_extend({}, event, {
1061
+ type: event.type.slice(1)
1062
+ }));
1063
+ }
1064
+ break;
1065
+
1066
+ case "_click":
1067
+ _copyTarget = null;
1068
+ if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
1069
+ _fireMouseEvent(_extend({}, event, {
1070
+ type: event.type.slice(1)
1071
+ }));
1072
+ }
1073
+ break;
1074
+
1075
+ case "_mousemove":
1076
+ if (_globalConfig.bubbleEvents === true && sourceIsSwf) {
1077
+ _fireMouseEvent(_extend({}, event, {
1078
+ type: event.type.slice(1)
1079
+ }));
1080
+ }
1081
+ break;
1082
+ }
1083
+ if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {
1084
+ return true;
1085
+ }
1086
+ };
1087
+ /**
1088
+ * Check an "aftercopy" event for clipboard errors and emit a corresponding "error" event.
1089
+ * @private
1090
+ */
1091
+ var _queueEmitClipboardErrors = function(aftercopyEvent) {
1092
+ if (aftercopyEvent.errors && aftercopyEvent.errors.length > 0) {
1093
+ var errorEvent = _deepCopy(aftercopyEvent);
1094
+ _extend(errorEvent, {
1095
+ type: "error",
1096
+ name: "clipboard-error"
1097
+ });
1098
+ delete errorEvent.success;
1099
+ _setTimeout(function() {
1100
+ ZeroClipboard.emit(errorEvent);
1101
+ }, 0);
1102
+ }
1103
+ };
1104
+ /**
1105
+ * Dispatch a synthetic MouseEvent.
1106
+ *
1107
+ * @returns `undefined`
1108
+ * @private
1109
+ */
1110
+ var _fireMouseEvent = function(event) {
1111
+ if (!(event && typeof event.type === "string" && event)) {
1112
+ return;
1113
+ }
1114
+ var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = {
1115
+ view: doc.defaultView || _window,
1116
+ canBubble: true,
1117
+ cancelable: true,
1118
+ detail: event.type === "click" ? 1 : 0,
1119
+ button: typeof event.which === "number" ? event.which - 1 : typeof event.button === "number" ? event.button : doc.createEvent ? 0 : 1
1120
+ }, args = _extend(defaults, event);
1121
+ if (!target) {
1122
+ return;
1123
+ }
1124
+ if (doc.createEvent && target.dispatchEvent) {
1125
+ args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ];
1126
+ e = doc.createEvent("MouseEvents");
1127
+ if (e.initMouseEvent) {
1128
+ e.initMouseEvent.apply(e, args);
1129
+ e._source = "js";
1130
+ target.dispatchEvent(e);
1131
+ }
1132
+ }
1133
+ };
1134
+ /**
1135
+ * Continuously poll the DOM until either:
1136
+ * (a) the fallback content becomes visible, or
1137
+ * (b) we receive an event from SWF (handled elsewhere)
1138
+ *
1139
+ * IMPORTANT:
1140
+ * This is NOT a necessary check but it can result in significantly faster
1141
+ * detection of bad `swfPath` configuration and/or network/server issues [in
1142
+ * supported browsers] than waiting for the entire `flashLoadTimeout` duration
1143
+ * to elapse before detecting that the SWF cannot be loaded. The detection
1144
+ * duration can be anywhere from 10-30 times faster [in supported browsers] by
1145
+ * using this approach.
1146
+ *
1147
+ * @returns `undefined`
1148
+ * @private
1149
+ */
1150
+ var _watchForSwfFallbackContent = function() {
1151
+ var maxWait = _globalConfig.flashLoadTimeout;
1152
+ if (typeof maxWait === "number" && maxWait >= 0) {
1153
+ var pollWait = Math.min(1e3, maxWait / 10);
1154
+ var fallbackContentId = _globalConfig.swfObjectId + "_fallbackContent";
1155
+ _swfFallbackCheckInterval = _setInterval(function() {
1156
+ var el = _document.getElementById(fallbackContentId);
1157
+ if (_isElementVisible(el)) {
1158
+ _clearTimeoutsAndPolling();
1159
+ _flashState.deactivated = null;
1160
+ ZeroClipboard.emit({
1161
+ type: "error",
1162
+ name: "swf-not-found"
1163
+ });
1164
+ }
1165
+ }, pollWait);
1166
+ }
1167
+ };
1168
+ /**
1169
+ * Create the HTML bridge element to embed the Flash object into.
1170
+ * @private
1171
+ */
1172
+ var _createHtmlBridge = function() {
1173
+ var container = _document.createElement("div");
1174
+ container.id = _globalConfig.containerId;
1175
+ container.className = _globalConfig.containerClass;
1176
+ container.style.position = "absolute";
1177
+ container.style.left = "0px";
1178
+ container.style.top = "-9999px";
1179
+ container.style.width = "1px";
1180
+ container.style.height = "1px";
1181
+ container.style.zIndex = "" + _getSafeZIndex(_globalConfig.zIndex);
1182
+ return container;
1183
+ };
1184
+ /**
1185
+ * Get the HTML element container that wraps the Flash bridge object/element.
1186
+ * @private
1187
+ */
1188
+ var _getHtmlBridge = function(flashBridge) {
1189
+ var htmlBridge = flashBridge && flashBridge.parentNode;
1190
+ while (htmlBridge && htmlBridge.nodeName === "OBJECT" && htmlBridge.parentNode) {
1191
+ htmlBridge = htmlBridge.parentNode;
1192
+ }
1193
+ return htmlBridge || null;
1194
+ };
1195
+ /**
1196
+ * Create the SWF object.
1197
+ *
1198
+ * @returns The SWF object reference.
1199
+ * @private
1200
+ */
1201
+ var _embedSwf = function() {
1202
+ var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge);
1203
+ if (!flashBridge) {
1204
+ var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig);
1205
+ var allowNetworking = allowScriptAccess === "never" ? "none" : "all";
1206
+ var flashvars = _vars(_extend({
1207
+ jsVersion: ZeroClipboard.version
1208
+ }, _globalConfig));
1209
+ var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);
1210
+ container = _createHtmlBridge();
1211
+ var divToBeReplaced = _document.createElement("div");
1212
+ container.appendChild(divToBeReplaced);
1213
+ _document.body.appendChild(container);
1214
+ var tmpDiv = _document.createElement("div");
1215
+ var usingActiveX = _flashState.pluginType === "activex";
1216
+ tmpDiv.innerHTML = '<object id="' + _globalConfig.swfObjectId + '" name="' + _globalConfig.swfObjectId + '" ' + 'width="100%" height="100%" ' + (usingActiveX ? 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"' : 'type="application/x-shockwave-flash" data="' + swfUrl + '"') + ">" + (usingActiveX ? '<param name="movie" value="' + swfUrl + '"/>' : "") + '<param name="allowScriptAccess" value="' + allowScriptAccess + '"/>' + '<param name="allowNetworking" value="' + allowNetworking + '"/>' + '<param name="menu" value="false"/>' + '<param name="wmode" value="transparent"/>' + '<param name="flashvars" value="' + flashvars + '"/>' + '<div id="' + _globalConfig.swfObjectId + '_fallbackContent">&nbsp;</div>' + "</object>";
1217
+ flashBridge = tmpDiv.firstChild;
1218
+ tmpDiv = null;
1219
+ _unwrap(flashBridge).ZeroClipboard = ZeroClipboard;
1220
+ container.replaceChild(flashBridge, divToBeReplaced);
1221
+ _watchForSwfFallbackContent();
1222
+ }
1223
+ if (!flashBridge) {
1224
+ flashBridge = _document[_globalConfig.swfObjectId];
1225
+ if (flashBridge && (len = flashBridge.length)) {
1226
+ flashBridge = flashBridge[len - 1];
1227
+ }
1228
+ if (!flashBridge && container) {
1229
+ flashBridge = container.firstChild;
1230
+ }
1231
+ }
1232
+ _flashState.bridge = flashBridge || null;
1233
+ return flashBridge;
1234
+ };
1235
+ /**
1236
+ * Destroy the SWF object.
1237
+ * @private
1238
+ */
1239
+ var _unembedSwf = function() {
1240
+ var flashBridge = _flashState.bridge;
1241
+ if (flashBridge) {
1242
+ var htmlBridge = _getHtmlBridge(flashBridge);
1243
+ if (htmlBridge) {
1244
+ if (_flashState.pluginType === "activex" && "readyState" in flashBridge) {
1245
+ flashBridge.style.display = "none";
1246
+ (function removeSwfFromIE() {
1247
+ if (flashBridge.readyState === 4) {
1248
+ for (var prop in flashBridge) {
1249
+ if (typeof flashBridge[prop] === "function") {
1250
+ flashBridge[prop] = null;
1251
+ }
1252
+ }
1253
+ if (flashBridge.parentNode) {
1254
+ flashBridge.parentNode.removeChild(flashBridge);
1255
+ }
1256
+ if (htmlBridge.parentNode) {
1257
+ htmlBridge.parentNode.removeChild(htmlBridge);
1258
+ }
1259
+ } else {
1260
+ _setTimeout(removeSwfFromIE, 10);
1261
+ }
1262
+ })();
1263
+ } else {
1264
+ if (flashBridge.parentNode) {
1265
+ flashBridge.parentNode.removeChild(flashBridge);
1266
+ }
1267
+ if (htmlBridge.parentNode) {
1268
+ htmlBridge.parentNode.removeChild(htmlBridge);
1269
+ }
1270
+ }
1271
+ }
1272
+ _clearTimeoutsAndPolling();
1273
+ _flashState.ready = null;
1274
+ _flashState.bridge = null;
1275
+ _flashState.deactivated = null;
1276
+ _zcSwfVersion = undefined;
1277
+ }
1278
+ };
1279
+ /**
1280
+ * Map the data format names of the "clipData" to Flash-friendly names.
1281
+ *
1282
+ * @returns A new transformed object.
1283
+ * @private
1284
+ */
1285
+ var _mapClipDataToFlash = function(clipData) {
1286
+ var newClipData = {}, formatMap = {};
1287
+ if (!(typeof clipData === "object" && clipData)) {
1288
+ return;
1289
+ }
1290
+ for (var dataFormat in clipData) {
1291
+ if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === "string" && clipData[dataFormat]) {
1292
+ switch (dataFormat.toLowerCase()) {
1293
+ case "text/plain":
1294
+ case "text":
1295
+ case "air:text":
1296
+ case "flash:text":
1297
+ newClipData.text = clipData[dataFormat];
1298
+ formatMap.text = dataFormat;
1299
+ break;
1300
+
1301
+ case "text/html":
1302
+ case "html":
1303
+ case "air:html":
1304
+ case "flash:html":
1305
+ newClipData.html = clipData[dataFormat];
1306
+ formatMap.html = dataFormat;
1307
+ break;
1308
+
1309
+ case "application/rtf":
1310
+ case "text/rtf":
1311
+ case "rtf":
1312
+ case "richtext":
1313
+ case "air:rtf":
1314
+ case "flash:rtf":
1315
+ newClipData.rtf = clipData[dataFormat];
1316
+ formatMap.rtf = dataFormat;
1317
+ break;
1318
+
1319
+ default:
1320
+ break;
1321
+ }
1322
+ }
1323
+ }
1324
+ return {
1325
+ data: newClipData,
1326
+ formatMap: formatMap
1327
+ };
1328
+ };
1329
+ /**
1330
+ * Map the data format names from Flash-friendly names back to their original "clipData" names (via a format mapping).
1331
+ *
1332
+ * @returns A new transformed object.
1333
+ * @private
1334
+ */
1335
+ var _mapClipResultsFromFlash = function(clipResults, formatMap) {
1336
+ if (!(typeof clipResults === "object" && clipResults && typeof formatMap === "object" && formatMap)) {
1337
+ return clipResults;
1338
+ }
1339
+ var newResults = {};
1340
+ for (var prop in clipResults) {
1341
+ if (_hasOwn.call(clipResults, prop)) {
1342
+ if (prop === "errors") {
1343
+ newResults[prop] = clipResults[prop] ? clipResults[prop].slice() : [];
1344
+ for (var i = 0, len = newResults[prop].length; i < len; i++) {
1345
+ newResults[prop][i].format = formatMap[newResults[prop][i].format];
1346
+ }
1347
+ } else if (prop !== "success" && prop !== "data") {
1348
+ newResults[prop] = clipResults[prop];
1349
+ } else {
1350
+ newResults[prop] = {};
1351
+ var tmpHash = clipResults[prop];
1352
+ for (var dataFormat in tmpHash) {
1353
+ if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) {
1354
+ newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];
1355
+ }
1356
+ }
1357
+ }
1358
+ }
1359
+ }
1360
+ return newResults;
1361
+ };
1362
+ /**
1363
+ * Will look at a path, and will create a "?noCache={time}" or "&noCache={time}"
1364
+ * query param string to return. Does NOT append that string to the original path.
1365
+ * This is useful because ExternalInterface often breaks when a Flash SWF is cached.
1366
+ *
1367
+ * @returns The `noCache` query param with necessary "?"/"&" prefix.
1368
+ * @private
1369
+ */
1370
+ var _cacheBust = function(path, options) {
1371
+ var cacheBust = options == null || options && options.cacheBust === true;
1372
+ if (cacheBust) {
1373
+ return (path.indexOf("?") === -1 ? "?" : "&") + "noCache=" + _now();
1374
+ } else {
1375
+ return "";
1376
+ }
1377
+ };
1378
+ /**
1379
+ * Creates a query string for the FlashVars param.
1380
+ * Does NOT include the cache-busting query param.
1381
+ *
1382
+ * @returns FlashVars query string
1383
+ * @private
1384
+ */
1385
+ var _vars = function(options) {
1386
+ var i, len, domain, domains, str = "", trustedOriginsExpanded = [];
1387
+ if (options.trustedDomains) {
1388
+ if (typeof options.trustedDomains === "string") {
1389
+ domains = [ options.trustedDomains ];
1390
+ } else if (typeof options.trustedDomains === "object" && "length" in options.trustedDomains) {
1391
+ domains = options.trustedDomains;
1392
+ }
1393
+ }
1394
+ if (domains && domains.length) {
1395
+ for (i = 0, len = domains.length; i < len; i++) {
1396
+ if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === "string") {
1397
+ domain = _extractDomain(domains[i]);
1398
+ if (!domain) {
1399
+ continue;
1400
+ }
1401
+ if (domain === "*") {
1402
+ trustedOriginsExpanded.length = 0;
1403
+ trustedOriginsExpanded.push(domain);
1404
+ break;
1405
+ }
1406
+ trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, "//" + domain, _window.location.protocol + "//" + domain ]);
1407
+ }
1408
+ }
1409
+ }
1410
+ if (trustedOriginsExpanded.length) {
1411
+ str += "trustedOrigins=" + _encodeURIComponent(trustedOriginsExpanded.join(","));
1412
+ }
1413
+ if (options.forceEnhancedClipboard === true) {
1414
+ str += (str ? "&" : "") + "forceEnhancedClipboard=true";
1415
+ }
1416
+ if (typeof options.swfObjectId === "string" && options.swfObjectId) {
1417
+ str += (str ? "&" : "") + "swfObjectId=" + _encodeURIComponent(options.swfObjectId);
1418
+ }
1419
+ if (typeof options.jsVersion === "string" && options.jsVersion) {
1420
+ str += (str ? "&" : "") + "jsVersion=" + _encodeURIComponent(options.jsVersion);
1421
+ }
1422
+ return str;
1423
+ };
1424
+ /**
1425
+ * Extract the domain (e.g. "github.com") from an origin (e.g. "https://github.com") or
1426
+ * URL (e.g. "https://github.com/zeroclipboard/zeroclipboard/").
1427
+ *
1428
+ * @returns the domain
1429
+ * @private
1430
+ */
1431
+ var _extractDomain = function(originOrUrl) {
1432
+ if (originOrUrl == null || originOrUrl === "") {
1433
+ return null;
1434
+ }
1435
+ originOrUrl = originOrUrl.replace(/^\s+|\s+$/g, "");
1436
+ if (originOrUrl === "") {
1437
+ return null;
1438
+ }
1439
+ var protocolIndex = originOrUrl.indexOf("//");
1440
+ originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);
1441
+ var pathIndex = originOrUrl.indexOf("/");
1442
+ originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);
1443
+ if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === ".swf") {
1444
+ return null;
1445
+ }
1446
+ return originOrUrl || null;
1447
+ };
1448
+ /**
1449
+ * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`.
1450
+ *
1451
+ * @returns The appropriate script access level.
1452
+ * @private
1453
+ */
1454
+ var _determineScriptAccess = function() {
1455
+ var _extractAllDomains = function(origins) {
1456
+ var i, len, tmp, resultsArray = [];
1457
+ if (typeof origins === "string") {
1458
+ origins = [ origins ];
1459
+ }
1460
+ if (!(typeof origins === "object" && origins && typeof origins.length === "number")) {
1461
+ return resultsArray;
1462
+ }
1463
+ for (i = 0, len = origins.length; i < len; i++) {
1464
+ if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) {
1465
+ if (tmp === "*") {
1466
+ resultsArray.length = 0;
1467
+ resultsArray.push("*");
1468
+ break;
1469
+ }
1470
+ if (resultsArray.indexOf(tmp) === -1) {
1471
+ resultsArray.push(tmp);
1472
+ }
1473
+ }
1474
+ }
1475
+ return resultsArray;
1476
+ };
1477
+ return function(currentDomain, configOptions) {
1478
+ var swfDomain = _extractDomain(configOptions.swfPath);
1479
+ if (swfDomain === null) {
1480
+ swfDomain = currentDomain;
1481
+ }
1482
+ var trustedDomains = _extractAllDomains(configOptions.trustedDomains);
1483
+ var len = trustedDomains.length;
1484
+ if (len > 0) {
1485
+ if (len === 1 && trustedDomains[0] === "*") {
1486
+ return "always";
1487
+ }
1488
+ if (trustedDomains.indexOf(currentDomain) !== -1) {
1489
+ if (len === 1 && currentDomain === swfDomain) {
1490
+ return "sameDomain";
1491
+ }
1492
+ return "always";
1493
+ }
1494
+ }
1495
+ return "never";
1496
+ };
1497
+ }();
1498
+ /**
1499
+ * Get the currently active/focused DOM element.
1500
+ *
1501
+ * @returns the currently active/focused element, or `null`
1502
+ * @private
1503
+ */
1504
+ var _safeActiveElement = function() {
1505
+ try {
1506
+ return _document.activeElement;
1507
+ } catch (err) {
1508
+ return null;
1509
+ }
1510
+ };
1511
+ /**
1512
+ * Add a class to an element, if it doesn't already have it.
1513
+ *
1514
+ * @returns The element, with its new class added.
1515
+ * @private
1516
+ */
1517
+ var _addClass = function(element, value) {
1518
+ var c, cl, className, classNames = [];
1519
+ if (typeof value === "string" && value) {
1520
+ classNames = value.split(/\s+/);
1521
+ }
1522
+ if (element && element.nodeType === 1 && classNames.length > 0) {
1523
+ if (element.classList) {
1524
+ for (c = 0, cl = classNames.length; c < cl; c++) {
1525
+ element.classList.add(classNames[c]);
1526
+ }
1527
+ } else if (element.hasOwnProperty("className")) {
1528
+ className = " " + element.className + " ";
1529
+ for (c = 0, cl = classNames.length; c < cl; c++) {
1530
+ if (className.indexOf(" " + classNames[c] + " ") === -1) {
1531
+ className += classNames[c] + " ";
1532
+ }
1533
+ }
1534
+ element.className = className.replace(/^\s+|\s+$/g, "");
1535
+ }
1536
+ }
1537
+ return element;
1538
+ };
1539
+ /**
1540
+ * Remove a class from an element, if it has it.
1541
+ *
1542
+ * @returns The element, with its class removed.
1543
+ * @private
1544
+ */
1545
+ var _removeClass = function(element, value) {
1546
+ var c, cl, className, classNames = [];
1547
+ if (typeof value === "string" && value) {
1548
+ classNames = value.split(/\s+/);
1549
+ }
1550
+ if (element && element.nodeType === 1 && classNames.length > 0) {
1551
+ if (element.classList && element.classList.length > 0) {
1552
+ for (c = 0, cl = classNames.length; c < cl; c++) {
1553
+ element.classList.remove(classNames[c]);
1554
+ }
1555
+ } else if (element.className) {
1556
+ className = (" " + element.className + " ").replace(/[\r\n\t]/g, " ");
1557
+ for (c = 0, cl = classNames.length; c < cl; c++) {
1558
+ className = className.replace(" " + classNames[c] + " ", " ");
1559
+ }
1560
+ element.className = className.replace(/^\s+|\s+$/g, "");
1561
+ }
1562
+ }
1563
+ return element;
1564
+ };
1565
+ /**
1566
+ * Attempt to interpret the element's CSS styling. If `prop` is `"cursor"`,
1567
+ * then we assume that it should be a hand ("pointer") cursor if the element
1568
+ * is an anchor element ("a" tag).
1569
+ *
1570
+ * @returns The computed style property.
1571
+ * @private
1572
+ */
1573
+ var _getStyle = function(el, prop) {
1574
+ var value = _getComputedStyle(el, null).getPropertyValue(prop);
1575
+ if (prop === "cursor") {
1576
+ if (!value || value === "auto") {
1577
+ if (el.nodeName === "A") {
1578
+ return "pointer";
1579
+ }
1580
+ }
1581
+ }
1582
+ return value;
1583
+ };
1584
+ /**
1585
+ * Get the absolutely positioned coordinates of a DOM element.
1586
+ *
1587
+ * @returns Object containing the element's position, width, and height.
1588
+ * @private
1589
+ */
1590
+ var _getElementPosition = function(el) {
1591
+ var pos = {
1592
+ left: 0,
1593
+ top: 0,
1594
+ width: 0,
1595
+ height: 0
1596
+ };
1597
+ if (el.getBoundingClientRect) {
1598
+ var elRect = el.getBoundingClientRect();
1599
+ var pageXOffset = _window.pageXOffset;
1600
+ var pageYOffset = _window.pageYOffset;
1601
+ var leftBorderWidth = _document.documentElement.clientLeft || 0;
1602
+ var topBorderWidth = _document.documentElement.clientTop || 0;
1603
+ var leftBodyOffset = 0;
1604
+ var topBodyOffset = 0;
1605
+ if (_getStyle(_document.body, "position") === "relative") {
1606
+ var bodyRect = _document.body.getBoundingClientRect();
1607
+ var htmlRect = _document.documentElement.getBoundingClientRect();
1608
+ leftBodyOffset = bodyRect.left - htmlRect.left || 0;
1609
+ topBodyOffset = bodyRect.top - htmlRect.top || 0;
1610
+ }
1611
+ pos.left = elRect.left + pageXOffset - leftBorderWidth - leftBodyOffset;
1612
+ pos.top = elRect.top + pageYOffset - topBorderWidth - topBodyOffset;
1613
+ pos.width = "width" in elRect ? elRect.width : elRect.right - elRect.left;
1614
+ pos.height = "height" in elRect ? elRect.height : elRect.bottom - elRect.top;
1615
+ }
1616
+ return pos;
1617
+ };
1618
+ /**
1619
+ * Determine is an element is visible somewhere within the document (page).
1620
+ *
1621
+ * @returns Boolean
1622
+ * @private
1623
+ */
1624
+ var _isElementVisible = function(el) {
1625
+ if (!el) {
1626
+ return false;
1627
+ }
1628
+ var styles = _getComputedStyle(el, null);
1629
+ var hasCssHeight = _parseFloat(styles.height) > 0;
1630
+ var hasCssWidth = _parseFloat(styles.width) > 0;
1631
+ var hasCssTop = _parseFloat(styles.top) >= 0;
1632
+ var hasCssLeft = _parseFloat(styles.left) >= 0;
1633
+ var cssKnows = hasCssHeight && hasCssWidth && hasCssTop && hasCssLeft;
1634
+ var rect = cssKnows ? null : _getElementPosition(el);
1635
+ var isVisible = styles.display !== "none" && styles.visibility !== "collapse" && (cssKnows || !!rect && (hasCssHeight || rect.height > 0) && (hasCssWidth || rect.width > 0) && (hasCssTop || rect.top >= 0) && (hasCssLeft || rect.left >= 0));
1636
+ return isVisible;
1637
+ };
1638
+ /**
1639
+ * Clear all existing timeouts and interval polling delegates.
1640
+ *
1641
+ * @returns `undefined`
1642
+ * @private
1643
+ */
1644
+ var _clearTimeoutsAndPolling = function() {
1645
+ _clearTimeout(_flashCheckTimeout);
1646
+ _flashCheckTimeout = 0;
1647
+ _clearInterval(_swfFallbackCheckInterval);
1648
+ _swfFallbackCheckInterval = 0;
1649
+ };
1650
+ /**
1651
+ * Reposition the Flash object to cover the currently activated element.
1652
+ *
1653
+ * @returns `undefined`
1654
+ * @private
1655
+ */
1656
+ var _reposition = function() {
1657
+ var htmlBridge;
1658
+ if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) {
1659
+ var pos = _getElementPosition(_currentElement);
1660
+ _extend(htmlBridge.style, {
1661
+ width: pos.width + "px",
1662
+ height: pos.height + "px",
1663
+ top: pos.top + "px",
1664
+ left: pos.left + "px",
1665
+ zIndex: "" + _getSafeZIndex(_globalConfig.zIndex)
1666
+ });
1667
+ }
1668
+ };
1669
+ /**
1670
+ * Sends a signal to the Flash object to display the hand cursor if `true`.
1671
+ *
1672
+ * @returns `undefined`
1673
+ * @private
1674
+ */
1675
+ var _setHandCursor = function(enabled) {
1676
+ if (_flashState.ready === true) {
1677
+ if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === "function") {
1678
+ _flashState.bridge.setHandCursor(enabled);
1679
+ } else {
1680
+ _flashState.ready = false;
1681
+ }
1682
+ }
1683
+ };
1684
+ /**
1685
+ * Get a safe value for `zIndex`
1686
+ *
1687
+ * @returns an integer, or "auto"
1688
+ * @private
1689
+ */
1690
+ var _getSafeZIndex = function(val) {
1691
+ if (/^(?:auto|inherit)$/.test(val)) {
1692
+ return val;
1693
+ }
1694
+ var zIndex;
1695
+ if (typeof val === "number" && !_isNaN(val)) {
1696
+ zIndex = val;
1697
+ } else if (typeof val === "string") {
1698
+ zIndex = _getSafeZIndex(_parseInt(val, 10));
1699
+ }
1700
+ return typeof zIndex === "number" ? zIndex : "auto";
1701
+ };
1702
+ /**
1703
+ * Attempt to detect if ZeroClipboard is executing inside of a sandboxed iframe.
1704
+ * If it is, Flash Player cannot be used, so ZeroClipboard is dead in the water.
1705
+ *
1706
+ * @see {@link http://lists.w3.org/Archives/Public/public-whatwg-archive/2014Dec/0002.html}
1707
+ * @see {@link https://github.com/zeroclipboard/zeroclipboard/issues/511}
1708
+ * @see {@link http://zeroclipboard.org/test-iframes.html}
1709
+ *
1710
+ * @returns `true` (is sandboxed), `false` (is not sandboxed), or `null` (uncertain)
1711
+ * @private
1712
+ */
1713
+ var _detectSandbox = function(doNotReassessFlashSupport) {
1714
+ var effectiveScriptOrigin, frame, frameError, previousState = _flashState.sandboxed, isSandboxed = null;
1715
+ doNotReassessFlashSupport = doNotReassessFlashSupport === true;
1716
+ if (_pageIsFramed === false) {
1717
+ isSandboxed = false;
1718
+ } else {
1719
+ try {
1720
+ frame = window.frameElement || null;
1721
+ } catch (e) {
1722
+ frameError = {
1723
+ name: e.name,
1724
+ message: e.message
1725
+ };
1726
+ }
1727
+ if (frame && frame.nodeType === 1 && frame.nodeName === "IFRAME") {
1728
+ try {
1729
+ isSandboxed = frame.hasAttribute("sandbox");
1730
+ } catch (e) {
1731
+ isSandboxed = null;
1732
+ }
1733
+ } else {
1734
+ try {
1735
+ effectiveScriptOrigin = document.domain || null;
1736
+ } catch (e) {
1737
+ effectiveScriptOrigin = null;
1738
+ }
1739
+ if (effectiveScriptOrigin === null || frameError && frameError.name === "SecurityError" && /(^|[\s\(\[@])sandbox(es|ed|ing|[\s\.,!\)\]@]|$)/.test(frameError.message.toLowerCase())) {
1740
+ isSandboxed = true;
1741
+ }
1742
+ }
1743
+ }
1744
+ _flashState.sandboxed = isSandboxed;
1745
+ if (previousState !== isSandboxed && !doNotReassessFlashSupport) {
1746
+ _detectFlashSupport(_ActiveXObject);
1747
+ }
1748
+ return isSandboxed;
1749
+ };
1750
+ /**
1751
+ * Detect the Flash Player status, version, and plugin type.
1752
+ *
1753
+ * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code}
1754
+ * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}
1755
+ *
1756
+ * @returns `undefined`
1757
+ * @private
1758
+ */
1759
+ var _detectFlashSupport = function(ActiveXObject) {
1760
+ var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = "";
1761
+ /**
1762
+ * Derived from Apple's suggested sniffer.
1763
+ * @param {String} desc e.g. "Shockwave Flash 7.0 r61"
1764
+ * @returns {String} "7.0.61"
1765
+ * @private
1766
+ */
1767
+ function parseFlashVersion(desc) {
1768
+ var matches = desc.match(/[\d]+/g);
1769
+ matches.length = 3;
1770
+ return matches.join(".");
1771
+ }
1772
+ function isPepperFlash(flashPlayerFileName) {
1773
+ return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === "chrome.plugin");
1774
+ }
1775
+ function inspectPlugin(plugin) {
1776
+ if (plugin) {
1777
+ hasFlash = true;
1778
+ if (plugin.version) {
1779
+ flashVersion = parseFlashVersion(plugin.version);
1780
+ }
1781
+ if (!flashVersion && plugin.description) {
1782
+ flashVersion = parseFlashVersion(plugin.description);
1783
+ }
1784
+ if (plugin.filename) {
1785
+ isPPAPI = isPepperFlash(plugin.filename);
1786
+ }
1787
+ }
1788
+ }
1789
+ if (_navigator.plugins && _navigator.plugins.length) {
1790
+ plugin = _navigator.plugins["Shockwave Flash"];
1791
+ inspectPlugin(plugin);
1792
+ if (_navigator.plugins["Shockwave Flash 2.0"]) {
1793
+ hasFlash = true;
1794
+ flashVersion = "2.0.0.11";
1795
+ }
1796
+ } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) {
1797
+ mimeType = _navigator.mimeTypes["application/x-shockwave-flash"];
1798
+ plugin = mimeType && mimeType.enabledPlugin;
1799
+ inspectPlugin(plugin);
1800
+ } else if (typeof ActiveXObject !== "undefined") {
1801
+ isActiveX = true;
1802
+ try {
1803
+ ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
1804
+ hasFlash = true;
1805
+ flashVersion = parseFlashVersion(ax.GetVariable("$version"));
1806
+ } catch (e1) {
1807
+ try {
1808
+ ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
1809
+ hasFlash = true;
1810
+ flashVersion = "6.0.21";
1811
+ } catch (e2) {
1812
+ try {
1813
+ ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
1814
+ hasFlash = true;
1815
+ flashVersion = parseFlashVersion(ax.GetVariable("$version"));
1816
+ } catch (e3) {
1817
+ isActiveX = false;
1818
+ }
1819
+ }
1820
+ }
1821
+ }
1822
+ _flashState.disabled = hasFlash !== true;
1823
+ _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion);
1824
+ _flashState.version = flashVersion || "0.0.0";
1825
+ _flashState.pluginType = isPPAPI ? "pepper" : isActiveX ? "activex" : hasFlash ? "netscape" : "unknown";
1826
+ };
1827
+ /**
1828
+ * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later.
1829
+ */
1830
+ _detectFlashSupport(_ActiveXObject);
1831
+ /**
1832
+ * Always assess the `sandboxed` state of the page at important Flash-related moments.
1833
+ */
1834
+ _detectSandbox(true);
1835
+ /**
1836
+ * A shell constructor for `ZeroClipboard` client instances.
1837
+ *
1838
+ * @constructor
1839
+ */
1840
+ var ZeroClipboard = function() {
1841
+ if (!(this instanceof ZeroClipboard)) {
1842
+ return new ZeroClipboard();
1843
+ }
1844
+ if (typeof ZeroClipboard._createClient === "function") {
1845
+ ZeroClipboard._createClient.apply(this, _args(arguments));
1846
+ }
1847
+ };
1848
+ /**
1849
+ * The ZeroClipboard library's version number.
1850
+ *
1851
+ * @static
1852
+ * @readonly
1853
+ * @property {string}
1854
+ */
1855
+ _defineProperty(ZeroClipboard, "version", {
1856
+ value: "2.2.0",
1857
+ writable: false,
1858
+ configurable: true,
1859
+ enumerable: true
1860
+ });
1861
+ /**
1862
+ * Update or get a copy of the ZeroClipboard global configuration.
1863
+ * Returns a copy of the current/updated configuration.
1864
+ *
1865
+ * @returns Object
1866
+ * @static
1867
+ */
1868
+ ZeroClipboard.config = function() {
1869
+ return _config.apply(this, _args(arguments));
1870
+ };
1871
+ /**
1872
+ * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard.
1873
+ *
1874
+ * @returns Object
1875
+ * @static
1876
+ */
1877
+ ZeroClipboard.state = function() {
1878
+ return _state.apply(this, _args(arguments));
1879
+ };
1880
+ /**
1881
+ * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc.
1882
+ *
1883
+ * @returns Boolean
1884
+ * @static
1885
+ */
1886
+ ZeroClipboard.isFlashUnusable = function() {
1887
+ return _isFlashUnusable.apply(this, _args(arguments));
1888
+ };
1889
+ /**
1890
+ * Register an event listener.
1891
+ *
1892
+ * @returns `ZeroClipboard`
1893
+ * @static
1894
+ */
1895
+ ZeroClipboard.on = function() {
1896
+ return _on.apply(this, _args(arguments));
1897
+ };
1898
+ /**
1899
+ * Unregister an event listener.
1900
+ * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`.
1901
+ * If no `eventType` is provided, it will unregister all listeners for every event type.
1902
+ *
1903
+ * @returns `ZeroClipboard`
1904
+ * @static
1905
+ */
1906
+ ZeroClipboard.off = function() {
1907
+ return _off.apply(this, _args(arguments));
1908
+ };
1909
+ /**
1910
+ * Retrieve event listeners for an `eventType`.
1911
+ * If no `eventType` is provided, it will retrieve all listeners for every event type.
1912
+ *
1913
+ * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`
1914
+ */
1915
+ ZeroClipboard.handlers = function() {
1916
+ return _listeners.apply(this, _args(arguments));
1917
+ };
1918
+ /**
1919
+ * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners.
1920
+ *
1921
+ * @returns For the "copy" event, returns the Flash-friendly "clipData" object; otherwise `undefined`.
1922
+ * @static
1923
+ */
1924
+ ZeroClipboard.emit = function() {
1925
+ return _emit.apply(this, _args(arguments));
1926
+ };
1927
+ /**
1928
+ * Create and embed the Flash object.
1929
+ *
1930
+ * @returns The Flash object
1931
+ * @static
1932
+ */
1933
+ ZeroClipboard.create = function() {
1934
+ return _create.apply(this, _args(arguments));
1935
+ };
1936
+ /**
1937
+ * Self-destruct and clean up everything, including the embedded Flash object.
1938
+ *
1939
+ * @returns `undefined`
1940
+ * @static
1941
+ */
1942
+ ZeroClipboard.destroy = function() {
1943
+ return _destroy.apply(this, _args(arguments));
1944
+ };
1945
+ /**
1946
+ * Set the pending data for clipboard injection.
1947
+ *
1948
+ * @returns `undefined`
1949
+ * @static
1950
+ */
1951
+ ZeroClipboard.setData = function() {
1952
+ return _setData.apply(this, _args(arguments));
1953
+ };
1954
+ /**
1955
+ * Clear the pending data for clipboard injection.
1956
+ * If no `format` is provided, all pending data formats will be cleared.
1957
+ *
1958
+ * @returns `undefined`
1959
+ * @static
1960
+ */
1961
+ ZeroClipboard.clearData = function() {
1962
+ return _clearData.apply(this, _args(arguments));
1963
+ };
1964
+ /**
1965
+ * Get a copy of the pending data for clipboard injection.
1966
+ * If no `format` is provided, a copy of ALL pending data formats will be returned.
1967
+ *
1968
+ * @returns `String` or `Object`
1969
+ * @static
1970
+ */
1971
+ ZeroClipboard.getData = function() {
1972
+ return _getData.apply(this, _args(arguments));
1973
+ };
1974
+ /**
1975
+ * Sets the current HTML object that the Flash object should overlay. This will put the global
1976
+ * Flash object on top of the current element; depending on the setup, this may also set the
1977
+ * pending clipboard text data as well as the Flash object's wrapping element's title attribute
1978
+ * based on the underlying HTML element and ZeroClipboard configuration.
1979
+ *
1980
+ * @returns `undefined`
1981
+ * @static
1982
+ */
1983
+ ZeroClipboard.focus = ZeroClipboard.activate = function() {
1984
+ return _focus.apply(this, _args(arguments));
1985
+ };
1986
+ /**
1987
+ * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on
1988
+ * the setup, this may also unset the Flash object's wrapping element's title attribute based on
1989
+ * the underlying HTML element and ZeroClipboard configuration.
1990
+ *
1991
+ * @returns `undefined`
1992
+ * @static
1993
+ */
1994
+ ZeroClipboard.blur = ZeroClipboard.deactivate = function() {
1995
+ return _blur.apply(this, _args(arguments));
1996
+ };
1997
+ /**
1998
+ * Returns the currently focused/"activated" HTML element that the Flash object is wrapping.
1999
+ *
2000
+ * @returns `HTMLElement` or `null`
2001
+ * @static
2002
+ */
2003
+ ZeroClipboard.activeElement = function() {
2004
+ return _activeElement.apply(this, _args(arguments));
2005
+ };
2006
+ if (typeof define === "function" && define.amd) {
2007
+ define(function() {
2008
+ return ZeroClipboard;
2009
+ });
2010
+ } else if (typeof module === "object" && module && typeof module.exports === "object" && module.exports) {
2011
+ module.exports = ZeroClipboard;
2012
+ } else {
2013
+ window.ZeroClipboard = ZeroClipboard;
2014
+ }
2015
+ })(function() {
2016
+ return this || window;
2017
+ }());