class VimNormalModeInputElement extends HTMLDivElement createdCallback: -> @className = "normal-mode-input" initialize: (@viewModel, @mainEditorElement, opts = {}) -> if opts.class? @classList.add(opts.class) @editorElement = document.createElement "atom-text-editor" @editorElement.classList.add('editor') @editorElement.getModel().setMini(true) @editorElement.setAttribute('mini', '') @appendChild(@editorElement) @singleChar = opts.singleChar @defaultText = opts.defaultText ? '' if opts.hidden @classList.add('vim-hidden-normal-mode-input') @mainEditorElement.parentNode.appendChild(this) else @panel = atom.workspace.addBottomPanel(item: this, priority: 100) @focus() @handleEvents() this handleEvents: -> if @singleChar? compositing = false @editorElement.getModel().getBuffer().onDidChange (e) => @confirm() if e.newText and not compositing @editorElement.addEventListener 'compositionstart', -> compositing = true @editorElement.addEventListener 'compositionend', -> compositing = false 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() if @panel? @panel.destroy() else this.remove() module.exports = document.registerElement("vim-normal-mode-input" extends: "div", prototype: VimNormalModeInputElement.prototype )