#= require ../../content_assets/picker_view Locomotive.Views.Inputs.Rte ||= {} class Locomotive.Views.Inputs.Rte.FileView extends Backbone.View opened: popover: false picker: false container: dataset: showdialogonselection: true initialize: -> _.bindAll(@, 'change_image', 'insert_file', 'hide') @$link = @$('a[data-wysihtml5-command=insertFile]') @editor = @options.editor @$popover = @$link.next('.image-dialog-content') @pubsub_token = PubSub.subscribe('file_picker.select', @insert_file) render: -> @attach_editor() @create_popover() attach_editor: -> command = @editor.toolbar.commandMapping['insertFile:null'] command.dialog = @ create_popover: -> @$popover.show() @$link.popover container: '.main' placement: 'left' content: @$popover html: true template: '' @$link.data('bs.popover').setContent() @attach_popover_events() attach_popover_events: -> @$popover.parents('form').on 'click', '.apply', @change_image @$popover.on 'click', '.apply', @change_image @$popover.on 'click', '.cancel', @hide detach_popover_events: -> @$popover.parents('form').on 'click', '.apply', @change_image @$popover.on 'click', '.apply', @change_image @$popover.on 'click', '.cancel', @hide change_image: (event) -> @editor.composer.commands.exec 'insertImage', src: @_input_el('src').val() class: @_input_el('alignment', 'select').val() title: @_input_el('title').val() @hide() insert_file: (msg, data) -> return unless data.parent_view.cid == @.cid if data.image @editor.composer.commands.exec 'insertImage', src: data.url title: data.title else html = "#{data.title}" @editor.composer.commands.exec 'insertHTML', html @editor.toolbar._preventInstantFocus() @hide() show: (state) -> # console.log "[insertFileView] show #{state} / #{state?}" # FIXME (did): if opened without the focus, it will cause an error # when executing a command @editor.focus() if state == false @hide_popover() @show_picker() else $image = $(state) @_input_el('src').val($image.attr('src')) @_input_el('alignment', 'select').val($image.attr('class')) @_input_el('title').val($image.attr('title')) @show_popover() show_picker: -> if @opened.picker == false window.application_view.drawer_view.open( @$link.data('url'), Locomotive.Views.ContentAssets.PickerView, { parent_view: @ }) @opened.picker = true show_popover: -> if @opened.popover == false @$link.popover('show') @opened.popover = true update: (state) -> # do nothing hide: -> # console.log "[insertFileView] hide, opened =#{@opened}" if @opened.picker @hide_picker() else if @opened.popover @hide_popover() hide_picker: -> # console.log "[insertFileView] hide picker" window.application_view.drawer_view.close() @opened.picker = false hide_from_picker: (stack_size) -> if stack_size == 0 @opened.picker = false hide_popover: -> @$link.popover('hide') @opened.popover = false _input_el: (property, type) -> type ||= 'input' name = "rte_input_image_form[#{property}]" @$popover.find("#{type}[name=\"#{name}\"]") remove: -> # console.log "[insertFileView] remove" @detach_popover_events() @$link.popover('destroy') @$('.popover').remove() PubSub.unsubscribe(@pubsub_token) super