caboose-cms 0.5.221 → 0.5.222

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 (101) hide show
  1. checksums.yaml +8 -8
  2. data/app/assets/javascripts/caboose/admin_media_index.js +401 -0
  3. data/app/assets/javascripts/caboose/jquery-ui.drag-multiple.min.js +4 -0
  4. data/app/assets/javascripts/plupload/Moxie.swf +0 -0
  5. data/app/assets/javascripts/plupload/Moxie.xap +0 -0
  6. data/app/assets/javascripts/plupload/i18n/ar.js +2 -0
  7. data/app/assets/javascripts/plupload/i18n/az.js +2 -0
  8. data/app/assets/javascripts/plupload/i18n/bg.js +2 -0
  9. data/app/assets/javascripts/plupload/i18n/bs.js +2 -0
  10. data/app/assets/javascripts/plupload/i18n/ca.js +2 -0
  11. data/app/assets/javascripts/plupload/i18n/cs.js +2 -0
  12. data/app/assets/javascripts/plupload/i18n/cy.js +2 -0
  13. data/app/assets/javascripts/plupload/i18n/da.js +2 -0
  14. data/app/assets/javascripts/plupload/i18n/de.js +2 -0
  15. data/app/assets/javascripts/plupload/i18n/el.js +2 -0
  16. data/app/assets/javascripts/plupload/i18n/en.js +2 -0
  17. data/app/assets/javascripts/plupload/i18n/es.js +2 -0
  18. data/app/assets/javascripts/plupload/i18n/et.js +2 -0
  19. data/app/assets/javascripts/plupload/i18n/fa.js +2 -0
  20. data/app/assets/javascripts/plupload/i18n/fi.js +2 -0
  21. data/app/assets/javascripts/plupload/i18n/fr.js +2 -0
  22. data/app/assets/javascripts/plupload/i18n/he.js +2 -0
  23. data/app/assets/javascripts/plupload/i18n/hr.js +2 -0
  24. data/app/assets/javascripts/plupload/i18n/hu.js +2 -0
  25. data/app/assets/javascripts/plupload/i18n/hy.js +2 -0
  26. data/app/assets/javascripts/plupload/i18n/id.js +2 -0
  27. data/app/assets/javascripts/plupload/i18n/it.js +2 -0
  28. data/app/assets/javascripts/plupload/i18n/ja.js +2 -0
  29. data/app/assets/javascripts/plupload/i18n/ka.js +2 -0
  30. data/app/assets/javascripts/plupload/i18n/kk.js +2 -0
  31. data/app/assets/javascripts/plupload/i18n/km.js +2 -0
  32. data/app/assets/javascripts/plupload/i18n/ko.js +2 -0
  33. data/app/assets/javascripts/plupload/i18n/ku_IQ.js +2 -0
  34. data/app/assets/javascripts/plupload/i18n/lt.js +2 -0
  35. data/app/assets/javascripts/plupload/i18n/lv.js +2 -0
  36. data/app/assets/javascripts/plupload/i18n/mn.js +2 -0
  37. data/app/assets/javascripts/plupload/i18n/ms.js +2 -0
  38. data/app/assets/javascripts/plupload/i18n/nl.js +2 -0
  39. data/app/assets/javascripts/plupload/i18n/pl.js +2 -0
  40. data/app/assets/javascripts/plupload/i18n/pt_BR.js +2 -0
  41. data/app/assets/javascripts/plupload/i18n/ro.js +2 -0
  42. data/app/assets/javascripts/plupload/i18n/ru.js +2 -0
  43. data/app/assets/javascripts/plupload/i18n/sk.js +2 -0
  44. data/app/assets/javascripts/plupload/i18n/sq.js +2 -0
  45. data/app/assets/javascripts/plupload/i18n/sr.js +2 -0
  46. data/app/assets/javascripts/plupload/i18n/sr_RS.js +2 -0
  47. data/app/assets/javascripts/plupload/i18n/sv.js +2 -0
  48. data/app/assets/javascripts/plupload/i18n/th_TH.js +2 -0
  49. data/app/assets/javascripts/plupload/i18n/tr.js +2 -0
  50. data/app/assets/javascripts/plupload/i18n/uk_UA.js +2 -0
  51. data/app/assets/javascripts/plupload/i18n/vi.js +2 -0
  52. data/app/assets/javascripts/plupload/i18n/zh_CN.js +2 -0
  53. data/app/assets/javascripts/plupload/i18n/zh_TW.js +2 -0
  54. data/app/assets/javascripts/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css +185 -0
  55. data/app/assets/javascripts/plupload/jquery.plupload.queue/img/backgrounds.gif +0 -0
  56. data/app/assets/javascripts/plupload/jquery.plupload.queue/img/buttons-disabled.png +0 -0
  57. data/app/assets/javascripts/plupload/jquery.plupload.queue/img/buttons.png +0 -0
  58. data/app/assets/javascripts/plupload/jquery.plupload.queue/img/delete.gif +0 -0
  59. data/app/assets/javascripts/plupload/jquery.plupload.queue/img/done.gif +0 -0
  60. data/app/assets/javascripts/plupload/jquery.plupload.queue/img/error.gif +0 -0
  61. data/app/assets/javascripts/plupload/jquery.plupload.queue/img/throbber.gif +0 -0
  62. data/app/assets/javascripts/plupload/jquery.plupload.queue/img/transp50.png +0 -0
  63. data/app/assets/javascripts/plupload/jquery.plupload.queue/jquery.plupload.queue.js +428 -0
  64. data/app/assets/javascripts/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js +1 -0
  65. data/app/assets/javascripts/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css +370 -0
  66. data/app/assets/javascripts/plupload/jquery.ui.plupload/img/loading.gif +0 -0
  67. data/app/assets/javascripts/plupload/jquery.ui.plupload/img/plupload.png +0 -0
  68. data/app/assets/javascripts/plupload/jquery.ui.plupload/jquery.ui.plupload.js +1323 -0
  69. data/app/assets/javascripts/plupload/jquery.ui.plupload/jquery.ui.plupload.min.js +1 -0
  70. data/app/assets/javascripts/plupload/moxie.js +10726 -0
  71. data/app/assets/javascripts/plupload/moxie.min.js +15 -0
  72. data/app/assets/javascripts/plupload/plupload.dev.js +2315 -0
  73. data/app/assets/javascripts/plupload/plupload.full.min.js +28 -0
  74. data/app/assets/javascripts/plupload/plupload.min.js +13 -0
  75. data/app/assets/stylesheets/caboose/admin_media_index.css.scss +115 -0
  76. data/app/controllers/caboose/application_controller.rb +1 -1
  77. data/app/controllers/caboose/cart_controller.rb +1 -1
  78. data/app/controllers/caboose/media_categories_controller.rb +44 -8
  79. data/app/controllers/caboose/media_controller.rb +116 -0
  80. data/app/controllers/caboose/posts_controller.rb +1 -1
  81. data/app/controllers/caboose/sns_controller.rb +60 -0
  82. data/app/models/caboose/block.rb +4 -2
  83. data/app/models/caboose/media.rb +94 -0
  84. data/app/models/caboose/media_category.rb +55 -15
  85. data/app/models/caboose/schema.rb +6 -9
  86. data/app/models/caboose/tax_calculator.rb +1 -1
  87. data/app/views/caboose/{images → media}/admin_edit.html.erb +0 -0
  88. data/app/views/caboose/media/admin_index.html.erb +49 -0
  89. data/app/views/caboose/posts/admin_edit_general.html.erb +3 -1
  90. data/config/routes.rb +30 -17
  91. data/lib/caboose.rb +6 -0
  92. data/lib/caboose/version.rb +1 -1
  93. metadata +81 -11
  94. data/app/assets/javascripts/caboose/admin_images_index.js +0 -171
  95. data/app/assets/stylesheets/caboose/admin_images_index.css.scss +0 -53
  96. data/app/controllers/caboose/images_controller.rb +0 -149
  97. data/app/models/caboose/media_file.rb +0 -18
  98. data/app/models/caboose/media_image.rb +0 -43
  99. data/app/views/caboose/images/admin_index.html.erb +0 -59
  100. data/app/views/caboose/images/admin_new.html.erb +0 -80
  101. data/app/views/caboose/images/admin_s3_result.html.erb +0 -3
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NzgzMzZkMGE3NTE0ZTk4MGRkNzc0NjdlYzdiZDFiNDgxNTNhYTUyOQ==
4
+ ZjliZDRiZWU1NmE4ODhhNDgwZDA0YWJiMjQ5MjgwMjIwNDM1YzkwMg==
5
5
  data.tar.gz: !binary |-
6
- Nzc0MTg0OGRlMGEwOGEyYmU0ZTZiM2QyYmI5NWI0YzdkZmQwYjg5NA==
6
+ NzdiN2ZkZjIxMjdlZGQzM2ViMzE1MGE5ODFhNjBjODBlMmViMTVlZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MjQ0MzNmNjgzMjk2OWI5ZjQ5MThiMjMyNDRlMGFkYjFkNTQ1YzdmOTU0Y2Q4
10
- ZDkxZmFkMmQ0ZTA1MGViN2MyOWYwMWExOTdkM2UyYzcwYTQyMjE2Yjc3MTRj
11
- MWZiY2U0NTZiZDEyMGNlMmQ5MDY0MmZhYmVlZGIwMjgwNGQxN2M=
9
+ NDcxZDdkMGQyNDZiYTZjZDFhZjkxOTYwNGZiYjgwODI1NWE4OGIyN2YwOTIz
10
+ YzNjMTM4YTA2MzVhN2Q2MWZlZWQ4Y2VlZjkyMjA4NDk5MGZjMjdmMTRjYTVh
11
+ ODA3NmQ0YWU2NWQ4ZGJlNjMyOGUxMTVlMzNhMDM0YWMwMmQ3YjM=
12
12
  data.tar.gz: !binary |-
13
- ZTMxYjM5MDc5YWNkOTMyNzllZDdkNDdjMDgwNzQ2NmMwYjdhM2E5ODE0MzAy
14
- YzZiNDI5MGRmZGYxMDQ4NmM0Yzg3YTg4ZGRlNjM2MjM0ZGM3NDUyZDIyNzAx
15
- Yzk0ZmJkODIzZDg5OTRlYTczYzk1ZjA0NmQyMGIxOTFiOGY5ZTE=
13
+ NDRhMWIyYzEwMTAyMjY0N2I4YTE5MzEzMTE5NjE2OWJiYWQ2YmFiNmVlNGFk
14
+ OWM3MzcyODg2ZjkzMzIwNmIyN2I0NGYwNjI3ZWI3YzcwMDczMTMyMDVjZjMx
15
+ MDQyOGM1ZmEyZGFjYWM2MjE3ZGM1NTRkY2UzYjZhNDUxYTBhMTg=
@@ -0,0 +1,401 @@
1
+
2
+ var MediaController = function(params) { this.init(params); };
3
+
4
+ MediaController.prototype = {
5
+
6
+ top_cat_id: false,
7
+ cat: false,
8
+ cat_id: false,
9
+ categories: false,
10
+ s3_upload_url: false,
11
+ aws_access_key_id: false,
12
+ policy: false,
13
+ signature: false,
14
+ selected_media: false,
15
+ uploader: false,
16
+
17
+ init: function(params) {
18
+ var that = this;
19
+ for (var i in params)
20
+ this[i] = params[i];
21
+
22
+ $("#uploader")
23
+ .empty()
24
+ .append($('<p/>')
25
+ .append($('<a/>').attr('href', '#').html('Upload').click(function(e) { e.preventDefault(); that.toggle_uploader(); }))
26
+ .append(' | ')
27
+ .append($('<a/>').attr('href', '#').html('Select All').click(function(e) { e.preventDefault(); that.select_all_media(); }))
28
+ )
29
+ .append($('<div/>').attr('id', 'the_uploader'));
30
+ that.refresh();
31
+ },
32
+
33
+ refresh: function()
34
+ {
35
+ var that = this;
36
+ that.refresh_categories();
37
+ that.refresh_media();
38
+ that.print_controls();
39
+ },
40
+
41
+ toggle_uploader: function()
42
+ {
43
+ var that = this;
44
+ if (that.uploader)
45
+ {
46
+ $("#the_uploader").slideUp(400, function() {
47
+ $("#the_uploader").plupload('destroy');
48
+ that.uploader = false;
49
+ });
50
+ }
51
+ else
52
+ {
53
+ $("#the_uploader").hide();
54
+ that.uploader = $("#the_uploader").plupload({
55
+ runtimes: 'html5,flash,silverlight',
56
+ url: that.s3_upload_url,
57
+ multipart: true,
58
+ multipart_params: {
59
+ key: that.cat_id + '_${filename}', // use filename as a key
60
+ Filename: that.cat_id + '_${filename}', // adding this to keep consistency across the runtimes
61
+ acl: 'public-read',
62
+ //'Content-Type': 'image/jpeg',
63
+ AWSAccessKeyId: that.aws_access_key_id,
64
+ policy: that.policy,
65
+ signature: that.signature
66
+ },
67
+ file_data_name: 'file', // optional, but better be specified directly
68
+ filters: {
69
+ max_file_size: '10mb', // Maximum file size
70
+ mime_types: [{ title: "Upload files", extensions: "jpg,jpeg,png,gif,tif,tiff,pdf,doc,docx,odt,odp,ods,ppt,pptx,xls,xlsx,zip,tgz,csv,txt" }] // Specify what files to browse for
71
+ },
72
+ flash_swf_url: '../../js/Moxie.swf', // Flash settings
73
+ silverlight_xap_url: '../../js/Moxie.xap', // Silverlight settings
74
+ init: {
75
+ BeforeUpload: function(up, file) {
76
+ $.ajax({
77
+ url: '/admin/media/pre-upload',
78
+ type: 'post',
79
+ data: {
80
+ media_category_id: that.cat_id,
81
+ name: file.name
82
+ },
83
+ success: function(resp) {},
84
+ async: false
85
+ });
86
+ controller.refresh();
87
+ },
88
+ FileUploaded: function(ip, file)
89
+ {
90
+ that.refresh();
91
+ },
92
+ UploadComplete: function(up, files) {
93
+ that.refresh();
94
+ if (that.uploader)
95
+ {
96
+ $("#the_uploader").slideUp(400, function() {
97
+ $("#the_uploader").plupload('destroy');
98
+ that.uploader = false;
99
+ });
100
+ }
101
+ }
102
+ }
103
+ });
104
+ $("#the_uploader").slideDown();
105
+ }
106
+ },
107
+
108
+ refresh_categories: function(after)
109
+ {
110
+ var that = this;
111
+ $.ajax({
112
+ url: '/admin/media-categories/flat-tree',
113
+ type: 'get',
114
+ async: false,
115
+ success: function(resp) {
116
+ that.categories = resp;
117
+ that.print_categories();
118
+ if (after) after();
119
+ }
120
+ });
121
+ },
122
+
123
+ refresh_media: function()
124
+ {
125
+ var that = this;
126
+ $.ajax({
127
+ url: '/admin/media/json',
128
+ type: 'get',
129
+ async: false,
130
+ data: { media_category_id: that.cat_id },
131
+ success: function(resp) {
132
+ that.cat = resp;
133
+ that.cat_id = that.cat.id;
134
+ that.selected_media = [];
135
+ that.print_media();
136
+ }
137
+ });
138
+ },
139
+
140
+ print_categories: function()
141
+ {
142
+ var that = this;
143
+ var ul = $('<ul/>');
144
+ if (that.categories.length > 0)
145
+ {
146
+ $.each(that.categories, function(i, cat) {
147
+
148
+ var li = $('<li/>')
149
+ .addClass('category')
150
+ .attr('id', 'cat' + cat.id)
151
+ .data('media_category_id', cat.id)
152
+ .append($('<a/>').attr('href', '#').html(cat.name + ' (' + cat.media_count + ')').click(function(e) { e.preventDefault(); that.select_category($(this).parent().data('media_category_id')); }));
153
+ if (cat.id == that.cat_id)
154
+ li.addClass('selected');
155
+ ul.append(li);
156
+ });
157
+ }
158
+ else
159
+ ul = $('<p/>').html("There are no media categories.");
160
+ $('#categories').empty().append(ul)
161
+ .append($('<p/>').append($('<a/>').attr('href', '#').html('New Category').click(function(e) { e.preventDefault(); that.add_category(); })))
162
+ .append($('<div/>').attr('id', 'new_cat_message'));
163
+
164
+ $.each(that.categories, function(i, cat) {
165
+ $('#cat' + cat.id).droppable({
166
+ accept: function(draggable) { return (draggable.hasClass('category') || draggable.hasClass('media')) },
167
+ hoverClass: 'cat_hover',
168
+ drop: function(event, ui) {
169
+ if (ui.draggable.hasClass('category'))
170
+ {
171
+ var child_cat_id = ui.draggable.data('media_category_id');
172
+ var new_parent_id = $(this).data('media_category_id');
173
+ $.ajax({
174
+ url: '/admin/media-categories/' + child_cat_id,
175
+ type: 'put',
176
+ data: { parent_id: new_parent_id },
177
+ success: function(resp) { that.refresh_categories(); }
178
+ });
179
+ }
180
+ else // media
181
+ {
182
+ var media_category_id = $(this).data('media_category_id');
183
+ var ids = (that.selected_media.length > 0 ? that.selected_media : [ui.draggable.data('media_id')]);
184
+ $.ajax({
185
+ url: '/admin/media-categories/' + media_category_id + '/attach',
186
+ type: 'post',
187
+ data: { media_id: ids },
188
+ success: function(resp) { that.refresh_categories(); that.refresh_media(); }
189
+ });
190
+ }
191
+ }
192
+ });
193
+ $('#cat' + cat.id).draggable({ revert: 'invalid' });
194
+ });
195
+ },
196
+
197
+ print_controls: function()
198
+ {
199
+ var that = this;
200
+ $('#controls').empty()
201
+ .append($('<div/>').attr('id', 'delete').append($('<p/>').addClass('delete_dropper').html('Delete')));
202
+
203
+ $('#delete').droppable({
204
+ accept: function(draggable) { return (draggable.hasClass('category') || draggable.hasClass('media')) },
205
+ hoverClass: 'hover',
206
+ drop: function(event, ui) {
207
+ if (ui.draggable.hasClass('category'))
208
+ {
209
+ var media_category_id = ui.draggable.data('media_category_id');
210
+ that.delete_category(media_category_id);
211
+ }
212
+ else // media
213
+ {
214
+ id = ui.draggable.data('media_id');
215
+ if (that.selected_media.length > 0 && that.selected_media.indexOf(id) > -1)
216
+ {
217
+ that.select_media(id); // Go ahead and de-select because the select event is about to run
218
+ }
219
+ that.delete_media();
220
+ }
221
+ }
222
+ });
223
+ },
224
+
225
+ print_media: function()
226
+ {
227
+ var that = this;
228
+ var ul = $('<ul/>');
229
+ var processing = false;
230
+ if (that.cat.media.length > 0)
231
+ {
232
+ $.each(that.cat.media, function(i, m) {
233
+ if (m.image_urls && m.processed == false)
234
+ processing = true
235
+ var li = $('<li/>')
236
+ .attr('id', 'media' + m.id)
237
+ .addClass('media')
238
+ .data('media_id', m.id)
239
+ .click(function(e) { that.select_media($(this).data('media_id')); })
240
+ .append($('<span/>').addClass('name').html(m.name));
241
+ if (m.image_urls)
242
+ li.append($('<img/>').attr('src', m.image_urls.tiny_url));
243
+ if (that.selected_media.indexOf(m.id) > -1)
244
+ li.addClass('selected ui-selected');
245
+ ul.append(li);
246
+ });
247
+ }
248
+ else
249
+ ul = $('<p/>').html("This category is empty.");
250
+ $('#media').empty().append(ul);
251
+ //if (processing)
252
+ // setTimeout(function() { that.refresh(); }, 2000);
253
+
254
+ $.each(that.cat.media, function(i, m) {
255
+ $('li.media').draggable({
256
+ multiple: true,
257
+ revert: 'invalid',
258
+ start: function() { $(this).data("origPosition", $(this).position()); }
259
+ });
260
+ });
261
+ },
262
+
263
+ //============================================================================
264
+
265
+ select_media: function(media_id)
266
+ {
267
+ var that = this;
268
+ var i = that.selected_media.indexOf(media_id);
269
+ if (i > -1)
270
+ {
271
+ that.selected_media.splice(i, 1);
272
+ $('#media' + media_id).removeClass('selected ui-selected');
273
+ }
274
+ else
275
+ {
276
+ that.selected_media[that.selected_media.length] = media_id;
277
+ $('#media' + media_id).addClass('selected ui-selected').css('top', '0').css('left', '0');
278
+ }
279
+ },
280
+
281
+ select_all_media: function()
282
+ {
283
+ var that = this;
284
+
285
+ // See if they're all selected
286
+ var all_selected = true;
287
+ $.each(that.cat.media, function(i, m) {
288
+ if (that.selected_media.indexOf(m.id) == -1)
289
+ {
290
+ all_selected = false
291
+ return false;
292
+ }
293
+ });
294
+
295
+ // Now de-select everything
296
+ $('li.media').removeClass('selected ui-selected');
297
+ that.selected_media = [];
298
+
299
+ // And re-select everything if not everything was previously selected
300
+ if (!all_selected)
301
+ {
302
+ $.each(that.cat.media, function(i, m) {
303
+ $('#media' + m.id).addClass('selected ui-selected');
304
+ that.selected_media[i] = m.id;
305
+ });
306
+ }
307
+ },
308
+
309
+ delete_media: function(confirm)
310
+ {
311
+ var that = this;
312
+ if (!confirm)
313
+ {
314
+ $.each(that.selected_media, function(i, id) {
315
+ $('#media' + id).css('top', '0').css('left', '0');
316
+ });
317
+ var div = $('<p/>').addClass('note error')
318
+ .append('Are you sure?<br/>')
319
+ .append($('<input/>').attr('type', 'button').val('Yes').click(function() { that.delete_media(true); })).append(" ")
320
+ .append($('<input/>').attr('type', 'button').val('No' ).click(function() { that.refresh_media(); that.print_controls(); }));
321
+ $('#delete').empty().append(div);
322
+ return;
323
+ }
324
+ $('#delete').empty().html("<p class='loading'>Deleting...</p>");
325
+ $.ajax({
326
+ url: '/admin/media/bulk',
327
+ type: 'delete',
328
+ data: { ids: that.selected_media },
329
+ success: function(resp) { that.refresh_categories(); that.refresh_media(); that.print_controls(); }
330
+ });
331
+ },
332
+
333
+ //============================================================================
334
+
335
+ select_category: function(cat_id)
336
+ {
337
+ var that = this;
338
+ that.cat_id = cat_id;
339
+ that.print_categories();
340
+ that.refresh_media();
341
+ },
342
+
343
+ add_category: function(name)
344
+ {
345
+ var that = this;
346
+ if (!name)
347
+ {
348
+ var div = $('<p/>').addClass('note warning')
349
+ .append('New Category Name: ')
350
+ .append($('<input/>').attr('type', 'text').attr('id', 'new_cat_name')).append(" ")
351
+ .append($('<input/>').attr('type', 'button').val('Add').click(function() { that.add_category($('#new_cat_name').val()); })).append(" ")
352
+ .append($('<input/>').attr('type', 'button').val('Cancel').click(function() { $('#new_cat_message').empty(); }));
353
+ $('#new_cat_message').empty().append(div);
354
+ return;
355
+ }
356
+ $('#new_cat_message').empty().html("<p class='loading'>Adding category...</p>");
357
+ $.ajax({
358
+ url: '/admin/media-categories',
359
+ type: 'post',
360
+ data: {
361
+ parent_id: that.cat.id,
362
+ name: name
363
+ },
364
+ success: function(resp) {
365
+ if (resp.error) $('#new_cat_message').empty().html("<p class='note error'>" + resp.error + "</p>");
366
+ if (resp.refresh) that.refresh_categories();
367
+ }
368
+ });
369
+ },
370
+
371
+ delete_category: function(cat_id, confirm)
372
+ {
373
+ var that = this;
374
+ if (!confirm)
375
+ {
376
+ var div = $('<p/>').addClass('note warning')
377
+ .append('Are you sure? ')
378
+ .append($('<input/>').attr('type', 'button').val('Yes').click(function() { that.delete_category(cat_id, true); })).append(" ")
379
+ .append($('<input/>').attr('type', 'button').val('No' ).click(function() { that.refresh_categories(); that.print_controls() }));
380
+ $('#delete').empty().append(div);
381
+ return;
382
+ }
383
+ $('#delete').empty().html("<p class='loading'>Deleting...</p>");
384
+ $.ajax({
385
+ url: '/admin/media-categories/' + cat_id,
386
+ type: 'delete',
387
+ success: function(resp) {
388
+ that.refresh_categories(function() {
389
+ var exists = false;
390
+ $.each(that.categories, function(i, cat) { if (cat.id == cat_id) { exists = true; return false; }});
391
+ if (!exists)
392
+ that.select_category(that.categories[0].id);
393
+ else
394
+ that.refresh_media();
395
+ that.print_controls();
396
+ });
397
+ }
398
+ });
399
+ },
400
+
401
+ };
@@ -0,0 +1,4 @@
1
+ /*! Drag Multiple Plugin - v0.1.1 - 2014-05-14
2
+ * https://github.com/javadoug/jquery.drag-multiple
3
+ * Copyright (c) 2014 Doug Ross; Licensed MIT */
4
+ !function(a){"use strict";function b(){return!1}function c(b){return a.extend({},h,b.options.multiple)}function d(b,c,d,e){return a.isFunction(b)?b.call(c,d,e):void 0}function e(a,b,c,e){return d(b.beforeStart,a,c,e)}function f(a,b,c,e){return d(b.beforeDrag,a,c,e)}function g(a,b,c,e){return d(b.beforeStop,a,c,e)}var h={items:function(){return a(".ui-draggable.ui-selected")},beforeStart:function(){return this.is(".ui-draggable")&&this.is(".ui-selected")?void 0:(a(".ui-draggable").removeClass("ui-selected"),!1)},beforeDrag:a.noop,beforeStop:a.noop};a.ui.plugin.add("draggable","multiple",{start:function(d,f){var g,h,i,j;return g=this,h=g.data("draggable")||g.data("ui-draggable"),h.multiple={},j=h.multiple.options=c(h),i=j.items(),!1===e(g,j,d,f)?(j.dragCanceled=!0,!1):(i.each(function(){var b=a(this).position();a(this).data("dragmultiple:originalPosition",a.extend({},b))}),h.originalRevert=j.revert=h.options.revert,void(h.options.revert=b))},drag:function(c,d){var e,g,h;return e=this,g=e.data("draggable")||e.data("ui-draggable"),h=g.multiple.options,h.dragCanceled?!1:(f(e,h,c,d),b!==g.options.revert&&(h.revert=g.options.revert,g.options.revert=b),void h.items().each(function(){var b=a(this).data("dragmultiple:originalPosition");a(this).css({top:b.top+(d.position.top-d.originalPosition.top),left:b.left+(d.position.left-d.originalPosition.left)})}))},stop:function(b,c){var d,e,f;return d=this,e=d.data("draggable")||d.data("ui-draggable"),f=e.multiple.options,f.dragCanceled?!1:(g(d,f,b,c),f.revert===!0&&f.items().each(function(){var b=a(this).data("dragmultiple:originalPosition");a(this).css(b)}),f.items().each(function(){a(this).removeData("dragmultiple:originalPosition")}),void(e.options.revert=e.originalRevert))}})}(jQuery);
@@ -0,0 +1,2 @@
1
+ // Arabic (ar)
2
+ plupload.addI18n({"Stop Upload":"أيقاف التحميل","Upload URL might be wrong or doesn't exist.":"عنوان التحميل ربما يكون خاطئ أو غير متوفر","tb":"تيرابايت","Size":"الحجم","Close":"أغلاق","Init error.":"خطأ في تهيئة","Add files to the upload queue and click the start button.":"أضف ملفات إلى القائمة إنتظار التحميل ثم أضغط على زر البداية","Filename":"أسم الملف","Image format either wrong or not supported.":"صيغة الصورة أما خطاء أو غير مدعومه","Status":"الحالة","HTTP Error.":"خطأ في برتوكول نقل الملفات","Start Upload":"أبدا التحميل","mb":"ميجابايت","kb":"كيلوبايت","Duplicate file error.":"خطاء في تكرار الملف","File size error.":"خطأ في حجم الملف","N/A":"لا شي","gb":"جيجابايت","Error: Invalid file extension:":"خطاء : أمتداد الملف غير صالح :","Select files":"أختر الملفات","%s already present in the queue.":"%s الملف موجود بالفعل في قائمة الانتظار","File: %s":"ملف: %s","b":"بايت","Uploaded %d/%d files":"تحميل %d/%d ملف","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"العناصر المقبوله لتحميل هي %d ملف في هذا الوقت. الملفات الاضافية أزيلة.","%d files queued":"%d الملفات في قائمة الانتظار","File: %s, size: %d, max file size: %d":"ملف: %s, أقصى حجم للملف: %d, حجم: %d","Drag files here.":"سحب الملف هنا","Runtime ran out of available memory.":"الذاكرة المتوفره أنتهت لمدة التشغيل","File count error.":"خطاء في عد الملفات","File extension error.":"خطأ في أمتداد الملف","Error: File too large:":" خطاء : حجم الملف كبير :","Add Files":"أضف ملفات"});
@@ -0,0 +1,2 @@
1
+ // Azerbaijani (az)
2
+ plupload.addI18n({"Stop Upload":"Yükləməni saxla","Upload URL might be wrong or doesn't exist.":"Yükləmə ünvanı səhvdir və ya mövcud deyil","tb":"tb","Size":"Həcm","Close":"Bağla","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Faylları əlavə edin və yüklə düyməsinə klikləyin.","Filename":"Faylın adı","Image format either wrong or not supported.":"Şəklin formatı uyğun deyil və ya dəstəklənmir.","Status":"Status","HTTP Error.":"HTTP xətası.","Start Upload":"Yüklə","mb":"mb","kb":"kb","Duplicate file error.":"Bu fayl artıq növbədə var.","File size error.":"Fayl həcmi xətası.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Xəta: Yanlış fayl uzantısı:","Select files":"Faylları seçin","%s already present in the queue.":"%s artıq növbədə var.","File: %s":"Fayl: %s","b":"b","Uploaded %d/%d files":"%d/%d fayl yüklənib","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"Növbədə %d fayl var","File: %s, size: %d, max file size: %d":"Fayl: %s, həcm: %d, max fayl həcmi: %d","Drag files here.":"Faylları bura çəkin.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Fayl sayı çox böyükdür.","File extension error.":"Fayl uzantısı xətası.","Error: File too large:":"Xəta:Fayl həcmi çox böyükdür.","Add Files":"Fayl əlavə et"});
@@ -0,0 +1,2 @@
1
+ // Bulgarian (bg)
2
+ plupload.addI18n({"Stop Upload":"Спрете качването","Upload URL might be wrong or doesn't exist.":"URL за качване може да е грешен или да не съществува.","tb":"tb","Size":"Размер","Close":"Затвори","Init error.":"Грешка: инициализиране.","Add files to the upload queue and click the start button.":"Добавете файлове в опашката за качване, и щракнете бутона старт.","Filename":"Име на файла","Image format either wrong or not supported.":"Формата на изображението или е объркан, или не се поддържа.","Status":"Статус","HTTP Error.":"Грешка: HTTP .","Start Upload":"Започнете качването","mb":"mb","kb":"kb","Duplicate file error.":"Грешка: файла е вече качен на сървъра.","File size error.":"Грешка: размер на файла.","N/A":"не приложимо","gb":"gb","Error: Invalid file extension:":"Грешка: Невалидно разширение на файл:","Select files":"Изберете файлове","%s already present in the queue.":"%s вече го има в опашката.","File: %s":"Файл: %s","b":"b","Uploaded %d/%d files":"Качени %d/%d файла","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Елемента за качване приема само %d файл(а) наведнъж. Допълнителните файлове бяха отстранени.","%d files queued":"%d файла в опашката","File: %s, size: %d, max file size: %d":"Файл: %s, размер: %d, максимален размер: %d","Drag files here.":"Довлечете файловете тук.","Runtime ran out of available memory.":"Недостатъчна свободна памет.","File count error.":"Грешка в броя на файловете.","File extension error.":"Грешка: разширение на файла.","Error: File too large:":"Грешка: Файла е твърде голям:","Add Files":"Добавете файлове"});
@@ -0,0 +1,2 @@
1
+ // Bosnian (bs)
2
+ plupload.addI18n({"Stop Upload":"Prekini dodavanje","Upload URL might be wrong or doesn't exist.":"URL za dodavanje je neispravan ili ne postoji.","tb":"tb","Size":"Veličina","Close":"Zatvori","Init error.":"Inicijalizacijska greška.","Add files to the upload queue and click the start button.":"Dodajte datoteke u red i kliknite na dugme za pokretanje.","Filename":"Naziv datoteke","Image format either wrong or not supported.":"Format slike je neispravan ili nije podržan.","Status":"Status","HTTP Error.":"HTTP greška.","Start Upload":"Započni dodavanje","mb":"mb","kb":"kb","Duplicate file error.":"Dupla datoteka.","File size error.":"Greška u veličini datoteke.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Greška! Neispravan ekstenzija datoteke:","Select files":"Odaberite datoteke","%s already present in the queue.":"%s se već nalazi u redu.","File: %s":"Datoteka: %s","b":"b","Uploaded %d/%d files":"Dodano %d/%d datoteka","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Dodavanje trenutno dozvoljava samo %d datoteka istovremeno. Dodatne datoteke su uklonjene.","%d files queued":"%d datoteka čeka","File: %s, size: %d, max file size: %d":"Datoteka: %s, veličina: %d, maksimalna veličina: %d","Drag files here.":"Dovucite datoteke ovdje.","Runtime ran out of available memory.":"Nema više dostupne memorije.","File count error.":"Greška u brojanju datoeka.","File extension error.":"Greška u ekstenziji datoteke.","Error: File too large:":"Greška! Datoteka je prevelika:","Add Files":"Dodaj datoteke"});