|
1 | 1 | #= require jquery-ui/widgets/sortable |
2 | | -#= require active_admin/sortable_core |
| 2 | +#= require jquery.mjs.nestedSortable |
| 3 | + |
| 4 | +window.ActiveAdminSortableEvent = do -> |
| 5 | + eventToListeners = {} |
| 6 | + |
| 7 | + return { |
| 8 | + add: (event, callback) -> |
| 9 | + if not eventToListeners.hasOwnProperty(event) |
| 10 | + eventToListeners[event] = [] |
| 11 | + eventToListeners[event].push(callback) |
| 12 | + |
| 13 | + trigger: (event, args) -> |
| 14 | + if eventToListeners.hasOwnProperty(event) |
| 15 | + for callback in eventToListeners[event] |
| 16 | + try |
| 17 | + callback.call(null, args) |
| 18 | + catch e |
| 19 | + console.error(e) if console and console.error |
| 20 | + } |
| 21 | + |
| 22 | +$ -> |
| 23 | + $('.disclose').bind 'click', (event) -> |
| 24 | + $(this).closest('li').toggleClass('mjs-nestedSortable-collapsed').toggleClass('mjs-nestedSortable-expanded') |
| 25 | + |
| 26 | + $(".index_as_sortable [data-sortable-type]").each -> |
| 27 | + $this = $(@) |
| 28 | + |
| 29 | + if $this.data('sortable-type') == "tree" |
| 30 | + max_levels = $this.data('max-levels') |
| 31 | + tab_hack = 20 # nestedSortable default |
| 32 | + else |
| 33 | + max_levels = 1 |
| 34 | + tab_hack = 99999 |
| 35 | + |
| 36 | + $this.nestedSortable |
| 37 | + forcePlaceholderSize: true |
| 38 | + forceHelperSizeType: true |
| 39 | + errorClass: 'cantdoit' |
| 40 | + disableNesting: 'cantdoit' |
| 41 | + handle: '> .item' |
| 42 | + listType: 'ol' |
| 43 | + items: 'li' |
| 44 | + opacity: .6 |
| 45 | + placeholder: 'placeholder' |
| 46 | + revert: 250 |
| 47 | + maxLevels: max_levels, |
| 48 | + tabSize: tab_hack |
| 49 | + protectRoot: $this.data('protect-root') |
| 50 | + # prevent drag flickers |
| 51 | + tolerance: 'pointer' |
| 52 | + toleranceElement: '> div' |
| 53 | + isTree: true |
| 54 | + startCollapsed: $this.data("start-collapsed") |
| 55 | + update: -> |
| 56 | + $this.nestedSortable("disable") |
| 57 | + $.ajax |
| 58 | + url: $this.data("sortable-url") |
| 59 | + type: "post" |
| 60 | + data: $this.nestedSortable("serialize") |
| 61 | + .always -> |
| 62 | + $this.find('.item').each (index) -> |
| 63 | + if index % 2 |
| 64 | + $(this).removeClass('odd').addClass('even') |
| 65 | + else |
| 66 | + $(this).removeClass('even').addClass('odd') |
| 67 | + $this.nestedSortable("enable") |
| 68 | + ActiveAdminSortableEvent.trigger('ajaxAlways') |
| 69 | + .done -> |
| 70 | + ActiveAdminSortableEvent.trigger('ajaxDone') |
| 71 | + .fail -> |
| 72 | + ActiveAdminSortableEvent.trigger('ajaxFail') |
0 commit comments