scrivito_resourcebrowser 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 510275617f4f8a67da0e59da5894ebdb4e9eebbd
4
+ data.tar.gz: 8b2840de01ac7e2067d38f69950547bf8e967522
5
+ SHA512:
6
+ metadata.gz: 168f45c11796dcdf5f6a2e272c44c7d6eaf8d98c58686e278829e34cef79cb6993af0a3e9a0261d32e48d88f4279103af98077dd7e18f7d67bb63e812114cc31
7
+ data.tar.gz: ee4b97fee0ef7fa22c06bc28de6f3f327552f3b73a03fc3f70ead08600dc09f1ed041cb02ed1c8dfc6efe0a6a445914cc95e78468820fb98acffe25112cf61f0
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ # v0.0.1
2
+ * rename to resource browser
3
+ * initial version
data/LICENSE ADDED
@@ -0,0 +1,4 @@
1
+ Copyright (c) 2009 - 2014 Infopark AG (http://www.infopark.com)
2
+
3
+ This software can be used and modified under the LGPL-3.0. Please refer to
4
+ http://www.gnu.org/licenses/lgpl-3.0.html for the license text.
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # Scrivito Resource Browser
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/scrivito_resourcebrowser.png)](http://badge.fury.io/rb/scrivito_resourcebrowser)
4
+ [![Code Climate](https://codeclimate.com/github/infopark/scrivito_resourcebrowser.png)](https://codeclimate.com/github/infopark/scrivito_resourcebrowser)
5
+ [![Dependency Status](https://gemnasium.com/infopark/scrivito_resourcebrowser.png)](https://gemnasium.com/infopark/scrivito_resourcebrowser)
6
+ [![Build Status](https://travis-ci.org/infopark/scrivito_resourcebrowser.png)](https://travis-ci.org/infopark/scrivito_resourcebrowser)
7
+
8
+ The [Scrivito](http://scrivito.com) Resource Browser is a JavaScript based tool to add, update and
9
+ delete resources. It provides flexible configuration options and can easily be integrated into your
10
+ application.
11
+
12
+ ## Installation and Usage
13
+
14
+ TODO
15
+
16
+
17
+ ## Changelog
18
+
19
+ See [Changelog](https://github.com/infopark/scrivito_resourcebrowser/blob/master/CHANGELOG.md) for more
20
+ details.
21
+
22
+
23
+ ## Contributing
24
+
25
+ We would be very happy and thankful if you open new issues in order to further improve Scrivito
26
+ Resource Browser. If you want to go a step further and extend the functionality or fix a problem,
27
+ you can do so any time by following the steps below.
28
+
29
+ 1. Fork and clone the
30
+ [Scrivito Resource Browser GitHub repository](https://github.com/infopark/scrivito_resourcebrowser).
31
+
32
+ git clone git@github.com:_username_/scrivito_resourcebrowser.git
33
+ cd scrivito_resourcebrowser
34
+
35
+ 2. We suggest using [rbenv](https://github.com/sstephenson/rbenv/) for managing your local Ruby
36
+ version. Make sure to use at least Ruby version 2.0.
37
+
38
+ ruby --version
39
+
40
+ 3. Create your feature branch and create a pull request for the `develop` branch. Please take a
41
+ look at the already existing generators and rake tasks to get an impression of our coding style
42
+ and the general architecture.
43
+
44
+ 4. We are using the [GitHub Styleguides](https://github.com/styleguide) and would prefer if you
45
+ could stick to it.
46
+
47
+
48
+ ## License
49
+ Copyright (c) 2009 - 2014 Infopark AG (http://www.infopark.com)
50
+
51
+ This software can be used and modified under the LGPL-3.0. Please refer to
52
+ http://www.gnu.org/licenses/lgpl-3.0.html for the license text.
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'bundler/setup'
4
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,65 @@
1
+ @ResourcebrowserInspector = do ->
2
+ inspectorSelector: '.editing-resourcebrowser-inspector'
3
+ contentSelector: '.inspector-content'
4
+ inspector: undefined
5
+ objectId: undefined
6
+
7
+ _initializeBindings: ->
8
+ @modal.on 'click', 'li.resourcebrowser-item', (event) =>
9
+ @_onInspect(event)
10
+
11
+ @inspector = @modal.find(@inspectorSelector)
12
+ @inspector.hide()
13
+
14
+ _onInspect: (event) ->
15
+ if $(event.target).hasClass('editing-resourcebrowser-inspect')
16
+ currentTarget = $(event.currentTarget)
17
+ id = currentTarget.data('id')
18
+
19
+ if id
20
+ @open(id)
21
+ @_highlightItem(currentTarget)
22
+
23
+ _renderLoading: ->
24
+ @inspector.html(@_loadingTemplate())
25
+
26
+ _loadingTemplate: ->
27
+ icon = $('<i></i>')
28
+ .addClass('editing-icon editing-icon-refresh')
29
+
30
+ $('<div></div>')
31
+ .addClass('editing-resourcebrowser-loading')
32
+ .html(icon)
33
+
34
+ _highlightItem: (element) ->
35
+ @modal.find('li.resourcebrowser-item.active').removeClass('active')
36
+ element.addClass('active')
37
+
38
+ init: (modal) ->
39
+ @modal = modal
40
+ @_initializeBindings()
41
+
42
+ # Opens the inspector section in the resourcebrowser for the given object ID and displays its edit
43
+ # view.
44
+ open: (objectId) ->
45
+ @objectId = objectId
46
+
47
+ @inspector.show()
48
+ @_renderLoading()
49
+
50
+ $.ajax
51
+ url: '/resourcebrowser/inspector'
52
+ dataType: 'json'
53
+ data:
54
+ id: @objectId
55
+ success: (json) =>
56
+ @inspector.html(json.content)
57
+ scrivito.trigger('new_content', @inspector)
58
+
59
+ error: =>
60
+ @inspector.empty()
61
+
62
+ # Closes the inspector section of the resourcebrowser.
63
+ close: ->
64
+ @inspector.empty()
65
+ @inspector.hide()
@@ -0,0 +1,420 @@
1
+ @Resourcebrowser = do ->
2
+ thumbnailViewButtonSelector: '.editing-button-view'
3
+ options: {}
4
+
5
+ # The resource browser supports operations like +delete+ and +edit+ of resources that require a page
6
+ # reload, so that all references of the resources get updated.
7
+ reload: false
8
+
9
+ _getBatchSize: ->
10
+ @batchSize ||= 20
11
+
12
+ _getThumbnailSize: ->
13
+ @thumbnailSize ||= 'normal'
14
+
15
+ _setThumbnailSize: (value) ->
16
+ @thumbnailSize = value
17
+
18
+ _filterListTemplate: (filters) ->
19
+ list = $('<ul></ul>')
20
+ .addClass('editing-resourcebrowser-filter-items')
21
+
22
+ for name, options of filters
23
+ title = options.title
24
+ icon = options.icon || 'editing-icon-generic'
25
+ query = @_prepareQuery(options.query)
26
+
27
+ @_filterTemplate(title, icon, query)
28
+ .appendTo(list)
29
+
30
+ list
31
+
32
+ _loadFilter: () ->
33
+ filters = @_selectedFilters()
34
+ wrapper = @modal.find('.editing-resourcebrowser-filter')
35
+
36
+ @_filterListTemplate(filters)
37
+ .appendTo(wrapper)
38
+
39
+ @_defaultFilter().trigger('click')
40
+
41
+ _selectedFilters: ->
42
+ availableFilters = @filters()
43
+ selectedFilters = @options.filters
44
+ filters = availableFilters
45
+
46
+ if selectedFilters?
47
+ unless $.isArray(selectedFilters)
48
+ selectedFilters = new Array(selectedFilters)
49
+
50
+ filters = {}
51
+
52
+ for filterId, filter of availableFilters
53
+ if filterId in selectedFilters
54
+ filters[filterId] = filter
55
+
56
+ filters
57
+
58
+ _defaultFilter: ->
59
+ @_filterItems().first()
60
+
61
+ _getFilterQuery: (filter) ->
62
+ filter.data('query')
63
+
64
+ _defaultQuery: ->
65
+ @_getFilterQuery(@_defaultFilter())
66
+
67
+ _activeQuery: ->
68
+ filter = @_filterItems().filter('.active')
69
+ @_getFilterQuery(filter)
70
+
71
+ _filterItems: ->
72
+ @modal.find('li.filter')
73
+
74
+ _deactivateAllFilter: ->
75
+ @_getSearch().val('')
76
+ @_filterItems().removeClass('active')
77
+
78
+ _triggerFilter: (filter) ->
79
+ @_deactivateAllFilter()
80
+
81
+ filter.addClass('active')
82
+
83
+ query = @_getFilterQuery(filter)
84
+ @_renderPlaceholder(query)
85
+
86
+ _filterTemplate: (title, icon, query) ->
87
+ filter = $('<li></li>')
88
+ .addClass('filter')
89
+ .data('query', query)
90
+
91
+ icon = $('<span></span>')
92
+ .addClass('editing-icon')
93
+ .addClass(icon)
94
+ .appendTo(filter)
95
+
96
+ title = $('<span></span>')
97
+ .addClass('editing-resourcebrowser-filter-name')
98
+ .html(title)
99
+ .appendTo(filter)
100
+
101
+ filter
102
+
103
+ _prepareQuery: (query) ->
104
+ params = $.extend(true, {}, query.query())
105
+ scrivito.chainable_search.create_instance(params)
106
+ .order('_last_changed')
107
+ .reverse_order()
108
+ .format('resourcebrowser')
109
+
110
+ _save: ->
111
+ (@options.onSave || $.noop)(@selected)
112
+
113
+ @close()
114
+
115
+ _delete: ->
116
+ (@options.onDelete || $.noop)(@selected)
117
+
118
+ $.each @selected, (index, id) =>
119
+ item = @_getItemContainer(id)
120
+ @_itemLoading(item)
121
+
122
+ scrivito.delete_obj(id).then =>
123
+ @modal.trigger('resource_change.resourcebrowser')
124
+ item.remove()
125
+
126
+ @_deselectAllItems()
127
+
128
+ _getItemId: (item) ->
129
+ $(item).closest('li.resourcebrowser-item').data('id')
130
+
131
+ _getItemContainer: (id) ->
132
+ $('li.resourcebrowser-item').filter ->
133
+ id == $(this).data('id')
134
+
135
+ _selectItem: (item) ->
136
+ if (item.hasClass('active'))
137
+ @_removeItem(item)
138
+ else
139
+ @_addItem(item)
140
+
141
+ _addItem: (item) ->
142
+ @_activateItem(item)
143
+
144
+ id = @_getItemId(item)
145
+
146
+ @selected.push(id)
147
+ @_setSelected($.unique(@selected))
148
+
149
+ _removeItem: (item) ->
150
+ @_deactivateItem(item)
151
+
152
+ selected = @selected.filter (id) =>
153
+ id != @_getItemId(item)
154
+
155
+ @_setSelected(selected)
156
+
157
+ _activateItem: (item) ->
158
+ $(item).addClass('active')
159
+
160
+ _deactivateItem: (item) ->
161
+ $(item).removeClass('active')
162
+
163
+ _changeSelectedTotal: ->
164
+ @modal.find('.selected-total').html(@selected.length)
165
+
166
+ _setSelected: (value) ->
167
+ @selected = value || @options.selection || []
168
+ @_changeSelectedTotal()
169
+
170
+ _deselectAllItems: ->
171
+ @_setSelected([])
172
+ @modal.find('li.resourcebrowser-item .select-item.active').removeClass('active')
173
+
174
+ _getItems: ->
175
+ @modal.find('.editing-resourcebrowser-items')
176
+
177
+ _getContainer: ->
178
+ @modal.find('.editing-resourcebrowser-thumbnails')
179
+
180
+ _itemsPlaceholder: (count) ->
181
+ size = @_getThumbnailSize()
182
+
183
+ list = $('<ul></ul>')
184
+ .addClass('items editing-resourcebrowser-thumbnails')
185
+ .addClass(size)
186
+
187
+ content = for index in [0...count] by 1
188
+ itemTemplate = @_itemPlaceholderTemplate(index)
189
+ list.append(itemTemplate)
190
+
191
+ @_getItems().html(content)
192
+
193
+ _itemPlaceholderTemplate: (index) ->
194
+ item = $('<li></li>')
195
+ .addClass('resourcebrowser-item')
196
+ .attr('data-index', index)
197
+
198
+ @_itemLoading(item)
199
+
200
+ _itemLoading: (item) ->
201
+ loading = @_loadingTemplate()
202
+ $(item).html(loading)
203
+
204
+ _renderPlaceholder: (query) ->
205
+ query ||= @_defaultQuery()
206
+
207
+ return unless query?
208
+
209
+ @_getItems()
210
+ .empty()
211
+ .html(@_loadingTemplate())
212
+
213
+ query.size()
214
+ .then (total) =>
215
+ if total > 0
216
+ @_itemsPlaceholder(total)
217
+ @_renderItems(query)
218
+ else
219
+ @_getItems().empty()
220
+
221
+ _renderItems: (query, index = 0) ->
222
+ query
223
+ .batch_size(@_getBatchSize())
224
+
225
+ query.load_batch()
226
+ .then (result, next) =>
227
+ objects = result.hits
228
+ @_replacePlaceholder(objects, index)
229
+
230
+ if next?
231
+ start = index + objects.length
232
+ @_renderItems(next, start)
233
+
234
+ _replacePlaceholder: (objects, startIndex) ->
235
+ $(objects).each (index, object) =>
236
+ elementIndex = startIndex + index
237
+ template = @_itemTemplate(object)
238
+
239
+ @modal.find("li.resourcebrowser-item[data-index=#{elementIndex}]")
240
+ .html(template)
241
+ .data('id', object.id)
242
+
243
+ _itemTemplate: (object) ->
244
+ url = object.preview
245
+ title = object.title || object.name
246
+ id = object.id
247
+
248
+ wrapper = $('<div></div>')
249
+
250
+ preview = $('<div></div>')
251
+ .addClass('editing-resourcebrowser-preview')
252
+ .appendTo(wrapper)
253
+
254
+ inspect = $('<span></span>')
255
+ .addClass('editing-resourcebrowser-inspect')
256
+ .appendTo(preview)
257
+
258
+ image = if url?
259
+ $('<img />')
260
+ .attr('src', url)
261
+ else
262
+ $('<span></span>')
263
+ .addClass('editing-icon')
264
+ .addClass('editing-icon-generic')
265
+
266
+ image.appendTo(preview)
267
+
268
+ meta = $('<div></div>')
269
+ .addClass('editing-resourcebrowser-meta')
270
+ .appendTo(wrapper)
271
+
272
+ title = $('<span></span>')
273
+ .addClass('editing-resourcebrowser-thumbnails-name')
274
+ .html(title)
275
+ .appendTo(meta)
276
+
277
+ select = $('<span></span>')
278
+ .addClass('editing-resourcebrowser-thumbnails-select select-item')
279
+ .appendTo(title)
280
+
281
+ if id in @selected
282
+ select.addClass('active')
283
+
284
+ wrapper
285
+
286
+ _getSearch: ->
287
+ @modal.find('input.search-field')
288
+
289
+ _triggerSearch: ->
290
+ term = @_getSearch().val()
291
+ query = @_prepareQuery(@_activeQuery())
292
+
293
+ if term? && term.length > 0
294
+ query.and('*', 'contains_prefix', term)
295
+
296
+ @_renderPlaceholder(query)
297
+
298
+ _initializeBindings: ->
299
+ $(window).resize ->
300
+ $('#editing-resourcebrowser.show').center()
301
+
302
+ @modal.on 'keyup', 'input.search-field', (event) =>
303
+ if event.keyCode == 13
304
+ @_triggerSearch()
305
+
306
+ @modal.on 'click', 'button.search-field-button', (event) =>
307
+ event.preventDefault()
308
+ @_triggerSearch()
309
+
310
+ @modal.on 'click', 'li.resourcebrowser-item', (event) =>
311
+ unless $(event.target).hasClass('editing-resourcebrowser-inspect')
312
+ item = $(event.currentTarget).find('.select-item')
313
+ @_selectItem(item)
314
+
315
+ @modal.on 'click', '.resourcebrowser-save', (event) =>
316
+ event.preventDefault()
317
+ @_save()
318
+
319
+ @modal.on 'click', '.resourcebrowser-delete', (event) =>
320
+ event.preventDefault()
321
+ @_delete()
322
+
323
+ @modal.on 'click', '.resourcebrowser-close', (event) =>
324
+ event.preventDefault()
325
+ @close()
326
+
327
+ @modal.on 'click', 'li.filter', (event) =>
328
+ event.preventDefault()
329
+ @_triggerFilter($(event.currentTarget))
330
+
331
+ @modal.on 'click', @thumbnailViewButtonSelector, (event) =>
332
+ size = $(event.currentTarget).data('size')
333
+ @_changeThumbnailSize(size)
334
+
335
+ @modal.on 'resource_change.resourcebrowser', (event) =>
336
+ @reload = true
337
+
338
+ $(document).on 'keyup.resourcebrowser', (event) =>
339
+ event.stopImmediatePropagation()
340
+
341
+ if event.keyCode == 27
342
+ # Make sure to remove the event handler after
343
+ # +stopImmediatePropagation()+, otherwise all ESC keys are caught and
344
+ # not propagated.
345
+ $(document).off 'keyup.resourcebrowser'
346
+
347
+ @close()
348
+
349
+ _loadModal: (content) ->
350
+ @overlay = $('<div></div>')
351
+ .addClass('editing-overlay show')
352
+ .appendTo($('body'))
353
+
354
+ @modal = $('<div></div>')
355
+ .addClass('editing-resourcebrowser show')
356
+ .attr('id', 'editing-resourcebrowser')
357
+ .appendTo($('body'))
358
+ .center()
359
+ .html(content)
360
+
361
+ @_initializeBindings()
362
+
363
+ _loadingTemplate: ->
364
+ icon = $('<i></i>')
365
+ .addClass('editing-icon editing-icon-refresh')
366
+
367
+ $('<div></div>')
368
+ .addClass('editing-resourcebrowser-loading')
369
+ .html(icon)
370
+
371
+ _changeThumbnailSize: (size) ->
372
+ size ||= @_getThumbnailSize()
373
+ @_setThumbnailSize(size)
374
+
375
+ transitionListener = 'webkitTransitionEnd.resourcebrowser otransitionend.resourcebrowser oTransitionEnd.resourcebrowser msTransitionEnd.resourcebrowser transitionend.resourcebrowser'
376
+ @modal.on transitionListener, 'li.resourcebrowser-item', (event) =>
377
+ @modal.off transitionListener
378
+
379
+ @_getContainer()
380
+ .removeClass('small normal big large')
381
+ .addClass(size)
382
+
383
+ @modal.find(@thumbnailViewButtonSelector)
384
+ .removeClass('active')
385
+ .filter("[data-size='#{size}']")
386
+ .addClass('active')
387
+
388
+ filters: ->
389
+ {}
390
+
391
+ close: ->
392
+ (@options.onClose || $.noop)()
393
+
394
+ @overlay.remove()
395
+ @modal.remove()
396
+
397
+ if @reload
398
+ $('body').trigger('infopark_reload')
399
+
400
+ open: (options) ->
401
+ $.ajax
402
+ url: '/resourcebrowser/modal'
403
+ dataType: 'json'
404
+ success: (json) =>
405
+ @options = options
406
+
407
+ @_loadModal(json.content)
408
+ @_setSelected()
409
+ @_loadFilter()
410
+ @_renderPlaceholder()
411
+ @_changeThumbnailSize()
412
+
413
+ ResourcebrowserInspector.init(@modal)
414
+ ResourcebrowserUploader.init(@modal)
415
+
416
+ ResourcebrowserUploader.onUploadFailure = (error) =>
417
+ console.error('Resourcebrowser Uploader Error:', error)
418
+
419
+ ResourcebrowserUploader.onUploadSuccess = (objs) =>
420
+ @_renderPlaceholder()
@@ -0,0 +1,132 @@
1
+ @ResourcebrowserUploader = do ->
2
+ dropZoneSelector: '.editing-resourcebrowser-items'
3
+ dropOverCssClass: 'uploader-drag-over'
4
+ mimeTypeMapping:
5
+ 'image/*': 'Image'
6
+ 'video/*': 'Video'
7
+
8
+ _initializeBindings: ->
9
+ dropZone = @modal.find(@dropZoneSelector)
10
+
11
+ dropZone.on 'dragover', (event) =>
12
+ $(event.currentTarget).addClass(@dropOverCssClass)
13
+ event.preventDefault()
14
+
15
+ dropZone.on 'dragleave', (event) =>
16
+ $(event.currentTarget).removeClass(@dropOverCssClass)
17
+ event.preventDefault()
18
+
19
+ dropZone.on 'drop', (event) =>
20
+ $(event.currentTarget).removeClass(@dropOverCssClass)
21
+ @_onDrop(event)
22
+ event.preventDefault()
23
+
24
+ _objClassForMimeType: (mimeType) ->
25
+ for mime, objClass of @mimeTypeMapping
26
+ return objClass if mimeType.match(mime)
27
+
28
+ undefined
29
+
30
+ _processQueue: (queue, createdObjs, promise) ->
31
+ promise.then (data) =>
32
+ @onUploadSuccess(data)
33
+
34
+ file = queue.pop()
35
+
36
+ if file?
37
+ @_createResource(file).then (obj) =>
38
+ @_updateProgress(file, '100%')
39
+ createdObjs.push(obj)
40
+ .always =>
41
+ @_processQueue(queue, createdObjs, promise)
42
+
43
+ return promise
44
+ else
45
+ return promise.resolve(createdObjs)
46
+
47
+ _addProgressWrapper: () ->
48
+ itemsElement = $('.editing-resourcebrowser-items').empty()
49
+
50
+ $('<div></div>')
51
+ .addClass('editing-resourcebrowser-loading')
52
+ .appendTo itemsElement
53
+
54
+ $('<div></div>')
55
+ .addClass('editing-resourcebrowser-progress-wrapper')
56
+ .appendTo itemsElement
57
+
58
+ _addProgress: (file) ->
59
+ progressBar = $('<div></div>')
60
+ .addClass('editing-resourcebrowser-progress-bar')
61
+ .css('width', '10%')
62
+
63
+ progress = $('<div></div>')
64
+ .addClass('editing-resourcebrowser-progress')
65
+ .html(progressBar)
66
+
67
+ fileName = $('<p></p>')
68
+ .html(file.name)
69
+
70
+ $('<div></div>')
71
+ .addClass('editing-resourcebrowser-progress-file')
72
+ .append(fileName)
73
+ .append(progress)
74
+ .prependTo $('.editing-resourcebrowser-progress-wrapper')
75
+
76
+ file['progressBar'] = progressBar
77
+
78
+ _updateProgress: (file, percent) ->
79
+ file.progressBar.css('width', percent)
80
+
81
+ _onDrop: (event) ->
82
+ dataTransfer = event.originalEvent.dataTransfer
83
+
84
+ unless dataTransfer?
85
+ return
86
+
87
+ files = dataTransfer.files
88
+
89
+ if files.length == 0
90
+ return
91
+
92
+ @onUploadStart(queue)
93
+ @_addProgressWrapper()
94
+
95
+ promise = $.Deferred()
96
+
97
+ queue = for file in files
98
+ @_addProgress(file)
99
+ file
100
+
101
+ @_processQueue(queue, [], promise)
102
+
103
+ promise
104
+
105
+ _randomResourceId: ->
106
+ hex = Math.floor(Math.random() * Math.pow(16, 8)).toString(16)
107
+
108
+ while (hex.length < 8)
109
+ hex = '0' + hex
110
+
111
+ hex
112
+
113
+ _createResource: (file) ->
114
+ objName = file.name.replace(/[^a-z0-9_.$\-]/ig, '-')
115
+ path = "_resources/#{@_randomResourceId()}/#{objName}"
116
+
117
+ scrivito.create_obj
118
+ blob: file
119
+ _path: path
120
+ _obj_class: @_objClassForMimeType(file.type)
121
+
122
+ init: (@modal) ->
123
+ @_initializeBindings()
124
+
125
+ # Hook for 3rd parties when the upload starts.
126
+ onUploadStart: (files) ->
127
+
128
+ # Hook for 3rd parties when the upload fails.
129
+ onUploadFailure: (error) ->
130
+
131
+ # Hook for 3rd parties when the upload was successful.
132
+ onUploadSuccess: (objs) ->
@@ -0,0 +1,13 @@
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
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .