curate 0.1.0 → 0.1.1

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 (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;