mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
Attach, show and hide pane item views with native DOM APIs
We continue to invoke SpacePen attach hooks on any shim wrappers for backward compatibility, but SpacePen wrappers are no longer required for attoch/hide/show as they were previously. Next: removal.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
{CompositeDisposable} = require 'event-kit'
|
||||
{$} = require './space-pen-extensions'
|
||||
{$, callAttachHooks, callRemoveHooks} = require './space-pen-extensions'
|
||||
PaneView = require './pane-view'
|
||||
|
||||
class PaneElement extends HTMLElement
|
||||
@@ -8,6 +8,8 @@ class PaneElement extends HTMLElement
|
||||
createdCallback: ->
|
||||
@attached = false
|
||||
@subscriptions = new CompositeDisposable
|
||||
@inlineDisplayStyles = new WeakMap
|
||||
|
||||
@initializeContent()
|
||||
@subscribeToDOMEvents()
|
||||
@createSpacePenShim()
|
||||
@@ -81,12 +83,32 @@ class PaneElement extends HTMLElement
|
||||
activeItemChanged: (item) ->
|
||||
return unless item?
|
||||
|
||||
$itemViews = $(@itemViews)
|
||||
view = @model.getView(item).__spacePenView
|
||||
otherView.hide() for otherView in $itemViews.children().not(view).views()
|
||||
$itemViews.append(view) unless view.parent().is($itemViews)
|
||||
view.show() if @attached
|
||||
view.focus() if @hasFocus()
|
||||
hasFocus = @hasFocus()
|
||||
itemView = @model.getView(item)
|
||||
|
||||
for child in @itemViews.children
|
||||
if child is itemView
|
||||
@showItemView(child) if @attached
|
||||
else
|
||||
@hideItemView(child)
|
||||
|
||||
unless @itemViews.contains(itemView)
|
||||
@itemViews.appendChild(itemView)
|
||||
callAttachHooks(itemView)
|
||||
|
||||
itemView.focus() if hasFocus
|
||||
|
||||
showItemView: (itemView) ->
|
||||
inlineDisplayStyle = @inlineDisplayStyles.get(itemView)
|
||||
if inlineDisplayStyle?
|
||||
itemView.style.display = inlineDisplayStyle
|
||||
else
|
||||
itemView.style.display = ''
|
||||
|
||||
hideItemView: (itemView) ->
|
||||
inlineDisplayStyle = itemView.style.display
|
||||
@inlineDisplayStyles.set(itemView, inlineDisplayStyle) if inlineDisplayStyle?
|
||||
itemView.style.display = 'none'
|
||||
|
||||
itemRemoved: ({item, index, destroyed}) ->
|
||||
if item instanceof $
|
||||
|
||||
Reference in New Issue
Block a user