window.Alchemy = {} if typeof(window.Alchemy) is 'undefined' # Adds buttons into a toolbar inside of overlay windows Alchemy.ToolbarButton = (options) -> $btn = $("") if options.align $btn.addClass(options.class) if options.buttonId $btn.attr(id: options.buttonId) $lnk = $("") if options.hotkey $lnk.attr('data-alchemy-hotkey', options.hotkey) $lnk.on "click", (e) -> e.preventDefault() options.onClick(e) return $lnk.append "" $btn.append $lnk $btn Alchemy.ElementsWindow = init: (url, options, callback) -> @hidden = false @$body = $('body') @element_window = $('
') @element_area = $('
') @url = url @options = options @callback = callback @element_window.append @createToolbar(options.toolbarButtons) @element_window.append @element_area @button = $('#element_window_button') @button.on "click", => @hide() false window.requestAnimationFrame => spinner = new Alchemy.Spinner('medium') spinner.spin @element_area[0] window.addEventListener 'message', (event) => data = event.data if data?.message == 'Alchemy.focusElementEditor' element = document.getElementById("element_#{data.element_id}") Alchemy.ElementsWindow.show() element?.focusElement() true @$body.on "click", (evt) => unless evt.target.closest(".element-editor") @element_area.find('.element-editor').removeClass('selected') Alchemy.PreviewWindow.postMessage(message: 'Alchemy.blurElements') return $('#main_content').append(@element_window) @show() @reload() createToolbar: (buttons) -> @toolbar = $('
') buttons.push label: Alchemy.t("Collapse all elements") iconClass: "contract-up-down-line" align: "end" class: "right" onClick: => $("alchemy-element-editor:not([compact]):not([fixed])").each () -> @collapse() for btn in buttons @toolbar.append Alchemy.ToolbarButton(btn) @toolbar.append @collapseAllBtn reload: -> $.get @url, (data) => @element_area.html data Alchemy.SortableElements() if @callback @callback.call() .fail (xhr, status, error) => Alchemy.Dialog::show_error(xhr, error, @element_area) hide: -> @$body.removeClass('elements-window-visible'); @hidden = true @toggleButton() show: -> @$body.addClass('elements-window-visible'); @hidden = false @toggleButton() toggleButton: -> if @hidden @button.find('label').text(@options.texts.showElements) @button.find('.icon').removeClass("ri-menu-unfold-line").addClass("ri-menu-fold-line") @button.off('click') @button.on "click", => @show() false else @button.find('label').text(@options.texts.hideElements) @button.find('.icon').removeClass("ri-menu-fold-line").addClass("ri-menu-unfold-line") @button.off('click') @button.on "click", => @hide() false