scrivito_editors 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +48 -0
  3. data/LICENSE +4 -0
  4. data/README.md +55 -0
  5. data/Rakefile +9 -0
  6. data/app/assets/fonts/editing_icons-webfont.eot +0 -0
  7. data/app/assets/fonts/editing_icons-webfont.ttf +0 -0
  8. data/app/assets/fonts/editing_icons-webfont.woff +0 -0
  9. data/app/assets/javascripts/jquery_additions/jquery_center.js.coffee +6 -0
  10. data/app/assets/javascripts/mediabrowser/inspector.js.coffee +65 -0
  11. data/app/assets/javascripts/mediabrowser/mediabrowser.js.coffee +420 -0
  12. data/app/assets/javascripts/mediabrowser/uploader.js.coffee +132 -0
  13. data/app/assets/javascripts/scrivito_editors.js +18 -0
  14. data/app/assets/javascripts/scrivito_editors/date_editor.js.coffee +50 -0
  15. data/app/assets/javascripts/scrivito_editors/enum_editor.js.coffee +36 -0
  16. data/app/assets/javascripts/scrivito_editors/html_editor.js.coffee +140 -0
  17. data/app/assets/javascripts/scrivito_editors/linklist_editor.js.coffee +176 -0
  18. data/app/assets/javascripts/scrivito_editors/multienum_editor.js.coffee +37 -0
  19. data/app/assets/javascripts/scrivito_editors/placeholder.js.coffee +22 -0
  20. data/app/assets/javascripts/scrivito_editors/reference_editor.js.coffee +28 -0
  21. data/app/assets/javascripts/scrivito_editors/referencelist_editor.js.coffee +111 -0
  22. data/app/assets/javascripts/scrivito_editors/slider_editor.js.coffee +39 -0
  23. data/app/assets/javascripts/scrivito_editors/string_editor.js.coffee +83 -0
  24. data/app/assets/javascripts/scrivito_editors/text_editor.js.coffee +85 -0
  25. data/app/assets/stylesheets/scrivito_editors.css +16 -0
  26. data/app/assets/stylesheets/scrivito_editors/buttons.css +161 -0
  27. data/app/assets/stylesheets/scrivito_editors/editors/linklist_editor.css +105 -0
  28. data/app/assets/stylesheets/scrivito_editors/editors/referencelist_editor.css +67 -0
  29. data/app/assets/stylesheets/scrivito_editors/editors/text_editor.css +7 -0
  30. data/app/assets/stylesheets/scrivito_editors/icons.css.erb +229 -0
  31. data/app/assets/stylesheets/scrivito_editors/mediabrowser.css +1010 -0
  32. data/app/assets/stylesheets/scrivito_editors/placeholder.css +17 -0
  33. data/app/assets/stylesheets/scrivito_editors/widget_preview.css +38 -0
  34. data/app/controllers/scrivito_editors/mediabrowser_controller.rb +36 -0
  35. data/app/views/layouts/scrivito_editors/mediabrowser/inspector.html.erb +11 -0
  36. data/app/views/scrivito_editors/mediabrowser/_buttons.html.erb +16 -0
  37. data/app/views/scrivito_editors/mediabrowser/_header.html.erb +25 -0
  38. data/app/views/scrivito_editors/mediabrowser/modal.html.erb +12 -0
  39. data/app/views/scrivito_editors/obj/details.html +5 -0
  40. data/config/initializers/mediabrowser.rb +13 -0
  41. data/config/routes.rb +5 -0
  42. data/lib/scrivito_editors.rb +4 -0
  43. data/lib/scrivito_editors/engine.rb +7 -0
  44. data/lib/scrivito_editors/version.rb +3 -0
  45. data/spec/dummy/README.rdoc +28 -0
  46. data/spec/dummy/Rakefile +6 -0
  47. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  48. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  49. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  50. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  51. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  52. data/spec/dummy/bin/bundle +3 -0
  53. data/spec/dummy/bin/rails +4 -0
  54. data/spec/dummy/bin/rake +4 -0
  55. data/spec/dummy/config.ru +4 -0
  56. data/spec/dummy/config/application.rb +23 -0
  57. data/spec/dummy/config/boot.rb +5 -0
  58. data/spec/dummy/config/database.yml +25 -0
  59. data/spec/dummy/config/environment.rb +5 -0
  60. data/spec/dummy/config/environments/development.rb +29 -0
  61. data/spec/dummy/config/environments/production.rb +80 -0
  62. data/spec/dummy/config/environments/test.rb +36 -0
  63. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  64. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  65. data/spec/dummy/config/initializers/inflections.rb +16 -0
  66. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  67. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  68. data/spec/dummy/config/initializers/session_store.rb +3 -0
  69. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  70. data/spec/dummy/config/locales/en.yml +23 -0
  71. data/spec/dummy/config/routes.rb +4 -0
  72. data/spec/dummy/public/404.html +58 -0
  73. data/spec/dummy/public/422.html +58 -0
  74. data/spec/dummy/public/500.html +57 -0
  75. data/spec/dummy/public/favicon.ico +0 -0
  76. data/spec/spec_helper.rb +13 -0
  77. data/vendor/assets/fonts/redactor-font.eot +0 -0
  78. data/vendor/assets/javascripts/jquery-ui-timepicker-addon.min.js +5 -0
  79. data/vendor/assets/javascripts/redactor.js +7869 -0
  80. data/vendor/assets/stylesheets/jquery-ui-timepicker-addon.min.css +5 -0
  81. data/vendor/assets/stylesheets/redactor.css.erb +968 -0
  82. metadata +240 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cf1ebdd00044d7054e121007f00f33c8db2d49c5
4
+ data.tar.gz: daf06bd788bba66cad36195e3d03243f2bf51f3c
5
+ SHA512:
6
+ metadata.gz: d9571c486b4a348b976259632dd20194eff1e8af0acb3cc12a29e30e844e5e60cac5930080b594183976e770f2daf23ca0c99f2329dcce958cd9e8fe38b2b8b3
7
+ data.tar.gz: f62413860d2790e1d6a9195b6dd653ff5ccd4a6207b96ba10d987562d6c05114d87ca197740024b18dcd3ba2494e1d0fd4aeac276bbb1ea7337389bc6785e412
@@ -0,0 +1,48 @@
1
+ # v0.0.8
2
+ * Use Twitter Bootstrap styling for enum and multienum select fields.
3
+
4
+ # v0.0.7
5
+ * Linklist and referencelist editors now better handle all aspects of the inplace editing process
6
+ for these two attributes. The "add" button no longer has to be rendered by the application code.
7
+ The styling of both editors was also improved to make it more user friendly.
8
+ * Mediabrowser: Thumbnails only display an image, if the object defines a `image?` method, that
9
+ returns `true`, otherwise a generic icon is rendered.
10
+ * Bugfix: The string and text editor now also save correctly, when highlighting and editing the
11
+ content without triggering a `click` event.
12
+ * Bugfix: The placeholder now also works for attributes, that have been cleared without triggering
13
+ a reload of the page afterwards. (Thanks @gertimon)
14
+ * Bugfix: The default placeholder text for empty CMS attributes only used the name of the first
15
+ attribute on the page, instead of the correct field name for each CMS attribute.
16
+
17
+ # v0.0.6
18
+ * Rewrite of string and text editor to better support pasting HTML, correctly handling quotes,
19
+ inserting the carrot at the correct position and better multiline support for preformatted text
20
+ fields. (Thanks @dcsaszar)
21
+ * Bugfix: Using renamed `obj_class_name` method from the new Scrivito SDK instead of `obj_class`.
22
+ * Changed the behavior when an item is clicked in the mediabrowser. Instead of opening the
23
+ inspector, the item is now selected or deselected. A small magnifying glass in the upper right
24
+ corner of the thumbnail now allows to open the inspector for the item.
25
+ * Rename the fallback inspector view to `details.html`, to be consistent to the new Scrivito SDK.
26
+
27
+ # v0.0.5
28
+ * The template used in the inspector is no longer configurable and always corresponds to the
29
+ details view used by the Scrivito SDK.
30
+ * Bugfix: The mediabrowser did not use a correct start index to render multiple thumbnails.
31
+
32
+ # v0.0.4
33
+ * Bugfix: Mediabrowser buttons now also work in Chrome browser.
34
+
35
+ # v0.0.3
36
+ * Updated redactor to version 9.2.1 and removed all custom settings.
37
+ * Added option `data-reload` to the string editor to configure if a reload event should
38
+ be triggered or not after saving the changes. (Thanks @apepper)
39
+
40
+ # v0.0.2
41
+ * Added placeholder text to empty CMS attributes.
42
+
43
+ # v0.0.1
44
+ * Updated html editor seperator height from 29px to 27px.
45
+ * Updated the README to describe the new gem.
46
+ * Added editing icons used in some of the editors and the media browser.
47
+ * Removed the saving animation for editors to not disturb the in-place editing
48
+ experience.
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.
@@ -0,0 +1,55 @@
1
+ # Scrivito Editors
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/scrivito_editors.png)](http://badge.fury.io/rb/scrivito_editors)
4
+ [![Code Climate](https://codeclimate.com/github/infopark/scrivito_editors.png)](https://codeclimate.com/github/infopark/scrivito_editors)
5
+ [![Dependency Status](https://gemnasium.com/infopark/scrivito_editors.png)](https://gemnasium.com/infopark/scrivito_editors)
6
+ [![Build Status](https://travis-ci.org/infopark/scrivito_editors.png)](https://travis-ci.org/infopark/scrivito_editors)
7
+
8
+ The [Scrivito](http://scrivito.com) Editors gem is a collection of useful standard
9
+ JavaScript editors based on the Scrivito SDK. The editors allow to edit all CMS
10
+ attributes in place and provide helper for the property view of pages and
11
+ widgets. A media browser is also part of the gem, to add, update and delete
12
+ resources.
13
+
14
+ ## Installation and Usage
15
+
16
+ Please visit our Documentation to get the
17
+ [latest installation and usage information](https://scrivito.com/editors).
18
+
19
+
20
+ ## Changelog
21
+
22
+ See [Changelog](https://github.com/infopark/scrivito_editors/blob/master/CHANGELOG.md) for more
23
+ details.
24
+
25
+
26
+ ## Contributing
27
+
28
+ We would be very happy and thankful if you open new issues in order to further improve Scrivito
29
+ Editors. If you want to go a step further and extend the functionality or fix a problem, you can
30
+ do so any time by following the steps below.
31
+
32
+ 1. Fork and clone the
33
+ [Scrivito Editors GitHub repository](https://github.com/infopark/scrivito_editors).
34
+
35
+ git clone git@github.com:_username_/scrivito_editors.git
36
+ cd scrivito_editors
37
+
38
+ 2. We suggest using [rbenv](https://github.com/sstephenson/rbenv/) for managing your local Ruby
39
+ version. Make sure to use at least Ruby version 2.0.
40
+
41
+ ruby --version
42
+
43
+ 3. Create your feature branch and create a pull request for the `develop` branch. Please take a
44
+ look at the already existing generators and rake tasks to get an impression of our coding style
45
+ and the general architecture.
46
+
47
+ 4. We are using the [GitHub Styleguides](https://github.com/styleguide) and would prefer if you
48
+ could stick to it.
49
+
50
+
51
+ ## License
52
+ Copyright (c) 2009 - 2014 Infopark AG (http://www.infopark.com)
53
+
54
+ This software can be used and modified under the LGPL-3.0. Please refer to
55
+ http://www.gnu.org/licenses/lgpl-3.0.html for the license text.
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'bundler/setup'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ require 'rspec/core/rake_task'
7
+ RSpec::Core::RakeTask.new(:spec)
8
+
9
+ task default: :spec
@@ -0,0 +1,6 @@
1
+ jQuery.fn.center = ->
2
+ if @length == 1
3
+ @css
4
+ marginLeft: -this.innerWidth() / 2
5
+ marginTop: -this.innerHeight() / 2
6
+ left: '50%'
@@ -0,0 +1,65 @@
1
+ @MediabrowserInspector = do ->
2
+ inspectorSelector: '.editing-mediabrowser-inspector'
3
+ contentSelector: '.inspector-content'
4
+ inspector: undefined
5
+ objectId: undefined
6
+
7
+ _initializeBindings: ->
8
+ @modal.on 'click', 'li.mediabrowser-item', (event) =>
9
+ @_onInspect(event)
10
+
11
+ @inspector = @modal.find(@inspectorSelector)
12
+ @inspector.hide()
13
+
14
+ _onInspect: (event) ->
15
+ if $(event.target).hasClass('editing-mediabrowser-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-mediabrowser-loading')
32
+ .html(icon)
33
+
34
+ _highlightItem: (element) ->
35
+ @modal.find('li.mediabrowser-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 mediabrowser 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: '/mediabrowser/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 mediabrowser.
63
+ close: ->
64
+ @inspector.empty()
65
+ @inspector.hide()
@@ -0,0 +1,420 @@
1
+ @Mediabrowser = do ->
2
+ thumbnailViewButtonSelector: '.editing-button-view'
3
+ options: {}
4
+
5
+ # The media 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-mediabrowser-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-mediabrowser-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-mediabrowser-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('mediabrowser')
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.mediabrowser')
124
+ item.remove()
125
+
126
+ @_deselectAllItems()
127
+
128
+ _getItemId: (item) ->
129
+ $(item).closest('li.mediabrowser-item').data('id')
130
+
131
+ _getItemContainer: (id) ->
132
+ $('li.mediabrowser-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.mediabrowser-item .select-item.active').removeClass('active')
173
+
174
+ _getItems: ->
175
+ @modal.find('.editing-mediabrowser-items')
176
+
177
+ _getContainer: ->
178
+ @modal.find('.editing-mediabrowser-thumbnails')
179
+
180
+ _itemsPlaceholder: (count) ->
181
+ size = @_getThumbnailSize()
182
+
183
+ list = $('<ul></ul>')
184
+ .addClass('items editing-mediabrowser-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('mediabrowser-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.mediabrowser-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-mediabrowser-preview')
252
+ .appendTo(wrapper)
253
+
254
+ inspect = $('<span></span>')
255
+ .addClass('editing-mediabrowser-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-mediabrowser-meta')
270
+ .appendTo(wrapper)
271
+
272
+ title = $('<span></span>')
273
+ .addClass('editing-mediabrowser-thumbnails-name')
274
+ .html(title)
275
+ .appendTo(meta)
276
+
277
+ select = $('<span></span>')
278
+ .addClass('editing-mediabrowser-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-mediabrowser.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.mediabrowser-item', (event) =>
311
+ unless $(event.target).hasClass('editing-mediabrowser-inspect')
312
+ item = $(event.currentTarget).find('.select-item')
313
+ @_selectItem(item)
314
+
315
+ @modal.on 'click', '.mediabrowser-save', (event) =>
316
+ event.preventDefault()
317
+ @_save()
318
+
319
+ @modal.on 'click', '.mediabrowser-delete', (event) =>
320
+ event.preventDefault()
321
+ @_delete()
322
+
323
+ @modal.on 'click', '.mediabrowser-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.mediabrowser', (event) =>
336
+ @reload = true
337
+
338
+ $(document).on 'keyup.mediabrowser', (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.mediabrowser'
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-mediabrowser show')
356
+ .attr('id', 'editing-mediabrowser')
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-mediabrowser-loading')
369
+ .html(icon)
370
+
371
+ _changeThumbnailSize: (size) ->
372
+ size ||= @_getThumbnailSize()
373
+ @_setThumbnailSize(size)
374
+
375
+ transitionListener = 'webkitTransitionEnd.mediabrowser otransitionend.mediabrowser oTransitionEnd.mediabrowser msTransitionEnd.mediabrowser transitionend.mediabrowser'
376
+ @modal.on transitionListener, 'li.mediabrowser-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: '/mediabrowser/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
+ MediabrowserInspector.init(@modal)
414
+ MediabrowserUploader.init(@modal)
415
+
416
+ MediabrowserUploader.onUploadFailure = (error) =>
417
+ console.error('Mediabrowser Uploader Error:', error)
418
+
419
+ MediabrowserUploader.onUploadSuccess = (objs) =>
420
+ @_renderPlaceholder()