From df962afe0e5dbbbe668cad983da46ffeff1fa7f5 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 7 Feb 2013 19:27:07 -0800 Subject: [PATCH] Modernize markdown-preview package with package.cson --- src/packages/markdown-preview/index.coffee | 9 ------ .../{src => lib}/markdown-preview-view.coffee | 25 ++++++++------- src/packages/markdown-preview/package.cson | 3 ++ .../spec/markdown-preview-spec.coffee | 32 +++++++++---------- 4 files changed, 31 insertions(+), 38 deletions(-) delete mode 100644 src/packages/markdown-preview/index.coffee rename src/packages/markdown-preview/{src => lib}/markdown-preview-view.coffee (75%) create mode 100644 src/packages/markdown-preview/package.cson diff --git a/src/packages/markdown-preview/index.coffee b/src/packages/markdown-preview/index.coffee deleted file mode 100644 index 7cbba03f0..000000000 --- a/src/packages/markdown-preview/index.coffee +++ /dev/null @@ -1,9 +0,0 @@ -DeferredAtomPackage = require 'deferred-atom-package' - -module.exports = -class MarkdownPreview extends DeferredAtomPackage - loadEvents: ['markdown-preview:toggle'] - - instanceClass: 'markdown-preview/src/markdown-preview-view' - - onLoadEvent: (event, instance) -> instance.toggle() diff --git a/src/packages/markdown-preview/src/markdown-preview-view.coffee b/src/packages/markdown-preview/lib/markdown-preview-view.coffee similarity index 75% rename from src/packages/markdown-preview/src/markdown-preview-view.coffee rename to src/packages/markdown-preview/lib/markdown-preview-view.coffee index c044623ab..f112d58e1 100644 --- a/src/packages/markdown-preview/src/markdown-preview-view.coffee +++ b/src/packages/markdown-preview/lib/markdown-preview-view.coffee @@ -5,19 +5,19 @@ $ = require 'jquery' module.exports = class MarkdownPreviewView extends ScrollView - @activate: (rootView, state) -> - @instance = new this(rootView) + @activate: -> + @instance = new MarkdownPreviewView - @content: (rootView) -> + @content: -> @div class: 'markdown-preview', tabindex: -1, => @div class: 'markdown-body', outlet: 'markdownBody' - initialize: (@rootView) -> + initialize: -> super - @editor = @rootView.getActiveEditor() - @subscribe @editor, 'focus', => @detach() unless @detaching - @command 'core:cancel', => @detach() unless @detaching + rootView.command 'markdown-preview:toggle', => @toggle() + @on 'blur', => @detach() unless document.activeElement is this[0] + @command 'core:cancel', => @detach() toggle: -> if @hasParent() @@ -27,22 +27,23 @@ class MarkdownPreviewView extends ScrollView attach: -> return unless @isMarkdownFile(@getActivePath()) - @rootView.append(this) + rootView.append(this) @markdownBody.html(@getLoadingHtml()) @loadHtml() @focus() detach: -> + return if @detaching @detaching = true super - @rootView.focus() + rootView.focus() @detaching = false getActivePath: -> - @editor.getPath() + rootView.getActiveEditor()?.getPath() getActiveText: -> - @editor.getText() + rootView.getActiveEditor()?.getText() getErrorHtml: (error) -> $$$ -> @@ -76,4 +77,4 @@ class MarkdownPreviewView extends ScrollView @markdownBody.html(html) if @hasParent() isMarkdownFile: (path) -> - fs.isMarkdownExtension(fs.extension(path)) + path and fs.isMarkdownExtension(fs.extension(path)) diff --git a/src/packages/markdown-preview/package.cson b/src/packages/markdown-preview/package.cson new file mode 100644 index 000000000..deea08f07 --- /dev/null +++ b/src/packages/markdown-preview/package.cson @@ -0,0 +1,3 @@ +'main': 'lib/markdown-preview-view' +'activationEvents': + 'markdown-preview:toggle': '.editor' diff --git a/src/packages/markdown-preview/spec/markdown-preview-spec.coffee b/src/packages/markdown-preview/spec/markdown-preview-spec.coffee index 49066159b..6917e8240 100644 --- a/src/packages/markdown-preview/spec/markdown-preview-spec.coffee +++ b/src/packages/markdown-preview/spec/markdown-preview-spec.coffee @@ -1,12 +1,12 @@ $ = require 'jquery' RootView = require 'root-view' -MarkdownPreview = require 'markdown-preview/src/markdown-preview-view' +MarkdownPreview = require 'markdown-preview/lib/markdown-preview-view' describe "MarkdownPreview", -> - [rootView, markdownPreview] = [] - beforeEach -> rootView = new RootView(require.resolve('fixtures/markdown')) + atom.loadPackage("markdown-preview") + spyOn(MarkdownPreview.prototype, 'loadHtml') afterEach -> rootView.deactivate() @@ -15,44 +15,37 @@ describe "MarkdownPreview", -> it "toggles on/off a preview for a .md file", -> rootView.open('file.md') editor = rootView.getActiveEditor() - markdownPreview = atom.loadPackage("markdown-preview").getInstance() expect(rootView.find('.markdown-preview')).not.toExist() - spyOn(markdownPreview, 'loadHtml') editor.trigger('markdown-preview:toggle') markdownPreviewView = rootView.find('.markdown-preview')?.view() expect(rootView.find('.markdown-preview')).toExist() - expect(markdownPreview.loadHtml).toHaveBeenCalled(); + expect(markdownPreviewView.loadHtml).toHaveBeenCalled() markdownPreviewView.trigger('markdown-preview:toggle') expect(rootView.find('.markdown-preview')).not.toExist() it "displays a preview for a .markdown file", -> rootView.open('file.markdown') editor = rootView.getActiveEditor() - markdownPreview = atom.loadPackage("markdown-preview").getInstance() expect(rootView.find('.markdown-preview')).not.toExist() - spyOn(markdownPreview, 'loadHtml') editor.trigger('markdown-preview:toggle') expect(rootView.find('.markdown-preview')).toExist() - expect(markdownPreview.loadHtml).toHaveBeenCalled(); + markdownPreviewView = rootView.find('.markdown-preview')?.view() + expect(markdownPreviewView.loadHtml).toHaveBeenCalled() it "does not display a preview for non-markdown file", -> rootView.open('file.js') editor = rootView.getActiveEditor() - markdownPreview = atom.loadPackage("markdown-preview").getInstance() expect(rootView.find('.markdown-preview')).not.toExist() - spyOn(markdownPreview, 'loadHtml') editor.trigger('markdown-preview:toggle') expect(rootView.find('.markdown-preview')).not.toExist() - expect(markdownPreview.loadHtml).not.toHaveBeenCalled(); + expect(MarkdownPreview.prototype.loadHtml).not.toHaveBeenCalled() describe "core:cancel event", -> it "removes markdown preview", -> rootView.open('file.md') editor = rootView.getActiveEditor() - markdownPreview = atom.loadPackage("markdown-preview").getInstance() expect(rootView.find('.markdown-preview')).not.toExist() - spyOn(markdownPreview, 'loadHtml') editor.trigger('markdown-preview:toggle') markdownPreviewView = rootView.find('.markdown-preview')?.view() @@ -62,14 +55,19 @@ describe "MarkdownPreview", -> describe "when the editor receives focus", -> it "removes the markdown preview view", -> + rootView.attachToDom() rootView.open('file.md') editor = rootView.getActiveEditor() - markdownPreview = atom.loadPackage("markdown-preview").getInstance() expect(rootView.find('.markdown-preview')).not.toExist() - spyOn(markdownPreview, 'loadHtml') editor.trigger('markdown-preview:toggle') markdownPreviewView = rootView.find('.markdown-preview') - expect(markdownPreviewView).toExist() editor.focus() + expect(markdownPreviewView).toExist() + expect(rootView.find('.markdown-preview')).not.toExist() + + describe "when no editor is open", -> + it "does not attach", -> + expect(rootView.getActiveEditor()).toBeFalsy() + rootView.trigger('markdown-preview:toggle') expect(rootView.find('.markdown-preview')).not.toExist()