refinerycms-image_rotators 0.3.1 → 0.4.0

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.
@@ -42,9 +42,9 @@
42
42
  <% end %>
43
43
  </div>
44
44
  <% if @image_rotator.images.count > 1 %>
45
- <% content_for :head_after_javascript_libraries,
46
- javascript_include_tag('refinery/serializelist.js') -%>
47
- <% content_for :head do %>
45
+ <% content_for :javascripts do %>
46
+ <%= javascript_include_tag 'refinery/serializelist.js' %>
47
+ <%= javascript_include_tag 'refinery/nestedsortables.js' %>
48
48
  <script type='text/javascript'>
49
49
  $(document).ready(function(){
50
50
  list_reorder.update_url = '<%= update_positions_admin_image_rotator_image_rotator_images_path(@image_rotator) %>';
@@ -15,7 +15,6 @@ class RefinerycmsImageRotatorsGenerator < Rails::Generators::NamedBase
15
15
  public/images/bullets.png
16
16
  public/images/loading.gif
17
17
  public/javascripts/jquery.image-rotators.js
18
- public/javascripts/refinery/admin.js
19
18
  public/stylesheets/image-rotators.css
20
19
  ).each { |path| copy_file path, Rails.root.join(path) }
21
20
 
@@ -11,7 +11,7 @@ class CreateImageRotators < ActiveRecord::Migration
11
11
 
12
12
  add_index :image_rotators, :id
13
13
 
14
- load(Rails.root.join('db', 'seeds', 'refinerycms-image_rotators.rb'))
14
+ load(Rails.root.join('db', 'seeds', 'image_rotators.rb'))
15
15
 
16
16
  create_table :image_rotator_images do |t|
17
17
  t.integer :image_rotator_id
@@ -1,7 +1,7 @@
1
1
  module Refinery
2
2
  module ImageRotators
3
3
  def self.version
4
- %{0.3.1}
4
+ %{0.4.0}
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refinerycms-image_rotators
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jacob Swanner
@@ -70,7 +70,6 @@ files:
70
70
  - lib/generators/templates/public/images/bullets.png
71
71
  - lib/generators/templates/public/images/loading.gif
72
72
  - lib/generators/templates/public/javascripts/jquery.image-rotators.js
73
- - lib/generators/templates/public/javascripts/refinery/admin.js
74
73
  - lib/generators/templates/public/stylesheets/image-rotators.css
75
74
  - lib/image_rotators.rb
76
75
  - lib/refinerycms-image_rotators.rb
@@ -1,1011 +0,0 @@
1
- var shiftHeld = false;
2
- $(document).ready(function(){
3
- init_interface();
4
- init_sortable_menu();
5
- init_submit_continue();
6
- init_modal_dialogs();
7
- init_tooltips();
8
- });
9
-
10
- init_interface = function() {
11
- if (parent && parent.document.location.href != document.location.href) {
12
- $('body#dialog_container.dialog').addClass('iframed');
13
- }
14
- $('input:submit:not(.button)').addClass('button');
15
-
16
- $('.button, #editor_switch a').corner('6px');
17
- $('#editor_switch a').appendTo($('<span></span>').prependTo('#editor_switch').corner('6px'));
18
- $('#page_container, .wym_box').corner('5px bottom');
19
- $('.wym_box').corner('5px tr');
20
- $('.field > .wym_box').corner('5px tl');
21
- $('.wym_iframe iframe').corner('2px');
22
- $('.form-actions:not(".form-actions-dialog")').corner('5px');
23
- $('#recent_activity li a, #recent_inquiries li a').each(function(i, a) {
24
- $(this).textTruncate({
25
- width: $(this).width()
26
- , tooltip: false
27
- });
28
- });
29
-
30
- // make sure that users can tab to wymeditor fields and add an overlay while loading.
31
- $('textarea.wymeditor').each(function() {
32
- textarea = $(this);
33
- if ((instance = WYMeditor.INSTANCES[$((textarea.next('.wym_box').find('iframe').attr('id')||'').split('_')).last().get(0)]) != null) {
34
- if ((next = textarea.parent().next()) != null && next.length > 0) {
35
- next.find('input, textarea').keydown($.proxy(function(e) {
36
- shiftHeld = e.shiftKey;
37
- if (shiftHeld && e.keyCode == $.ui.keyCode.TAB) {
38
- this._iframe.contentWindow.focus();
39
- e.preventDefault();
40
- }
41
- }, instance)).keyup(function(e) {
42
- shiftHeld = false;
43
- });
44
- }
45
- if ((prev = textarea.parent().prev()) != null && prev.length > 0) {
46
- prev.find('input, textarea').keydown($.proxy(function(e) {
47
- if (e.keyCode == $.ui.keyCode.TAB) {
48
- this._iframe.contentWindow.focus();
49
- e.preventDefault();
50
- }
51
- }, instance));
52
- }
53
- }
54
- });
55
-
56
- // ensure that the menu isn't wider than the page_container or else it looks silly to round that corner.
57
- if (($menu = $('#menu')).length > 0) {
58
- $menu.jcarousel({
59
- vertical: false
60
- , scroll: 1
61
- , buttonNextHTML: "<img src='/images/refinery/carousel-right.png' alt='down' height='15' width='10' />"
62
- , buttonPrevHTML: "<img src='/images/refinery/carousel-left.png' alt='up' height='15' width='10' />"
63
- , listTag: $menu.get(0).tagName.toLowerCase()
64
- , itemTag: $menu.children(':first').get(0).tagName.toLowerCase()
65
- });
66
-
67
- if ($menu.outerWidth() < $('#page_container').outerWidth()) {
68
- $("#page_container:not('.login #page_container')").corner('5px tr');
69
- } else {
70
- $("#page_container:not('.login #page_container')").uncorner();
71
- }
72
- }
73
-
74
- $('#current_locale li a').click(function(e) {
75
- $('#current_locale li a span').each(function(span){
76
- $(this).css('display', $(this).css('display') == 'none' ? '' : 'none');
77
- });
78
- $('#other_locales').animate({opacity: 'toggle', height: 'toggle'}, 250);
79
- e.preventDefault();
80
- });
81
-
82
- $('#existing_image img').load(function(){
83
- $('form.edit_image .form-actions').css({
84
- 'margin-top': ($('#existing_image').height() - $('form.edit_image').height() + 8)
85
- });
86
- });
87
-
88
- $('.form-actions .form-actions-left input:submit#submit_button').click(function(e) {
89
- $("<img src='/images/refinery/icons/ajax-loader.gif' width='16' height='16' class='save-loader' />").appendTo($(this).parent());
90
- });
91
- }
92
-
93
- init_modal_dialogs = function(){
94
- $('a[href*="dialog=true"]').not('#dialog_container a').each(function(i, anchor) {
95
- $(anchor).data({
96
- 'dialog-width': parseInt($($(anchor).attr('href').match("width=([0-9]*)")).last().get(0))||928
97
- , 'dialog-height': parseInt($($(anchor).attr('href').match("height=([0-9]*)")).last().get(0))||473
98
- , 'dialog-title': ($(anchor).attr('title') || $(anchor).attr('name') || $(anchor).html() || null)
99
- }).attr('href', $(anchor).attr('href').replace(/(\&(amp\;)?)?dialog\=true/, '')
100
- .replace(/(\&(amp\;)?)?width\=\d+/, '')
101
- .replace(/(\&(amp\;)?)?height\=\d+/, '')
102
- .replace(/(\?&(amp\;)?)/, '?')
103
- .replace(/\?$/, ''))
104
- .click(function(e){
105
- $anchor = $(this);
106
- iframe_src = (iframe_src = $anchor.attr('href'))
107
- + (iframe_src.indexOf('?') > -1 ? '&amp;' : '?')
108
- + 'app_dialog=true&amp;dialog=true';
109
-
110
- iframe = $("<iframe id='dialog_iframe' src='" + iframe_src + "'></iframe>").corner('8px');
111
- iframe.dialog({
112
- title: $anchor.data('dialog-title')
113
- , modal: true
114
- , resizable: false
115
- , autoOpen: true
116
- , width: $anchor.data('dialog-width')
117
- , height: $anchor.data('dialog-height')
118
- , open: onOpenDialog
119
- , close: onCloseDialog
120
- });
121
- if ($.browser.msie) {
122
- iframe.css({'margin':'-2px 2px 2px -2px'});
123
- }
124
- if(parseInt($anchor.data('dialog-height')) < $(window).height()) {
125
- $(document.body).addClass('hide-overflow');
126
- }
127
- e.preventDefault();
128
- });
129
- });
130
- }
131
-
132
- init_sortable_menu = function(){
133
- var $menu = $('#menu');
134
-
135
- if($menu.length == 0){return}
136
-
137
- $menu.sortable({
138
- axis: 'x',
139
- cursor: 'crosshair',
140
- connectWith: '.nested',
141
- update: function(){
142
- $.post('/refinery/update_menu_positions', $menu.sortable('serialize', {
143
- key: 'menu[]'
144
- , expression: /plugin_([\w]*)$/
145
- }));
146
- }
147
- }).tabs();
148
- //Initial status disabled
149
- $menu.sortable('disable');
150
-
151
- $menu.find('#menu_reorder').click(function(e){
152
- trigger_reordering(e, true);
153
- });
154
-
155
- $menu.find('#menu_reorder_done').click(function(e){
156
- trigger_reordering(e, false);
157
- });
158
-
159
- $menu.find('> a').corner('top 5px');
160
- }
161
-
162
- trigger_reordering = function(e, enable) {
163
- e.preventDefault();
164
- $('#menu_reorder, #menu_reorder_done').toggle();
165
- $('#site_bar, #content').fadeTo(500, enable ? 0.35 : 1);
166
-
167
- if(enable) {
168
- $menu.find('.tab a').click(function(ev){
169
- ev.preventDefault();
170
- });
171
- } else {
172
- $menu.find('.tab a').unbind('click');
173
- }
174
-
175
- $menu.sortable(enable ? 'enable' : 'disable');
176
- }
177
-
178
- init_submit_continue = function(){
179
- $('#submit_continue_button').click(submit_and_continue);
180
-
181
- $('form').change(function(e) {
182
- $(this).attr('data-changes-made', true);
183
- });
184
-
185
- if ((continue_editing_button = $('#continue_editing')).length > 0 && continue_editing_button.attr('rel') != 'no-prompt') {
186
- $('#editor_switch a').click(function(e) {
187
- if ($('form[data-changes-made]').length > 0) {
188
- if (!confirm("Any changes you've made will be lost. Are you sure you want to continue without saving?")) {
189
- e.preventDefault();
190
- }
191
- }
192
- });
193
- }
194
- }
195
-
196
- submit_and_continue = function(e, redirect_to) {
197
- // ensure wymeditors are up to date.
198
- if ($(this).hasClass('wymupdate')) {
199
- $.each(WYMeditor.INSTANCES, function(index, wym)
200
- {
201
- wym.update();
202
- });
203
- }
204
-
205
- $('#continue_editing').val(true);
206
- $('#flash').fadeOut(250)
207
-
208
- $('.fieldWithErrors').removeClass('fieldWithErrors').addClass('field');
209
- $('#flash_container .errorExplanation').remove();
210
-
211
- $.post($('#continue_editing').get(0).form.action, $($('#continue_editing').get(0).form).serialize(), function(data) {
212
- if (($flash_container = $('#flash_container')).length > 0) {
213
- $flash_container.html(data);
214
-
215
- $('#flash').css('width', 'auto').fadeIn(550);
216
-
217
- $('.errorExplanation').not($('#flash_container .errorExplanation')).remove();
218
-
219
- if ((error_fields = $('#fieldsWithErrors').val()) != null) {
220
- $.each(error_fields.split(','), function() {
221
- $("#" + this).wrap("<div class='fieldWithErrors' />");
222
- });
223
- } else if (redirect_to) {
224
- window.location = redirect_to;
225
- }
226
-
227
- $('.fieldWithErrors:first :input:first').focus();
228
-
229
- $('#continue_editing').val(false);
230
-
231
- init_flash_messages();
232
- }
233
- });
234
-
235
- e.preventDefault();
236
- }
237
-
238
- init_tooltips = function(args){
239
- $($(args != null ? args : 'a[title], span[title], #image_grid img[title], *[tooltip]')).not('.no-tooltip').each(function(index, element)
240
- {
241
- // create tooltip on hover and destroy it on hoveroff.
242
- $(element).hover(function(e) {
243
- $(this).oneTime(350, 'tooltip', $.proxy(function() {
244
- $('.tooltip').remove();
245
- tooltip = $("<div class='tooltip'><div><span></span></div></div>").corner('6px').appendTo('#tooltip_container');
246
- tooltip.find("span").html($(this).attr('tooltip')).corner('6px');
247
-
248
- nib = $("<img src='/images/refinery/tooltip-nib.png' class='tooltip-nib'/>").appendTo('#tooltip_container');
249
-
250
- tooltip.css({
251
- 'opacity': 0
252
- , 'maxWidth': '300px'
253
- });
254
- required_left_offset = $(this).offset().left - (tooltip.outerWidth() / 2) + ($(this).outerWidth() / 2);
255
- tooltip.css('left', (required_left_offset > 0 ? required_left_offset : 0));
256
-
257
- var tooltip_offset = tooltip.offset();
258
- var tooltip_outer_width = tooltip.outerWidth();
259
- if (tooltip_offset && (tooltip_offset.left + tooltip_outer_width) > (window_width = $(window).width())) {
260
- tooltip.css('left', window_width - tooltip_outer_width);
261
- }
262
-
263
- tooltip.css({
264
- 'top': $(this).offset().top - tooltip.outerHeight() - 2
265
- })
266
-
267
- nib.css({
268
- 'opacity': 0
269
- });
270
-
271
- if (tooltip_offset = tooltip.offset()) {
272
- nib.css({
273
- 'left': $(this).offset().left + ($(this).outerWidth() / 2) - 5
274
- , 'top': tooltip_offset.top + tooltip.height()
275
- });
276
- }
277
-
278
- try {
279
- tooltip.animate({
280
- top: tooltip_offset.top - 10
281
- , opacity: 1
282
- }, 200, 'swing');
283
- nib.animate({
284
- top: nib.offset().top - 10
285
- , opacity: 1
286
- }, 200);
287
- } catch(e) {
288
- tooltip.show();
289
- nib.show();
290
- }
291
- }, $(this)));
292
-
293
- }, function(e) {
294
- $(this).stopTime('tooltip');
295
- if ((tt_offset = (tooltip = $('.tooltip')).css('z-index', '-1').offset()) == null) {
296
- tt_offset = {'top':0,'left':0};
297
- }
298
- tooltip.animate({
299
- top: tt_offset.top - 20
300
- , opacity: 0
301
- }, 125, 'swing', function(){
302
- $(this).remove();
303
- });
304
- if ((nib_offset = (nib = $('.tooltip-nib')).offset()) == null) {
305
- nib_offset = {'top':0,'left':0};
306
- }
307
- nib.animate({
308
- top: nib_offset.top - 20
309
- , opacity: 0
310
- }, 125, 'swing', function(){
311
- $(this).remove();
312
- });
313
- }).click(function(e) {
314
- $(this).stopTime('tooltip');
315
- });
316
- if ($(element).attr('tooltip') == null) {
317
- $(element).attr('tooltip', $(element).attr('title'));
318
- }
319
- // wipe clean the title on any children too.
320
- $(element).add($(element).children('img')).removeAttr('title');
321
- });
322
- }
323
-
324
- var link_dialog = {
325
- init: function(test_url, test_email){
326
- this.test_url = test_url;
327
- this.test_email = test_email;
328
- this.init_tabs();
329
- this.init_resources_submit();
330
- this.init_close();
331
- this.page_tab();
332
- this.web_tab();
333
- this.email_tab();
334
- },
335
-
336
- init_tabs: function(){
337
- var radios = $('#dialog_menu_left input:radio');
338
- var selected = radios.parent().filter(".selected_radio").find('input:radio').first() || radios.first();
339
-
340
- radios.click(function(){
341
- link_dialog.switch_area($(this));
342
- });
343
-
344
- selected.attr('checked', 'true');
345
- link_dialog.switch_area(selected);
346
- },
347
-
348
- init_resources_submit: function(){
349
- $('#existing_resource_area .form-actions-dialog #submit_button').click(function(e){
350
- e.preventDefault();
351
- if((resource_selected = $('#existing_resource_area_content ul li.linked a')).length > 0) {
352
- resourceUrl = parseURL(resource_selected.attr('href'));
353
- relevant_href = resourceUrl.pathname;
354
-
355
- // Add any alternate resource stores that need a absolute URL in the regex below
356
- if(resourceUrl.hostname.match(/s3.amazonaws.com/)) {
357
- relevant_href = resourceUrl.protocol + '//' + resourceUrl.host + relevant_href;
358
- }
359
-
360
- if (typeof(resource_picker.callback) == "function") {
361
- resource_picker.callback({
362
- id: resource_selected.attr('id').replace("resource_", "")
363
- , href: relevant_href
364
- , html: resource_selected.html()
365
- });
366
- }
367
- }
368
- });
369
-
370
- $('.form-actions-dialog #cancel_button').trigger('click');
371
- },
372
-
373
- init_close: function(){
374
- $('.form-actions-dialog #cancel_button').click(close_dialog);
375
-
376
- if (parent
377
- && parent.document.location.href != document.location.href
378
- && parent.document.getElementById('wym_dialog_submit') != null) {
379
- $('#dialog_container .form-actions input#submit_button').click(function(e) {
380
- e.preventDefault();
381
- $(parent.document.getElementById('wym_dialog_submit')).click();
382
- });
383
- $('#dialog_container .form-actions a.close_dialog').click(close_dialog);
384
- }
385
- },
386
-
387
- switch_area: function(area){
388
- $('#dialog_menu_left .selected_radio').removeClass('selected_radio');
389
- $(area).parent().addClass('selected_radio');
390
- $('#dialog_main .dialog_area').hide();
391
- $('#' + $(area).val() + '_area').show();
392
- },
393
-
394
- //Same for resources tab
395
- page_tab: function(){
396
- $('.link_list li').click(function(e){
397
- e.preventDefault();
398
-
399
- $('.link_list li.linked').removeClass('linked');
400
- $(this).addClass('linked');
401
-
402
- var link = $(this).children('a.page_link').get(0);
403
- var port = (window.location.port.length > 0 ? (":" + window.location.port) : "");
404
- var url = link.href.replace(window.location.protocol + "//" + window.location.hostname + port, "");
405
-
406
- link_dialog.update_parent(url, link.rel.replace(/\ ?<em>.+?<\/em>/, ''));
407
- });
408
- },
409
-
410
- web_tab: function(){
411
- $('#web_address_text').bind('paste change',function(){
412
- var prefix = '#web_address_',
413
- icon = '';
414
-
415
- $(prefix + 'test_loader').show();
416
- $(prefix + 'test_result').hide();
417
- $(prefix + 'test_result').removeClass('success_icon').removeClass('failure_icon');
418
-
419
- $.getJSON(link_dialog.test_url, {url: this.value}, function(data){
420
- if(data.result == 'success'){
421
- icon = 'success_icon';
422
- }else{
423
- icon = 'failure_icon';
424
- }
425
-
426
- $(prefix + 'test_result').addClass(icon).show();
427
- $(prefix + 'test_loader').hide();
428
- });
429
-
430
- link_dialog.update_parent( $(prefix + 'text').val(),
431
- $(prefix + 'text').val(),
432
- ($(prefix + 'target_blank').checked ? "_blank" : "")
433
- );
434
- });
435
-
436
- $('#web_address_target_blank').click(function(){
437
- parent.document.getElementById('wym_target').value = this.checked ? "_blank" : "";
438
- });
439
-
440
- },
441
-
442
- email_tab: function() {
443
- $('#email_address_text, #email_default_subject_text, #email_default_body_text').change(function(e){
444
- var default_subject = $('#email_default_subject_text').val(),
445
- default_body = $('#email_default_body_text').val(),
446
- mailto = "mailto:" + $('#email_address_text').val(),
447
- modifier = "?",
448
- icon = '';
449
-
450
- $('#email_address_test_loader').show();
451
- $('#email_address_test_result').hide();
452
- $('#email_address_test_result').removeClass('success_icon').removeClass('failure_icon');
453
-
454
- $.getJSON(link_dialog.test_email, {email: mailto}, function(data){
455
- if(data.result == 'success'){
456
- icon = 'success_icon';
457
- }else{
458
- icon = 'failure_icon';
459
- }
460
-
461
- $('#email_address_test_result').addClass(icon).show();
462
- $('#email_address_test_loader').hide();
463
- });
464
-
465
- if(default_subject.length > 0){
466
- mailto += modifier + "subject=" + default_subject;
467
- modifier = "&";
468
- }
469
-
470
- if(default_body.length > 0){
471
- mailto += modifier + "body=" + default_body;
472
- modifier = "&";
473
- }
474
-
475
- link_dialog.update_parent(mailto, mailto.replace('mailto:', ''));
476
- });
477
- },
478
-
479
- update_parent: function(url, title, target) {
480
- if (parent != null) {
481
- if ((wym_href = parent.document.getElementById('wym_href')) != null) {
482
- wym_href.value = url;
483
- }
484
- if ((wym_title = parent.document.getElementById('wym_title')) != null) {
485
- wym_title.value = title;
486
- }
487
- if ((wym_target = parent.document.getElementById('wym_target')) != null) {
488
- wym_target.value = target || "";
489
- }
490
- }
491
- }
492
- }
493
-
494
- var page_options = {
495
- init: function(enable_parts, new_part_url, del_part_url){
496
- // set the page tabs up, but ensure that all tabs are shown so that when wymeditor loads it has a proper height.
497
- // also disable page overflow so that scrollbars don't appear while the page is loading.
498
- $(document.body).addClass('hide-overflow');
499
- page_options.tabs = $('#page-tabs');
500
- page_options.tabs.tabs({tabTemplate: '<li><a href="#{href}">#{label}</a></li>'})
501
- page_options.tabs.find(' > ul li a').corner('top 5px');
502
-
503
- part_shown = $('#page-tabs .page_part.field').not('.ui-tabs-hide');
504
- $('#page-tabs .page_part.field').removeClass('ui-tabs-hide');
505
-
506
- this.enable_parts = enable_parts;
507
- this.new_part_url = new_part_url;
508
- this.del_part_url = del_part_url;
509
- this.show_options();
510
- this.title_type();
511
-
512
- // Hook into the loaded function. This will be called when WYMeditor has done its thing.
513
- WYMeditor.loaded = function(){
514
- // hide the tabs that are supposed to be hidden and re-enable overflow.
515
- $(document.body).removeClass('hide-overflow');
516
- $('#page-tabs .page_part.field').not(part_shown).addClass('ui-tabs-hide');
517
- $('#page-tabs > ul li a').corner('top 5px');
518
- }
519
-
520
- if(this.enable_parts){
521
- this.page_part_dialog();
522
- }
523
- },
524
-
525
- show_options: function(){
526
- $('#toggle_advanced_options').click(function(e){
527
- e.preventDefault();
528
- $('#more_options').animate({opacity: 'toggle', height: 'toggle'}, 250);
529
-
530
- $('html,body').animate({
531
- scrollTop: $('#toggle_advanced_options').parent().offset().top
532
- }, 250);
533
- });
534
- },
535
-
536
- title_type: function(){
537
- $("input[name=page\[custom_title_type\]]").change(function(){
538
- $('#custom_title_text, #custom_title_image').hide();
539
- $('#custom_title_' + this.value).show();
540
- });
541
- },
542
-
543
- page_part_dialog: function(){
544
- $('#new_page_part_dialog').dialog({
545
- title: 'Create Content Section',
546
- modal: true,
547
- resizable: false,
548
- autoOpen: false,
549
- width: 600,
550
- height: 200
551
- });
552
-
553
- $('#add_page_part').click(function(e){
554
- e.preventDefault();
555
- $('#new_page_part_dialog').dialog('open');
556
- });
557
-
558
- $('#new_page_part_save').click(function(e){
559
- e.preventDefault();
560
-
561
- var part_title = $('#new_page_part_title').val();
562
-
563
- if(part_title.length > 0){
564
- var tab_title = part_title.toLowerCase().replace(" ", "_");
565
-
566
- if ($('#part_' + tab_title).size() == 0) {
567
- $.get(page_options.new_part_url,
568
- {
569
- title: part_title
570
- , part_index: $('#new_page_part_index').val()
571
- , body: ''
572
- }
573
- , function(data, status){
574
- $('#submit_continue_button').remove();
575
- // Add a new tab for the new content section.
576
- $(data).appendTo('#page_part_editors');
577
- page_options.tabs.tabs('add', '#page_part_new_' + $('#new_page_part_index').val(), part_title);
578
- page_options.tabs.tabs('select', $('#new_page_part_index').val());
579
-
580
- // turn the new textarea into a wymeditor.
581
- $('#page_parts_attributes_' + $('#new_page_part_index').val() + "_body").wymeditor(wymeditor_boot_options);
582
-
583
- // hook into wymedtior to instruct it to select this new tab again once it has loaded.
584
- WYMeditor.loaded = function() {
585
- page_options.tabs.tabs('select', $('#new_page_part_index').val());
586
- WYMeditor.loaded = function(){}; // kill it again.
587
- }
588
-
589
- // Wipe the title and increment the index counter by one.
590
- $('#new_page_part_index').val(parseInt($('#new_page_part_index').val()) + 1);
591
- $('#new_page_part_title').val('');
592
-
593
- page_options.tabs.find('> ul li a').corner('top 5px');
594
-
595
- $('#new_page_part_dialog').dialog('close');
596
- }
597
- );
598
- }else{
599
- alert("A content section with that title already exists, please choose another.");
600
- }
601
- }else{
602
- alert("You have not entered a title for the content section, please enter one.");
603
- }
604
- });
605
-
606
- $('#new_page_part_cancel').click(function(e){
607
- e.preventDefault();
608
- $('#new_page_part_dialog').dialog('close');
609
- $('#new_page_part_title').val('');
610
- });
611
-
612
- $('#delete_page_part').click(function(e){
613
- e.preventDefault();
614
-
615
- if(confirm("This will remove the content section '" + $('#page_parts .ui-tabs-selected a').html() + "' immediately even if you don't save this page, are you sure?")) {
616
- var tabId = page_options.tabs.tabs('option', 'selected');
617
- $.ajax({
618
- url: page_options.del_part_url + '/' + $('#page_parts_attributes_' + tabId + '_id').val(),
619
- type: 'DELETE'
620
- });
621
- page_options.tabs.tabs('remove', tabId);
622
- $('#page_parts_attributes_' + tabId + '_id').remove();
623
- $('#submit_continue_button').remove();
624
- }
625
-
626
- });
627
-
628
- }
629
-
630
- }
631
-
632
- var image_dialog = {
633
- callback: null
634
-
635
- , init: function(callback){
636
- this.callback = callback;
637
- this.init_tabs();
638
- this.init_select();
639
- this.init_actions();
640
- return this;
641
- }
642
-
643
- , init_tabs: function(){
644
- var radios = $('#dialog_menu_left input:radio');
645
- var selected = radios.parent().filter(".selected_radio").find('input:radio').first() || radios.first();
646
-
647
- radios.click(function(){
648
- link_dialog.switch_area($(this));
649
- });
650
-
651
- selected.attr('checked', 'true');
652
- link_dialog.switch_area(selected);
653
- }
654
-
655
- , switch_area: function(radio){
656
- $('#dialog_menu_left .selected_radio').removeClass('selected_radio');
657
- $(radio).parent().addClass('selected_radio');
658
- $('#dialog_main .dialog_area').hide();
659
- $('#' + radio.value + '_area').show();
660
- }
661
-
662
- , init_select: function(){
663
- $('#existing_image_area_content ul li img').click(function(){
664
- image_dialog.set_image(this);
665
- });
666
- //Select any currently selected, just uploaded...
667
- if ((selected_img = $('#existing_image_area_content ul li.selected img')).length > 0) {
668
- image_dialog.set_image(selected_img.first());
669
- }
670
- }
671
-
672
- , set_image: function(img){
673
- if ($(img).length > 0) {
674
- $('#existing_image_area_content ul li.selected').removeClass('selected');
675
-
676
- $(img).parent().addClass('selected');
677
- var imageId = $(img).attr('data-id');
678
- var imageThumbnailSize = $('#existing_image_size_area li.selected a').attr('data-size');
679
- var resize = $("#wants_to_resize_image").is(':checked');
680
-
681
- var url = '/refinery/images/'+imageId+'/url';
682
- if (resize) {
683
- url += '?size='+imageThumbnailSize;
684
- }
685
-
686
- var data;
687
- $.ajax({
688
- async: false,
689
- url: url,
690
- success: function (result, status, xhr) {
691
- if (result.error) {
692
- if (console && console.log) {
693
- console.log("Something went wrong with the image insertion!");
694
- console.log(result);
695
- }
696
- } else {
697
- data = result;
698
- }
699
- },
700
- error: function(xhr, txt, status) {
701
- if (console && console.log) {
702
- console.log("Something went wrong with the image insertion!");
703
- console.log(xhr);
704
- console.log(txt);
705
- console.log(status);
706
- }
707
- }
708
- });
709
-
710
- if (parent) {
711
- if ((wym_src = parent.document.getElementById('wym_src')) != null) {
712
- wym_src.value = data.url
713
- }
714
- if ((wym_title = parent.document.getElementById('wym_title')) != null) {
715
- wym_title.value = $(img).attr('title');
716
- }
717
- if ((wym_alt = parent.document.getElementById('wym_alt')) != null) {
718
- wym_alt.value = $(img).attr('alt');
719
- }
720
- if ((wym_size = parent.document.getElementById('wym_size')) != null) {
721
- wym_size.value = imageThumbnailSize.replace(/[<>=]/g, '');
722
- }
723
- }
724
- }
725
- }
726
-
727
- , submit_image_choice: function(e) {
728
- e.preventDefault();
729
- if((img_selected = $('#existing_image_area_content ul li.selected img').get(0)) && $.isFunction(this.callback))
730
- {
731
- this.callback(img_selected);
732
- }
733
-
734
- close_dialog(e);
735
- }
736
-
737
- , init_actions: function(){
738
- var _this = this;
739
- $('#existing_image_area .form-actions-dialog #submit_button').click($.proxy(_this.submit_image_choice, _this));
740
- $('.form-actions-dialog #cancel_button').not('body.wym_iframe_body .form-actions-dialog #cancel_button').click($.proxy(close_dialog, _this));
741
- $('#existing_image_size_area ul li a').click(function(e) {
742
- $('#existing_image_size_area ul li').removeClass('selected');
743
- $(this).parent().addClass('selected');
744
- $('#existing_image_size_area #wants_to_resize_image').attr('checked', 'checked');
745
- image_dialog.set_image($('#existing_image_area_content ul li.selected img'));
746
- e.preventDefault();
747
- });
748
- $('#existing_image_size_area #wants_to_resize_image').change(function(){
749
- if($(this).is(":checked")) {
750
- $('#existing_image_size_area ul li:first a').click();
751
- } else {
752
- $('#existing_image_size_area ul li').removeClass('selected');
753
- image_dialog.set_image($('#existing_image_area_content ul li.selected img'));
754
- }
755
- });
756
-
757
- if (parent && parent.document.location.href != document.location.href
758
- && parent.document.getElementById('wym_dialog_submit') != null) {
759
- $('#existing_image_area .form-actions input#submit_button').click($.proxy(function(e) {
760
- e.preventDefault();
761
- $(this.document.getElementById('wym_dialog_submit')).click();
762
- }, parent));
763
- $('#existing_image_area .form-actions a.close_dialog').click(close_dialog);
764
- }
765
- }
766
- }
767
-
768
- var list_reorder = {
769
- init: function() {
770
- $('#reorder_action').click(list_reorder.enable_reordering);
771
- $('#reorder_action_done').click(list_reorder.disable_reordering);
772
- if (list_reorder.tree) {
773
- list_reorder.sortable_list.nestedSortable({
774
- disableNesting: 'no-nest',
775
- forcePlaceholderSize: true,
776
- handle: 'div',
777
- items: 'li',
778
- opacity: .6,
779
- placeholder: 'placeholder',
780
- tabSize: 25,
781
- tolerance: 'pointer',
782
- toleranceElement: '> div',
783
- disabled: true,
784
- start: function () {
785
- },
786
- change: function () {
787
- list_reorder.reset_branch_classes(this);
788
- },
789
- stop: function () {
790
- list_reorder.reset_branch_classes(this);
791
- }
792
- });
793
- list_reorder.reset_branch_classes(list_reorder.sortable_list);
794
- } else {
795
- list_reorder.sortable_list.sortable({
796
- axis: 'y',
797
- cursor: 'crosshair',
798
- connectWith: '.nested',
799
- handle: 'img',
800
- });
801
- }
802
- }
803
-
804
- ,reset_branch_classes: function (ul) {
805
- $("li.ui-sortable-helper", this).removeClass("record").removeClass("branch_start").removeClass("branch_end");
806
- $("li", ul).removeClass("branch_start").removeClass("branch_end");
807
-
808
- $("> li:first", ul).addClass("branch_start")
809
- $("> li:last", ul).addClass("branch_end")
810
-
811
- var nested_ul = $("ul", ul);
812
- $("> li:last", nested_ul).addClass("branch_end");
813
- }
814
-
815
- ,enable_reordering: function(e) {
816
- if(e) { e.preventDefault(); }
817
- $('#sortable_list').addClass("reordering");
818
-
819
- $('#sortable_list .actions, #site_bar, header > *:not(script)').fadeTo(500, 0.3);
820
- $('#actions *:not("#reorder_action_done, #reorder_action")').not($('#reorder_action_done').parents('li, ul')).fadeTo(500, 0.55);
821
-
822
- if (list_reorder.tree) {
823
- list_reorder.sortable_list.nestedSortable("enable");
824
- } else {
825
- list_reorder.sortable_list.sortable("enable");
826
- }
827
- $('#reorder_action').hide();
828
- $('#reorder_action_done').show();
829
- }
830
-
831
- , disable_reordering: function(e) {
832
- if($('#reorder_action_done').hasClass('loading')){
833
- return false;
834
- }
835
- if(e) { e.preventDefault(); }
836
- $('#reorder_action_done').addClass('loading');
837
- if (list_reorder.tree) {
838
- list_reorder.sortable_list.nestedSortable("disable");
839
- } else {
840
- list_reorder.sortable_list.sortable("disable");
841
- }
842
-
843
- $('#sortable_list').removeClass("reordering");
844
-
845
- if (list_reorder.update_url != null) {
846
-
847
- var serialized = list_reorder.sortable_list.serializelist();
848
-
849
- $.post(list_reorder.update_url, serialized, function(data) {
850
- list_reorder.restore_controls(e);
851
- });
852
- } else {
853
- list_reorder.restore_controls(e);
854
- }
855
- }
856
-
857
- , restore_controls: function(e) {
858
- if (list_reorder.tree && !$.browser.msie) {
859
- list_reorder.sortable_list.add(list_reorder.sortable_list.find('ul, li')).draggable('destroy');
860
- } else {
861
- $(list_reorder.sortable_list).sortable('destroy');
862
- }
863
- $(list_reorder.sortable_list).removeClass('reordering, ui-sortable');
864
-
865
- $('#sortable_list .actions, #site_bar, header > *:not(script)').fadeTo(250, 1);
866
- $('#actions *:not("#reorder_action_done, #reorder_action")').not($('#reorder_action_done').parents('li, ul')).fadeTo(250, 1, function() {
867
- $('#reorder_action_done').hide().removeClass('loading');
868
- $('#reorder_action').show();
869
- });
870
- }
871
- }
872
-
873
- var image_picker = {
874
- options: {
875
- selected: '',
876
- thumbnail: 'dialog_thumb',
877
- field: '#image',
878
- image_display: '#current_picked_image',
879
- no_image_message: '#no_picked_image_selected',
880
- image_container: '#current_image_container',
881
- remove_image_button: '#remove_picked_image',
882
- image_toggler: null
883
- }
884
-
885
- , init: function(new_options){
886
- this.options = $.extend(this.options, new_options);
887
- $(this.options.remove_image_button).click($.proxy(this.remove_image, this));
888
- $(this.options.image_toggler).click($.proxy(this.toggle_image, this));
889
- }
890
-
891
- , remove_image: function(e) {
892
- e.preventDefault();
893
- $(this.options.image_display).removeClass('brown_border')
894
- .attr({'src': '', 'width': '', 'height': ''})
895
- .css({'width': 'auto', 'height': 'auto'})
896
- .hide();
897
- $(this.options.field).val('');
898
- $(this.options.no_image_message).show();
899
- $(this.options.remove_image_button).hide();
900
- $(this).hide();
901
- }
902
-
903
- , toggle_image: function(e) {
904
- $(this.options.image_toggler).html(($(this.options.image_toggler).html() == 'Show' ? 'Hide' : 'Show'));
905
- $(this.options.image_container).toggle();
906
- e.preventDefault();
907
- }
908
-
909
- , changed: function(image) {
910
- $(this.options.field).val(image.id.replace("image_", ""));
911
-
912
- $.ajax({
913
- async: false,
914
- url: '/refinery/images/'+$(image).attr('data-id')+'/url?size='+this.options.thumbnail,
915
- success: function (result, status, xhr) {
916
- if (result.error) {
917
- if (console && console.log) {
918
- console.log("Something went wrong with the image insertion!");
919
- console.log(result);
920
- }
921
- } else {
922
- image.src = result.url;
923
- }
924
- },
925
- error: function(xhr, txt, status) {
926
- if (console && console.log) {
927
- console.log("Something went wrong with the image insertion!");
928
- console.log(xhr);
929
- console.log(txt);
930
- console.log(status);
931
- }
932
- }
933
- });
934
-
935
- current_image = $(this.options.image_display);
936
- current_image.replaceWith($("<img src='"+image.src+"?"+Math.floor(Math.random() * 1000000000)+"' id='"+current_image.attr('id')+"' class='brown_border' />"));
937
-
938
- $(this.options.remove_image_button).show();
939
- $(this.options.no_image_message).hide();
940
- }
941
- }
942
-
943
- var resource_picker = {
944
- callback: null
945
-
946
- , init: function(callback) {
947
- this.callback = callback;
948
- }
949
- }
950
-
951
- close_dialog = function(e) {
952
- if (parent && parent.document.location.href != document.location.href && $.isFunction(parent.$))
953
- {
954
- the_body = $(parent.document.body)
955
- the_dialog = parent.$('.ui-dialog');
956
- } else {
957
- the_body = $(document.body).removeClass('hide-overflow');
958
- the_dialog = $('.ui-dialog').dialog('close').remove();
959
- }
960
- // if there's a wymeditor involved then let it do its thing without blocking first.
961
- if (!($(document.body).hasClass('wym_iframe_body'))) {
962
- the_body.removeClass('hide-overflow');
963
- the_dialog.dialog('close').remove();
964
-
965
- e.preventDefault();
966
- }
967
- }
968
-
969
- //parse a URL to form an object of properties
970
- parseURL = function(url)
971
- {
972
- //save the unmodified url to href property
973
- //so that the object we get back contains
974
- //all the same properties as the built-in location object
975
- var loc = { 'href' : url };
976
-
977
- //split the URL by single-slashes to get the component parts
978
- var parts = url.replace('//', '/').split('/');
979
-
980
- //store the protocol and host
981
- loc.protocol = parts[0];
982
- loc.host = parts[1];
983
-
984
- //extract any port number from the host
985
- //from which we derive the port and hostname
986
- parts[1] = parts[1].split(':');
987
- loc.hostname = parts[1][0];
988
- loc.port = parts[1].length > 1 ? parts[1][1] : '';
989
-
990
- //splice and join the remainder to get the pathname
991
- parts.splice(0, 2);
992
- // ensure we don't destroy absolute urls like /system/images/whatever.jpg
993
- loc.pathname = (loc.href[0] == '/' ? ("/" + loc.host) : '');
994
- loc.pathname += '/' + parts.join('/');
995
-
996
- //extract any hash and remove from the pathname
997
- loc.pathname = loc.pathname.split('#');
998
- loc.hash = loc.pathname.length > 1 ? '#' + loc.pathname[1] : '';
999
- loc.pathname = loc.pathname[0];
1000
-
1001
- //extract any search query and remove from the pathname
1002
- loc.pathname = loc.pathname.split('?');
1003
- loc.search = loc.pathname.length > 1 ? '?' + loc.pathname[1] : '';
1004
- loc.pathname = loc.pathname[0];
1005
-
1006
- var options = url.split('?')[1];
1007
- loc.options = options;
1008
-
1009
- //return the final object
1010
- return loc;
1011
- }