curate 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/app/assets/images/blacklight/bg.png +0 -0
  2. data/app/assets/images/blacklight/border.png +0 -0
  3. data/app/assets/images/blacklight/bul_sq_gry.gif +0 -0
  4. data/app/assets/images/blacklight/checkmark.gif +0 -0
  5. data/app/assets/images/blacklight/logo.png +0 -0
  6. data/app/assets/images/blacklight/magnifying_glass.gif +0 -0
  7. data/app/assets/images/blacklight/remove.gif +0 -0
  8. data/app/assets/images/blacklight/separator.gif +0 -0
  9. data/app/assets/images/blacklight/start_over.gif +0 -0
  10. data/app/assets/javascripts/curate.js +38 -0
  11. data/app/assets/javascripts/help_modal.js +36 -0
  12. data/app/assets/javascripts/manage_repeating_fields.js +65 -0
  13. data/app/assets/javascripts/toggle_details.js +10 -0
  14. data/app/assets/stylesheets/blacklight.css.scss +6 -0
  15. data/app/assets/stylesheets/curate.css.scss +23 -0
  16. data/app/assets/stylesheets/downloads.css.scss +3 -0
  17. data/app/assets/stylesheets/global-variables.scss +303 -0
  18. data/app/assets/stylesheets/help_requests.css.scss +3 -0
  19. data/app/assets/stylesheets/layout/positioning.css.scss +59 -0
  20. data/app/assets/stylesheets/modules.scss +5 -0
  21. data/app/assets/stylesheets/modules/action_bar.css.scss +14 -0
  22. data/app/assets/stylesheets/modules/emphatic_action_area.css.scss +14 -0
  23. data/app/assets/stylesheets/modules/forms.css.scss +39 -0
  24. data/app/assets/stylesheets/modules/multi_value_fields.css.scss +13 -0
  25. data/app/assets/stylesheets/modules/site_search.css.scss +26 -0
  26. data/app/assets/stylesheets/style/theme.css.scss +44 -0
  27. data/app/assets/stylesheets/style/typography.css.scss +130 -0
  28. data/app/repository_models/curation_concern/model.rb +40 -0
  29. data/app/repository_models/curation_concern/with_generic_files.rb +16 -0
  30. data/lib/curate/railtie.rb +9 -0
  31. data/lib/curate/version.rb +1 -1
  32. data/lib/generators/curate/curation_concern/USAGE +14 -0
  33. data/lib/generators/curate/curation_concern/curation_concern_generator.rb +55 -0
  34. data/lib/generators/curate/curation_concern/templates/curation_concern.rb.erb +46 -0
  35. data/lib/generators/curate/curation_concern/templates/curation_concern_factory.rb.erb +13 -0
  36. data/lib/generators/curate/curation_concern/templates/curation_concern_serializer.rb.erb +8 -0
  37. data/lib/generators/curate/curation_concern/templates/curation_concern_serializer_spec.rb.erb +11 -0
  38. data/lib/generators/curate/curation_concern/templates/curation_concern_spec.rb.erb +9 -0
  39. data/lib/generators/curate/curation_concern/templates/metadata_datastream.rb.erb +67 -0
  40. data/lib/generators/curate/curation_concern/templates/metadata_datastream_spec.rb.erb +7 -0
  41. data/spec/dummy/app/controllers/curation_concern/mock_curation_concerns_controller.rb +9 -0
  42. data/spec/dummy/config/routes.rb +1 -1
  43. data/spec/dummy/log/test.log +20535 -0
  44. data/spec/features/error_handlers_spec.rb +36 -0
  45. data/spec/routing/classify_concerns_routing_spec.rb +15 -0
  46. data/spec/routing/common_objects_routing_spec.rb +10 -0
  47. data/spec/routing/downloads_routing_spec.rb +17 -0
  48. data/spec/routing/generic_files_routing_spec.rb +79 -0
  49. data/spec/routing/help_requests_routing_spec.rb +11 -0
  50. data/spec/support/mock_curation_concern.rb +26 -38
  51. data/spec/validators/future_date_validator_spec.rb +35 -0
  52. metadata +75 -4
@@ -0,0 +1,38 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //
16
+ //= require jquery-ui-1.9.2/jquery.ui.widget
17
+ //
18
+ //= require blacklight/blacklight
19
+ //
20
+ //= require bootstrap-dropdown
21
+ //= require bootstrap-button
22
+ //= require bootstrap-collapse
23
+ //= require bootstrap-tooltip
24
+ //= require bootstrap-popover
25
+ //= require bootstrap-datepicker
26
+ //
27
+ //= require manage_repeating_fields
28
+ //= require toggle_details
29
+ //= require help_modal
30
+
31
+ $(function(){
32
+ $('abbr').tooltip();
33
+
34
+ $('.multi_value.control-group').manage_fields();
35
+
36
+ $('.datepicker').datepicker({
37
+ format: 'yyyy-mm-dd' });
38
+ });
@@ -0,0 +1,36 @@
1
+ $(function(){
2
+ var $window = $(window),
3
+ $modal = $('#ajax-modal'),
4
+ resolution = screen.width + 'x' + screen.height,
5
+ viewport = $window.width() + 'x' + $window.height(),
6
+ current_url = document.location.href;
7
+
8
+ function populateHelpForm(){
9
+ // Removing the "NOT" portion
10
+ $('#help-js strong').remove();
11
+ $('#help_request_javascript_enabled').val(1);
12
+
13
+ $('#help-resolution').text(resolution);
14
+ $('#help_request_resolution').val(resolution);
15
+
16
+ $('#help-viewport').text(viewport);
17
+ $('#help_request_view_port').val(viewport);
18
+
19
+ $('#help-url.unset').text(current_url);
20
+ $('#help_request_current_url.unset').val(current_url);
21
+ }
22
+ populateHelpForm();
23
+
24
+ $('.request-help').on('click', function(event){
25
+ event.preventDefault();
26
+
27
+ $('body').modalmanager('loading');
28
+
29
+ setTimeout(function(){
30
+ $modal.load('/help_requests/new #new_help_request', function(){
31
+ $modal.modal();
32
+ populateHelpForm();
33
+ });
34
+ }, 1000);
35
+ });
36
+ });
@@ -0,0 +1,65 @@
1
+ // This widget manages the adding and removing of repeating fields.
2
+ // There are a lot of assumptions about the structure of the classes and elements.
3
+ // These assumptions are reflected in the MultiValueInput class.
4
+
5
+ (function($){
6
+ $.widget( "curate.manage_fields", {
7
+ options: {
8
+ change: null,
9
+ add: null,
10
+ remove: null
11
+ },
12
+
13
+ _create: function() {
14
+ this.element.addClass("managed");
15
+ $('.field-wrapper', this.element).addClass("input-append");
16
+
17
+ this.controls = $("<span class=\"field-controls\">");
18
+ this.remover = $("<button class=\"btn btn-danger remove\"><i class=\"icon-white icon-minus\"></i><span>Remove</span></button>");
19
+ this.adder = $("<button class=\"btn btn-success add\"><i class=\"icon-white icon-plus\"></i><span>Add</span></button>");
20
+
21
+ $('.field-wrapper', this.element).append(this.controls);
22
+ $('.field-wrapper:not(:last-child) .field-controls', this.element).append(this.remover);
23
+ $('.field-controls:last', this.element).append(this.adder);
24
+
25
+ this._on( this.element, {
26
+ "click .remove": "remove_from_list",
27
+ "click .add": "add_to_list"
28
+ });
29
+ },
30
+
31
+ add_to_list: function( event ) {
32
+ event.preventDefault();
33
+
34
+ var $activeField = $(event.target).parents('.field-wrapper'),
35
+ $activeFieldControls = $activeField.children('.field-controls'),
36
+ $removeControl = this.remover.clone(),
37
+ $newField = $activeField.clone(),
38
+ $listing = $('.listing', this.element);
39
+
40
+ $('.add', $activeFieldControls).remove();
41
+ $activeFieldControls.prepend($removeControl);
42
+
43
+ $newField.children('input').val('');
44
+ $listing.append($newField);
45
+
46
+ this._trigger("add");
47
+ },
48
+
49
+ remove_from_list: function( event ) {
50
+ event.preventDefault();
51
+
52
+ $(event.target)
53
+ .parents('.field-wrapper')
54
+ .remove();
55
+
56
+ this._trigger("remove");
57
+ },
58
+
59
+ _destroy: function() {
60
+ this.actions.remove();
61
+ $('.field-wrapper', this.element).removeClass("input-append");
62
+ this.element.removeClass( "managed" );
63
+ },
64
+ });
65
+ })(jQuery);
@@ -0,0 +1,10 @@
1
+ $(function(){
2
+ //NOTE: This function is tightly coupled with the catalog index markup
3
+ $('.show-details').on('click', function(event){
4
+ event.preventDefault();
5
+ $(this)
6
+ .parents('tr')
7
+ .next('tr')
8
+ .toggleClass('hide');
9
+ });
10
+ });
@@ -0,0 +1,6 @@
1
+ @import 'style/variables';
2
+ @import 'bootstrap';
3
+ @import 'bootstrap-responsive';
4
+ @import 'font-awesome';
5
+
6
+ @import 'blacklight/blacklight';
@@ -0,0 +1,23 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ */
13
+
14
+ @import 'compass';
15
+ @import 'global-variables';
16
+ @import 'bootstrap';
17
+ @import 'bootstrap-responsive';
18
+ @import 'bootstrap-datepicker';
19
+ @import 'blacklight/blacklight';
20
+ @import 'layout/positioning';
21
+ @import 'modules';
22
+ @import 'style/theme';
23
+ @import 'style/typography';
@@ -0,0 +1,3 @@
1
+ // Place all the styles related to the Downloads controller here.
2
+ // They will automatically be included in application.css.
3
+ // You can use Sass (SCSS) here: http://sass-lang.com/
@@ -0,0 +1,303 @@
1
+ //
2
+ // Variables
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Global values
7
+ // --------------------------------------------------
8
+
9
+
10
+ // Grays
11
+ // -------------------------
12
+ $black: #000 !default;
13
+ $grayDarker: #222 !default;
14
+ $grayDark: #333 !default;
15
+ $gray: #555 !default;
16
+ $grayLight: #999 !default;
17
+ $grayLighter: #eee !default;
18
+ $white: #fff !default;
19
+
20
+
21
+ // Accent colors
22
+ // -------------------------
23
+ $blue: #049cdb !default;
24
+ $blueDark: #0064cd !default;
25
+ $green: #46a546 !default;
26
+ $red: #9d261d !default;
27
+ $yellow: #ffc40d !default;
28
+ $orange: #f89406 !default;
29
+ $pink: #c3325f !default;
30
+ $purple: #7a43b6 !default;
31
+
32
+
33
+
34
+ // Scaffolding
35
+ // -------------------------
36
+ $bodyBackground: $white !default;
37
+ $textColor: $grayDark !default;
38
+
39
+
40
+ // Links
41
+ // -------------------------
42
+ $linkColor: lighten($blue, 20%);
43
+ $linkColorHover: darken($linkColor, 15%) !default;
44
+
45
+
46
+ // Typography
47
+ // -------------------------
48
+ $sansFontFamily : "Helvetica Neue", Helvetica, Arial, sans-serif !default;
49
+ $serifFontFamily : 'Adobe Garamond', Georgia, serif;
50
+ $monoFontFamily : "Courier New", monospace !default;
51
+ $headerFontFamily : 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;
52
+
53
+ $baseFontSize: 14px !default;
54
+ $baseFontFamily: $sansFontFamily !default;
55
+ $baseLineHeight: 20px !default;
56
+ $altFontFamily: $serifFontFamily !default;
57
+
58
+ $headingsFontFamily: inherit !default; // empty to use BS default, $baseFontFamily
59
+ $headingsFontWeight: bold !default; // instead of browser default, bold
60
+ $headingsColor: inherit !default; // empty to use BS default, $textColor
61
+
62
+
63
+ // Component sizing
64
+ // -------------------------
65
+ // Based on 14px font-size and 20px line-height
66
+
67
+ $fontSizeLarge: $baseFontSize * 1.25; // ~18px
68
+ $fontSizeSmall: $baseFontSize * 0.85; // ~12px
69
+ $fontSizeMini: $baseFontSize * 0.75; // ~11px
70
+
71
+ $paddingLarge: 11px 19px !default; // 44px
72
+ $paddingSmall: 2px 10px !default; // 26px
73
+ $paddingMini: 0px 6px !default; // 22px
74
+
75
+ $baseBorderRadius: 4px !default;
76
+ $borderRadiusLarge: 6px !default;
77
+ $borderRadiusSmall: 3px !default;
78
+
79
+
80
+ // Tables
81
+ // -------------------------
82
+ $tableBackground: transparent !default; // overall background-color
83
+ $tableBackgroundAccent: #f9f9f9 !default; // for striping
84
+ $tableBackgroundHover: #f5f5f5 !default; // for hover
85
+ $tableBorder: #ddd !default; // table and cell border
86
+
87
+ // Buttons
88
+ // -------------------------
89
+ $btnBackground: $white !default;
90
+ $btnBackgroundHighlight: darken($white, 10%) !default;
91
+ $btnBorder: #bbb !default;
92
+
93
+ $btnPrimaryBackground: #07366c; // Trying to match brand bar
94
+ $btnPrimaryBackgroundHighlight: adjust-hue($btnPrimaryBackground, 20%) !default;
95
+
96
+ $btnInfoBackground: #5bc0de !default;
97
+ $btnInfoBackgroundHighlight: #2f96b4 !default;
98
+
99
+ $btnSuccessBackground: #62c462 !default;
100
+ $btnSuccessBackgroundHighlight: #51a351 !default;
101
+
102
+ $btnWarningBackground: lighten($orange, 15%) !default;
103
+ $btnWarningBackgroundHighlight: $orange !default;
104
+
105
+ $btnDangerBackground: #ee5f5b !default;
106
+ $btnDangerBackgroundHighlight: #bd362f !default;
107
+
108
+ $btnInverseBackground: #444 !default;
109
+ $btnInverseBackgroundHighlight: $grayDarker !default;
110
+
111
+
112
+ // Forms
113
+ // -------------------------
114
+ $inputBackground: $white !default;
115
+ $inputBorder: #ccc !default;
116
+ $inputBorderRadius: $baseBorderRadius !default;
117
+ $inputDisabledBackground: $grayLighter !default;
118
+ $formActionsBackground: #f5f5f5 !default;
119
+ $inputHeight: $baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
120
+
121
+
122
+ // Dropdowns
123
+ // -------------------------
124
+ $dropdownBackground: $white !default;
125
+ $dropdownBorder: rgba(0,0,0,.2) !default;
126
+ $dropdownDividerTop: #e5e5e5 !default;
127
+ $dropdownDividerBottom: $white !default;
128
+
129
+ $dropdownLinkColor: $grayDark !default;
130
+ $dropdownLinkColorHover: $white !default;
131
+ $dropdownLinkColorActive: $dropdownLinkColor !default;
132
+
133
+ $dropdownLinkBackgroundActive: $linkColor !default;
134
+ $dropdownLinkBackgroundHover: $dropdownLinkBackgroundActive !default;
135
+
136
+
137
+
138
+ // COMPONENT VARIABLES
139
+ // --------------------------------------------------
140
+
141
+
142
+ // Z-index master list
143
+ // -------------------------
144
+ // Used for a bird's eye view of components dependent on the z-axis
145
+ // Try to avoid customizing these :)
146
+ $zindexDropdown: 1000 !default;
147
+ $zindexPopover: 1010 !default;
148
+ $zindexTooltip: 1030 !default;
149
+ $zindexFixedNavbar: 1030 !default;
150
+ $zindexModalBackdrop: 1040 !default;
151
+ $zindexModal: 1050 !default;
152
+
153
+
154
+ // Sprite icons path
155
+ // -------------------------
156
+ $iconSpritePath: image-path("glyphicons-halflings.png") !default;
157
+ $iconWhiteSpritePath: image-path("glyphicons-halflings-white.png") !default;
158
+
159
+
160
+ // Input placeholder text color
161
+ // -------------------------
162
+ $placeholderText: $grayLight !default;
163
+
164
+
165
+ // Hr border color
166
+ // -------------------------
167
+ $hrBorder: $grayLighter !default;
168
+
169
+
170
+ // Horizontal forms & lists
171
+ // -------------------------
172
+ $horizontalComponentOffset: 180px !default;
173
+
174
+
175
+ // Wells
176
+ // -------------------------
177
+ $wellBackground: #f5f5f5 !default;
178
+
179
+
180
+ // Navbar
181
+ // -------------------------
182
+ $navbarCollapseWidth: 979px !default;
183
+ $navbarCollapseDesktopWidth: $navbarCollapseWidth + 1;
184
+
185
+ $navbarHeight: 40px !default;
186
+ $navbarBackgroundHighlight: #ffffff !default;
187
+ $navbarBackground: darken($navbarBackgroundHighlight, 5%) !default;
188
+ $navbarBorder: darken($navbarBackground, 12%) !default;
189
+
190
+ $navbarText: #777 !default;
191
+ $navbarLinkColor: #777 !default;
192
+ $navbarLinkColorHover: $grayDark !default;
193
+ $navbarLinkColorActive: $gray !default;
194
+ $navbarLinkBackgroundHover: transparent !default;
195
+ $navbarLinkBackgroundActive: darken($navbarBackground, 5%) !default;
196
+
197
+ $navbarBrandColor: $navbarLinkColor !default;
198
+
199
+ // Inverted navbar
200
+ $navbarInverseBackground: #111111 !default;
201
+ $navbarInverseBackgroundHighlight: #222222 !default;
202
+ $navbarInverseBorder: #252525 !default;
203
+
204
+ $navbarInverseText: $grayLight !default;
205
+ $navbarInverseLinkColor: $grayLight !default;
206
+ $navbarInverseLinkColorHover: $white !default;
207
+ $navbarInverseLinkColorActive: $navbarInverseLinkColorHover !default;
208
+ $navbarInverseLinkBackgroundHover: transparent !default;
209
+ $navbarInverseLinkBackgroundActive: $navbarInverseBackground !default;
210
+
211
+ $navbarInverseSearchBackground: lighten($navbarInverseBackground, 25%) !default;
212
+ $navbarInverseSearchBackgroundFocus: $white !default;
213
+ $navbarInverseSearchBorder: $navbarInverseBackground !default;
214
+ $navbarInverseSearchPlaceholderColor: #ccc !default;
215
+
216
+ $navbarInverseBrandColor: $navbarInverseLinkColor !default;
217
+
218
+
219
+ // Pagination
220
+ // -------------------------
221
+ $paginationBackground: #fff !default;
222
+ $paginationBorder: #ddd !default;
223
+ $paginationActiveBackground: #f5f5f5 !default;
224
+
225
+
226
+ // Hero unit
227
+ // -------------------------
228
+ $heroUnitBackground: $grayLighter !default;
229
+ $heroUnitHeadingColor: inherit !default;
230
+ $heroUnitLeadColor: inherit !default;
231
+
232
+
233
+ // Form states and alerts
234
+ // -------------------------
235
+ $warningText: #c09853 !default;
236
+ $warningBackground: #fcf8e3 !default;
237
+ $warningBorder: darken(adjust-hue($warningBackground, -10), 3%) !default;
238
+
239
+ $errorText: #b94a48 !default;
240
+ $errorBackground: #f2dede !default;
241
+ $errorBorder: darken(adjust-hue($errorBackground, -10), 3%) !default;
242
+
243
+ $successText: #468847 !default;
244
+ $successBackground: #dff0d8 !default;
245
+ $successBorder: darken(adjust-hue($successBackground, -10), 5%) !default;
246
+
247
+ $infoText: #3a87ad !default;
248
+ $infoBackground: #d9edf7 !default;
249
+ $infoBorder: darken(adjust-hue($infoBackground, -10), 7%) !default;
250
+
251
+
252
+ // Tooltips and popovers
253
+ // -------------------------
254
+ $tooltipColor: #fff !default;
255
+ $tooltipBackground: #000 !default;
256
+ $tooltipArrowWidth: 5px !default;
257
+ $tooltipArrowColor: $tooltipBackground !default;
258
+
259
+ $popoverBackground: #fff !default;
260
+ $popoverArrowWidth: 10px !default;
261
+ $popoverArrowColor: #fff !default;
262
+ $popoverTitleBackground: darken($popoverBackground, 3%) !default;
263
+
264
+ // Special enhancement for popovers
265
+ $popoverArrowOuterWidth: $popoverArrowWidth + 1 !default;
266
+ $popoverArrowOuterColor: rgba(0,0,0,.25) !default;
267
+
268
+
269
+
270
+ // GRID
271
+ // --------------------------------------------------
272
+
273
+
274
+ // Default 940px grid
275
+ // -------------------------
276
+ $gridColumns: 12 !default;
277
+ $gridColumnWidth: 60px !default;
278
+ $gridGutterWidth: 20px !default;
279
+ $gridRowWidth: ($gridColumns * $gridColumnWidth) + ($gridGutterWidth * ($gridColumns - 1)) !default;
280
+
281
+ // 1200px min
282
+ $gridColumnWidth1200: 70px !default;
283
+ $gridGutterWidth1200: 30px !default;
284
+ $gridRowWidth1200: ($gridColumns * $gridColumnWidth1200) + ($gridGutterWidth1200 * ($gridColumns - 1)) !default;
285
+
286
+ // 768px-979px
287
+ $gridColumnWidth768: 42px !default;
288
+ $gridGutterWidth768: 20px !default;
289
+ $gridRowWidth768: ($gridColumns * $gridColumnWidth768) + ($gridGutterWidth768 * ($gridColumns - 1)) !default;
290
+
291
+
292
+ // Fluid grid
293
+ // -------------------------
294
+ $fluidGridColumnWidth: percentage($gridColumnWidth/$gridRowWidth) !default;
295
+ $fluidGridGutterWidth: percentage($gridGutterWidth/$gridRowWidth) !default;
296
+
297
+ // 1200px min
298
+ $fluidGridColumnWidth1200: percentage($gridColumnWidth1200/$gridRowWidth1200) !default;
299
+ $fluidGridGutterWidth1200: percentage($gridGutterWidth1200/$gridRowWidth1200) !default;
300
+
301
+ // 768px-979px
302
+ $fluidGridColumnWidth768: percentage($gridColumnWidth768/$gridRowWidth768) !default;
303
+ $fluidGridGutterWidth768: percentage($gridGutterWidth768/$gridRowWidth768) !default;