Add initial Atom package files
This commit is contained in:
commit
e7a5f508ae
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.DS_Store
|
||||
npm-debug.log
|
||||
node_modules
|
11
keymaps/minisuite.cson
Normal file
11
keymaps/minisuite.cson
Normal file
@ -0,0 +1,11 @@
|
||||
# Keybindings require three things to be fully defined: A selector that is
|
||||
# matched against the focused element, the keystroke and the command to
|
||||
# execute.
|
||||
#
|
||||
# Below is a basic keybinding which registers on all platforms by applying to
|
||||
# the root workspace element.
|
||||
|
||||
# For more detailed documentation see
|
||||
# https://atom.io/docs/latest/behind-atom-keymaps-in-depth
|
||||
'atom-workspace':
|
||||
'ctrl-alt-o': 'minisuite:toggle'
|
22
lib/minisuite-view.coffee
Normal file
22
lib/minisuite-view.coffee
Normal file
@ -0,0 +1,22 @@
|
||||
module.exports =
|
||||
class MinisuiteView
|
||||
constructor: (serializedState) ->
|
||||
# Create root element
|
||||
@element = document.createElement('div')
|
||||
@element.classList.add('minisuite')
|
||||
|
||||
# Create message element
|
||||
message = document.createElement('div')
|
||||
message.textContent = "The Minisuite package is Alive! It's ALIVE!"
|
||||
message.classList.add('message')
|
||||
@element.appendChild(message)
|
||||
|
||||
# Returns an object that can be retrieved when package is activated
|
||||
serialize: ->
|
||||
|
||||
# Tear down any state and detach
|
||||
destroy: ->
|
||||
@element.remove()
|
||||
|
||||
getElement: ->
|
||||
@element
|
33
lib/minisuite.coffee
Normal file
33
lib/minisuite.coffee
Normal file
@ -0,0 +1,33 @@
|
||||
MinisuiteView = require './minisuite-view'
|
||||
{CompositeDisposable} = require 'atom'
|
||||
|
||||
module.exports = Minisuite =
|
||||
minisuiteView: null
|
||||
modalPanel: null
|
||||
subscriptions: null
|
||||
|
||||
activate: (state) ->
|
||||
@minisuiteView = new MinisuiteView(state.minisuiteViewState)
|
||||
@modalPanel = atom.workspace.addModalPanel(item: @minisuiteView.getElement(), visible: false)
|
||||
|
||||
# Events subscribed to in atom's system can be easily cleaned up with a CompositeDisposable
|
||||
@subscriptions = new CompositeDisposable
|
||||
|
||||
# Register command that toggles this view
|
||||
@subscriptions.add atom.commands.add 'atom-workspace', 'minisuite:toggle': => @toggle()
|
||||
|
||||
deactivate: ->
|
||||
@modalPanel.destroy()
|
||||
@subscriptions.dispose()
|
||||
@minisuiteView.destroy()
|
||||
|
||||
serialize: ->
|
||||
minisuiteViewState: @minisuiteView.serialize()
|
||||
|
||||
toggle: ->
|
||||
console.log 'Minisuite was toggled!'
|
||||
|
||||
if @modalPanel.isVisible()
|
||||
@modalPanel.hide()
|
||||
else
|
||||
@modalPanel.show()
|
22
menus/minisuite.cson
Normal file
22
menus/minisuite.cson
Normal file
@ -0,0 +1,22 @@
|
||||
# See https://atom.io/docs/latest/hacking-atom-package-word-count#menus for more details
|
||||
'context-menu':
|
||||
'atom-text-editor': [
|
||||
{
|
||||
'label': 'Toggle minisuite'
|
||||
'command': 'minisuite:toggle'
|
||||
}
|
||||
]
|
||||
'menu': [
|
||||
{
|
||||
'label': 'Packages'
|
||||
'submenu': [
|
||||
'label': 'minisuite'
|
||||
'submenu': [
|
||||
{
|
||||
'label': 'Toggle'
|
||||
'command': 'minisuite:toggle'
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
18
package.json
Normal file
18
package.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "MiniSuite",
|
||||
"main": "./lib/minisuite",
|
||||
"version": "0.0.0",
|
||||
"description": "A short description of your package",
|
||||
"keywords": [
|
||||
],
|
||||
"activationCommands": {
|
||||
"atom-workspace": "minisuite:toggle"
|
||||
},
|
||||
"repository": "https://github.com/Dekker1/minisuite",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"atom": ">=1.0.0 <2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
}
|
||||
}
|
62
spec/minisuite-spec.coffee
Normal file
62
spec/minisuite-spec.coffee
Normal file
@ -0,0 +1,62 @@
|
||||
Minisuite = require '../lib/minisuite'
|
||||
|
||||
# Use the command `window:run-package-specs` (cmd-alt-ctrl-p) to run specs.
|
||||
#
|
||||
# To run a specific `it` or `describe` block add an `f` to the front (e.g. `fit`
|
||||
# or `fdescribe`). Remove the `f` to unfocus the block.
|
||||
|
||||
describe "Minisuite", ->
|
||||
[workspaceElement, activationPromise] = []
|
||||
|
||||
beforeEach ->
|
||||
workspaceElement = atom.views.getView(atom.workspace)
|
||||
activationPromise = atom.packages.activatePackage('minisuite')
|
||||
|
||||
describe "when the minisuite:toggle event is triggered", ->
|
||||
it "hides and shows the modal panel", ->
|
||||
# Before the activation event the view is not on the DOM, and no panel
|
||||
# has been created
|
||||
expect(workspaceElement.querySelector('.minisuite')).not.toExist()
|
||||
|
||||
# This is an activation event, triggering it will cause the package to be
|
||||
# activated.
|
||||
atom.commands.dispatch workspaceElement, 'minisuite:toggle'
|
||||
|
||||
waitsForPromise ->
|
||||
activationPromise
|
||||
|
||||
runs ->
|
||||
expect(workspaceElement.querySelector('.minisuite')).toExist()
|
||||
|
||||
minisuiteElement = workspaceElement.querySelector('.minisuite')
|
||||
expect(minisuiteElement).toExist()
|
||||
|
||||
minisuitePanel = atom.workspace.panelForItem(minisuiteElement)
|
||||
expect(minisuitePanel.isVisible()).toBe true
|
||||
atom.commands.dispatch workspaceElement, 'minisuite:toggle'
|
||||
expect(minisuitePanel.isVisible()).toBe false
|
||||
|
||||
it "hides and shows the view", ->
|
||||
# This test shows you an integration test testing at the view level.
|
||||
|
||||
# Attaching the workspaceElement to the DOM is required to allow the
|
||||
# `toBeVisible()` matchers to work. Anything testing visibility or focus
|
||||
# requires that the workspaceElement is on the DOM. Tests that attach the
|
||||
# workspaceElement to the DOM are generally slower than those off DOM.
|
||||
jasmine.attachToDOM(workspaceElement)
|
||||
|
||||
expect(workspaceElement.querySelector('.minisuite')).not.toExist()
|
||||
|
||||
# This is an activation event, triggering it causes the package to be
|
||||
# activated.
|
||||
atom.commands.dispatch workspaceElement, 'minisuite:toggle'
|
||||
|
||||
waitsForPromise ->
|
||||
activationPromise
|
||||
|
||||
runs ->
|
||||
# Now we can test for view visibility
|
||||
minisuiteElement = workspaceElement.querySelector('.minisuite')
|
||||
expect(minisuiteElement).toBeVisible()
|
||||
atom.commands.dispatch workspaceElement, 'minisuite:toggle'
|
||||
expect(minisuiteElement).not.toBeVisible()
|
5
spec/minisuite-view-spec.coffee
Normal file
5
spec/minisuite-view-spec.coffee
Normal file
@ -0,0 +1,5 @@
|
||||
MinisuiteView = require '../lib/minisuite-view'
|
||||
|
||||
describe "MinisuiteView", ->
|
||||
it "has one valid test", ->
|
||||
expect("life").toBe "easy"
|
8
styles/minisuite.less
Normal file
8
styles/minisuite.less
Normal file
@ -0,0 +1,8 @@
|
||||
// The ui-variables file is provided by base themes provided by Atom.
|
||||
//
|
||||
// See https://github.com/atom/atom-dark-ui/blob/master/styles/ui-variables.less
|
||||
// for a full listing of what's available.
|
||||
@import "ui-variables";
|
||||
|
||||
.minisuite {
|
||||
}
|
Reference in New Issue
Block a user