Locomotive.Views.Inputs.Rte ||= {} class Locomotive.Views.Inputs.Rte.LinkView extends Backbone.View isOpen: false container: dataset: showdialogonselection: false initialize: -> _.bindAll(@, 'apply', 'show', 'hide') @$link = @$('a[data-wysihtml5-command=createLink]') @editor = @options.editor @$content = @$link.next('.link-dialog-content') render: -> @attach_editor() @create_popover() @attach_events() create_popover: -> @$content.show() @$link.popover container: @$link.parents('fieldset') placement: 'bottom' content: @$content html: true sanitize: false trigger: 'manual' template: '' @$link.data('bs.popover').setContent() attach_events: -> @$content.on 'click', '.apply', @apply @$content.on 'click', '.cancel', @hide detach_events: -> @$content.off 'click', '.apply', @apply @$content.off 'click', '.cancel', @hide attach_editor: -> command = @editor.toolbar.commandMapping['createLink:null'] command.dialog = @ apply: (event) -> url = @_input_el('url').val() unless _.isEmpty(url) @editor.composer.commands.exec 'createLink', href: url target: @_input_el('target', 'select').val() title: @_input_el('title').val() # prevents the popover to be opened right after inserting the link. @editor.toolbar._preventInstantFocus() @hide() show: (state) -> # Fix a bug when opening an existing link for the first time return if @isOpen && state != false # Make sure the select2 behavioir is always enabled @_input_el('target', 'select').select2() @_input_el('target', 'select').data('select2').$dropdown.addClass('rte-select2-dropdown') if state == false @$content.parents('form')[0].reset() else $link = $(state) @_input_el('url').val($link.attr('href')) @_input_el('target', 'select').val($link.attr('target')) @_input_el('title').val($link.attr('title')) @$link.popover('toggle') @_input_el('url').focus() # first field @isOpen = true update: (state) -> # do nothing hide: -> @_input_el('target', 'select').select2('close') @$link.popover('hide') @isOpen = false _input_el: (property, type) -> type ||= 'input' name = "rte_input_link_form[#{property}]" @$content.find("#{type}[name=\"#{name}\"]") remove: -> @detach_events() @$link.popover('destroy') @$('.popover').remove()