Sha256: 7ff19b315c6338f3e008645a2b5c667f7da87317e23ee68258b3e066ebc12911
Contents?: true
Size: 1.43 KB
Versions: 5
Compression:
Stored size: 1.43 KB
Contents
import $ from 'jquery'; import lists from '../core/lists'; import key from '../core/key'; const defaultScheme = 'http://'; const linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i; export default class AutoLink { constructor(context) { this.context = context; this.events = { 'summernote.keyup': (we, e) => { if (!e.isDefaultPrevented()) { this.handleKeyup(e); } }, 'summernote.keydown': (we, e) => { this.handleKeydown(e); } }; } initialize() { this.lastWordRange = null; } destroy() { this.lastWordRange = null; } replace() { if (!this.lastWordRange) { return; } const keyword = this.lastWordRange.toString(); const match = keyword.match(linkPattern); if (match && (match[1] || match[2])) { const link = match[1] ? keyword : defaultScheme + keyword; const node = $('<a />').html(keyword).attr('href', link)[0]; this.lastWordRange.insertNode(node); this.lastWordRange = null; this.context.invoke('editor.focus'); } } handleKeydown(e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { const wordRange = this.context.invoke('editor.createRange').getWordRange(); this.lastWordRange = wordRange; } } handleKeyup(e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { this.replace(); } } }
Version data entries
5 entries across 5 versions & 1 rubygems