outpost-cms 0.0.3

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 (168) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +295 -0
  3. data/Rakefile +26 -0
  4. data/app/assets/images/glyphicons-halflings-red.png +0 -0
  5. data/app/assets/javascripts/outpost/application.js +1 -0
  6. data/app/assets/javascripts/outpost/auto_slug_field.js.coffee +53 -0
  7. data/app/assets/javascripts/outpost/base.js.coffee +1 -0
  8. data/app/assets/javascripts/outpost/date_time_input.js.coffee +108 -0
  9. data/app/assets/javascripts/outpost/field_counter.js.coffee +93 -0
  10. data/app/assets/javascripts/outpost/field_manager.js.coffee +37 -0
  11. data/app/assets/javascripts/outpost/global_plugins.js.coffee +87 -0
  12. data/app/assets/javascripts/outpost/index_manager.js.coffee +88 -0
  13. data/app/assets/javascripts/outpost/notification.js.coffee +46 -0
  14. data/app/assets/javascripts/outpost/preview.js.coffee +60 -0
  15. data/app/assets/javascripts/outpost/templates/date_field.jst.eco +3 -0
  16. data/app/assets/javascripts/outpost/templates/loading.jst.eco +11 -0
  17. data/app/assets/javascripts/outpost/templates/slug_generate_button.jst.eco +1 -0
  18. data/app/assets/javascripts/outpost/templates/time_field.jst.eco +3 -0
  19. data/app/assets/javascripts/outpost/templates.js +1 -0
  20. data/app/assets/javascripts/outpost.js +32 -0
  21. data/app/assets/stylesheets/outpost/_base.css.scss +127 -0
  22. data/app/assets/stylesheets/outpost/_edit.css.scss +13 -0
  23. data/app/assets/stylesheets/outpost/_forms.css.scss +116 -0
  24. data/app/assets/stylesheets/outpost/_index.css.scss +68 -0
  25. data/app/assets/stylesheets/outpost/_utility.css.scss +16 -0
  26. data/app/assets/stylesheets/outpost/application.css.scss +1 -0
  27. data/app/assets/stylesheets/outpost/bootstrap/bootstrap.css.scss +49 -0
  28. data/app/assets/stylesheets/outpost/bootstrap/datepicker.css.scss +301 -0
  29. data/app/assets/stylesheets/outpost.css.scss +14 -0
  30. data/app/controllers/outpost/application_controller.rb +40 -0
  31. data/app/controllers/outpost/base_controller.rb +3 -0
  32. data/app/controllers/outpost/errors_controller.rb +9 -0
  33. data/app/controllers/outpost/home_controller.rb +2 -0
  34. data/app/controllers/outpost/resource_controller.rb +12 -0
  35. data/app/controllers/outpost/sessions_controller.rb +36 -0
  36. data/app/helpers/authorization_helper.rb +44 -0
  37. data/app/helpers/list_helper.rb +243 -0
  38. data/app/helpers/outpost_helper.rb +49 -0
  39. data/app/helpers/render_helper.rb +41 -0
  40. data/app/helpers/utility_helper.rb +136 -0
  41. data/app/inputs/date_time_input.rb +12 -0
  42. data/app/models/permission.rb +18 -0
  43. data/app/models/user_permission.rb +4 -0
  44. data/app/views/kaminari/bootstrap/_first_page.html.erb +3 -0
  45. data/app/views/kaminari/bootstrap/_gap.html.erb +3 -0
  46. data/app/views/kaminari/bootstrap/_last_page.html.erb +3 -0
  47. data/app/views/kaminari/bootstrap/_next_page.html.erb +3 -0
  48. data/app/views/kaminari/bootstrap/_page.html.erb +3 -0
  49. data/app/views/kaminari/bootstrap/_paginator.html.erb +17 -0
  50. data/app/views/kaminari/bootstrap/_prev_page.html.erb +3 -0
  51. data/app/views/layouts/outpost/application.html.erb +101 -0
  52. data/app/views/layouts/outpost/minimal.html.erb +26 -0
  53. data/app/views/outpost/errors/error_404.html.erb +1 -0
  54. data/app/views/outpost/errors/error_500.html.erb +8 -0
  55. data/app/views/outpost/home/dashboard.html.erb +1 -0
  56. data/app/views/outpost/resource/_errors.html.erb +11 -0
  57. data/app/views/outpost/resource/_extra_fields.html.erb +1 -0
  58. data/app/views/outpost/resource/_form_fields.html.erb +9 -0
  59. data/app/views/outpost/resource/edit.html.erb +44 -0
  60. data/app/views/outpost/resource/index.html.erb +22 -0
  61. data/app/views/outpost/resource/new.html.erb +21 -0
  62. data/app/views/outpost/resource/search.html.erb +1 -0
  63. data/app/views/outpost/resource/show.html.erb +1 -0
  64. data/app/views/outpost/sessions/new.html.erb +16 -0
  65. data/app/views/outpost/shared/_add_link.html.erb +1 -0
  66. data/app/views/outpost/shared/_breadcrumbs.html.erb +15 -0
  67. data/app/views/outpost/shared/_cancel_link.html.erb +1 -0
  68. data/app/views/outpost/shared/_columns.html.erb +5 -0
  69. data/app/views/outpost/shared/_filters.html.erb +16 -0
  70. data/app/views/outpost/shared/_flash_messages.html.erb +6 -0
  71. data/app/views/outpost/shared/_form_block.html.erb +18 -0
  72. data/app/views/outpost/shared/_form_nav.html.erb +12 -0
  73. data/app/views/outpost/shared/_headers.html.erb +16 -0
  74. data/app/views/outpost/shared/_index_header.html.erb +4 -0
  75. data/app/views/outpost/shared/_list_table.html.erb +7 -0
  76. data/app/views/outpost/shared/_modal.html.erb +16 -0
  77. data/app/views/outpost/shared/_navigation.html.erb +31 -0
  78. data/app/views/outpost/shared/_notice.html.erb +1 -0
  79. data/app/views/outpost/shared/_pagination.html.erb +2 -0
  80. data/app/views/outpost/shared/_preview_errors.html.erb +9 -0
  81. data/app/views/outpost/shared/_submit_row.html.erb +50 -0
  82. data/config/routes.rb +4 -0
  83. data/lib/action_view/helpers/form_builder.rb +71 -0
  84. data/lib/outpost/breadcrumbs.rb +73 -0
  85. data/lib/outpost/config.rb +63 -0
  86. data/lib/outpost/controller/actions.rb +72 -0
  87. data/lib/outpost/controller/authentication.rb +34 -0
  88. data/lib/outpost/controller/authorization.rb +28 -0
  89. data/lib/outpost/controller/callbacks.rb +14 -0
  90. data/lib/outpost/controller/custom_errors.rb +41 -0
  91. data/lib/outpost/controller/filtering.rb +22 -0
  92. data/lib/outpost/controller/helpers.rb +52 -0
  93. data/lib/outpost/controller/ordering.rb +46 -0
  94. data/lib/outpost/controller/preferences.rb +71 -0
  95. data/lib/outpost/controller.rb +123 -0
  96. data/lib/outpost/engine.rb +10 -0
  97. data/lib/outpost/helpers/naming.rb +22 -0
  98. data/lib/outpost/helpers.rb +6 -0
  99. data/lib/outpost/hook.rb +35 -0
  100. data/lib/outpost/list/base.rb +78 -0
  101. data/lib/outpost/list/column.rb +24 -0
  102. data/lib/outpost/list/filter.rb +37 -0
  103. data/lib/outpost/list.rb +15 -0
  104. data/lib/outpost/model/authentication.rb +34 -0
  105. data/lib/outpost/model/authorization.rb +32 -0
  106. data/lib/outpost/model/identifier.rb +39 -0
  107. data/lib/outpost/model/methods.rb +23 -0
  108. data/lib/outpost/model/naming.rb +63 -0
  109. data/lib/outpost/model/routing.rb +138 -0
  110. data/lib/outpost/model/serializer.rb +27 -0
  111. data/lib/outpost/model.rb +22 -0
  112. data/lib/outpost/test.rb +21 -0
  113. data/lib/outpost/version.rb +3 -0
  114. data/lib/outpost-cms.rb +2 -0
  115. data/lib/outpost.rb +80 -0
  116. data/lib/tasks/outpost_tasks.rake +7 -0
  117. data/spec/controllers/authentication_spec.rb +62 -0
  118. data/spec/controllers/sessions_controller_spec.rb +99 -0
  119. data/spec/factories.rb +31 -0
  120. data/spec/helpers/authorization_helper_spec.rb +47 -0
  121. data/spec/helpers/list_helper_spec.rb +74 -0
  122. data/spec/helpers/outpost_helper_spec.rb +5 -0
  123. data/spec/helpers/render_helper_spec.rb +19 -0
  124. data/spec/helpers/utility_helper_spec.rb +53 -0
  125. data/spec/internal/app/controllers/application_controller.rb +3 -0
  126. data/spec/internal/app/controllers/outpost/people_controller.rb +23 -0
  127. data/spec/internal/app/controllers/outpost/pidgeons_controller.rb +5 -0
  128. data/spec/internal/app/controllers/people_controller.rb +9 -0
  129. data/spec/internal/app/controllers/pidgeons_controller.rb +3 -0
  130. data/spec/internal/app/models/person.rb +10 -0
  131. data/spec/internal/app/models/pidgeon.rb +3 -0
  132. data/spec/internal/app/models/post.rb +4 -0
  133. data/spec/internal/app/models/user.rb +4 -0
  134. data/spec/internal/app/views/people/index.html.erb +7 -0
  135. data/spec/internal/app/views/people/show.html.erb +1 -0
  136. data/spec/internal/config/database.yml +3 -0
  137. data/spec/internal/config/initializers/configuration.rb +3 -0
  138. data/spec/internal/config/initializers/outpost.rb +6 -0
  139. data/spec/internal/config/routes.rb +16 -0
  140. data/spec/internal/db/combustion_test.sqlite +0 -0
  141. data/spec/internal/db/schema.rb +44 -0
  142. data/spec/internal/db/seeds.rb +14 -0
  143. data/spec/internal/log/test.log +59277 -0
  144. data/spec/internal/public/favicon.ico +0 -0
  145. data/spec/lib/breadcrumbs_spec.rb +54 -0
  146. data/spec/lib/config_spec.rb +76 -0
  147. data/spec/lib/controller/actions_spec.rb +5 -0
  148. data/spec/lib/controller/authorization_spec.rb +4 -0
  149. data/spec/lib/controller/callbacks_spec.rb +31 -0
  150. data/spec/lib/controller/helpers_spec.rb +33 -0
  151. data/spec/lib/controller_spec.rb +25 -0
  152. data/spec/lib/helpers/naming_spec.rb +10 -0
  153. data/spec/lib/hook_spec.rb +13 -0
  154. data/spec/lib/list/base_spec.rb +96 -0
  155. data/spec/lib/list/column_spec.rb +46 -0
  156. data/spec/lib/list/filter_spec.rb +44 -0
  157. data/spec/lib/model/authentication_spec.rb +29 -0
  158. data/spec/lib/model/authorization_spec.rb +66 -0
  159. data/spec/lib/model/identifier_spec.rb +51 -0
  160. data/spec/lib/model/methods_spec.rb +8 -0
  161. data/spec/lib/model/naming_spec.rb +55 -0
  162. data/spec/lib/model/routing_spec.rb +166 -0
  163. data/spec/lib/model/serializer_spec.rb +13 -0
  164. data/spec/lib/outpost_spec.rb +34 -0
  165. data/spec/models/permission_spec.rb +10 -0
  166. data/spec/models/user_permission_spec.rb +4 -0
  167. data/spec/spec_helper.rb +22 -0
  168. metadata +411 -0
@@ -0,0 +1,87 @@
1
+ # Bootstrap things
2
+
3
+ # Scrollspy has to be initiated here,
4
+ # instead of via data- attributes,
5
+ # otherwise it's buggy. I don't know why.
6
+ offset = 160
7
+ nav = "#form-nav"
8
+
9
+ $ ->
10
+ # Prevent firefox from submitting a form when the "Enter"
11
+ # key is pressed inside of a text field...
12
+ $("form input[type=text]").on
13
+ keydown: (event) ->
14
+ key = event.keyCode || event.which
15
+
16
+ if key == 13 # Enter
17
+ event.stopPropagation()
18
+ event.preventDefault()
19
+ false
20
+
21
+ # Select2
22
+ # Set a blank placeholder for all selects.
23
+ # Also allow clearing for any option.
24
+ # If you don't want the "clear" option on a certain select element,
25
+ # add the `include_blank: false` option to the rails
26
+ # helper.
27
+ #
28
+ # Note: This also gets called in field_manager.
29
+ # TODO: Make it so we don't have to call it twice.
30
+ $("select").not('[data-disable-select2="true"]').select2
31
+ placeholder: " "
32
+ allowClear: true
33
+
34
+ # Tooltip
35
+ $('[rel="tooltip"]').tooltip()
36
+
37
+ # Affix
38
+ # Fix the width for all of these elements
39
+ $('[data-spy="affix"]').each ->
40
+ $(@).width $(@).width()
41
+
42
+ # For table headers, we want them to act cool so we have
43
+ # to treat them special. First fix the widths of the "th"
44
+ # elements. Then make the top margin of the table the
45
+ # same as the height of the header. Then move the header
46
+ # up its height in pixels to give the appearance of
47
+ # sitting on top.
48
+ $('table.index-list thead').each ->
49
+ $(@).width $(@).width()
50
+
51
+ $('th', @).each -> $(@).width $(@).width()
52
+ height = $(@).height()
53
+ $(@).closest("table").css("margin-top": height)
54
+
55
+ $(@).addClass("ready")
56
+ $(@).css("top": -height)
57
+
58
+ $('table.index-list thead').affix
59
+ offset: 65
60
+
61
+ # Scrollspy
62
+ $spy = $("body").scrollspy
63
+ target: nav
64
+ offset: offset
65
+
66
+ # Since we have some fixed elements at the
67
+ # top of the screen, we have to offset the
68
+ # anchors when they're clicked in the form
69
+ # nav.
70
+ $("#{nav} li a").on
71
+ click: (event) ->
72
+ event.preventDefault()
73
+ href = $(@).attr('href')
74
+ window.location.hash = href
75
+ $(href)[0].scrollIntoView()
76
+ window.scrollBy(0, -offset + 80)
77
+ false
78
+
79
+ # Make highlighted TH's clickable
80
+ # TODO Move this into a better place
81
+ $("th.header-highlighted, th.header-sortable").each ->
82
+ if href = $(".js-sort-link", @).attr("href")
83
+ $(@).addClass("clickable")
84
+ $(@).on click: (event) ->
85
+ window.location = href
86
+
87
+ true
@@ -0,0 +1,88 @@
1
+ ##
2
+ # IndexManager
3
+ #
4
+ # Load up special things in the index pages.
5
+ #
6
+ class outpost.IndexManager
7
+ DefaultOptions:
8
+ cellFinder: "*[data-updatable='true']"
9
+
10
+ constructor: (@baseUrl, options={}) ->
11
+ @options = _.defaults options, @DefaultOptions
12
+
13
+ for cell in $(@options.cellFinder)
14
+ new outpost.QuickEditCell $(cell), @baseUrl
15
+
16
+ ##
17
+ # QuickEditCell
18
+ #
19
+ # Adds the ability to quick-edit any attribute from the index page.
20
+ # Looks for fields with 'data-updatable="true"'
21
+ #
22
+ class outpost.QuickEditCell
23
+ defaults:
24
+ formTemplate: JST["outpost/templates/data_field"]
25
+ attribute: "data-attribute"
26
+ id: "data-id"
27
+ highlightColor: "#dff0d8"
28
+ highlightTime: 2000
29
+
30
+ constructor: (@el, baseUrl, options={}) ->
31
+ @options = _.defaults options, @defaults
32
+
33
+ # Check values
34
+ @value = null
35
+ @keyup = false
36
+
37
+ # Attributes
38
+ @attribute = @el.attr(@options.attribute)
39
+ @id = @el.attr(@options.id)
40
+ @url = "#{baseUrl}/#{@id}"
41
+
42
+ @ajaxOptions =
43
+ dataType: 'json'
44
+ url: @url
45
+
46
+ @el.on
47
+ click: (event) => @buildForm()
48
+
49
+ @el.on
50
+ keyup: (event) =>
51
+ if event.keyCode == 13
52
+ @keyup = true
53
+ @updateData(event)
54
+ blur: (event) =>
55
+ if not @keyup
56
+ @updateData(event)
57
+ , 'input'
58
+
59
+ #-------------
60
+
61
+ buildForm: (event) ->
62
+ $.ajax _.extend @ajaxOptions,
63
+ type: "GET"
64
+ success: (data, status, xhr) =>
65
+ @value = data[@attribute]
66
+ @el.html(@options.formTemplate attribute: @attribute, id: @id, inputValue: @value)
67
+ @el.find("input").focus()
68
+
69
+ #-------------
70
+
71
+ updateData: (event) ->
72
+ input = $(event.target)
73
+ value = input.val()
74
+
75
+ if value is @value
76
+ @el.html(value)
77
+ @keyup = false
78
+ return
79
+
80
+ $.ajax _.extend @ajaxOptions,
81
+ type: "PUT"
82
+ data:
83
+ data_point:
84
+ data_value: value
85
+ success: (data, status, xhr) =>
86
+ @el.html(value)
87
+ @el.effect "highlight", { color: @options.highlightColor }, @options.highlightTime
88
+ @keyup = false
@@ -0,0 +1,46 @@
1
+ ##
2
+ # Notification
3
+ # Raise notifications from anywhere in the JS code
4
+ # Pass the $(el) to place the message into
5
+ #
6
+ class outpost.Notification
7
+ constructor: (@wrapper, @type, @message) ->
8
+ @el = $("<div />", class: "alert alert-#{type}").html("#{message}")
9
+
10
+ render: ->
11
+ @wrapper.append @el
12
+
13
+ prepend: ->
14
+ @wrapper.prepend @el
15
+
16
+ # Replaces the wrapper's content with the alert
17
+ replace: ->
18
+ @wrapper.html @el
19
+
20
+ # Delegation for jQuery: @el.is(":visible")
21
+ isVisible: ->
22
+ @el.is(":visible")
23
+
24
+ # Delegation for jQuery: @el.show()
25
+ show: ->
26
+ @el.show()
27
+
28
+ # Delegation for jQuery: @el.hide()
29
+ hide: ->
30
+ @el.hide()
31
+
32
+ # Delegation for jQuery: @el.fadeIn()
33
+ fadeIn: (speed=400, callback=null) ->
34
+ @el.fadeIn(speed, callback?())
35
+
36
+ # Delegation for jQuery: @el.fadeOut()
37
+ fadeOut: (speed=400, callback=null) ->
38
+ @el.fadeOut(speed, callback?())
39
+
40
+ # Delegation for jQuery: @el.detach()
41
+ detach: ->
42
+ @el.detach()
43
+
44
+ # Delegation for jQuery: @el.remove()
45
+ remove: ->
46
+ @el.remove()
@@ -0,0 +1,60 @@
1
+ ##
2
+ # Preview
3
+ #
4
+ # Preview functionality for the CMS
5
+ #
6
+ class outpost.Preview
7
+ constructor: (@options) ->
8
+ _t = @
9
+
10
+ $("form #preview-submit a.js-preview-btn").on
11
+ click: (event) ->
12
+ event.preventDefault()
13
+ target = $(@)
14
+ form = target.closest("form")
15
+
16
+ # Update any hidden textareas that are using CKEditor
17
+ # Then serialize the form.
18
+ if CKEDITOR?
19
+ for id,instance of CKEDITOR.instances
20
+ instance.updateElement()
21
+
22
+ data = form.serialize()
23
+
24
+ $.ajax
25
+ type: 'POST'
26
+ dataType: "html"
27
+ url: "#{_t.options.baseUrl}/preview"
28
+ data:
29
+ data
30
+
31
+ beforeSend: (jqXHR, settings) ->
32
+ _t.openWindow(target.data("windowOptions"))
33
+ _t.writeToWindow(JST['outpost/templates/loading']())
34
+
35
+ statusCode:
36
+ 200: (data, textStatus, jqXHR) ->
37
+ _t.writeToWindow(data)
38
+ 404: (jqXHR, textStatus, errorThrown) ->
39
+ _t.writeToWindow("Error: #{errorThrown}")
40
+ 500: (jqXHR, textStatus, errorThrown) ->
41
+ _t.writeToWindow("Error: #{errorThrown}")
42
+ false
43
+
44
+ #--------------------
45
+ # Open the preview window.
46
+ # If it doesn't exist yet, create it.
47
+ # If it already exists, just focus on it.
48
+ openWindow: (options="")->
49
+ if !@window or (@window and @window.closed)
50
+ @window = window.open("", "preview",
51
+ "scrollbars=yes,menubar=no,location=no,directories=no,toolbar=no,#{options}")
52
+ else
53
+ @window.focus()
54
+
55
+ #--------------------
56
+ # Write some data to the preview window.
57
+ # This shouldn't get called before @window is set.
58
+ writeToWindow: (data) ->
59
+ @window.document.write(data)
60
+ @window.document.close()
@@ -0,0 +1,3 @@
1
+ <div class="input-prepend inline">
2
+ <span class="add-on populate date"><i class="icon-calendar"></i></span><input type="text" class="datepicker timestamp-el" placeholder="<%=@date_format%>" id="<%= @date_id %>">
3
+ </div>
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Loading...</title>
5
+ <script type="text/javascript" src="/assets/outpost/application.js"></script>
6
+ </head>
7
+ <body>
8
+ <div id='spinner' style="width:100%;height:200px;"></div>
9
+ <script>$('#spinner').spin()</script>
10
+ </body>
11
+ </html>
@@ -0,0 +1 @@
1
+ <a class="btn" href="#" style="display: inline-block; margin-left: 5px;">Generate</button>
@@ -0,0 +1,3 @@
1
+ <div class="input-prepend inline">
2
+ <span class="add-on populate time"><i class="icon-time"></i></span><input type="text" class="timestamp-el" placeholder="<%=@time_format%>" id="<%= @time_id %>">
3
+ </div>
@@ -0,0 +1 @@
1
+ //= require_tree ./templates
@@ -0,0 +1,32 @@
1
+ //= require jquery
2
+ //= require underscore
3
+ //= require backbone
4
+ //= require moment
5
+ //= require jquery_ujs
6
+ //= require spin
7
+
8
+ //= require jquery-ui-1.10.0.custom.min
9
+ //= require date.min
10
+ //= require select2
11
+
12
+ //= require bootstrap-transition
13
+ //= require bootstrap-dropdown
14
+ //= require bootstrap-modal
15
+ //= require bootstrap-tab
16
+ //= require bootstrap-scrollspy
17
+ //= require bootstrap-alert
18
+ //= require bootstrap-affix
19
+ //= require bootstrap-tooltip
20
+ //= require bootstrap-datepicker
21
+
22
+ //= require outpost/base
23
+ //= require outpost/templates
24
+
25
+ //= require outpost/notification
26
+ //= require outpost/field_manager
27
+ //= require outpost/date_time_input
28
+ //= require outpost/auto_slug_field
29
+ //= require outpost/field_counter
30
+ //= require outpost/preview
31
+ //= require outpost/index_manager
32
+ //= require outpost/global_plugins
@@ -0,0 +1,127 @@
1
+ // Core ext.
2
+ body {
3
+ // Allow space for the submit-row
4
+ padding-bottom: 120px;
5
+ padding-top: 100px;
6
+ }
7
+
8
+ body, p {
9
+ line-height: 14px;
10
+ }
11
+
12
+ small {
13
+ font-size: 11px;
14
+ }
15
+
16
+ .breadcrumb {
17
+ &.unstyled {
18
+ padding: 0;
19
+ }
20
+
21
+ padding-left: 0;
22
+ padding-right: 0;
23
+ margin: 0;
24
+ }
25
+
26
+ // Override a bug in bootstrap
27
+ .dropup .btn-large .caret {
28
+ border-bottom-color: $white;
29
+ }
30
+
31
+ .alert .close {
32
+ line-height: 12px;
33
+ }
34
+
35
+ .icon-red {
36
+ background-image: image-url($iconRedSpritePath);
37
+ }
38
+
39
+ /////////////////////////////////
40
+
41
+ .cms-nav {
42
+ max-width: 820px;
43
+
44
+ .grouper {
45
+ display: inline-block;
46
+ width: 400px;
47
+ vertical-align: top;
48
+ }
49
+
50
+ li {
51
+ clear: both;
52
+ border-bottom: 1px solid $grayLighter;
53
+
54
+ &:hover {
55
+ background: $linkColor;
56
+ &> a {
57
+ color: $white;
58
+ text-decoration: none;
59
+ }
60
+ }
61
+
62
+ &> a {
63
+ clear: none;
64
+ width: 285px;
65
+ display: inline-block;
66
+
67
+ // Everything below is copied from Bootstrap .dropdown-menu > li > a
68
+ // It has to be this way because of the .grouper div
69
+ // This should be fixed.
70
+ padding: 3px 20px;
71
+ font-weight: normal;
72
+ line-height: 20px;
73
+ color: #333333;
74
+ white-space: nowrap;
75
+ }
76
+
77
+ .btn-links {
78
+ display: inline-block;
79
+ clear: both;
80
+ vertical-align: bottom;
81
+ margin-bottom: 3px;
82
+ width: 60px;
83
+
84
+ &> a {
85
+ margin: 0px 2px;
86
+ &.add { float: right; }
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ .fixed-breadcrumbs {
93
+ z-index: 5;
94
+ top: $navOffset;
95
+ @include box-shadow(0 2px 6px rgba(0,0,0,.2));
96
+ }
97
+
98
+ .help-block {
99
+ color: $grayLight;
100
+ font-style: italic;
101
+ font-size: 12px;
102
+ margin-top: 10px;
103
+ }
104
+
105
+ .list-status {
106
+ text-align: center;
107
+ }
108
+
109
+ .add-on.populate {
110
+ cursor: pointer;
111
+ }
112
+
113
+ // Style the dropdown buttons so they look like links
114
+ ul.dropdown-menu li button {
115
+ border: none;
116
+ background: none;
117
+ cursor: pointer;
118
+ width: 100%;
119
+ text-align: left;
120
+ &:hover {
121
+ background: $grayLighter;
122
+ }
123
+ }
124
+
125
+ #fixed-sidebar.affix {
126
+ top: $navOffset + $breadcrumbOffset + 4px;
127
+ }
@@ -0,0 +1,13 @@
1
+ // Styles for Editing/New pages
2
+
3
+ .submit-row:last-of-type {
4
+ position: fixed;
5
+ bottom: 0px;
6
+ left: 0px;
7
+ right: 0px;
8
+ margin: 0px;
9
+ background: $grayDark;
10
+ padding: 10px 0;
11
+ z-index: 10;
12
+ @include box-shadow(0 -2px 10px rgba(0,0,0,.2));
13
+ }
@@ -0,0 +1,116 @@
1
+ // We want content input to always be pretty big
2
+ .simple_form {
3
+ input:not([type=submit]) {
4
+ @extend .span4;
5
+ }
6
+ }
7
+
8
+ form.simple_form {
9
+ table.field-rows {
10
+ td, th {
11
+ text-align: left;
12
+ padding: 5px 10px;
13
+ }
14
+
15
+ tbody tr { padding: 5px 0; }
16
+
17
+ .controls { margin: 0; }
18
+ .control-group { margin: 0; }
19
+ }
20
+
21
+ input.wide, textarea {
22
+ @extend .span7;
23
+ }
24
+
25
+ input, textarea {
26
+ &.span1 { @extend .span1; }
27
+ &.span2 { @extend .span2; }
28
+ &.span3 { @extend .span3; }
29
+ &.span4 { @extend .span4; }
30
+ &.span5 { @extend .span5; }
31
+ &.span6 { @extend .span6; }
32
+ &.span7 { @extend .span7; }
33
+ &.span8 { @extend .span8; }
34
+ &.span9 { @extend .span9; }
35
+ &.span10 { @extend .span10; }
36
+ &.span11 { @extend .span11; }
37
+ &.span12 { @extend .span12; }
38
+ }
39
+
40
+ input.thin, textarea.thin {
41
+ @extend .span2;
42
+ }
43
+
44
+ input.tiny {
45
+ @extend .span1;
46
+ }
47
+
48
+ // For code inputs
49
+ textarea.fixed-font, input.fixed-font {
50
+ @include font-monospace($size: 11px);
51
+ background: #000;
52
+ color: #FFFF00;
53
+ }
54
+
55
+ textarea {
56
+ &.tiny { height: 100px; }
57
+ &.short { height: 200px; }
58
+ &.tall { height: 600px; }
59
+ }
60
+
61
+ fieldset legend {
62
+ cursor: pointer;
63
+ &:hover {
64
+ background: #ffffcc;
65
+ }
66
+ }
67
+
68
+ .counter-notify {
69
+ @extend .span7;
70
+ }
71
+
72
+ .inline { // Extend bootstrap .inline
73
+ display: inline-block;
74
+ margin-right: 5px;
75
+ input[type=text] { @extend .span2; }
76
+ input[type=checkbox] { width: 20px; }
77
+
78
+ .controls {
79
+ margin-left: 10px;
80
+ }
81
+ }
82
+
83
+ .control-group.vertical {
84
+ label {
85
+ float: none;
86
+ text-align: left;
87
+ }
88
+ .controls { margin-left: 2px; }
89
+ }
90
+ }
91
+
92
+ // Select 2 overrides
93
+ .select[class*="span"] {
94
+ margin-left: 0;
95
+ float: none;
96
+ }
97
+
98
+
99
+ // Work around incompatibility with CKEditor and Select2
100
+ .select2-offscreen {
101
+ position: static;
102
+ display: none !important;
103
+ }
104
+
105
+ .select2-container {
106
+ min-width: 200px;
107
+ }
108
+
109
+ // Select2 has z-index:9999 by default... no thanks
110
+ .select2-drop-mask {
111
+ z-index: 4;
112
+ }
113
+
114
+ .select2-drop {
115
+ z-index: 4;
116
+ }
@@ -0,0 +1,68 @@
1
+ // Styles for index lists
2
+ // To manage column widths, go to columns.css
3
+
4
+ .filters {
5
+ .select2-container {
6
+ min-width: 130px;
7
+ }
8
+
9
+ .filter.label {
10
+ display: inline-block;
11
+ margin-right: 10px;
12
+ }
13
+
14
+ form {
15
+ display: inline-block;
16
+ }
17
+ }
18
+
19
+ .header-highlighted {
20
+ background-color: $successBackground;
21
+ }
22
+
23
+ th.clickable {
24
+ cursor: pointer;
25
+ &:hover {
26
+ background-color: $infoBackground;
27
+ }
28
+ }
29
+
30
+ .index-list {
31
+ position: relative;
32
+
33
+ th, td {
34
+ overflow: hidden;
35
+ .cancel-link { float: right; }
36
+ }
37
+
38
+ tbody.list {
39
+ tr {
40
+ // Style quick-edit cells
41
+ td[data-updatable=true] {
42
+ background: $warningBackground;
43
+
44
+ &:hover {
45
+ background: $infoBackground;
46
+ cursor: text;
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ thead {
53
+ background: $white;
54
+
55
+ &.ready {
56
+ position: absolute;
57
+
58
+ &.affix {
59
+ z-index: 5;
60
+ border: 1px solid $grayLight;
61
+ position: fixed; // Have to use redefine it here to override .ready
62
+ top: $navOffset + $breadcrumbOffset + 10px !important;
63
+ background: $warningBackground;
64
+ @include box-shadow(0 2px 6px rgba(0,0,0,.2));
65
+ }
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,16 @@
1
+ .transparent {
2
+ @include opacity(0.2);
3
+ @include transition(.1s linear all);
4
+ }
5
+
6
+ .hidden {
7
+ display: none;
8
+ }
9
+
10
+ a.fake {
11
+ cursor: pointer;
12
+ }
13
+
14
+ a.toggled {
15
+ color: $black;
16
+ }
@@ -0,0 +1 @@
1
+ @import 'outpost';