aboutsummaryrefslogtreecommitdiff
path: root/atom/packages/vim-mode/lib/view-models/vim-command-mode-input-element.coffee
diff options
context:
space:
mode:
authorBen Beltran <ben@nsovocal.com>2015-07-10 11:12:25 -0500
committerBen Beltran <ben@nsovocal.com>2015-07-10 11:12:25 -0500
commit24c7594d62d8d7fbbcdb64b11ce4adc5d8e6991a (patch)
treeded312222bb108923da1820ba40b04d710d20e5b /atom/packages/vim-mode/lib/view-models/vim-command-mode-input-element.coffee
parenteb786e82d170e2abc351a432ade616d6ecdeeb6b (diff)
Adds atom
Diffstat (limited to 'atom/packages/vim-mode/lib/view-models/vim-command-mode-input-element.coffee')
-rw-r--r--atom/packages/vim-mode/lib/view-models/vim-command-mode-input-element.coffee64
1 files changed, 64 insertions, 0 deletions
diff --git a/atom/packages/vim-mode/lib/view-models/vim-command-mode-input-element.coffee b/atom/packages/vim-mode/lib/view-models/vim-command-mode-input-element.coffee
new file mode 100644
index 0000000..4fd0c52
--- /dev/null
+++ b/atom/packages/vim-mode/lib/view-models/vim-command-mode-input-element.coffee
@@ -0,0 +1,64 @@
+class VimCommandModeInputElement extends HTMLDivElement
+ createdCallback: ->
+ @className = "command-mode-input"
+
+ @editorContainer = document.createElement("div")
+ @editorContainer.className = "editor-container"
+
+ @appendChild(@editorContainer)
+
+ initialize: (@viewModel, opts = {}) ->
+ if opts.class?
+ @editorContainer.classList.add(opts.class)
+
+ if opts.hidden
+ @editorContainer.style.height = "0px"
+
+ @editorElement = document.createElement "atom-text-editor"
+ @editorElement.classList.add('editor')
+ @editorElement.getModel().setMini(true)
+ @editorElement.setAttribute('mini', '')
+ @editorContainer.appendChild(@editorElement)
+
+ @singleChar = opts.singleChar
+ @defaultText = opts.defaultText ? ''
+
+ @panel = atom.workspace.addBottomPanel(item: this, priority: 100)
+
+ @focus()
+ @handleEvents()
+
+ this
+
+ handleEvents: ->
+ if @singleChar?
+ @editorElement.getModel().getBuffer().onDidChange (e) =>
+ @confirm() if e.newText
+ else
+ atom.commands.add(@editorElement, 'editor:newline', @confirm.bind(this))
+
+ atom.commands.add(@editorElement, 'core:confirm', @confirm.bind(this))
+ atom.commands.add(@editorElement, 'core:cancel', @cancel.bind(this))
+ atom.commands.add(@editorElement, 'blur', @cancel.bind(this))
+
+ confirm: ->
+ @value = @editorElement.getModel().getText() or @defaultText
+ @viewModel.confirm(this)
+ @removePanel()
+
+ focus: ->
+ @editorElement.focus()
+
+ cancel: (e) ->
+ @viewModel.cancel(this)
+ @removePanel()
+
+ removePanel: ->
+ atom.workspace.getActivePane().activate()
+ @panel.destroy()
+
+module.exports =
+document.registerElement("vim-command-mode-input"
+ extends: "div",
+ prototype: VimCommandModeInputElement.prototype
+)