Update 'config.themes' config key when enabled themes list is sorted

This commit is contained in:
Nathan Sobo
2013-04-17 20:38:00 -06:00
committed by Corey Johnson & Kevin Sawicki
parent 7993e3ab39
commit b110f430ee
2 changed files with 51 additions and 3 deletions

View File

@@ -0,0 +1,38 @@
$ = require 'jquery'
ThemeConfigPanel = require 'theme-config-panel'
describe "ThemeConfigPanel", ->
panel = null
beforeEach ->
config.set('core.themes', ['atom-dark-ui', 'atom-dark-syntax'])
panel = new ThemeConfigPanel
describe "when an enabled theme is reloced in the themes list", ->
it "updates the 'core.themes' config key to reflect the new order", ->
li = panel.enabledThemes.children(':first').detach()
panel.enabledThemes.append(li)
panel.enabledThemes.sortable('option', 'update')()
expect(config.get('core.themes')).toEqual ['atom-dark-syntax', 'atom-dark-ui']
describe "when a theme is dragged into the enabled themes list", ->
it "updates the 'core.themes' config key to reflect the themes in the enabled list", ->
dragHelper = panel.availableThemes.find("li[name='atom-light-ui']").clone()
panel.enabledThemes.prepend(dragHelper)
panel.enabledThemes.sortable('option', 'receive')(null, helper: dragHelper[0])
panel.enabledThemes.sortable('option', 'update')()
expect(config.get('core.themes')).toEqual ['atom-light-ui', 'atom-dark-ui', 'atom-dark-syntax']
describe "when the theme is already present in the enabled list", ->
it "removes the previous instance of the theme, updating the order based on the location of drag", ->
dragHelper = panel.availableThemes.find("li[name='atom-dark-ui']").clone()
panel.enabledThemes.append(dragHelper)
panel.enabledThemes.sortable('option', 'receive')(null, helper: dragHelper[0])
panel.enabledThemes.sortable('option', 'update')()
expect(config.get('core.themes')).toEqual ['atom-dark-syntax', 'atom-dark-ui']
dragHelper = panel.availableThemes.find("li[name='atom-dark-ui']").clone()
panel.enabledThemes.prepend(dragHelper)
panel.enabledThemes.sortable('option', 'receive')(null, helper: dragHelper[0])
panel.enabledThemes.sortable('option', 'update')()
expect(config.get('core.themes')).toEqual ['atom-dark-ui', 'atom-dark-syntax']

View File

@@ -33,7 +33,8 @@ class ThemeConfigPanel extends ConfigPanel
@enabledThemes.append(@buildThemeLi(name))
@enabledThemes.sortable
receive: @receiveEnabledTheme
receive: (e, ui) => @enabledThemeReceived($(ui.helper))
update: => @enabledThemesUpdated()
buildThemeLi: (name, {draggable} = {}) ->
li = $$ ->
@@ -50,7 +51,16 @@ class ThemeConfigPanel extends ConfigPanel
else
li
receiveEnabledTheme: (e, ui) =>
name = $(ui.helper).attr('name')
enabledThemeReceived: (helper) ->
console.log "RECEIVE", helper
name = helper.attr('name')
@enabledThemes.find("[name='#{name}']:not('.ui-draggable')").remove()
@enabledThemes.find(".ui-draggable").removeClass('ui-draggable')
enabledThemesUpdated: ->
console.log "enabledThemesUpdated"
console.log @getEnabledThemeNames()
config.set('core.themes', @getEnabledThemeNames())
getEnabledThemeNames: ->
$(li).attr('name') for li in @enabledThemes.children().toArray()