publify_core 9.0.0 → 9.2.2

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 (360) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +92 -37
  3. data/app/assets/javascripts/bootstrap-sprockets.js +8 -0
  4. data/app/assets/javascripts/bootstrap/affix.js +164 -0
  5. data/app/assets/javascripts/bootstrap/alert.js +95 -0
  6. data/app/assets/javascripts/bootstrap/button.js +125 -0
  7. data/app/assets/javascripts/bootstrap/collapse.js +212 -0
  8. data/app/assets/javascripts/bootstrap/dropdown.js +165 -0
  9. data/app/assets/javascripts/bootstrap/modal.js +358 -0
  10. data/app/assets/javascripts/bootstrap/tab.js +155 -0
  11. data/app/assets/javascripts/bootstrap/transition.js +59 -0
  12. data/app/assets/javascripts/lightbox.js +4 -4
  13. data/app/assets/javascripts/publify_admin.js +1 -35
  14. data/app/assets/stylesheets/_bootstrap-compass.scss +9 -0
  15. data/app/assets/stylesheets/_bootstrap-mincer.scss +19 -0
  16. data/app/assets/stylesheets/_bootstrap-sprockets.scss +9 -0
  17. data/app/assets/stylesheets/_bootstrap.scss +42 -0
  18. data/app/assets/stylesheets/administration_structure.css.scss +1 -45
  19. data/app/assets/stylesheets/bootstrap/_alerts.scss +73 -0
  20. data/app/assets/stylesheets/bootstrap/_button-groups.scss +242 -0
  21. data/app/assets/stylesheets/bootstrap/_buttons.scss +168 -0
  22. data/app/assets/stylesheets/bootstrap/_close.scss +37 -0
  23. data/app/assets/stylesheets/bootstrap/_code.scss +69 -0
  24. data/app/assets/stylesheets/bootstrap/_component-animations.scss +38 -0
  25. data/app/assets/stylesheets/bootstrap/_dropdowns.scss +213 -0
  26. data/app/assets/stylesheets/bootstrap/_forms.scss +586 -0
  27. data/app/assets/stylesheets/bootstrap/_grid.scss +94 -0
  28. data/app/assets/stylesheets/bootstrap/_labels.scss +66 -0
  29. data/app/assets/stylesheets/bootstrap/_media.scss +66 -0
  30. data/app/assets/stylesheets/bootstrap/_mixins.scss +37 -0
  31. data/app/assets/stylesheets/bootstrap/_modals.scss +150 -0
  32. data/app/assets/stylesheets/bootstrap/_navbar.scss +479 -0
  33. data/app/assets/stylesheets/bootstrap/_navs.scss +242 -0
  34. data/app/assets/stylesheets/bootstrap/_normalize.scss +427 -0
  35. data/app/assets/stylesheets/bootstrap/_pagination.scss +86 -0
  36. data/app/assets/stylesheets/bootstrap/_panels.scss +222 -0
  37. data/app/assets/stylesheets/bootstrap/_print.scss +99 -0
  38. data/app/assets/stylesheets/bootstrap/_scaffolding.scss +160 -0
  39. data/app/assets/stylesheets/bootstrap/_tables.scss +234 -0
  40. data/app/assets/stylesheets/bootstrap/_theme.scss +224 -0
  41. data/app/assets/stylesheets/bootstrap/_type.scss +296 -0
  42. data/app/assets/stylesheets/bootstrap/_utilities.scss +55 -0
  43. data/app/assets/stylesheets/bootstrap/_variables.scss +638 -0
  44. data/app/assets/stylesheets/bootstrap/_wells.scss +29 -0
  45. data/app/assets/stylesheets/bootstrap/mixins/_alerts.scss +15 -0
  46. data/app/assets/stylesheets/bootstrap/mixins/_background-variant.scss +12 -0
  47. data/app/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
  48. data/app/assets/stylesheets/bootstrap/mixins/_buttons.scss +56 -0
  49. data/app/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
  50. data/app/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
  51. data/app/assets/stylesheets/bootstrap/mixins/_forms.scss +82 -0
  52. data/app/assets/stylesheets/bootstrap/mixins/_gradients.scss +56 -0
  53. data/app/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
  54. data/app/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
  55. data/app/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
  56. data/app/assets/stylesheets/bootstrap/mixins/_image.scss +28 -0
  57. data/app/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
  58. data/app/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
  59. data/app/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  60. data/app/assets/stylesheets/bootstrap/mixins/_opacity.scss +7 -0
  61. data/app/assets/stylesheets/bootstrap/mixins/_pagination.scss +24 -0
  62. data/app/assets/stylesheets/bootstrap/mixins/_panels.scss +20 -0
  63. data/app/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
  64. data/app/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
  65. data/app/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +17 -0
  66. data/app/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
  67. data/app/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
  68. data/app/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
  69. data/app/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +12 -0
  70. data/app/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
  71. data/app/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  72. data/app/assets/stylesheets/lightbox.css +3 -3
  73. data/app/assets/stylesheets/publify_admin.css.scss +0 -1
  74. data/app/controllers/accounts_controller.rb +2 -0
  75. data/app/controllers/admin/base_controller.rb +8 -16
  76. data/app/controllers/admin/content_controller.rb +38 -36
  77. data/app/controllers/admin/dashboard_controller.rb +16 -65
  78. data/app/controllers/admin/feedback_controller.rb +45 -37
  79. data/app/controllers/admin/notes_controller.rb +16 -10
  80. data/app/controllers/admin/pages_controller.rb +19 -29
  81. data/app/controllers/admin/post_types_controller.rb +7 -5
  82. data/app/controllers/admin/profiles_controller.rb +15 -5
  83. data/app/controllers/admin/redirects_controller.rb +9 -5
  84. data/app/controllers/admin/resources_controller.rb +7 -4
  85. data/app/controllers/admin/seo_controller.rb +12 -10
  86. data/app/controllers/admin/settings_controller.rb +7 -5
  87. data/app/controllers/admin/sidebar_controller.rb +6 -5
  88. data/app/controllers/admin/tags_controller.rb +6 -3
  89. data/app/controllers/admin/themes_controller.rb +10 -7
  90. data/app/controllers/admin/users_controller.rb +10 -7
  91. data/app/controllers/articles_controller.rb +49 -33
  92. data/app/controllers/authors_controller.rb +6 -3
  93. data/app/controllers/base_controller.rb +9 -11
  94. data/app/controllers/comments_controller.rb +13 -13
  95. data/app/controllers/content_controller.rb +4 -2
  96. data/app/controllers/feedback_controller.rb +4 -2
  97. data/app/controllers/notes_controller.rb +5 -3
  98. data/app/controllers/setup_controller.rb +15 -12
  99. data/app/controllers/tags_controller.rb +6 -4
  100. data/app/controllers/text_controller.rb +2 -4
  101. data/app/controllers/textfilter_controller.rb +2 -0
  102. data/app/controllers/theme_controller.rb +18 -13
  103. data/app/controllers/xml_controller.rb +2 -0
  104. data/app/helpers/admin/base_helper.rb +28 -29
  105. data/app/helpers/admin/feedback_helper.rb +34 -24
  106. data/app/helpers/articles_helper.rb +4 -2
  107. data/app/helpers/authors_helper.rb +7 -16
  108. data/app/helpers/base_helper.rb +56 -52
  109. data/app/helpers/blog_helper.rb +4 -2
  110. data/app/helpers/xml_helper.rb +3 -1
  111. data/app/jobs/application_job.rb +2 -0
  112. data/app/mailers/notification_mailer.rb +5 -3
  113. data/app/models/ability.rb +25 -23
  114. data/app/models/archives_sidebar.rb +14 -11
  115. data/app/models/article.rb +42 -42
  116. data/app/models/article/factory.rb +14 -6
  117. data/app/models/blog.rb +86 -75
  118. data/app/models/comment.rb +10 -11
  119. data/app/models/config_manager.rb +4 -2
  120. data/app/models/content.rb +37 -50
  121. data/app/models/content_base.rb +10 -4
  122. data/app/models/feedback.rb +21 -17
  123. data/app/models/meta_sidebar.rb +4 -3
  124. data/app/models/note.rb +26 -25
  125. data/app/models/page.rb +9 -8
  126. data/app/models/page_sidebar.rb +4 -2
  127. data/app/models/ping.rb +3 -1
  128. data/app/models/post_type.rb +3 -3
  129. data/app/models/redirect.rb +13 -7
  130. data/app/models/redirection.rb +3 -1
  131. data/app/models/resource.rb +5 -3
  132. data/app/models/search_sidebar.rb +4 -2
  133. data/app/models/sidebar.rb +11 -6
  134. data/app/models/static_sidebar.rb +14 -13
  135. data/app/models/tag.rb +15 -11
  136. data/app/models/tag_sidebar.rb +6 -3
  137. data/app/models/text_filter.rb +85 -11
  138. data/app/models/trackback.rb +7 -11
  139. data/app/models/trigger.rb +7 -4
  140. data/app/models/user.rb +44 -43
  141. data/app/services/title_builder.rb +52 -45
  142. data/app/uploaders/resource_uploader.rb +5 -3
  143. data/app/views/accounts/confirm.html.erb +3 -3
  144. data/app/views/admin/content/_article_list.html.erb +23 -8
  145. data/app/views/admin/content/_form.html.erb +71 -47
  146. data/app/views/admin/content/autosave.js.erb +2 -2
  147. data/app/views/admin/content/edit.html.erb +1 -1
  148. data/app/views/admin/content/index.html.erb +25 -15
  149. data/app/views/admin/content/new.html.erb +2 -2
  150. data/app/views/admin/dashboard/_comment.html.erb +5 -5
  151. data/app/views/admin/dashboard/_comments.html.erb +2 -2
  152. data/app/views/admin/dashboard/_drafts.html.erb +5 -5
  153. data/app/views/admin/dashboard/_overview.html.erb +7 -9
  154. data/app/views/admin/dashboard/_welcome.html.erb +11 -11
  155. data/app/views/admin/dashboard/index.html.erb +12 -7
  156. data/app/views/admin/feedback/_button.html.erb +6 -6
  157. data/app/views/admin/feedback/_feedback.html.erb +3 -3
  158. data/app/views/admin/feedback/_ham.html.erb +27 -9
  159. data/app/views/admin/feedback/_spam.html.erb +26 -16
  160. data/app/views/admin/feedback/article.html.erb +20 -21
  161. data/app/views/admin/feedback/edit.html.erb +14 -15
  162. data/app/views/admin/feedback/{ham.js → ham.js.erb} +0 -0
  163. data/app/views/admin/feedback/index.html.erb +25 -23
  164. data/app/views/admin/feedback/{spam.js → spam.js.erb} +0 -0
  165. data/app/views/admin/migrations/show.html.erb +10 -11
  166. data/app/views/admin/notes/_form.html.erb +13 -13
  167. data/app/views/admin/notes/_list.html.erb +19 -8
  168. data/app/views/admin/notes/_note.html.erb +12 -7
  169. data/app/views/admin/notes/edit.html.erb +6 -1
  170. data/app/views/admin/notes/index.html.erb +5 -1
  171. data/app/views/admin/notes/show.html.erb +2 -2
  172. data/app/views/admin/pages/_form.html.erb +86 -77
  173. data/app/views/admin/pages/_pages.html.erb +11 -4
  174. data/app/views/admin/pages/edit.html.erb +3 -1
  175. data/app/views/admin/pages/index.html.erb +10 -6
  176. data/app/views/admin/pages/new.html.erb +3 -1
  177. data/app/views/admin/post_types/_index_and_form.html.erb +15 -16
  178. data/app/views/admin/post_types/edit.html.erb +1 -1
  179. data/app/views/admin/post_types/index.html.erb +1 -1
  180. data/app/views/admin/profiles/index.html.erb +2 -3
  181. data/app/views/admin/redirects/_index_and_form.html.erb +10 -11
  182. data/app/views/admin/redirects/edit.html.erb +1 -1
  183. data/app/views/admin/redirects/index.html.erb +1 -1
  184. data/app/views/admin/resources/index.html.erb +19 -16
  185. data/app/views/admin/seo/_general.html.erb +23 -47
  186. data/app/views/admin/seo/_permalinks.html.erb +16 -16
  187. data/app/views/admin/seo/_titles.html.erb +63 -64
  188. data/app/views/admin/seo/show.html.erb +14 -19
  189. data/app/views/admin/settings/display.html.erb +22 -25
  190. data/app/views/admin/settings/feedback.html.erb +31 -32
  191. data/app/views/admin/settings/index.html.erb +23 -24
  192. data/app/views/admin/settings/write.html.erb +21 -22
  193. data/app/views/admin/shared/_edit.html.erb +3 -3
  194. data/app/views/admin/shared/_menu.html.erb +26 -26
  195. data/app/views/admin/shared/_twitter_alert.html.erb +1 -1
  196. data/app/views/admin/sidebar/_config.html.erb +5 -5
  197. data/app/views/admin/sidebar/_target_sidebar.html.erb +4 -4
  198. data/app/views/admin/sidebar/index.html.erb +7 -7
  199. data/app/views/admin/tags/_index_and_form.html.erb +11 -12
  200. data/app/views/admin/tags/edit.html.erb +1 -1
  201. data/app/views/admin/tags/index.html.erb +1 -1
  202. data/app/views/admin/themes/index.html.erb +5 -6
  203. data/app/views/admin/users/_form.html.erb +34 -34
  204. data/app/views/admin/users/edit.html.erb +2 -2
  205. data/app/views/admin/users/index.html.erb +10 -12
  206. data/app/views/admin/users/new.html.erb +2 -2
  207. data/app/views/archives_sidebar/_content.html.erb +2 -2
  208. data/app/views/articles/_archives_article.html.erb +3 -3
  209. data/app/views/articles/_article.html.erb +7 -9
  210. data/app/views/articles/_article_author.html.erb +4 -0
  211. data/app/views/articles/_article_content.html.erb +2 -2
  212. data/app/views/articles/_article_excerpt.html.erb +2 -2
  213. data/app/views/articles/_article_links.html.erb +1 -1
  214. data/app/views/articles/_comment_errors.html.erb +1 -1
  215. data/app/views/articles/_comment_form.html.erb +12 -12
  216. data/app/views/articles/_comment_preview.html.erb +3 -3
  217. data/app/views/articles/_password_form.html.erb +4 -4
  218. data/app/views/articles/_trackback.html.erb +2 -2
  219. data/app/views/articles/archives.html.erb +1 -1
  220. data/app/views/articles/feedback_atom_feed.atom.builder +3 -1
  221. data/app/views/articles/feedback_rss_feed.rss.builder +9 -8
  222. data/app/views/articles/index_atom_feed.atom.builder +5 -3
  223. data/app/views/articles/index_rss_feed.rss.builder +10 -9
  224. data/app/views/articles/live_search.html.erb +3 -3
  225. data/app/views/articles/read.html.erb +16 -8
  226. data/app/views/articles/search.html.erb +2 -2
  227. data/app/views/articles/trackback.xml.builder +3 -1
  228. data/app/views/articles/view_page.html.erb +2 -2
  229. data/app/views/authors/show.html.erb +9 -9
  230. data/app/views/authors/show_atom_feed.atom.builder +4 -2
  231. data/app/views/authors/show_rss_feed.rss.builder +10 -9
  232. data/app/views/comments/_comment.html.erb +3 -3
  233. data/app/views/devise/mailer/reset_password_instructions.html.erb +7 -9
  234. data/app/views/devise/passwords/edit.html.erb +4 -4
  235. data/app/views/devise/passwords/new.html.erb +1 -1
  236. data/app/views/devise/registrations/new.html.erb +5 -5
  237. data/app/views/devise/sessions/new.html.erb +3 -3
  238. data/app/views/errors/404.html.erb +2 -2
  239. data/app/views/feedback/index.atom.builder +3 -1
  240. data/app/views/feedback/index.rss.builder +9 -8
  241. data/app/views/layouts/accounts.html.erb +26 -26
  242. data/app/views/layouts/administration.html.erb +31 -31
  243. data/app/views/layouts/default.html.erb +4 -3
  244. data/app/views/layouts/editor.html.erb +5 -19
  245. data/app/views/meta_sidebar/_content.html.erb +2 -2
  246. data/app/views/notes/_note.html.erb +1 -1
  247. data/app/views/notes/index.html.erb +1 -1
  248. data/app/views/notes/show_in_reply.html.erb +1 -1
  249. data/app/views/notification_mailer/_mail_footer.html.erb +3 -3
  250. data/app/views/notification_mailer/article.html.erb +2 -2
  251. data/app/views/notification_mailer/comment.html.erb +5 -5
  252. data/app/views/notification_mailer/notif_user.html.erb +1 -1
  253. data/app/views/page_sidebar/_content.html.erb +1 -1
  254. data/app/views/search_sidebar/_content.html.erb +2 -2
  255. data/app/views/settings/install.html.erb +2 -2
  256. data/app/views/setup/index.html.erb +7 -7
  257. data/app/views/shared/_atom_header.atom.builder +4 -4
  258. data/app/views/shared/_atom_item_article.atom.builder +19 -29
  259. data/app/views/shared/_atom_item_comment.atom.builder +4 -2
  260. data/app/views/shared/_atom_item_trackback.atom.builder +4 -2
  261. data/app/views/shared/_google_analytics.html.erb +8 -0
  262. data/app/views/shared/_page_header.html.erb +9 -12
  263. data/app/views/shared/_rss_item_article.rss.builder +9 -7
  264. data/app/views/shared/_rss_item_comment.rss.builder +3 -1
  265. data/app/views/shared/_rss_item_trackback.rss.builder +3 -1
  266. data/app/views/sidebar/display_plugins.html.erb +1 -1
  267. data/app/views/tag_sidebar/_content.html.erb +1 -1
  268. data/app/views/tags/index.html.erb +1 -1
  269. data/app/views/xml/_googlesitemap_item_article.googlesitemap.builder +2 -0
  270. data/app/views/xml/_googlesitemap_item_category.googlesitemap.builder +2 -0
  271. data/app/views/xml/_googlesitemap_item_page.googlesitemap.builder +2 -0
  272. data/app/views/xml/_googlesitemap_item_tag.googlesitemap.builder +2 -0
  273. data/app/views/xml/sitemap.googlesitemap.builder +4 -2
  274. data/config/i18n-tasks.yml +0 -5
  275. data/config/initializers/devise.rb +10 -4
  276. data/config/initializers/mime_types.rb +3 -1
  277. data/config/locales/da.yml +134 -73
  278. data/config/locales/de.yml +142 -77
  279. data/config/locales/en.yml +128 -68
  280. data/config/locales/es-MX.yml +135 -71
  281. data/config/locales/fr.yml +167 -88
  282. data/config/locales/he.yml +128 -72
  283. data/config/locales/it.yml +136 -74
  284. data/config/locales/ja.yml +110 -66
  285. data/config/locales/lt.yml +153 -76
  286. data/config/locales/nb-NO.yml +123 -67
  287. data/config/locales/nl.yml +140 -77
  288. data/config/locales/pl.yml +329 -240
  289. data/config/locales/pt-BR.yml +137 -72
  290. data/config/locales/ro.yml +148 -72
  291. data/config/locales/ru.yml +161 -71
  292. data/config/locales/zh-CN.yml +106 -61
  293. data/config/locales/zh-TW.yml +109 -63
  294. data/config/routes.rb +68 -63
  295. data/db/migrate/113_initial_schema.rb +191 -191
  296. data/db/migrate/114_fixes_buggy_articles_and_notes.rb +10 -7
  297. data/db/migrate/115_drops_categories_for_tags.rb +5 -4
  298. data/db/migrate/20150207131657_add_missing_indexes.rb +2 -0
  299. data/db/migrate/20150807134129_simplify_redirect_relations.rb +5 -0
  300. data/db/migrate/20150808052637_add_blog_ids.rb +9 -3
  301. data/db/migrate/20150808191127_add_blog_id_to_redirects.rb +2 -0
  302. data/db/migrate/20150810094754_add_blog_id_to_tags.rb +2 -0
  303. data/db/migrate/20160108111120_add_devise_to_users.rb +4 -2
  304. data/db/migrate/20160108184201_move_last_connection_to_last_sign_in_at.rb +2 -0
  305. data/db/migrate/20160110094906_remove_profiles_rights.rb +2 -0
  306. data/db/migrate/20160605103918_replace_profile_id_with_string.rb +2 -0
  307. data/db/migrate/20160605154632_remove_profiles.rb +10 -5
  308. data/db/migrate/20160701061851_demand_blog_id_on_contents.rb +2 -0
  309. data/db/migrate/20160701062604_add_blog_id_to_resources.rb +2 -0
  310. data/db/migrate/20170528093024_move_resources_to_content.rb +2 -0
  311. data/db/migrate/20170528094923_move_tags_to_content.rb +2 -0
  312. data/db/migrate/20170528201606_remove_separate_published_flag.rb +2 -0
  313. data/db/migrate/20170605071626_remove_extra_state_columns_from_feedback.rb +2 -0
  314. data/db/migrate/20170702105201_remove_published_at_from_feedback.rb +2 -0
  315. data/db/migrate/20190208151235_add_text_filter_name_fields.rb +9 -0
  316. data/db/migrate/20190208152646_move_text_filter_to_name.rb +97 -0
  317. data/db/migrate/20190209155717_remove_text_filter_ids.rb +19 -0
  318. data/db/migrate/20190209160610_remove_text_filters.rb +17 -0
  319. data/db/migrate/20200413140440_add_unique_indexes.rb +10 -0
  320. data/db/seeds.rb +8 -20
  321. data/lib/email_notify.rb +3 -1
  322. data/lib/format.rb +4 -12
  323. data/lib/publify_core.rb +36 -35
  324. data/lib/publify_core/engine.rb +11 -4
  325. data/lib/publify_core/lang.rb +5 -1
  326. data/lib/publify_core/testing_support/dns_mock.rb +15 -0
  327. data/lib/publify_core/testing_support/factories.rb +240 -0
  328. data/lib/publify_core/testing_support/feed_assertions.rb +48 -0
  329. data/lib/publify_core/testing_support/fixtures/exploit.svg +4 -0
  330. data/lib/publify_core/testing_support/fixtures/fakepng.png +1 -0
  331. data/lib/publify_core/testing_support/fixtures/otherfile.txt +1 -0
  332. data/lib/publify_core/testing_support/fixtures/testfile.png +0 -0
  333. data/lib/publify_core/testing_support/fixtures/testfile.txt +1 -0
  334. data/lib/publify_core/testing_support/upload_fixtures.rb +15 -0
  335. data/lib/publify_core/version.rb +3 -1
  336. data/lib/publify_guid.rb +3 -1
  337. data/lib/publify_plugins.rb +10 -5
  338. data/lib/publify_textfilter_markdown.rb +38 -25
  339. data/lib/publify_textfilter_none.rb +5 -3
  340. data/lib/publify_textfilter_smartypants.rb +5 -3
  341. data/lib/publify_textfilter_textile.rb +7 -4
  342. data/lib/publify_textfilter_twitterfilter.rb +13 -7
  343. data/lib/publify_time.rb +4 -0
  344. data/lib/sidebar_field.rb +15 -13
  345. data/lib/sidebar_registry.rb +5 -3
  346. data/lib/spam_protection.rb +19 -17
  347. data/lib/tasks/i18n.rake +9 -0
  348. data/lib/tasks/manifest.rake +30 -0
  349. data/lib/tasks/publify_core_tasks.rake +2 -0
  350. data/lib/text_filter_plugin.rb +30 -29
  351. data/lib/theme.rb +5 -5
  352. data/lib/transforms.rb +21 -20
  353. data/themes/plain/javascripts/theme.js +0 -0
  354. metadata +247 -109
  355. data/app/assets/javascripts/widearea.js +0 -486
  356. data/app/assets/stylesheets/widearea.css +0 -133
  357. data/app/controllers/admin/textfilters_controller.rb +0 -6
  358. data/app/views/admin/dashboard/_inbound.html.erb +0 -31
  359. data/app/views/admin/notes/_header.html.erb +0 -6
  360. data/app/views/articles/_protected_article_content.html.erb +0 -6
@@ -0,0 +1,94 @@
1
+ //
2
+ // Grid system
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Container widths
7
+ //
8
+ // Set the container width, and override it for fixed navbars in media queries.
9
+
10
+ .container {
11
+ @include container-fixed;
12
+
13
+ @media (min-width: $screen-sm-min) {
14
+ width: $container-sm;
15
+ }
16
+ @media (min-width: $screen-md-min) {
17
+ width: $container-md;
18
+ }
19
+ @media (min-width: $screen-lg-min) {
20
+ width: $container-lg;
21
+ }
22
+ }
23
+
24
+
25
+ // Fluid container
26
+ //
27
+ // Utilizes the mixin meant for fixed width containers, but without any defined
28
+ // width for fluid, full width layouts.
29
+
30
+ .container-fluid {
31
+ @include container-fixed;
32
+ }
33
+
34
+
35
+ // Row
36
+ //
37
+ // Rows contain and clear the floats of your columns.
38
+
39
+ .row {
40
+ @include make-row;
41
+ }
42
+
43
+ .row-no-gutters {
44
+ margin-right: 0;
45
+ margin-left: 0;
46
+
47
+ [class*="col-"] {
48
+ padding-right: 0;
49
+ padding-left: 0;
50
+ }
51
+ }
52
+
53
+
54
+ // Columns
55
+ //
56
+ // Common styles for small and large grid columns
57
+
58
+ @include make-grid-columns;
59
+
60
+
61
+ // Extra small grid
62
+ //
63
+ // Columns, offsets, pushes, and pulls for extra small devices like
64
+ // smartphones.
65
+
66
+ @include make-grid(xs);
67
+
68
+
69
+ // Small grid
70
+ //
71
+ // Columns, offsets, pushes, and pulls for the small device range, from phones
72
+ // to tablets.
73
+
74
+ @media (min-width: $screen-sm-min) {
75
+ @include make-grid(sm);
76
+ }
77
+
78
+
79
+ // Medium grid
80
+ //
81
+ // Columns, offsets, pushes, and pulls for the desktop device range.
82
+
83
+ @media (min-width: $screen-md-min) {
84
+ @include make-grid(md);
85
+ }
86
+
87
+
88
+ // Large grid
89
+ //
90
+ // Columns, offsets, pushes, and pulls for the large desktop device range.
91
+
92
+ @media (min-width: $screen-lg-min) {
93
+ @include make-grid(lg);
94
+ }
@@ -0,0 +1,66 @@
1
+ //
2
+ // Labels
3
+ // --------------------------------------------------
4
+
5
+ .label {
6
+ display: inline;
7
+ padding: .2em .6em .3em;
8
+ font-size: 75%;
9
+ font-weight: 700;
10
+ line-height: 1;
11
+ color: $label-color;
12
+ text-align: center;
13
+ white-space: nowrap;
14
+ vertical-align: baseline;
15
+ border-radius: .25em;
16
+
17
+ // [converter] extracted a& to a.label
18
+
19
+ // Empty labels collapse automatically (not available in IE8)
20
+ &:empty {
21
+ display: none;
22
+ }
23
+
24
+ // Quick fix for labels in buttons
25
+ .btn & {
26
+ position: relative;
27
+ top: -1px;
28
+ }
29
+ }
30
+
31
+ // Add hover effects, but only for links
32
+ a.label {
33
+ &:hover,
34
+ &:focus {
35
+ color: $label-link-hover-color;
36
+ text-decoration: none;
37
+ cursor: pointer;
38
+ }
39
+ }
40
+
41
+ // Colors
42
+ // Contextual variations (linked labels get darker on :hover)
43
+
44
+ .label-default {
45
+ @include label-variant($label-default-bg);
46
+ }
47
+
48
+ .label-primary {
49
+ @include label-variant($label-primary-bg);
50
+ }
51
+
52
+ .label-success {
53
+ @include label-variant($label-success-bg);
54
+ }
55
+
56
+ .label-info {
57
+ @include label-variant($label-info-bg);
58
+ }
59
+
60
+ .label-warning {
61
+ @include label-variant($label-warning-bg);
62
+ }
63
+
64
+ .label-danger {
65
+ @include label-variant($label-danger-bg);
66
+ }
@@ -0,0 +1,66 @@
1
+ .media {
2
+ // Proper spacing between instances of .media
3
+ margin-top: 15px;
4
+
5
+ &:first-child {
6
+ margin-top: 0;
7
+ }
8
+ }
9
+
10
+ .media,
11
+ .media-body {
12
+ overflow: hidden;
13
+ zoom: 1;
14
+ }
15
+
16
+ .media-body {
17
+ width: 10000px;
18
+ }
19
+
20
+ .media-object {
21
+ display: block;
22
+
23
+ // Fix collapse in webkit from max-width: 100% and display: table-cell.
24
+ &.img-thumbnail {
25
+ max-width: none;
26
+ }
27
+ }
28
+
29
+ .media-right,
30
+ .media > .pull-right {
31
+ padding-left: 10px;
32
+ }
33
+
34
+ .media-left,
35
+ .media > .pull-left {
36
+ padding-right: 10px;
37
+ }
38
+
39
+ .media-left,
40
+ .media-right,
41
+ .media-body {
42
+ display: table-cell;
43
+ vertical-align: top;
44
+ }
45
+
46
+ .media-middle {
47
+ vertical-align: middle;
48
+ }
49
+
50
+ .media-bottom {
51
+ vertical-align: bottom;
52
+ }
53
+
54
+ // Reset margins on headings for tighter default spacing
55
+ .media-heading {
56
+ margin-top: 0;
57
+ margin-bottom: 5px;
58
+ }
59
+
60
+ // Media list variation
61
+ //
62
+ // Undo default ul/ol styles
63
+ .media-list {
64
+ padding-left: 0;
65
+ list-style: none;
66
+ }
@@ -0,0 +1,37 @@
1
+ // Mixins
2
+ // --------------------------------------------------
3
+
4
+ // Utilities
5
+ @import "mixins/hide-text";
6
+ @import "mixins/opacity";
7
+ @import "mixins/image";
8
+ @import "mixins/labels";
9
+ @import "mixins/reset-filter";
10
+ @import "mixins/resize";
11
+ @import "mixins/responsive-visibility";
12
+ @import "mixins/size";
13
+ @import "mixins/tab-focus";
14
+ @import "mixins/text-emphasis";
15
+ @import "mixins/text-overflow";
16
+ @import "mixins/vendor-prefixes";
17
+
18
+ // Components
19
+ @import "mixins/alerts";
20
+ @import "mixins/buttons";
21
+ @import "mixins/panels";
22
+ @import "mixins/pagination";
23
+ @import "mixins/nav-divider";
24
+ @import "mixins/forms";
25
+ @import "mixins/table-row";
26
+
27
+ // Skins
28
+ @import "mixins/background-variant";
29
+ @import "mixins/border-radius";
30
+ @import "mixins/gradients";
31
+
32
+ // Layout
33
+ @import "mixins/clearfix";
34
+ @import "mixins/center-block";
35
+ @import "mixins/nav-vertical-align";
36
+ @import "mixins/grid-framework";
37
+ @import "mixins/grid";
@@ -0,0 +1,150 @@
1
+ //
2
+ // Modals
3
+ // --------------------------------------------------
4
+
5
+ // .modal-open - body class for killing the scroll
6
+ // .modal - container to scroll within
7
+ // .modal-dialog - positioning shell for the actual modal
8
+ // .modal-content - actual modal w/ bg and corners and shit
9
+
10
+ // Kill the scroll on the body
11
+ .modal-open {
12
+ overflow: hidden;
13
+ }
14
+
15
+ // Container that the modal scrolls within
16
+ .modal {
17
+ position: fixed;
18
+ top: 0;
19
+ right: 0;
20
+ bottom: 0;
21
+ left: 0;
22
+ z-index: $zindex-modal;
23
+ display: none;
24
+ overflow: hidden;
25
+ -webkit-overflow-scrolling: touch;
26
+
27
+ // Prevent Chrome on Windows from adding a focus outline. For details, see
28
+ // https://github.com/twbs/bootstrap/pull/10951.
29
+ outline: 0;
30
+
31
+ // When fading in the modal, animate it to slide down
32
+ &.fade .modal-dialog {
33
+ @include translate(0, -25%);
34
+ @include transition-transform(0.3s ease-out);
35
+ }
36
+ &.in .modal-dialog { @include translate(0, 0); }
37
+ }
38
+ .modal-open .modal {
39
+ overflow-x: hidden;
40
+ overflow-y: auto;
41
+ }
42
+
43
+ // Shell div to position the modal with bottom padding
44
+ .modal-dialog {
45
+ position: relative;
46
+ width: auto;
47
+ margin: 10px;
48
+ }
49
+
50
+ // Actual modal
51
+ .modal-content {
52
+ position: relative;
53
+ background-color: $modal-content-bg;
54
+ background-clip: padding-box;
55
+ border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
56
+ border: 1px solid $modal-content-border-color;
57
+ border-radius: $border-radius-large;
58
+ @include box-shadow(0 3px 9px rgba(0, 0, 0, .5));
59
+ // Remove focus outline from opened modal
60
+ outline: 0;
61
+ }
62
+
63
+ // Modal background
64
+ .modal-backdrop {
65
+ position: fixed;
66
+ top: 0;
67
+ right: 0;
68
+ bottom: 0;
69
+ left: 0;
70
+ z-index: $zindex-modal-background;
71
+ background-color: $modal-backdrop-bg;
72
+ // Fade for backdrop
73
+ &.fade { @include opacity(0); }
74
+ &.in { @include opacity($modal-backdrop-opacity); }
75
+ }
76
+
77
+ // Modal header
78
+ // Top section of the modal w/ title and dismiss
79
+ .modal-header {
80
+ padding: $modal-title-padding;
81
+ border-bottom: 1px solid $modal-header-border-color;
82
+ @include clearfix;
83
+ }
84
+ // Close icon
85
+ .modal-header .close {
86
+ margin-top: -2px;
87
+ }
88
+
89
+ // Title text within header
90
+ .modal-title {
91
+ margin: 0;
92
+ line-height: $modal-title-line-height;
93
+ }
94
+
95
+ // Modal body
96
+ // Where all modal content resides (sibling of .modal-header and .modal-footer)
97
+ .modal-body {
98
+ position: relative;
99
+ padding: $modal-inner-padding;
100
+ }
101
+
102
+ // Footer (for actions)
103
+ .modal-footer {
104
+ padding: $modal-inner-padding;
105
+ text-align: right; // right align buttons
106
+ border-top: 1px solid $modal-footer-border-color;
107
+ @include clearfix; // clear it in case folks use .pull-* classes on buttons
108
+
109
+ // Properly space out buttons
110
+ .btn + .btn {
111
+ margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
112
+ margin-left: 5px;
113
+ }
114
+ // but override that for button groups
115
+ .btn-group .btn + .btn {
116
+ margin-left: -1px;
117
+ }
118
+ // and override it for block buttons as well
119
+ .btn-block + .btn-block {
120
+ margin-left: 0;
121
+ }
122
+ }
123
+
124
+ // Measure scrollbar width for padding body during modal show/hide
125
+ .modal-scrollbar-measure {
126
+ position: absolute;
127
+ top: -9999px;
128
+ width: 50px;
129
+ height: 50px;
130
+ overflow: scroll;
131
+ }
132
+
133
+ // Scale up the modal
134
+ @media (min-width: $screen-sm-min) {
135
+ // Automatically set modal's width for larger viewports
136
+ .modal-dialog {
137
+ width: $modal-md;
138
+ margin: 30px auto;
139
+ }
140
+ .modal-content {
141
+ @include box-shadow(0 5px 15px rgba(0, 0, 0, .5));
142
+ }
143
+
144
+ // Modal sizes
145
+ .modal-sm { width: $modal-sm; }
146
+ }
147
+
148
+ @media (min-width: $screen-md-min) {
149
+ .modal-lg { width: $modal-lg; }
150
+ }
@@ -0,0 +1,479 @@
1
+ //
2
+ // Navbars
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Wrapper and base class
7
+ //
8
+ // Provide a static navbar from which we expand to create full-width, fixed, and
9
+ // other navbar variations.
10
+
11
+ .navbar {
12
+ position: relative;
13
+ min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
14
+ margin-bottom: $navbar-margin-bottom;
15
+ border: 1px solid transparent;
16
+
17
+ // Prevent floats from breaking the navbar
18
+ @include clearfix;
19
+
20
+ @media (min-width: $grid-float-breakpoint) {
21
+ border-radius: $navbar-border-radius;
22
+ }
23
+ }
24
+
25
+
26
+ // Navbar heading
27
+ //
28
+ // Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
29
+ // styling of responsive aspects.
30
+
31
+ .navbar-header {
32
+ @include clearfix;
33
+
34
+ @media (min-width: $grid-float-breakpoint) {
35
+ float: left;
36
+ }
37
+ }
38
+
39
+
40
+ // Navbar collapse (body)
41
+ //
42
+ // Group your navbar content into this for easy collapsing and expanding across
43
+ // various device sizes. By default, this content is collapsed when <768px, but
44
+ // will expand past that for a horizontal display.
45
+ //
46
+ // To start (on mobile devices) the navbar links, forms, and buttons are stacked
47
+ // vertically and include a `max-height` to overflow in case you have too much
48
+ // content for the user's viewport.
49
+
50
+ .navbar-collapse {
51
+ padding-right: $navbar-padding-horizontal;
52
+ padding-left: $navbar-padding-horizontal;
53
+ overflow-x: visible;
54
+ border-top: 1px solid transparent;
55
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
56
+ @include clearfix;
57
+ -webkit-overflow-scrolling: touch;
58
+
59
+ &.in {
60
+ overflow-y: auto;
61
+ }
62
+
63
+ @media (min-width: $grid-float-breakpoint) {
64
+ width: auto;
65
+ border-top: 0;
66
+ box-shadow: none;
67
+
68
+ &.collapse {
69
+ display: block !important;
70
+ height: auto !important;
71
+ padding-bottom: 0; // Override default setting
72
+ overflow: visible !important;
73
+ }
74
+
75
+ &.in {
76
+ overflow-y: visible;
77
+ }
78
+
79
+ // Undo the collapse side padding for navbars with containers to ensure
80
+ // alignment of right-aligned contents.
81
+ .navbar-fixed-top &,
82
+ .navbar-static-top &,
83
+ .navbar-fixed-bottom & {
84
+ padding-right: 0;
85
+ padding-left: 0;
86
+ }
87
+ }
88
+ }
89
+
90
+ .navbar-fixed-top,
91
+ .navbar-fixed-bottom {
92
+ .navbar-collapse {
93
+ max-height: $navbar-collapse-max-height;
94
+
95
+ @media (max-device-width: $screen-xs-min) and (orientation: landscape) {
96
+ max-height: 200px;
97
+ }
98
+ }
99
+
100
+ // Fix the top/bottom navbars when screen real estate supports it
101
+ position: fixed;
102
+ right: 0;
103
+ left: 0;
104
+ z-index: $zindex-navbar-fixed;
105
+
106
+ // Undo the rounded corners
107
+ @media (min-width: $grid-float-breakpoint) {
108
+ border-radius: 0;
109
+ }
110
+ }
111
+
112
+ .navbar-fixed-top {
113
+ top: 0;
114
+ border-width: 0 0 1px;
115
+ }
116
+ .navbar-fixed-bottom {
117
+ bottom: 0;
118
+ margin-bottom: 0; // override .navbar defaults
119
+ border-width: 1px 0 0;
120
+ }
121
+
122
+
123
+ // Both navbar header and collapse
124
+ //
125
+ // When a container is present, change the behavior of the header and collapse.
126
+
127
+ .container,
128
+ .container-fluid {
129
+ > .navbar-header,
130
+ > .navbar-collapse {
131
+ margin-right: -$navbar-padding-horizontal;
132
+ margin-left: -$navbar-padding-horizontal;
133
+
134
+ @media (min-width: $grid-float-breakpoint) {
135
+ margin-right: 0;
136
+ margin-left: 0;
137
+ }
138
+ }
139
+ }
140
+
141
+
142
+ //
143
+ // Navbar alignment options
144
+ //
145
+ // Display the navbar across the entirety of the page or fixed it to the top or
146
+ // bottom of the page.
147
+
148
+ // Static top (unfixed, but 100% wide) navbar
149
+ .navbar-static-top {
150
+ z-index: $zindex-navbar;
151
+ border-width: 0 0 1px;
152
+
153
+ @media (min-width: $grid-float-breakpoint) {
154
+ border-radius: 0;
155
+ }
156
+ }
157
+
158
+
159
+ // Brand/project name
160
+
161
+ .navbar-brand {
162
+ float: left;
163
+ height: $navbar-height;
164
+ padding: $navbar-padding-vertical $navbar-padding-horizontal;
165
+ font-size: $font-size-large;
166
+ line-height: $line-height-computed;
167
+
168
+ &:hover,
169
+ &:focus {
170
+ text-decoration: none;
171
+ }
172
+
173
+ > img {
174
+ display: block;
175
+ }
176
+
177
+ @media (min-width: $grid-float-breakpoint) {
178
+ .navbar > .container &,
179
+ .navbar > .container-fluid & {
180
+ margin-left: -$navbar-padding-horizontal;
181
+ }
182
+ }
183
+ }
184
+
185
+
186
+ // Navbar toggle
187
+ //
188
+ // Custom button for toggling the `.navbar-collapse`, powered by the collapse
189
+ // JavaScript plugin.
190
+
191
+ .navbar-toggle {
192
+ position: relative;
193
+ float: right;
194
+ padding: 9px 10px;
195
+ margin-right: $navbar-padding-horizontal;
196
+ @include navbar-vertical-align(34px);
197
+ background-color: transparent;
198
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
199
+ border: 1px solid transparent;
200
+ border-radius: $border-radius-base;
201
+
202
+ // We remove the `outline` here, but later compensate by attaching `:hover`
203
+ // styles to `:focus`.
204
+ &:focus {
205
+ outline: 0;
206
+ }
207
+
208
+ // Bars
209
+ .icon-bar {
210
+ display: block;
211
+ width: 22px;
212
+ height: 2px;
213
+ border-radius: 1px;
214
+ }
215
+ .icon-bar + .icon-bar {
216
+ margin-top: 4px;
217
+ }
218
+
219
+ @media (min-width: $grid-float-breakpoint) {
220
+ display: none;
221
+ }
222
+ }
223
+
224
+
225
+ // Navbar nav links
226
+ //
227
+ // Builds on top of the `.nav` components with its own modifier class to make
228
+ // the nav the full height of the horizontal nav (above 768px).
229
+
230
+ .navbar-nav {
231
+ margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal);
232
+
233
+ > li > a {
234
+ padding-top: 10px;
235
+ padding-bottom: 10px;
236
+ line-height: $line-height-computed;
237
+ }
238
+
239
+ @media (max-width: $grid-float-breakpoint-max) {
240
+ // Dropdowns get custom display when collapsed
241
+ .open .dropdown-menu {
242
+ position: static;
243
+ float: none;
244
+ width: auto;
245
+ margin-top: 0;
246
+ background-color: transparent;
247
+ border: 0;
248
+ box-shadow: none;
249
+ > li > a,
250
+ .dropdown-header {
251
+ padding: 5px 15px 5px 25px;
252
+ }
253
+ > li > a {
254
+ line-height: $line-height-computed;
255
+ &:hover,
256
+ &:focus {
257
+ background-image: none;
258
+ }
259
+ }
260
+ }
261
+ }
262
+
263
+ // Uncollapse the nav
264
+ @media (min-width: $grid-float-breakpoint) {
265
+ float: left;
266
+ margin: 0;
267
+
268
+ > li {
269
+ float: left;
270
+ > a {
271
+ padding-top: $navbar-padding-vertical;
272
+ padding-bottom: $navbar-padding-vertical;
273
+ }
274
+ }
275
+ }
276
+ }
277
+
278
+
279
+ // Dropdown menus
280
+
281
+ // Menu position and menu carets
282
+ .navbar-nav > li > .dropdown-menu {
283
+ margin-top: 0;
284
+ @include border-top-radius(0);
285
+ }
286
+ // Menu position and menu caret support for dropups via extra dropup class
287
+ .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
288
+ margin-bottom: 0;
289
+ @include border-top-radius($navbar-border-radius);
290
+ @include border-bottom-radius(0);
291
+ }
292
+
293
+
294
+ // Buttons in navbars
295
+ //
296
+ // Vertically center a button within a navbar (when *not* in a form).
297
+
298
+ .navbar-btn {
299
+ @include navbar-vertical-align($input-height-base);
300
+
301
+ &.btn-sm {
302
+ @include navbar-vertical-align($input-height-small);
303
+ }
304
+ &.btn-xs {
305
+ @include navbar-vertical-align(22);
306
+ }
307
+ }
308
+
309
+
310
+ // Text in navbars
311
+ //
312
+ // Add a class to make any element properly align itself vertically within the navbars.
313
+
314
+ .navbar-text {
315
+ @include navbar-vertical-align($line-height-computed);
316
+
317
+ @media (min-width: $grid-float-breakpoint) {
318
+ float: left;
319
+ margin-right: $navbar-padding-horizontal;
320
+ margin-left: $navbar-padding-horizontal;
321
+ }
322
+ }
323
+
324
+
325
+ // Component alignment
326
+ //
327
+ // Repurpose the pull utilities as their own navbar utilities to avoid specificity
328
+ // issues with parents and chaining. Only do this when the navbar is uncollapsed
329
+ // though so that navbar contents properly stack and align in mobile.
330
+ //
331
+ // Declared after the navbar components to ensure more specificity on the margins.
332
+
333
+ @media (min-width: $grid-float-breakpoint) {
334
+ .navbar-left {
335
+ float: left !important;
336
+ }
337
+ .navbar-right {
338
+ float: right !important;
339
+ margin-right: -$navbar-padding-horizontal;
340
+
341
+ ~ .navbar-right {
342
+ margin-right: 0;
343
+ }
344
+ }
345
+ }
346
+
347
+
348
+ // Alternate navbars
349
+ // --------------------------------------------------
350
+
351
+ // Default navbar
352
+ .navbar-default {
353
+ background-color: $navbar-default-bg;
354
+ border-color: $navbar-default-border;
355
+
356
+ .navbar-brand {
357
+ color: $navbar-default-brand-color;
358
+ &:hover,
359
+ &:focus {
360
+ color: $navbar-default-brand-hover-color;
361
+ background-color: $navbar-default-brand-hover-bg;
362
+ }
363
+ }
364
+
365
+ .navbar-text {
366
+ color: $navbar-default-color;
367
+ }
368
+
369
+ .navbar-nav {
370
+ > li > a {
371
+ color: $navbar-default-link-color;
372
+
373
+ &:hover,
374
+ &:focus {
375
+ color: $navbar-default-link-hover-color;
376
+ background-color: $navbar-default-link-hover-bg;
377
+ }
378
+ }
379
+ > .active > a {
380
+ &,
381
+ &:hover,
382
+ &:focus {
383
+ color: $navbar-default-link-active-color;
384
+ background-color: $navbar-default-link-active-bg;
385
+ }
386
+ }
387
+ > .disabled > a {
388
+ &,
389
+ &:hover,
390
+ &:focus {
391
+ color: $navbar-default-link-disabled-color;
392
+ background-color: $navbar-default-link-disabled-bg;
393
+ }
394
+ }
395
+
396
+ // Dropdown menu items
397
+ // Remove background color from open dropdown
398
+ > .open > a {
399
+ &,
400
+ &:hover,
401
+ &:focus {
402
+ color: $navbar-default-link-active-color;
403
+ background-color: $navbar-default-link-active-bg;
404
+ }
405
+ }
406
+
407
+ @media (max-width: $grid-float-breakpoint-max) {
408
+ // Dropdowns get custom display when collapsed
409
+ .open .dropdown-menu {
410
+ > li > a {
411
+ color: $navbar-default-link-color;
412
+ &:hover,
413
+ &:focus {
414
+ color: $navbar-default-link-hover-color;
415
+ background-color: $navbar-default-link-hover-bg;
416
+ }
417
+ }
418
+ > .active > a {
419
+ &,
420
+ &:hover,
421
+ &:focus {
422
+ color: $navbar-default-link-active-color;
423
+ background-color: $navbar-default-link-active-bg;
424
+ }
425
+ }
426
+ > .disabled > a {
427
+ &,
428
+ &:hover,
429
+ &:focus {
430
+ color: $navbar-default-link-disabled-color;
431
+ background-color: $navbar-default-link-disabled-bg;
432
+ }
433
+ }
434
+ }
435
+ }
436
+ }
437
+
438
+ .navbar-toggle {
439
+ border-color: $navbar-default-toggle-border-color;
440
+ &:hover,
441
+ &:focus {
442
+ background-color: $navbar-default-toggle-hover-bg;
443
+ }
444
+ .icon-bar {
445
+ background-color: $navbar-default-toggle-icon-bar-bg;
446
+ }
447
+ }
448
+
449
+ .navbar-collapse {
450
+ border-color: $navbar-default-border;
451
+ }
452
+
453
+
454
+ // Links in navbars
455
+ //
456
+ // Add a class to ensure links outside the navbar nav are colored correctly.
457
+
458
+ .navbar-link {
459
+ color: $navbar-default-link-color;
460
+ &:hover {
461
+ color: $navbar-default-link-hover-color;
462
+ }
463
+ }
464
+
465
+ .btn-link {
466
+ color: $navbar-default-link-color;
467
+ &:hover,
468
+ &:focus {
469
+ color: $navbar-default-link-hover-color;
470
+ }
471
+ &[disabled],
472
+ fieldset[disabled] & {
473
+ &:hover,
474
+ &:focus {
475
+ color: $navbar-default-link-disabled-color;
476
+ }
477
+ }
478
+ }
479
+ }