1
0

Add initial Atom package files

This commit is contained in:
Jip J. Dekker 2017-11-29 16:49:08 +11:00
commit e7a5f508ae
No known key found for this signature in database
GPG Key ID: 9CB1B58997DD0D58
9 changed files with 184 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.DS_Store
npm-debug.log
node_modules

11
keymaps/minisuite.cson Normal file
View 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
View 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
View 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
View 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
View 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": {
}
}

View 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()

View 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
View 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 {
}