Skip to content
This repository was archived by the owner on Nov 1, 2020. It is now read-only.

Commit 7b65f08

Browse files
committed
Initial Commit
0 parents  commit 7b65f08

12 files changed

+210
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.DS_Store
2+
npm-debug.log
3+
node_modules

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## 0.1.0 - First Release
2+
* Every feature added
3+
* Every bug fixed

LICENSE.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Copyright (c) 2014 <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.

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# omnipanel package
2+
3+
A short description of your package.
4+
5+
![A screenshot of your package](https://f.cloud.github.com/assets/69169/2290250/c35d867a-a017-11e3-86be-cd7c5bf3ff9b.gif)

keymaps/omnipanel.cson

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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/advanced/keymaps
10+
'atom-workspace':
11+
'ctrl-alt-o': 'omnipanel:toggle'

lib/omnipanel-view.coffee

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module.exports =
2+
class OmnipanelView
3+
constructor: (serializeState) ->
4+
# Create root element
5+
@element = document.createElement('div')
6+
@element.classList.add('omnipanel')
7+
8+
# Create message element
9+
message = document.createElement('div')
10+
message.textContent = "The Omnipanel 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

lib/omnipanel.coffee

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
OmnipanelView = require './omnipanel-view'
2+
{CompositeDisposable} = require 'atom'
3+
4+
module.exports = Omnipanel =
5+
omnipanelView: null
6+
modalPanel: null
7+
subscriptions: null
8+
9+
activate: (state) ->
10+
@omnipanelView = new OmnipanelView(state.omnipanelViewState)
11+
@modalPanel = atom.workspace.addModalPanel(item: @omnipanelView.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', 'omnipanel:toggle': => @toggle()
18+
19+
deactivate: ->
20+
@modalPanel.destroy()
21+
@subscriptions.dispose()
22+
@omnipanelView.destroy()
23+
24+
serialize: ->
25+
omnipanelViewState: @omnipanelView.serialize()
26+
27+
toggle: ->
28+
console.log 'Omnipanel was toggled!'
29+
30+
if @modalPanel.isVisible()
31+
@modalPanel.hide()
32+
else
33+
@modalPanel.show()

menus/omnipanel.cson

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# See https://atom.io/docs/latest/creating-a-package#menus for more details
2+
'context-menu':
3+
'atom-text-editor': [
4+
{
5+
'label': 'Toggle omnipanel'
6+
'command': 'omnipanel:toggle'
7+
}
8+
]
9+
'menu': [
10+
{
11+
'label': 'Packages'
12+
'submenu': [
13+
'label': 'omnipanel'
14+
'submenu': [
15+
{
16+
'label': 'Toggle'
17+
'command': 'omnipanel:toggle'
18+
}
19+
]
20+
]
21+
}
22+
]

package.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "omnipanel",
3+
"main": "./lib/omnipanel",
4+
"version": "0.0.0",
5+
"description": "A short description of your package",
6+
"activationCommands": {
7+
"atom-workspace": "omnipanel:toggle"
8+
},
9+
"repository": "https://github.com/atom/omnipanel",
10+
"license": "MIT",
11+
"engines": {
12+
"atom": ">0.50.0"
13+
},
14+
"dependencies": {
15+
}
16+
}

spec/omnipanel-spec.coffee

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
Omnipanel = require '../lib/omnipanel'
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 "Omnipanel", ->
9+
[workspaceElement, activationPromise] = []
10+
11+
beforeEach ->
12+
workspaceElement = atom.views.getView(atom.workspace)
13+
activationPromise = atom.packages.activatePackage('omnipanel')
14+
15+
describe "when the omnipanel: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('.omnipanel')).not.toExist()
20+
21+
# This is an activation event, triggering it will cause the package to be
22+
# activated.
23+
atom.commands.dispatch workspaceElement, 'omnipanel:toggle'
24+
25+
waitsForPromise ->
26+
activationPromise
27+
28+
runs ->
29+
expect(workspaceElement.querySelector('.omnipanel')).toExist()
30+
31+
omnipanelElement = workspaceElement.querySelector('.omnipanel')
32+
expect(omnipanelElement).toExist()
33+
34+
omnipanelPanel = atom.workspace.panelForItem(omnipanelElement)
35+
expect(omnipanelPanel.isVisible()).toBe true
36+
atom.commands.dispatch workspaceElement, 'omnipanel:toggle'
37+
expect(omnipanelPanel.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('.omnipanel')).not.toExist()
49+
50+
# This is an activation event, triggering it causes the package to be
51+
# activated.
52+
atom.commands.dispatch workspaceElement, 'omnipanel:toggle'
53+
54+
waitsForPromise ->
55+
activationPromise
56+
57+
runs ->
58+
# Now we can test for view visibility
59+
omnipanelElement = workspaceElement.querySelector('.omnipanel')
60+
expect(omnipanelElement).toBeVisible()
61+
atom.commands.dispatch workspaceElement, 'omnipanel:toggle'
62+
expect(omnipanelElement).not.toBeVisible()

spec/omnipanel-view-spec.coffee

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
OmnipanelView = require '../lib/omnipanel-view'
2+
3+
describe "OmnipanelView", ->
4+
it "has one valid test", ->
5+
expect("life").toBe "easy"

styles/omnipanel.less

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
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+
.omnipanel {
8+
}

0 commit comments

Comments
 (0)