| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- define [
- "utils/ContextMenu"
- "libs/backbone"
- "libs/mustache"
- ], (ContextMenu) ->
- EntityView = Backbone.View.extend
- entityTemplate: $("#entityTemplate").html()
- initialize: () ->
- @ide = @options.manager.ide
- @manager = @options.manager
- @manager.registerView(@model.id, @)
- @bindToModel()
- events: () ->
- events = {}
- events["click ##{@model.id} > .js-clickable"] = "parentOnClick"
- events["click ##{@model.id} > .entity-label"] = "parentOnClick"
- events["click .dropdown-caret"] = "showContextMenuFromCaret"
- events["contextmenu"] = "showContextMenuFromRightClick"
- return events
- render: () ->
- @$el.append(Mustache.to_html @entityTemplate, @model.attributes)
- @_bindToDomElements()
- @_initializeRenameBox()
- @_initializeDrag()
- return @
- _bindToDomElements: () ->
- @$nameEl = @$(".name")
- @$inputEl = @$("input.js-rename")
- @$entityListItemEl = @$el.children(".entity-list-item")
- @$labelEl = @$entityListItemEl.children(".entity-label")
- bindToModel: () ->
- @model.on "change:name", (model) =>
- @$nameEl.text(model.get("name"))
- hideRenameBox: () ->
- @$nameEl.show()
- @$inputEl.hide()
- showRenameBox: () ->
- @$nameEl.hide()
- @$inputEl.show()
- setLabels: (labels) ->
- label = labels[@model.get("id")]
- if label?
- @$entityListItemEl.addClass("show-label")
- @$labelEl.text("±")
- return true
- else
- @$entityListItemEl.removeClass("show-label")
- @$labelEl.text("")
- return false
- select: () ->
- @selected = true
- @$entityListItemEl.addClass("selected")
- deselect: () ->
- @selected = false
- @$entityListItemEl.removeClass("selected")
- isSelected: () ->
- @selected
- parentOnClick: (e) ->
- doubleClickInterval = 600
- e.preventDefault()
- if @lastClick and new Date() - @lastClick < doubleClickInterval
- @onDoubleClick(e)
- else
- @lastClick = new Date()
- @onClick(e)
- onDoubleClick: (e) ->
- e.preventDefault()
- e.stopPropagation()
- if !@readonly
- @startRename()
- showContextMenuFromCaret: (e) ->
- e.stopPropagation()
- caret = @$(".dropdown-caret")
- offset = caret.offset()
- position =
- top: offset.top + caret.outerHeight()
- right: $(document.body).width() - (offset.left + caret.outerWidth())
- @toggleContextMenu(position)
- showContextMenuFromRightClick: (e) ->
- e.preventDefault()
- e.stopPropagation()
- position =
- left: e.pageX
- top: e.pageY
- @showContextMenu(position)
- toggleContextMenu: (position) ->
- if @contextMenu?
- @contextMenu.destroy()
- else
- @showContextMenu(position)
- showContextMenu: (position) ->
- entries = @getContextMenuEntries()
- return if !entries?
- @manager.trigger "contextmenu:beforeshow", @model, entries
- @contextMenu = new ContextMenu(position, entries)
- @contextMenu.on "destroy", () =>
- delete @contextMenu
- getContextMenuEntries: () ->
- return null if @readonly
- return [{
- text: "Rename"
- onClick: () =>
- @startRename()
- ga('send', 'event', 'editor-interaction', 'renameEntity', "entityView")
- }, {
- text: "Delete"
- onClick: () =>
- @manager.confirmDelete(@model)
- ga('send', 'event', 'editor-interaction', 'deleteEntity', "entityView")
- }]
- _initializeDrag: () ->
- @$entityListItemEl.draggable
- delay: 250
- opacity: 0.7
- helper: "clone"
- scroll: true
- _initializeRenameBox: () ->
- @$inputEl.click (e) -> e.stopPropagation() # Don't stop rename on click in input
- @$inputEl.keydown (event) =>
- code = event.keyCode || event.which
- if code == 13
- @_finishRename()
- @hideRenameBox()
- startRename: () ->
- if !@renaming
- @renaming = true
- @showRenameBox()
- name = @model.get("name")
- @$inputEl.val(name).focus()
- if @$inputEl[0].setSelectionRange?
- selectionEnd = name.lastIndexOf(".")
- if selectionEnd == -1
- selectionEnd = name.length
- @$inputEl[0].setSelectionRange(0, selectionEnd)
- setTimeout =>
- $(document.body).on "click.entity-rename", () =>
- @_finishRename()
- , 0
- _finishRename: () ->
- $(document.body).off "click.entity-rename"
- @renaming = false
- name = @$inputEl.val()
- @manager.renameEntity(@model, name)
- @hideRenameBox()
- makeReadOnly: () ->
- @$entityListItemEl.draggable("disable")
- @readonly = true
- makeReadWrite: () ->
- @$entityListItemEl.draggable("enable")
- delete @readonly
-
|