From 8425fb8d84457182b90b6942fc75aaab2a9dc97b Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 26 Apr 2012 13:00:48 -0600 Subject: [PATCH] When a directory view is collapsed, unwatch its directory and those of all descendant expanded directory views. --- spec/extensions/tree-view-spec.coffee | 24 +++++++++++++++++++++--- src/extensions/tree-view.coffee | 11 +++-------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/spec/extensions/tree-view-spec.coffee b/spec/extensions/tree-view-spec.coffee index 5f75645c9..97cf010c2 100644 --- a/spec/extensions/tree-view-spec.coffee +++ b/spec/extensions/tree-view-spec.coffee @@ -3,7 +3,7 @@ RootView = require 'root-view' Directory = require 'directory' fs = require 'fs' -describe "TreeView", -> +fdescribe "TreeView", -> [rootView, project, treeView, rootDirectoryView, sampleJs, sampleTxt] = [] beforeEach -> @@ -56,8 +56,9 @@ describe "TreeView", -> grandchild = child.find('.entries > li:contains(a-dir/)').view() grandchild.disclosureArrow.click() - rootDirectoryView.collapse() - rootDirectoryView.expand() + rootDirectoryView.disclosureArrow.click() + expect(rootDirectoryView.find('.entries')).not.toExist() + rootDirectoryView.disclosureArrow.click() # previously expanded descendants remain expanded expect(rootDirectoryView.find('> .entries > li:contains(dir/) > .entries > li:contains(a-dir/) > .entries').length).toBe 1 @@ -65,6 +66,23 @@ describe "TreeView", -> # collapsed descendants remain collapsed expect(rootDirectoryView.find('> .entries > li.contains(zed/) > .entries')).not.toExist() + it "when collapsing a directory, removes change subscriptions from the collapsed directory and its descendants", -> + child = rootDirectoryView.entries.find('li:contains(dir/)').view() + child.disclosureArrow.click() + + grandchild = child.entries.find('li:contains(a-dir/)').view() + grandchild.disclosureArrow.click() + + expect(rootDirectoryView.directory.subscriptionCount()).toBe 1 + expect(child.directory.subscriptionCount()).toBe 1 + expect(grandchild.directory.subscriptionCount()).toBe 1 + + rootDirectoryView.disclosureArrow.click() + + expect(rootDirectoryView.directory.subscriptionCount()).toBe 0 + expect(child.directory.subscriptionCount()).toBe 0 + expect(grandchild.directory.subscriptionCount()).toBe 0 + describe "when a file is clicked", -> it "opens it in the active editor and selects it", -> expect(rootView.activeEditor()).toBeUndefined() diff --git a/src/extensions/tree-view.coffee b/src/extensions/tree-view.coffee index 256adcb7c..91342a3f0 100644 --- a/src/extensions/tree-view.coffee +++ b/src/extensions/tree-view.coffee @@ -87,12 +87,6 @@ class DirectoryView extends View @expand() if isExpanded @disclosureArrow.on 'click', => @toggleExpansion() - _.defer => - @on 'DOMNodeRemoved', (e) => - if e.target == this[0] and @hasClass('expanded') - console.log "unwatching!" - @unwatchEntries() - buildEntries: -> @entries?.remove() @entries = $$ -> @ol class: 'entries' @@ -111,18 +105,19 @@ class DirectoryView extends View @addClass('expanded') @disclosureArrow.text('▾') @buildEntries() + @watchEntries() @deserializeEntryExpansionStates(@entryStates) if @entryStates? @isExpanded = true - @watchEntries() false collapse: -> @entryStates = @serializeEntryExpansionStates() @removeClass('expanded') @disclosureArrow.text('▸') + @unwatchEntries() + @find('.expanded.directory').each -> $(this).view().unwatchEntries() @entries.remove() @entries = null - @unwatchEntries() @isExpanded = false watchEntries: ->