diff --git a/doc/README_CN.md b/doc/README_CN.md index c2ac257..2fb1638 100644 --- a/doc/README_CN.md +++ b/doc/README_CN.md @@ -49,7 +49,7 @@ Eruda 是一个专为手机网页前端设计的调试面板,类似 DevTools 通过CDN使用: ```html - + ``` diff --git a/src/Settings/Settings.js b/src/Settings/Settings.js index 9ed4a60..bf6804c 100644 --- a/src/Settings/Settings.js +++ b/src/Settings/Settings.js @@ -97,6 +97,10 @@ export default class Settings extends Tool return this; } + _closeAll() + { + this._$el.find('.eruda-open').rmClass('eruda-open'); + } _bindEvent() { let self = this; @@ -111,7 +115,11 @@ export default class Settings extends Tool setting.config.set(setting.key, val); }).on('click', '.eruda-select .eruda-head', function () { - util.$(this).parent().find('ul').toggleClass('eruda-open'); + let $el = util.$(this).parent().find('ul'), + isOpen = $el.hasClass('eruda-open'); + + self._closeAll(); + isOpen ? $el.rmClass('eruda-open') : $el.addClass('eruda-open'); }).on('click', '.eruda-select li', function () { let $this = util.$(this), @@ -126,7 +134,11 @@ export default class Settings extends Tool setting.config.set(setting.key, val); }).on('click', '.eruda-range .eruda-head', function () { - util.$(this).parent().find('.eruda-input-container').toggleClass('eruda-open'); + let $el = util.$(this).parent().find('.eruda-input-container'), + isOpen = $el.hasClass('eruda-open'); + + self._closeAll(); + isOpen ? $el.rmClass('eruda-open') : $el.addClass('eruda-open'); }).on('change', '.eruda-range input', function () { let $this = util.$(this), @@ -149,7 +161,11 @@ export default class Settings extends Tool $container.find('.eruda-range-track-progress').css('width', progress(val, min, max) + '%'); }).on('click', '.eruda-color .eruda-head', function () { - util.$(this).parent().find('ul').toggleClass('eruda-open'); + let $el = util.$(this).parent().find('ul'), + isOpen = $el.hasClass('eruda-open'); + + self._closeAll(); + isOpen ? $el.rmClass('eruda-open') : $el.addClass('eruda-open'); }).on('click', '.eruda-color li', function () { let $this = util.$(this), diff --git a/test/settings.js b/test/settings.js index 4ab8482..616d54d 100644 --- a/test/settings.js +++ b/test/settings.js @@ -8,7 +8,7 @@ describe('settings', function () testSwitch: false, testSelect: '1', testRange: 1, - testColor: '#000' + testColor: '#fff' }); beforeEach(function () @@ -16,63 +16,56 @@ describe('settings', function () tool.clear(); }); - describe('switch', function () + it('switch', function () { - it('ui', function () - { - var text = 'Test Switch'; + var text = 'Test Switch'; - tool.switch(cfg, 'testSwitch', text); - expect($tool.find('.eruda-switch')).toContainText(text); - }); + tool.switch(cfg, 'testSwitch', text); + expect($tool.find('.eruda-switch')).toContainText(text); + $tool.find('.eruda-checkbox').click(); + expect(cfg.get('testSwitch')).toBe(true); }); - describe('separator', function () + it('separator', function () { - it('ui', function () - { - tool.separator(); - expect($tool.find('.eruda-separator').length).toEqual(1); - }); + tool.separator(); + expect($tool.find('.eruda-separator').length).toEqual(1); }); - describe('select', function () + it('select', function () { - it('ui', function () - { - var text = 'Test Select'; + var text = 'Test Select'; - tool.select(cfg, 'testSelect', text, ['1', '2', '3']); - var $el = $tool.find('.eruda-select'); - expect($el.find('ul li').length).toEqual(3); - expect($el.find('.eruda-head')).toContainText(text); - expect($el.find('.eruda-val')).toContainText('1'); - }); + tool.select(cfg, 'testSelect', text, ['1', '2', '3']); + var $el = $tool.find('.eruda-select'); + expect($el.find('ul li').length).toEqual(3); + expect($el.find('.eruda-head')).toContainText(text); + expect($el.find('.eruda-val')).toContainText('1'); + $el.find('.eruda-head').click(); + $el.find('ul li').eq(1).click(); + expect(cfg.get('testSelect')).toBe('2'); + }); + it('range', function () + { + var text = 'Test Range'; + + tool.range(cfg, 'testRange', text, {min: 0, max: 1, step: 0.1}); + var $el = $tool.find('.eruda-range'); + expect($el.find('.eruda-head')).toContainText(text); + expect($el.find('input').length).toEqual(1); + $el.find('.eruda-head').click(); }); - describe('range', function () + it('color', function () { - it('ui', function () - { - var text = 'Test Range'; + var text = 'Test Color'; - tool.range(cfg, 'testRange', text, {min: 0, max: 1, step: 0.1}); - var $el = $tool.find('.eruda-range'); - expect($el.find('.eruda-head')).toContainText(text); - expect($el.find('input').length).toEqual(1); - }); - }); - - describe('color', function () - { - it('ui', function () - { - var text = 'Test Color'; - - tool.color(cfg, 'testColor', text, ['#000', '#fff']); - var $el = $tool.find('.eruda-color'); - expect($el.find('.eruda-head')).toContainText(text); - expect($el.find('ul li').length).toEqual(2); - }); + tool.color(cfg, 'testColor', text, ['#000', '#fff']); + var $el = $tool.find('.eruda-color'); + expect($el.find('.eruda-head')).toContainText(text); + expect($el.find('ul li').length).toEqual(2); + $el.find('.eruda-head').click(); + $el.find('ul li').eq(0).click(); + expect(cfg.get('testColor')).toBe('rgb(0, 0, 0)'); }); }); \ No newline at end of file