···1+## 0.1.0 - First Release
2+* Every feature added
3+* Every bug fixed
+20
LICENSE.md
···00000000000000000000
···1+Copyright (c) 2015 <Your name here>
2+3+Permission is hereby granted, free of charge, to any person obtaining
4+a copy of this software and associated documentation files (the
5+"Software"), to deal in the Software without restriction, including
6+without limitation the rights to use, copy, modify, merge, publish,
7+distribute, sublicense, and/or sell copies of the Software, and to
8+permit persons to whom the Software is furnished to do so, subject to
9+the following conditions:
10+11+The above copyright notice and this permission notice shall be
12+included in all copies or substantial portions of the Software.
13+14+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+5
README.md
···00000
···1+# language-mzn package
2+3+A short description of your package.
4+5+
+11
keymaps/language-mzn.cson
···00000000000
···1+# Keybindings require three things to be fully defined: A selector that is
2+# matched against the focused element, the keystroke and the command to
3+# execute.
4+#
5+# Below is a basic keybinding which registers on all platforms by applying to
6+# the root workspace element.
7+8+# For more detailed documentation see
9+# https://atom.io/docs/latest/behind-atom-keymaps-in-depth
10+'atom-workspace':
11+ 'ctrl-alt-o': 'language-mzn:toggle'
+22
lib/language-mzn-view.coffee
···0000000000000000000000
···1+module.exports =
2+class LanguageMznView
3+ constructor: (serializedState) ->
4+ # Create root element
5+ @element = document.createElement('div')
6+ @element.classList.add('language-mzn')
7+8+ # Create message element
9+ message = document.createElement('div')
10+ message.textContent = "The LanguageMzn package is Alive! It's ALIVE!"
11+ message.classList.add('message')
12+ @element.appendChild(message)
13+14+ # Returns an object that can be retrieved when package is activated
15+ serialize: ->
16+17+ # Tear down any state and detach
18+ destroy: ->
19+ @element.remove()
20+21+ getElement: ->
22+ @element
+33
lib/language-mzn.coffee
···000000000000000000000000000000000
···1+LanguageMznView = require './language-mzn-view'
2+{CompositeDisposable} = require 'atom'
3+4+module.exports = LanguageMzn =
5+ languageMznView: null
6+ modalPanel: null
7+ subscriptions: null
8+9+ activate: (state) ->
10+ @languageMznView = new LanguageMznView(state.languageMznViewState)
11+ @modalPanel = atom.workspace.addModalPanel(item: @languageMznView.getElement(), visible: false)
12+13+ # Events subscribed to in atom's system can be easily cleaned up with a CompositeDisposable
14+ @subscriptions = new CompositeDisposable
15+16+ # Register command that toggles this view
17+ @subscriptions.add atom.commands.add 'atom-workspace', 'language-mzn:toggle': => @toggle()
18+19+ deactivate: ->
20+ @modalPanel.destroy()
21+ @subscriptions.dispose()
22+ @languageMznView.destroy()
23+24+ serialize: ->
25+ languageMznViewState: @languageMznView.serialize()
26+27+ toggle: ->
28+ console.log 'LanguageMzn was toggled!'
29+30+ if @modalPanel.isVisible()
31+ @modalPanel.hide()
32+ else
33+ @modalPanel.show()
···1+LanguageMzn = require '../lib/language-mzn'
2+3+# Use the command `window:run-package-specs` (cmd-alt-ctrl-p) to run specs.
4+#
5+# To run a specific `it` or `describe` block add an `f` to the front (e.g. `fit`
6+# or `fdescribe`). Remove the `f` to unfocus the block.
7+8+describe "LanguageMzn", ->
9+ [workspaceElement, activationPromise] = []
10+11+ beforeEach ->
12+ workspaceElement = atom.views.getView(atom.workspace)
13+ activationPromise = atom.packages.activatePackage('language-mzn')
14+15+ describe "when the language-mzn:toggle event is triggered", ->
16+ it "hides and shows the modal panel", ->
17+ # Before the activation event the view is not on the DOM, and no panel
18+ # has been created
19+ expect(workspaceElement.querySelector('.language-mzn')).not.toExist()
20+21+ # This is an activation event, triggering it will cause the package to be
22+ # activated.
23+ atom.commands.dispatch workspaceElement, 'language-mzn:toggle'
24+25+ waitsForPromise ->
26+ activationPromise
27+28+ runs ->
29+ expect(workspaceElement.querySelector('.language-mzn')).toExist()
30+31+ languageMznElement = workspaceElement.querySelector('.language-mzn')
32+ expect(languageMznElement).toExist()
33+34+ languageMznPanel = atom.workspace.panelForItem(languageMznElement)
35+ expect(languageMznPanel.isVisible()).toBe true
36+ atom.commands.dispatch workspaceElement, 'language-mzn:toggle'
37+ expect(languageMznPanel.isVisible()).toBe false
38+39+ it "hides and shows the view", ->
40+ # This test shows you an integration test testing at the view level.
41+42+ # Attaching the workspaceElement to the DOM is required to allow the
43+ # `toBeVisible()` matchers to work. Anything testing visibility or focus
44+ # requires that the workspaceElement is on the DOM. Tests that attach the
45+ # workspaceElement to the DOM are generally slower than those off DOM.
46+ jasmine.attachToDOM(workspaceElement)
47+48+ expect(workspaceElement.querySelector('.language-mzn')).not.toExist()
49+50+ # This is an activation event, triggering it causes the package to be
51+ # activated.
52+ atom.commands.dispatch workspaceElement, 'language-mzn:toggle'
53+54+ waitsForPromise ->
55+ activationPromise
56+57+ runs ->
58+ # Now we can test for view visibility
59+ languageMznElement = workspaceElement.querySelector('.language-mzn')
60+ expect(languageMznElement).toBeVisible()
61+ atom.commands.dispatch workspaceElement, 'language-mzn:toggle'
62+ expect(languageMznElement).not.toBeVisible()
+5
spec/language-mzn-view-spec.coffee
···00000
···1+LanguageMznView = require '../lib/language-mzn-view'
2+3+describe "LanguageMznView", ->
4+ it "has one valid test", ->
5+ expect("life").toBe "easy"
+8
styles/language-mzn.less
···00000000
···1+// The ui-variables file is provided by base themes provided by Atom.
2+//
3+// See https://github.com/atom/atom-dark-ui/blob/master/styles/ui-variables.less
4+// for a full listing of what's available.
5+@import "ui-variables";
6+7+.language-mzn {
8+}