active_admin_pro 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +5 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/active_admin_pro.js +41 -0
  6. data/app/assets/javascripts/active_admin_pro/actions/new.js +8 -0
  7. data/app/assets/javascripts/active_admin_pro/actions/show.js +12 -0
  8. data/app/assets/javascripts/active_admin_pro/components/codemirror_input.js +92 -0
  9. data/app/assets/javascripts/active_admin_pro/components/flashes.js +9 -0
  10. data/app/assets/javascripts/active_admin_pro/components/link.js +23 -0
  11. data/app/assets/javascripts/active_admin_pro/components/phone_input.js +52 -0
  12. data/app/assets/javascripts/active_admin_pro/components/select_input.js +31 -0
  13. data/app/assets/javascripts/active_admin_pro/components/sortable_handle.js +8 -0
  14. data/app/assets/javascripts/active_admin_pro/components/summernote_input.js +132 -0
  15. data/app/assets/javascripts/active_admin_pro/components/text_input.js +47 -0
  16. data/app/assets/javascripts/active_admin_pro/components/time_zone_input.js +51 -0
  17. data/app/assets/javascripts/active_admin_pro/components/title_to_slug.js +16 -0
  18. data/app/assets/stylesheets/active_admin_pro.scss +20 -0
  19. data/app/assets/stylesheets/active_admin_pro/breakpoints.scss +3 -0
  20. data/app/assets/stylesheets/active_admin_pro/components/_input_variables.scss +9 -0
  21. data/app/assets/stylesheets/active_admin_pro/components/actions.scss +13 -0
  22. data/app/assets/stylesheets/active_admin_pro/components/boolean_input.scss +13 -0
  23. data/app/assets/stylesheets/active_admin_pro/components/button.scss +7 -0
  24. data/app/assets/stylesheets/active_admin_pro/components/check_boxes_input.scss +38 -0
  25. data/app/assets/stylesheets/active_admin_pro/components/codemirror_input.scss +53 -0
  26. data/app/assets/stylesheets/active_admin_pro/components/comments.scss +17 -0
  27. data/app/assets/stylesheets/active_admin_pro/components/datepicker.scss +108 -0
  28. data/app/assets/stylesheets/active_admin_pro/components/dialog.scss +66 -0
  29. data/app/assets/stylesheets/active_admin_pro/components/dropdown_menu_button.scss +40 -0
  30. data/app/assets/stylesheets/active_admin_pro/components/fieldset.scss +26 -0
  31. data/app/assets/stylesheets/active_admin_pro/components/file_input.scss +27 -0
  32. data/app/assets/stylesheets/active_admin_pro/components/has_many_fields.scss +4 -0
  33. data/app/assets/stylesheets/active_admin_pro/components/inline_errors.scss +7 -0
  34. data/app/assets/stylesheets/active_admin_pro/components/link.scss +16 -0
  35. data/app/assets/stylesheets/active_admin_pro/components/panel.scss +62 -0
  36. data/app/assets/stylesheets/active_admin_pro/components/phone_input.scss +31 -0
  37. data/app/assets/stylesheets/active_admin_pro/components/radio_input.scss +38 -0
  38. data/app/assets/stylesheets/active_admin_pro/components/segmented_control.scss +41 -0
  39. data/app/assets/stylesheets/active_admin_pro/components/select_input.scss +42 -0
  40. data/app/assets/stylesheets/active_admin_pro/components/sortable_handle.scss +21 -0
  41. data/app/assets/stylesheets/active_admin_pro/components/string_input.scss +85 -0
  42. data/app/assets/stylesheets/active_admin_pro/components/summernote_input.scss +190 -0
  43. data/app/assets/stylesheets/active_admin_pro/components/table.scss +100 -0
  44. data/app/assets/stylesheets/active_admin_pro/components/text_input.scss +55 -0
  45. data/app/assets/stylesheets/active_admin_pro/functions/color.scss +130 -0
  46. data/app/assets/stylesheets/active_admin_pro/functions/text-color.scss +35 -0
  47. data/app/assets/stylesheets/active_admin_pro/layout/actions/comments.scss +14 -0
  48. data/app/assets/stylesheets/active_admin_pro/layout/actions/index.scss +88 -0
  49. data/app/assets/stylesheets/active_admin_pro/layout/actions/show.scss +25 -0
  50. data/app/assets/stylesheets/active_admin_pro/layout/body.scss +60 -0
  51. data/app/assets/stylesheets/active_admin_pro/layout/desktop/action_items.scss +32 -0
  52. data/app/assets/stylesheets/active_admin_pro/layout/desktop/actions/comments.scss +10 -0
  53. data/app/assets/stylesheets/active_admin_pro/layout/desktop/active_admin_content.scss +22 -0
  54. data/app/assets/stylesheets/active_admin_pro/layout/desktop/breadcrumbs.scss +57 -0
  55. data/app/assets/stylesheets/active_admin_pro/layout/desktop/navigation.scss +197 -0
  56. data/app/assets/stylesheets/active_admin_pro/layout/desktop/sidebar.scss +5 -0
  57. data/app/assets/stylesheets/active_admin_pro/layout/desktop/title_bar.scss +24 -0
  58. data/app/assets/stylesheets/active_admin_pro/layout/desktop/wrapper.scss +5 -0
  59. data/app/assets/stylesheets/active_admin_pro/layout/filters.scss +41 -0
  60. data/app/assets/stylesheets/active_admin_pro/layout/flashes.scss +52 -0
  61. data/app/assets/stylesheets/active_admin_pro/layout/footer.scss +3 -0
  62. data/app/assets/stylesheets/active_admin_pro/layout/mobile/actions/index.scss +7 -0
  63. data/app/assets/stylesheets/active_admin_pro/layout/tablet/actions/dashboard.scss +105 -0
  64. data/app/assets/stylesheets/active_admin_pro/layout/tablet/actions/index.scss +20 -0
  65. data/app/assets/stylesheets/active_admin_pro/layout/tablet/actions/show.scss +78 -0
  66. data/app/assets/stylesheets/active_admin_pro/layout/tablet/active_admin_content.scss +9 -0
  67. data/app/assets/stylesheets/active_admin_pro/layout/tablet/flashes.scss +5 -0
  68. data/app/assets/stylesheets/active_admin_pro/layout/tablet/navigation.scss +48 -0
  69. data/app/assets/stylesheets/active_admin_pro/layout/tablet/title_bar.scss +53 -0
  70. data/app/assets/stylesheets/active_admin_pro/mixins/button.scss +48 -0
  71. data/app/assets/stylesheets/active_admin_pro/variables.scss +10 -0
  72. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon.scss +87 -0
  73. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/_bourbon-deprecated-upcoming.scss +411 -0
  74. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_border-color.scss +26 -0
  75. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_border-radius.scss +48 -0
  76. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_border-style.scss +25 -0
  77. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_border-width.scss +25 -0
  78. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_buttons.scss +64 -0
  79. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_clearfix.scss +25 -0
  80. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_ellipsis.scss +30 -0
  81. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_font-stacks.scss +31 -0
  82. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_hide-text.scss +27 -0
  83. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_margin.scss +26 -0
  84. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_padding.scss +26 -0
  85. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_position.scss +48 -0
  86. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_prefixer.scss +66 -0
  87. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_retina-image.scss +25 -0
  88. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_size.scss +51 -0
  89. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_text-inputs.scss +113 -0
  90. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_timing-functions.scss +34 -0
  91. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_triangle.scss +63 -0
  92. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/addons/_word-wrap.scss +29 -0
  93. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_animation.scss +43 -0
  94. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_appearance.scss +3 -0
  95. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_backface-visibility.scss +3 -0
  96. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_background-image.scss +42 -0
  97. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_background.scss +55 -0
  98. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_border-image.scss +59 -0
  99. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_calc.scss +4 -0
  100. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_columns.scss +47 -0
  101. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_filter.scss +4 -0
  102. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_flex-box.scss +287 -0
  103. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_font-face.scss +24 -0
  104. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_font-feature-settings.scss +4 -0
  105. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_hidpi-media-query.scss +10 -0
  106. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_hyphens.scss +4 -0
  107. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_image-rendering.scss +14 -0
  108. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_keyframes.scss +36 -0
  109. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_linear-gradient.scss +38 -0
  110. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_perspective.scss +8 -0
  111. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_placeholder.scss +8 -0
  112. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_radial-gradient.scss +39 -0
  113. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_selection.scss +42 -0
  114. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_text-decoration.scss +19 -0
  115. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_transform.scss +15 -0
  116. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_transition.scss +71 -0
  117. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/css3/_user-select.scss +3 -0
  118. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_assign-inputs.scss +11 -0
  119. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_contains-falsy.scss +20 -0
  120. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_contains.scss +26 -0
  121. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_is-length.scss +11 -0
  122. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_is-light.scss +21 -0
  123. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_is-number.scss +11 -0
  124. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_is-size.scss +13 -0
  125. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_modular-scale.scss +69 -0
  126. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_px-to-em.scss +13 -0
  127. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_px-to-rem.scss +15 -0
  128. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_shade.scss +24 -0
  129. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_strip-units.scss +17 -0
  130. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_tint.scss +24 -0
  131. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_transition-property-name.scss +22 -0
  132. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/functions/_unpack.scss +27 -0
  133. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_convert-units.scss +21 -0
  134. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_directional-values.scss +96 -0
  135. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_font-source-declaration.scss +43 -0
  136. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_gradient-positions-parser.scss +13 -0
  137. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_linear-angle-parser.scss +25 -0
  138. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_linear-gradient-parser.scss +41 -0
  139. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_linear-positions-parser.scss +61 -0
  140. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_linear-side-corner-parser.scss +31 -0
  141. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_radial-arg-parser.scss +69 -0
  142. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_radial-gradient-parser.scss +50 -0
  143. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_radial-positions-parser.scss +18 -0
  144. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_render-gradients.scss +26 -0
  145. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_shape-size-stripper.scss +10 -0
  146. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/helpers/_str-to-num.scss +50 -0
  147. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/settings/_asset-pipeline.scss +7 -0
  148. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/settings/_prefixer.scss +9 -0
  149. data/app/assets/stylesheets/active_admin_pro/vendor/bourbon/settings/_px-to-em.scss +1 -0
  150. data/app/assets/stylesheets/active_admin_pro/vendor/neat.scss +22 -0
  151. data/app/assets/stylesheets/active_admin_pro/vendor/neat/_neat-helpers.scss +8 -0
  152. data/app/assets/stylesheets/active_admin_pro/vendor/neat/functions/_new-breakpoint.scss +49 -0
  153. data/app/assets/stylesheets/active_admin_pro/vendor/neat/functions/_private.scss +108 -0
  154. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_box-sizing.scss +11 -0
  155. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_direction-context.scss +31 -0
  156. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_display-context.scss +26 -0
  157. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_fill-parent.scss +22 -0
  158. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_media.scss +92 -0
  159. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_omega.scss +91 -0
  160. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_outer-container.scss +36 -0
  161. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_pad.scss +23 -0
  162. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_private.scss +35 -0
  163. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_row.scss +53 -0
  164. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_shift.scss +48 -0
  165. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_span-columns.scss +90 -0
  166. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_to-deprecate.scss +105 -0
  167. data/app/assets/stylesheets/active_admin_pro/vendor/neat/grid/_visual-grid.scss +40 -0
  168. data/app/assets/stylesheets/active_admin_pro/vendor/neat/settings/_disable-warnings.scss +11 -0
  169. data/app/assets/stylesheets/active_admin_pro/vendor/neat/settings/_grid.scss +53 -0
  170. data/app/assets/stylesheets/active_admin_pro/vendor/neat/settings/_visual-grid.scss +25 -0
  171. data/app/assets/stylesheets/active_admin_pro/vendor/normalize.css +423 -0
  172. data/app/assets/stylesheets/codemirror/themes/activeadmin_pro.scss +117 -0
  173. data/app/inputs/codemirror_input.rb +27 -0
  174. data/app/inputs/datepicker_input.rb +16 -0
  175. data/app/inputs/phone_input.rb +5 -0
  176. data/app/inputs/summernote_input.rb +5 -0
  177. data/app/inputs/time_zone_input.rb +43 -0
  178. data/app/models/activeadmin_pro/summernote_image.rb +5 -0
  179. data/config/initializers/active_admin.rb +50 -0
  180. data/config/locales/en.yml +55 -0
  181. data/lib/active_admin_pro/admin_user/admin_user.rb +52 -0
  182. data/lib/active_admin_pro/engine.rb +8 -0
  183. data/lib/active_admin_pro/summernote_image/summernote_image.rb +61 -0
  184. data/lib/active_admin_pro/user/user.rb +53 -0
  185. data/lib/active_admin_pro/version.rb +3 -0
  186. data/lib/activeadmin_pro.rb +9 -0
  187. data/lib/generators/activeadmin_pro/install_generator.rb +14 -0
  188. data/lib/tasks/activeadmin_pro_tasks.rake +4 -0
  189. data/spec/spec_helper.rb +34 -0
  190. data/vendor/assets/javascripts/bootstrap.js +1243 -0
  191. data/vendor/assets/javascripts/codemirror.js +8887 -0
  192. data/vendor/assets/javascripts/codemirror/addons/comment/comment.js +183 -0
  193. data/vendor/assets/javascripts/codemirror/addons/comment/continuecomment.js +85 -0
  194. data/vendor/assets/javascripts/codemirror/addons/dialog/dialog.css +32 -0
  195. data/vendor/assets/javascripts/codemirror/addons/dialog/dialog.js +157 -0
  196. data/vendor/assets/javascripts/codemirror/addons/display/autorefresh.js +47 -0
  197. data/vendor/assets/javascripts/codemirror/addons/display/fullscreen.css +6 -0
  198. data/vendor/assets/javascripts/codemirror/addons/display/fullscreen.js +41 -0
  199. data/vendor/assets/javascripts/codemirror/addons/display/panel.js +112 -0
  200. data/vendor/assets/javascripts/codemirror/addons/display/placeholder.js +60 -0
  201. data/vendor/assets/javascripts/codemirror/addons/display/rulers.js +63 -0
  202. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +195 -0
  203. data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +169 -0
  204. data/vendor/assets/javascripts/codemirror/addons/edit/continuelist.js +51 -0
  205. data/vendor/assets/javascripts/codemirror/addons/edit/matchbrackets.js +120 -0
  206. data/vendor/assets/javascripts/codemirror/addons/edit/matchtags.js +66 -0
  207. data/vendor/assets/javascripts/codemirror/addons/edit/trailingspace.js +27 -0
  208. data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +105 -0
  209. data/vendor/assets/javascripts/codemirror/addons/fold/comment-fold.js +57 -0
  210. data/vendor/assets/javascripts/codemirror/addons/fold/foldcode.js +149 -0
  211. data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.css +20 -0
  212. data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.js +146 -0
  213. data/vendor/assets/javascripts/codemirror/addons/fold/indent-fold.js +44 -0
  214. data/vendor/assets/javascripts/codemirror/addons/fold/markdown-fold.js +49 -0
  215. data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +182 -0
  216. data/vendor/assets/javascripts/codemirror/addons/hint/anyword-hint.js +41 -0
  217. data/vendor/assets/javascripts/codemirror/addons/hint/css-hint.js +60 -0
  218. data/vendor/assets/javascripts/codemirror/addons/hint/html-hint.js +348 -0
  219. data/vendor/assets/javascripts/codemirror/addons/hint/javascript-hint.js +146 -0
  220. data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.css +38 -0
  221. data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +386 -0
  222. data/vendor/assets/javascripts/codemirror/addons/hint/sql-hint.js +254 -0
  223. data/vendor/assets/javascripts/codemirror/addons/hint/xml-hint.js +110 -0
  224. data/vendor/assets/javascripts/codemirror/addons/lint/coffeescript-lint.js +41 -0
  225. data/vendor/assets/javascripts/codemirror/addons/lint/css-lint.js +35 -0
  226. data/vendor/assets/javascripts/codemirror/addons/lint/html-lint.js +46 -0
  227. data/vendor/assets/javascripts/codemirror/addons/lint/javascript-lint.js +136 -0
  228. data/vendor/assets/javascripts/codemirror/addons/lint/json-lint.js +31 -0
  229. data/vendor/assets/javascripts/codemirror/addons/lint/lint.css +73 -0
  230. data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +231 -0
  231. data/vendor/assets/javascripts/codemirror/addons/lint/yaml-lint.js +28 -0
  232. data/vendor/assets/javascripts/codemirror/addons/merge/merge.css +112 -0
  233. data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +775 -0
  234. data/vendor/assets/javascripts/codemirror/addons/mode/loadmode.js +64 -0
  235. data/vendor/assets/javascripts/codemirror/addons/mode/multiplex.js +123 -0
  236. data/vendor/assets/javascripts/codemirror/addons/mode/multiplex_test.js +33 -0
  237. data/vendor/assets/javascripts/codemirror/addons/mode/overlay.js +85 -0
  238. data/vendor/assets/javascripts/codemirror/addons/mode/simple.js +213 -0
  239. data/vendor/assets/javascripts/codemirror/addons/runmode/colorize.js +40 -0
  240. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode-standalone.js +157 -0
  241. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.js +72 -0
  242. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.node.js +178 -0
  243. data/vendor/assets/javascripts/codemirror/addons/scroll/annotatescrollbar.js +115 -0
  244. data/vendor/assets/javascripts/codemirror/addons/scroll/scrollpastend.js +46 -0
  245. data/vendor/assets/javascripts/codemirror/addons/scroll/simplescrollbars.css +66 -0
  246. data/vendor/assets/javascripts/codemirror/addons/scroll/simplescrollbars.js +147 -0
  247. data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +128 -0
  248. data/vendor/assets/javascripts/codemirror/addons/search/matchesonscrollbar.css +8 -0
  249. data/vendor/assets/javascripts/codemirror/addons/search/matchesonscrollbar.js +97 -0
  250. data/vendor/assets/javascripts/codemirror/addons/search/search.js +228 -0
  251. data/vendor/assets/javascripts/codemirror/addons/search/searchcursor.js +189 -0
  252. data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +71 -0
  253. data/vendor/assets/javascripts/codemirror/addons/selection/mark-selection.js +118 -0
  254. data/vendor/assets/javascripts/codemirror/addons/selection/selection-pointer.js +98 -0
  255. data/vendor/assets/javascripts/codemirror/addons/tern/tern.css +87 -0
  256. data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +700 -0
  257. data/vendor/assets/javascripts/codemirror/addons/tern/worker.js +44 -0
  258. data/vendor/assets/javascripts/codemirror/addons/wrap/hardwrap.js +139 -0
  259. data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +366 -0
  260. data/vendor/assets/javascripts/codemirror/modes/css.js +823 -0
  261. data/vendor/assets/javascripts/codemirror/modes/diff.js +47 -0
  262. data/vendor/assets/javascripts/codemirror/modes/dockerfile.js +79 -0
  263. data/vendor/assets/javascripts/codemirror/modes/gfm.js +130 -0
  264. data/vendor/assets/javascripts/codemirror/modes/go.js +185 -0
  265. data/vendor/assets/javascripts/codemirror/modes/haml.js +159 -0
  266. data/vendor/assets/javascripts/codemirror/modes/handlebars.js +53 -0
  267. data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +28 -0
  268. data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +150 -0
  269. data/vendor/assets/javascripts/codemirror/modes/javascript.js +708 -0
  270. data/vendor/assets/javascripts/codemirror/modes/markdown.js +792 -0
  271. data/vendor/assets/javascripts/codemirror/modes/nginx.js +178 -0
  272. data/vendor/assets/javascripts/codemirror/modes/php.js +234 -0
  273. data/vendor/assets/javascripts/codemirror/modes/python.js +358 -0
  274. data/vendor/assets/javascripts/codemirror/modes/ruby.js +285 -0
  275. data/vendor/assets/javascripts/codemirror/modes/rust.js +58 -0
  276. data/vendor/assets/javascripts/codemirror/modes/sass.js +414 -0
  277. data/vendor/assets/javascripts/codemirror/modes/shell.js +139 -0
  278. data/vendor/assets/javascripts/codemirror/modes/xml.js +385 -0
  279. data/vendor/assets/javascripts/codemirror/modes/yaml.js +117 -0
  280. data/vendor/assets/javascripts/intl-tel-input.js +963 -0
  281. data/vendor/assets/javascripts/intl-tel-utils.js +480 -0
  282. data/vendor/assets/javascripts/slug.js +212 -0
  283. data/vendor/assets/javascripts/summernote.js +6939 -0
  284. data/vendor/assets/stylesheets/codemirror.css +334 -0
  285. data/vendor/assets/stylesheets/codemirror/themes/base16-dark.css +38 -0
  286. data/vendor/assets/stylesheets/codemirror/themes/base16-light.css +38 -0
  287. data/vendor/assets/stylesheets/codemirror/themes/dracula.css +41 -0
  288. data/vendor/assets/stylesheets/codemirror/themes/material.css +53 -0
  289. data/vendor/assets/stylesheets/codemirror/themes/monokai.css +35 -0
  290. data/vendor/assets/stylesheets/codemirror/themes/solarized.css +163 -0
  291. data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +34 -0
  292. data/vendor/assets/stylesheets/intl-tel-input.scss +1054 -0
  293. data/vendor/assets/stylesheets/summernote-bs3.css +5425 -0
  294. data/vendor/assets/stylesheets/summernote.css +1 -0
  295. metadata +604 -0
@@ -0,0 +1,53 @@
1
+ ActiveAdmin.register User do
2
+ permit_params :name, :email, :password
3
+
4
+ filter :name
5
+ filter :email
6
+
7
+ index do
8
+ selectable_column
9
+ id_column
10
+ column :name
11
+ column :email
12
+ actions
13
+ end
14
+
15
+ form do |f|
16
+ inputs "#{t('activerecord.models.user', count: 1)} Details" do
17
+ input :name
18
+ input :email
19
+ input :password if f.object.new_record?
20
+ end
21
+ actions
22
+ end
23
+
24
+ show do
25
+ attributes_table do
26
+ row :name
27
+ row :email
28
+ row :sign_in_count
29
+ row :current_sign_in_at
30
+ row :last_sign_in_at
31
+ row :current_sign_in_ip
32
+ row :last_sign_in_ip
33
+ row :created_at
34
+ row :updated_at
35
+ end
36
+ active_admin_comments
37
+ end
38
+
39
+ member_action :become, method: :post do
40
+ sign_in(resource, bypass: true)
41
+ redirect_to "/"
42
+ end
43
+
44
+ action_item :become_user, only: :show do
45
+ # The path `become_admin_user_path` is confusing as
46
+ # hell because we're not signing in as an admin user.
47
+ # Here's what's up:
48
+ # The member action is: `become`
49
+ # The namespace is: `admin`
50
+ # The controller is: `user`
51
+ link_to("Become User", become_admin_user_path(user), method: :post)
52
+ end
53
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveAdminPro
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,9 @@
1
+ require "activeadmin"
2
+ require "activeadmin-sortable"
3
+ require "fog"
4
+ require "turbolinks"
5
+ require "active_admin_pro/engine"
6
+ require "active_admin_pro/version"
7
+
8
+ module ActiveAdminPro
9
+ end
@@ -0,0 +1,14 @@
1
+ module ActiveAdminPro
2
+ class InstallGenerator < Rails::Generators::Base
3
+ source_root File.expand_path("../../../..", __FILE__)
4
+ # Install the active_admin_pro require to active_admin.js.
5
+ def install_javascript
6
+ # FIXME: Implement
7
+ end
8
+
9
+ # Install the active_admin_pro require to active_admin.scss.
10
+ def install_stylesheet
11
+ # FIXME: Implement
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :activeadmin_pro do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,34 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= "test"
3
+ require File.expand_path("../dummy/config/environment", __FILE__)
4
+ require "capybara/rspec"
5
+ require "database_cleaner"
6
+ require "factory_girl_rails"
7
+ require "rspec/rails"
8
+ require "rspec/autorun"
9
+ Rails.backtrace_cleaner.remove_silencers!
10
+
11
+ # Requires supporting ruby files with custom matchers and macros, etc,
12
+ # in spec/support/ and its subdirectories.
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f }
14
+
15
+ # Checks for pending migrations before tests are run.
16
+ # If you are not using ActiveRecord, you can remove this line.
17
+ ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
18
+
19
+ RSpec.configure do |config|
20
+ config.mock_with :rspec
21
+ config.use_transactional_fixtures = true
22
+ config.infer_base_class_for_anonymous_controllers = false
23
+ config.order = "random"
24
+ config.include FactoryGirl::Syntax::Methods
25
+
26
+ config.before(:suite) do
27
+ begin
28
+ DatabaseCleaner.start
29
+ FactoryGirl.lint
30
+ ensure
31
+ DatabaseCleaner.clean
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,1243 @@
1
+ /*!
2
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
3
+ * Copyright 2011-2015 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ */
6
+
7
+ /*!
8
+ * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=03e3e4179392b60c42cd)
9
+ * Config saved to config.json and https://gist.github.com/03e3e4179392b60c42cd
10
+ */
11
+ if (typeof jQuery === 'undefined') {
12
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
13
+ }
14
+ +function ($) {
15
+ 'use strict';
16
+ var version = $.fn.jquery.split(' ')[0].split('.')
17
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
18
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
19
+ }
20
+ }(jQuery);
21
+
22
+ /* ========================================================================
23
+ * Bootstrap: alert.js v3.3.5
24
+ * http://getbootstrap.com/javascript/#alerts
25
+ * ========================================================================
26
+ * Copyright 2011-2015 Twitter, Inc.
27
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
28
+ * ======================================================================== */
29
+
30
+
31
+ +function ($) {
32
+ 'use strict';
33
+
34
+ // ALERT CLASS DEFINITION
35
+ // ======================
36
+
37
+ var dismiss = '[data-dismiss="alert"]'
38
+ var Alert = function (el) {
39
+ $(el).on('click', dismiss, this.close)
40
+ }
41
+
42
+ Alert.VERSION = '3.3.5'
43
+
44
+ Alert.TRANSITION_DURATION = 150
45
+
46
+ Alert.prototype.close = function (e) {
47
+ var $this = $(this)
48
+ var selector = $this.attr('data-target')
49
+
50
+ if (!selector) {
51
+ selector = $this.attr('href')
52
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
53
+ }
54
+
55
+ var $parent = $(selector)
56
+
57
+ if (e) e.preventDefault()
58
+
59
+ if (!$parent.length) {
60
+ $parent = $this.closest('.alert')
61
+ }
62
+
63
+ $parent.trigger(e = $.Event('close.bs.alert'))
64
+
65
+ if (e.isDefaultPrevented()) return
66
+
67
+ $parent.removeClass('in')
68
+
69
+ function removeElement() {
70
+ // detach from parent, fire event then clean up data
71
+ $parent.detach().trigger('closed.bs.alert').remove()
72
+ }
73
+
74
+ $.support.transition && $parent.hasClass('fade') ?
75
+ $parent
76
+ .one('bsTransitionEnd', removeElement)
77
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
78
+ removeElement()
79
+ }
80
+
81
+
82
+ // ALERT PLUGIN DEFINITION
83
+ // =======================
84
+
85
+ function Plugin(option) {
86
+ return this.each(function () {
87
+ var $this = $(this)
88
+ var data = $this.data('bs.alert')
89
+
90
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
91
+ if (typeof option == 'string') data[option].call($this)
92
+ })
93
+ }
94
+
95
+ var old = $.fn.alert
96
+
97
+ $.fn.alert = Plugin
98
+ $.fn.alert.Constructor = Alert
99
+
100
+
101
+ // ALERT NO CONFLICT
102
+ // =================
103
+
104
+ $.fn.alert.noConflict = function () {
105
+ $.fn.alert = old
106
+ return this
107
+ }
108
+
109
+
110
+ // ALERT DATA-API
111
+ // ==============
112
+
113
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
114
+
115
+ }(jQuery);
116
+
117
+ /* ========================================================================
118
+ * Bootstrap: dropdown.js v3.3.5
119
+ * http://getbootstrap.com/javascript/#dropdowns
120
+ * ========================================================================
121
+ * Copyright 2011-2015 Twitter, Inc.
122
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
123
+ * ======================================================================== */
124
+
125
+
126
+ +function ($) {
127
+ 'use strict';
128
+
129
+ // DROPDOWN CLASS DEFINITION
130
+ // =========================
131
+
132
+ var backdrop = '.dropdown-backdrop'
133
+ var toggle = '[data-toggle="dropdown"]'
134
+ var Dropdown = function (element) {
135
+ $(element).on('click.bs.dropdown', this.toggle)
136
+ }
137
+
138
+ Dropdown.VERSION = '3.3.5'
139
+
140
+ function getParent($this) {
141
+ var selector = $this.attr('data-target')
142
+
143
+ if (!selector) {
144
+ selector = $this.attr('href')
145
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
146
+ }
147
+
148
+ var $parent = selector && $(selector)
149
+
150
+ return $parent && $parent.length ? $parent : $this.parent()
151
+ }
152
+
153
+ function clearMenus(e) {
154
+ if (e && e.which === 3) return
155
+ $(backdrop).remove()
156
+ $(toggle).each(function () {
157
+ var $this = $(this)
158
+ var $parent = getParent($this)
159
+ var relatedTarget = { relatedTarget: this }
160
+
161
+ if (!$parent.hasClass('open')) return
162
+
163
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
164
+
165
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
166
+
167
+ if (e.isDefaultPrevented()) return
168
+
169
+ $this.attr('aria-expanded', 'false')
170
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
171
+ })
172
+ }
173
+
174
+ Dropdown.prototype.toggle = function (e) {
175
+ var $this = $(this)
176
+
177
+ if ($this.is('.disabled, :disabled')) return
178
+
179
+ var $parent = getParent($this)
180
+ var isActive = $parent.hasClass('open')
181
+
182
+ clearMenus()
183
+
184
+ if (!isActive) {
185
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
186
+ // if mobile we use a backdrop because click events don't delegate
187
+ $(document.createElement('div'))
188
+ .addClass('dropdown-backdrop')
189
+ .insertAfter($(this))
190
+ .on('click', clearMenus)
191
+ }
192
+
193
+ var relatedTarget = { relatedTarget: this }
194
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
195
+
196
+ if (e.isDefaultPrevented()) return
197
+
198
+ $this
199
+ .trigger('focus')
200
+ .attr('aria-expanded', 'true')
201
+
202
+ $parent
203
+ .toggleClass('open')
204
+ .trigger('shown.bs.dropdown', relatedTarget)
205
+ }
206
+
207
+ return false
208
+ }
209
+
210
+ Dropdown.prototype.keydown = function (e) {
211
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
212
+
213
+ var $this = $(this)
214
+
215
+ e.preventDefault()
216
+ e.stopPropagation()
217
+
218
+ if ($this.is('.disabled, :disabled')) return
219
+
220
+ var $parent = getParent($this)
221
+ var isActive = $parent.hasClass('open')
222
+
223
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
224
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
225
+ return $this.trigger('click')
226
+ }
227
+
228
+ var desc = ' li:not(.disabled):visible a'
229
+ var $items = $parent.find('.dropdown-menu' + desc)
230
+
231
+ if (!$items.length) return
232
+
233
+ var index = $items.index(e.target)
234
+
235
+ if (e.which == 38 && index > 0) index-- // up
236
+ if (e.which == 40 && index < $items.length - 1) index++ // down
237
+ if (!~index) index = 0
238
+
239
+ $items.eq(index).trigger('focus')
240
+ }
241
+
242
+
243
+ // DROPDOWN PLUGIN DEFINITION
244
+ // ==========================
245
+
246
+ function Plugin(option) {
247
+ return this.each(function () {
248
+ var $this = $(this)
249
+ var data = $this.data('bs.dropdown')
250
+
251
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
252
+ if (typeof option == 'string') data[option].call($this)
253
+ })
254
+ }
255
+
256
+ var old = $.fn.dropdown
257
+
258
+ $.fn.dropdown = Plugin
259
+ $.fn.dropdown.Constructor = Dropdown
260
+
261
+
262
+ // DROPDOWN NO CONFLICT
263
+ // ====================
264
+
265
+ $.fn.dropdown.noConflict = function () {
266
+ $.fn.dropdown = old
267
+ return this
268
+ }
269
+
270
+
271
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
272
+ // ===================================
273
+
274
+ $(document)
275
+ .on('click.bs.dropdown.data-api', clearMenus)
276
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
277
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
278
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
279
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
280
+
281
+ }(jQuery);
282
+
283
+ /* ========================================================================
284
+ * Bootstrap: modal.js v3.3.5
285
+ * http://getbootstrap.com/javascript/#modals
286
+ * ========================================================================
287
+ * Copyright 2011-2015 Twitter, Inc.
288
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
289
+ * ======================================================================== */
290
+
291
+
292
+ +function ($) {
293
+ 'use strict';
294
+
295
+ // MODAL CLASS DEFINITION
296
+ // ======================
297
+
298
+ var Modal = function (element, options) {
299
+ this.options = options
300
+ this.$body = $(document.body)
301
+ this.$element = $(element)
302
+ this.$dialog = this.$element.find('.modal-dialog')
303
+ this.$backdrop = null
304
+ this.isShown = null
305
+ this.originalBodyPad = null
306
+ this.scrollbarWidth = 0
307
+ this.ignoreBackdropClick = false
308
+
309
+ if (this.options.remote) {
310
+ this.$element
311
+ .find('.modal-content')
312
+ .load(this.options.remote, $.proxy(function () {
313
+ this.$element.trigger('loaded.bs.modal')
314
+ }, this))
315
+ }
316
+ }
317
+
318
+ Modal.VERSION = '3.3.5'
319
+
320
+ Modal.TRANSITION_DURATION = 300
321
+ Modal.BACKDROP_TRANSITION_DURATION = 150
322
+
323
+ Modal.DEFAULTS = {
324
+ backdrop: true,
325
+ keyboard: true,
326
+ show: true
327
+ }
328
+
329
+ Modal.prototype.toggle = function (_relatedTarget) {
330
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
331
+ }
332
+
333
+ Modal.prototype.show = function (_relatedTarget) {
334
+ var that = this
335
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
336
+
337
+ this.$element.trigger(e)
338
+
339
+ if (this.isShown || e.isDefaultPrevented()) return
340
+
341
+ this.isShown = true
342
+
343
+ this.checkScrollbar()
344
+ this.setScrollbar()
345
+ this.$body.addClass('modal-open')
346
+
347
+ this.escape()
348
+ this.resize()
349
+
350
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
351
+
352
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
353
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
354
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
355
+ })
356
+ })
357
+
358
+ this.backdrop(function () {
359
+ var transition = $.support.transition && that.$element.hasClass('fade')
360
+
361
+ if (!that.$element.parent().length) {
362
+ that.$element.appendTo(that.$body) // don't move modals dom position
363
+ }
364
+
365
+ that.$element
366
+ .show()
367
+ .scrollTop(0)
368
+
369
+ that.adjustDialog()
370
+
371
+ if (transition) {
372
+ that.$element[0].offsetWidth // force reflow
373
+ }
374
+
375
+ that.$element.addClass('in')
376
+
377
+ that.enforceFocus()
378
+
379
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
380
+
381
+ transition ?
382
+ that.$dialog // wait for modal to slide in
383
+ .one('bsTransitionEnd', function () {
384
+ that.$element.trigger('focus').trigger(e)
385
+ })
386
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
387
+ that.$element.trigger('focus').trigger(e)
388
+ })
389
+ }
390
+
391
+ Modal.prototype.hide = function (e) {
392
+ if (e) e.preventDefault()
393
+
394
+ e = $.Event('hide.bs.modal')
395
+
396
+ this.$element.trigger(e)
397
+
398
+ if (!this.isShown || e.isDefaultPrevented()) return
399
+
400
+ this.isShown = false
401
+
402
+ this.escape()
403
+ this.resize()
404
+
405
+ $(document).off('focusin.bs.modal')
406
+
407
+ this.$element
408
+ .removeClass('in')
409
+ .off('click.dismiss.bs.modal')
410
+ .off('mouseup.dismiss.bs.modal')
411
+
412
+ this.$dialog.off('mousedown.dismiss.bs.modal')
413
+
414
+ $.support.transition && this.$element.hasClass('fade') ?
415
+ this.$element
416
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
417
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
418
+ this.hideModal()
419
+ }
420
+
421
+ Modal.prototype.enforceFocus = function () {
422
+ $(document)
423
+ .off('focusin.bs.modal') // guard against infinite focus loop
424
+ .on('focusin.bs.modal', $.proxy(function (e) {
425
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
426
+ this.$element.trigger('focus')
427
+ }
428
+ }, this))
429
+ }
430
+
431
+ Modal.prototype.escape = function () {
432
+ if (this.isShown && this.options.keyboard) {
433
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
434
+ e.which == 27 && this.hide()
435
+ }, this))
436
+ } else if (!this.isShown) {
437
+ this.$element.off('keydown.dismiss.bs.modal')
438
+ }
439
+ }
440
+
441
+ Modal.prototype.resize = function () {
442
+ if (this.isShown) {
443
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
444
+ } else {
445
+ $(window).off('resize.bs.modal')
446
+ }
447
+ }
448
+
449
+ Modal.prototype.hideModal = function () {
450
+ var that = this
451
+ this.$element.hide()
452
+ this.backdrop(function () {
453
+ that.$body.removeClass('modal-open')
454
+ that.resetAdjustments()
455
+ that.resetScrollbar()
456
+ that.$element.trigger('hidden.bs.modal')
457
+ })
458
+ }
459
+
460
+ Modal.prototype.removeBackdrop = function () {
461
+ this.$backdrop && this.$backdrop.remove()
462
+ this.$backdrop = null
463
+ }
464
+
465
+ Modal.prototype.backdrop = function (callback) {
466
+ var that = this
467
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
468
+
469
+ if (this.isShown && this.options.backdrop) {
470
+ var doAnimate = $.support.transition && animate
471
+
472
+ this.$backdrop = $(document.createElement('div'))
473
+ .addClass('modal-backdrop ' + animate)
474
+ .appendTo(this.$body)
475
+
476
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
477
+ if (this.ignoreBackdropClick) {
478
+ this.ignoreBackdropClick = false
479
+ return
480
+ }
481
+ if (e.target !== e.currentTarget) return
482
+ this.options.backdrop == 'static'
483
+ ? this.$element[0].focus()
484
+ : this.hide()
485
+ }, this))
486
+
487
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
488
+
489
+ this.$backdrop.addClass('in')
490
+
491
+ if (!callback) return
492
+
493
+ doAnimate ?
494
+ this.$backdrop
495
+ .one('bsTransitionEnd', callback)
496
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
497
+ callback()
498
+
499
+ } else if (!this.isShown && this.$backdrop) {
500
+ this.$backdrop.removeClass('in')
501
+
502
+ var callbackRemove = function () {
503
+ that.removeBackdrop()
504
+ callback && callback()
505
+ }
506
+ $.support.transition && this.$element.hasClass('fade') ?
507
+ this.$backdrop
508
+ .one('bsTransitionEnd', callbackRemove)
509
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
510
+ callbackRemove()
511
+
512
+ } else if (callback) {
513
+ callback()
514
+ }
515
+ }
516
+
517
+ // these following methods are used to handle overflowing modals
518
+
519
+ Modal.prototype.handleUpdate = function () {
520
+ this.adjustDialog()
521
+ }
522
+
523
+ Modal.prototype.adjustDialog = function () {
524
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
525
+
526
+ this.$element.css({
527
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
528
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
529
+ })
530
+ }
531
+
532
+ Modal.prototype.resetAdjustments = function () {
533
+ this.$element.css({
534
+ paddingLeft: '',
535
+ paddingRight: ''
536
+ })
537
+ }
538
+
539
+ Modal.prototype.checkScrollbar = function () {
540
+ var fullWindowWidth = window.innerWidth
541
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
542
+ var documentElementRect = document.documentElement.getBoundingClientRect()
543
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
544
+ }
545
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
546
+ this.scrollbarWidth = this.measureScrollbar()
547
+ }
548
+
549
+ Modal.prototype.setScrollbar = function () {
550
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
551
+ this.originalBodyPad = document.body.style.paddingRight || ''
552
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
553
+ }
554
+
555
+ Modal.prototype.resetScrollbar = function () {
556
+ this.$body.css('padding-right', this.originalBodyPad)
557
+ }
558
+
559
+ Modal.prototype.measureScrollbar = function () { // thx walsh
560
+ var scrollDiv = document.createElement('div')
561
+ scrollDiv.className = 'modal-scrollbar-measure'
562
+ this.$body.append(scrollDiv)
563
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
564
+ this.$body[0].removeChild(scrollDiv)
565
+ return scrollbarWidth
566
+ }
567
+
568
+
569
+ // MODAL PLUGIN DEFINITION
570
+ // =======================
571
+
572
+ function Plugin(option, _relatedTarget) {
573
+ return this.each(function () {
574
+ var $this = $(this)
575
+ var data = $this.data('bs.modal')
576
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
577
+
578
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
579
+ if (typeof option == 'string') data[option](_relatedTarget)
580
+ else if (options.show) data.show(_relatedTarget)
581
+ })
582
+ }
583
+
584
+ var old = $.fn.modal
585
+
586
+ $.fn.modal = Plugin
587
+ $.fn.modal.Constructor = Modal
588
+
589
+
590
+ // MODAL NO CONFLICT
591
+ // =================
592
+
593
+ $.fn.modal.noConflict = function () {
594
+ $.fn.modal = old
595
+ return this
596
+ }
597
+
598
+
599
+ // MODAL DATA-API
600
+ // ==============
601
+
602
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
603
+ var $this = $(this)
604
+ var href = $this.attr('href')
605
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
606
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
607
+
608
+ if ($this.is('a')) e.preventDefault()
609
+
610
+ $target.one('show.bs.modal', function (showEvent) {
611
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
612
+ $target.one('hidden.bs.modal', function () {
613
+ $this.is(':visible') && $this.trigger('focus')
614
+ })
615
+ })
616
+ Plugin.call($target, option, this)
617
+ })
618
+
619
+ }(jQuery);
620
+
621
+ /* ========================================================================
622
+ * Bootstrap: tooltip.js v3.3.5
623
+ * http://getbootstrap.com/javascript/#tooltip
624
+ * Inspired by the original jQuery.tipsy by Jason Frame
625
+ * ========================================================================
626
+ * Copyright 2011-2015 Twitter, Inc.
627
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
628
+ * ======================================================================== */
629
+
630
+
631
+ +function ($) {
632
+ 'use strict';
633
+
634
+ // TOOLTIP PUBLIC CLASS DEFINITION
635
+ // ===============================
636
+
637
+ var Tooltip = function (element, options) {
638
+ this.type = null
639
+ this.options = null
640
+ this.enabled = null
641
+ this.timeout = null
642
+ this.hoverState = null
643
+ this.$element = null
644
+ this.inState = null
645
+
646
+ this.init('tooltip', element, options)
647
+ }
648
+
649
+ Tooltip.VERSION = '3.3.5'
650
+
651
+ Tooltip.TRANSITION_DURATION = 150
652
+
653
+ Tooltip.DEFAULTS = {
654
+ animation: true,
655
+ placement: 'top',
656
+ selector: false,
657
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
658
+ trigger: 'hover focus',
659
+ title: '',
660
+ delay: 0,
661
+ html: false,
662
+ container: false,
663
+ viewport: {
664
+ selector: 'body',
665
+ padding: 0
666
+ }
667
+ }
668
+
669
+ Tooltip.prototype.init = function (type, element, options) {
670
+ this.enabled = true
671
+ this.type = type
672
+ this.$element = $(element)
673
+ this.options = this.getOptions(options)
674
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
675
+ this.inState = { click: false, hover: false, focus: false }
676
+
677
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
678
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
679
+ }
680
+
681
+ var triggers = this.options.trigger.split(' ')
682
+
683
+ for (var i = triggers.length; i--;) {
684
+ var trigger = triggers[i]
685
+
686
+ if (trigger == 'click') {
687
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
688
+ } else if (trigger != 'manual') {
689
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
690
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
691
+
692
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
693
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
694
+ }
695
+ }
696
+
697
+ this.options.selector ?
698
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
699
+ this.fixTitle()
700
+ }
701
+
702
+ Tooltip.prototype.getDefaults = function () {
703
+ return Tooltip.DEFAULTS
704
+ }
705
+
706
+ Tooltip.prototype.getOptions = function (options) {
707
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
708
+
709
+ if (options.delay && typeof options.delay == 'number') {
710
+ options.delay = {
711
+ show: options.delay,
712
+ hide: options.delay
713
+ }
714
+ }
715
+
716
+ return options
717
+ }
718
+
719
+ Tooltip.prototype.getDelegateOptions = function () {
720
+ var options = {}
721
+ var defaults = this.getDefaults()
722
+
723
+ this._options && $.each(this._options, function (key, value) {
724
+ if (defaults[key] != value) options[key] = value
725
+ })
726
+
727
+ return options
728
+ }
729
+
730
+ Tooltip.prototype.enter = function (obj) {
731
+ var self = obj instanceof this.constructor ?
732
+ obj : $(obj.currentTarget).data('bs.' + this.type)
733
+
734
+ if (!self) {
735
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
736
+ $(obj.currentTarget).data('bs.' + this.type, self)
737
+ }
738
+
739
+ if (obj instanceof $.Event) {
740
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
741
+ }
742
+
743
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
744
+ self.hoverState = 'in'
745
+ return
746
+ }
747
+
748
+ clearTimeout(self.timeout)
749
+
750
+ self.hoverState = 'in'
751
+
752
+ if (!self.options.delay || !self.options.delay.show) return self.show()
753
+
754
+ self.timeout = setTimeout(function () {
755
+ if (self.hoverState == 'in') self.show()
756
+ }, self.options.delay.show)
757
+ }
758
+
759
+ Tooltip.prototype.isInStateTrue = function () {
760
+ for (var key in this.inState) {
761
+ if (this.inState[key]) return true
762
+ }
763
+
764
+ return false
765
+ }
766
+
767
+ Tooltip.prototype.leave = function (obj) {
768
+ var self = obj instanceof this.constructor ?
769
+ obj : $(obj.currentTarget).data('bs.' + this.type)
770
+
771
+ if (!self) {
772
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
773
+ $(obj.currentTarget).data('bs.' + this.type, self)
774
+ }
775
+
776
+ if (obj instanceof $.Event) {
777
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
778
+ }
779
+
780
+ if (self.isInStateTrue()) return
781
+
782
+ clearTimeout(self.timeout)
783
+
784
+ self.hoverState = 'out'
785
+
786
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
787
+
788
+ self.timeout = setTimeout(function () {
789
+ if (self.hoverState == 'out') self.hide()
790
+ }, self.options.delay.hide)
791
+ }
792
+
793
+ Tooltip.prototype.show = function () {
794
+ var e = $.Event('show.bs.' + this.type)
795
+
796
+ if (this.hasContent() && this.enabled) {
797
+ this.$element.trigger(e)
798
+
799
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
800
+ if (e.isDefaultPrevented() || !inDom) return
801
+ var that = this
802
+
803
+ var $tip = this.tip()
804
+
805
+ var tipId = this.getUID(this.type)
806
+
807
+ this.setContent()
808
+ $tip.attr('id', tipId)
809
+ this.$element.attr('aria-describedby', tipId)
810
+
811
+ if (this.options.animation) $tip.addClass('fade')
812
+
813
+ var placement = typeof this.options.placement == 'function' ?
814
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
815
+ this.options.placement
816
+
817
+ var autoToken = /\s?auto?\s?/i
818
+ var autoPlace = autoToken.test(placement)
819
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
820
+
821
+ $tip
822
+ .detach()
823
+ .css({ top: 0, left: 0, display: 'block' })
824
+ .addClass(placement)
825
+ .data('bs.' + this.type, this)
826
+
827
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
828
+ this.$element.trigger('inserted.bs.' + this.type)
829
+
830
+ var pos = this.getPosition()
831
+ var actualWidth = $tip[0].offsetWidth
832
+ var actualHeight = $tip[0].offsetHeight
833
+
834
+ if (autoPlace) {
835
+ var orgPlacement = placement
836
+ var viewportDim = this.getPosition(this.$viewport)
837
+
838
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
839
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
840
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
841
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
842
+ placement
843
+
844
+ $tip
845
+ .removeClass(orgPlacement)
846
+ .addClass(placement)
847
+ }
848
+
849
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
850
+
851
+ this.applyPlacement(calculatedOffset, placement)
852
+
853
+ var complete = function () {
854
+ var prevHoverState = that.hoverState
855
+ that.$element.trigger('shown.bs.' + that.type)
856
+ that.hoverState = null
857
+
858
+ if (prevHoverState == 'out') that.leave(that)
859
+ }
860
+
861
+ $.support.transition && this.$tip.hasClass('fade') ?
862
+ $tip
863
+ .one('bsTransitionEnd', complete)
864
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
865
+ complete()
866
+ }
867
+ }
868
+
869
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
870
+ var $tip = this.tip()
871
+ var width = $tip[0].offsetWidth
872
+ var height = $tip[0].offsetHeight
873
+
874
+ // manually read margins because getBoundingClientRect includes difference
875
+ var marginTop = parseInt($tip.css('margin-top'), 10)
876
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
877
+
878
+ // we must check for NaN for ie 8/9
879
+ if (isNaN(marginTop)) marginTop = 0
880
+ if (isNaN(marginLeft)) marginLeft = 0
881
+
882
+ offset.top += marginTop
883
+ offset.left += marginLeft
884
+
885
+ // $.fn.offset doesn't round pixel values
886
+ // so we use setOffset directly with our own function B-0
887
+ $.offset.setOffset($tip[0], $.extend({
888
+ using: function (props) {
889
+ $tip.css({
890
+ top: Math.round(props.top),
891
+ left: Math.round(props.left)
892
+ })
893
+ }
894
+ }, offset), 0)
895
+
896
+ $tip.addClass('in')
897
+
898
+ // check to see if placing tip in new offset caused the tip to resize itself
899
+ var actualWidth = $tip[0].offsetWidth
900
+ var actualHeight = $tip[0].offsetHeight
901
+
902
+ if (placement == 'top' && actualHeight != height) {
903
+ offset.top = offset.top + height - actualHeight
904
+ }
905
+
906
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
907
+
908
+ if (delta.left) offset.left += delta.left
909
+ else offset.top += delta.top
910
+
911
+ var isVertical = /top|bottom/.test(placement)
912
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
913
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
914
+
915
+ $tip.offset(offset)
916
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
917
+ }
918
+
919
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
920
+ this.arrow()
921
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
922
+ .css(isVertical ? 'top' : 'left', '')
923
+ }
924
+
925
+ Tooltip.prototype.setContent = function () {
926
+ var $tip = this.tip()
927
+ var title = this.getTitle()
928
+
929
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
930
+ $tip.removeClass('fade in top bottom left right')
931
+ }
932
+
933
+ Tooltip.prototype.hide = function (callback) {
934
+ var that = this
935
+ var $tip = $(this.$tip)
936
+ var e = $.Event('hide.bs.' + this.type)
937
+
938
+ function complete() {
939
+ if (that.hoverState != 'in') $tip.detach()
940
+ that.$element
941
+ .removeAttr('aria-describedby')
942
+ .trigger('hidden.bs.' + that.type)
943
+ callback && callback()
944
+ }
945
+
946
+ this.$element.trigger(e)
947
+
948
+ if (e.isDefaultPrevented()) return
949
+
950
+ $tip.removeClass('in')
951
+
952
+ $.support.transition && $tip.hasClass('fade') ?
953
+ $tip
954
+ .one('bsTransitionEnd', complete)
955
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
956
+ complete()
957
+
958
+ this.hoverState = null
959
+
960
+ return this
961
+ }
962
+
963
+ Tooltip.prototype.fixTitle = function () {
964
+ var $e = this.$element
965
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
966
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
967
+ }
968
+ }
969
+
970
+ Tooltip.prototype.hasContent = function () {
971
+ return this.getTitle()
972
+ }
973
+
974
+ Tooltip.prototype.getPosition = function ($element) {
975
+ $element = $element || this.$element
976
+
977
+ var el = $element[0]
978
+ var isBody = el.tagName == 'BODY'
979
+
980
+ var elRect = el.getBoundingClientRect()
981
+ if (elRect.width == null) {
982
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
983
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
984
+ }
985
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
986
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
987
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
988
+
989
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
990
+ }
991
+
992
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
993
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
994
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
995
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
996
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
997
+
998
+ }
999
+
1000
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
1001
+ var delta = { top: 0, left: 0 }
1002
+ if (!this.$viewport) return delta
1003
+
1004
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
1005
+ var viewportDimensions = this.getPosition(this.$viewport)
1006
+
1007
+ if (/right|left/.test(placement)) {
1008
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
1009
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
1010
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
1011
+ delta.top = viewportDimensions.top - topEdgeOffset
1012
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
1013
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
1014
+ }
1015
+ } else {
1016
+ var leftEdgeOffset = pos.left - viewportPadding
1017
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
1018
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
1019
+ delta.left = viewportDimensions.left - leftEdgeOffset
1020
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
1021
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1022
+ }
1023
+ }
1024
+
1025
+ return delta
1026
+ }
1027
+
1028
+ Tooltip.prototype.getTitle = function () {
1029
+ var title
1030
+ var $e = this.$element
1031
+ var o = this.options
1032
+
1033
+ title = $e.attr('data-original-title')
1034
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1035
+
1036
+ return title
1037
+ }
1038
+
1039
+ Tooltip.prototype.getUID = function (prefix) {
1040
+ do prefix += ~~(Math.random() * 1000000)
1041
+ while (document.getElementById(prefix))
1042
+ return prefix
1043
+ }
1044
+
1045
+ Tooltip.prototype.tip = function () {
1046
+ if (!this.$tip) {
1047
+ this.$tip = $(this.options.template)
1048
+ if (this.$tip.length != 1) {
1049
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
1050
+ }
1051
+ }
1052
+ return this.$tip
1053
+ }
1054
+
1055
+ Tooltip.prototype.arrow = function () {
1056
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
1057
+ }
1058
+
1059
+ Tooltip.prototype.enable = function () {
1060
+ this.enabled = true
1061
+ }
1062
+
1063
+ Tooltip.prototype.disable = function () {
1064
+ this.enabled = false
1065
+ }
1066
+
1067
+ Tooltip.prototype.toggleEnabled = function () {
1068
+ this.enabled = !this.enabled
1069
+ }
1070
+
1071
+ Tooltip.prototype.toggle = function (e) {
1072
+ var self = this
1073
+ if (e) {
1074
+ self = $(e.currentTarget).data('bs.' + this.type)
1075
+ if (!self) {
1076
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
1077
+ $(e.currentTarget).data('bs.' + this.type, self)
1078
+ }
1079
+ }
1080
+
1081
+ if (e) {
1082
+ self.inState.click = !self.inState.click
1083
+ if (self.isInStateTrue()) self.enter(self)
1084
+ else self.leave(self)
1085
+ } else {
1086
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1087
+ }
1088
+ }
1089
+
1090
+ Tooltip.prototype.destroy = function () {
1091
+ var that = this
1092
+ clearTimeout(this.timeout)
1093
+ this.hide(function () {
1094
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
1095
+ if (that.$tip) {
1096
+ that.$tip.detach()
1097
+ }
1098
+ that.$tip = null
1099
+ that.$arrow = null
1100
+ that.$viewport = null
1101
+ })
1102
+ }
1103
+
1104
+
1105
+ // TOOLTIP PLUGIN DEFINITION
1106
+ // =========================
1107
+
1108
+ function Plugin(option) {
1109
+ return this.each(function () {
1110
+ var $this = $(this)
1111
+ var data = $this.data('bs.tooltip')
1112
+ var options = typeof option == 'object' && option
1113
+
1114
+ if (!data && /destroy|hide/.test(option)) return
1115
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
1116
+ if (typeof option == 'string') data[option]()
1117
+ })
1118
+ }
1119
+
1120
+ var old = $.fn.tooltip
1121
+
1122
+ $.fn.tooltip = Plugin
1123
+ $.fn.tooltip.Constructor = Tooltip
1124
+
1125
+
1126
+ // TOOLTIP NO CONFLICT
1127
+ // ===================
1128
+
1129
+ $.fn.tooltip.noConflict = function () {
1130
+ $.fn.tooltip = old
1131
+ return this
1132
+ }
1133
+
1134
+ }(jQuery);
1135
+
1136
+ /* ========================================================================
1137
+ * Bootstrap: popover.js v3.3.5
1138
+ * http://getbootstrap.com/javascript/#popovers
1139
+ * ========================================================================
1140
+ * Copyright 2011-2015 Twitter, Inc.
1141
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1142
+ * ======================================================================== */
1143
+
1144
+
1145
+ +function ($) {
1146
+ 'use strict';
1147
+
1148
+ // POPOVER PUBLIC CLASS DEFINITION
1149
+ // ===============================
1150
+
1151
+ var Popover = function (element, options) {
1152
+ this.init('popover', element, options)
1153
+ }
1154
+
1155
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1156
+
1157
+ Popover.VERSION = '3.3.5'
1158
+
1159
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1160
+ placement: 'right',
1161
+ trigger: 'click',
1162
+ content: '',
1163
+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1164
+ })
1165
+
1166
+
1167
+ // NOTE: POPOVER EXTENDS tooltip.js
1168
+ // ================================
1169
+
1170
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
1171
+
1172
+ Popover.prototype.constructor = Popover
1173
+
1174
+ Popover.prototype.getDefaults = function () {
1175
+ return Popover.DEFAULTS
1176
+ }
1177
+
1178
+ Popover.prototype.setContent = function () {
1179
+ var $tip = this.tip()
1180
+ var title = this.getTitle()
1181
+ var content = this.getContent()
1182
+
1183
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1184
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
1185
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1186
+ ](content)
1187
+
1188
+ $tip.removeClass('fade top bottom left right in')
1189
+
1190
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
1191
+ // this manually by checking the contents.
1192
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
1193
+ }
1194
+
1195
+ Popover.prototype.hasContent = function () {
1196
+ return this.getTitle() || this.getContent()
1197
+ }
1198
+
1199
+ Popover.prototype.getContent = function () {
1200
+ var $e = this.$element
1201
+ var o = this.options
1202
+
1203
+ return $e.attr('data-content')
1204
+ || (typeof o.content == 'function' ?
1205
+ o.content.call($e[0]) :
1206
+ o.content)
1207
+ }
1208
+
1209
+ Popover.prototype.arrow = function () {
1210
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
1211
+ }
1212
+
1213
+
1214
+ // POPOVER PLUGIN DEFINITION
1215
+ // =========================
1216
+
1217
+ function Plugin(option) {
1218
+ return this.each(function () {
1219
+ var $this = $(this)
1220
+ var data = $this.data('bs.popover')
1221
+ var options = typeof option == 'object' && option
1222
+
1223
+ if (!data && /destroy|hide/.test(option)) return
1224
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
1225
+ if (typeof option == 'string') data[option]()
1226
+ })
1227
+ }
1228
+
1229
+ var old = $.fn.popover
1230
+
1231
+ $.fn.popover = Plugin
1232
+ $.fn.popover.Constructor = Popover
1233
+
1234
+
1235
+ // POPOVER NO CONFLICT
1236
+ // ===================
1237
+
1238
+ $.fn.popover.noConflict = function () {
1239
+ $.fn.popover = old
1240
+ return this
1241
+ }
1242
+
1243
+ }(jQuery);