1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // CodeMirror, copyright (c) by Marijn Haverbeke and others
- // Distributed under an MIT license: https://codemirror.net/LICENSE
- ;(function (mod) {
- if (typeof exports == 'object' && typeof module == 'object')
- // CommonJS
- mod(require('../../lib/codemirror'))
- else if (typeof define == 'function' && define.amd)
- // AMD
- define(['../../lib/codemirror'], mod)
- // Plain browser env
- else mod(CodeMirror)
- })(function (CodeMirror) {
- CodeMirror.defineOption('placeholder', '', function (cm, val, old) {
- var prev = old && old != CodeMirror.Init
- if (val && !prev) {
- cm.on('blur', onBlur)
- cm.on('change', onChange)
- cm.on('swapDoc', onChange)
- CodeMirror.on(
- cm.getInputField(),
- 'compositionupdate',
- (cm.state.placeholderCompose = function () {
- onComposition(cm)
- })
- )
- onChange(cm)
- } else if (!val && prev) {
- cm.off('blur', onBlur)
- cm.off('change', onChange)
- cm.off('swapDoc', onChange)
- CodeMirror.off(cm.getInputField(), 'compositionupdate', cm.state.placeholderCompose)
- clearPlaceholder(cm)
- var wrapper = cm.getWrapperElement()
- wrapper.className = wrapper.className.replace(' CodeMirror-empty', '')
- }
- if (val && !cm.hasFocus()) onBlur(cm)
- })
- function clearPlaceholder(cm) {
- if (cm.state.placeholder) {
- cm.state.placeholder.parentNode.removeChild(cm.state.placeholder)
- cm.state.placeholder = null
- }
- }
- function setPlaceholder(cm) {
- clearPlaceholder(cm)
- var elt = (cm.state.placeholder = document.createElement('pre'))
- elt.style.cssText = 'height: 0; overflow: visible'
- elt.style.direction = cm.getOption('direction')
- elt.className = 'CodeMirror-placeholder CodeMirror-line-like'
- var placeHolder = cm.getOption('placeholder')
- if (typeof placeHolder == 'string') placeHolder = document.createTextNode(placeHolder)
- elt.appendChild(placeHolder)
- cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild)
- }
- function onComposition(cm) {
- setTimeout(function () {
- var empty = false
- if (cm.lineCount() == 1) {
- var input = cm.getInputField()
- empty = input.nodeName == 'TEXTAREA' ? !cm.getLine(0).length : !/[^\u200b]/.test(input.querySelector('.CodeMirror-line').textContent)
- }
- if (empty) setPlaceholder(cm)
- else clearPlaceholder(cm)
- }, 20)
- }
- function onBlur(cm) {
- if (isEmpty(cm)) setPlaceholder(cm)
- }
- function onChange(cm) {
- var wrapper = cm.getWrapperElement(),
- empty = isEmpty(cm)
- wrapper.className = wrapper.className.replace(' CodeMirror-empty', '') + (empty ? ' CodeMirror-empty' : '')
- if (empty) setPlaceholder(cm)
- else clearPlaceholder(cm)
- }
- function isEmpty(cm) {
- return cm.lineCount() === 1 && cm.getLine(0) === ''
- }
- })
|