|
import Tool from '../DevTools/Tool' |
|
import defSnippets from './defSnippets' |
|
import $ from 'licia/$' |
|
import each from 'licia/each' |
|
import escape from 'licia/escape' |
|
import map from 'licia/map' |
|
import remove from 'licia/remove' |
|
import evalCss from '../lib/evalCss' |
|
import { classPrefix as c } from '../lib/util' |
|
|
|
export default class Snippets extends Tool { |
|
constructor() { |
|
super() |
|
|
|
this._style = evalCss(require('./Snippets.scss')) |
|
|
|
this.name = 'snippets' |
|
this.displayName = 'γΉγγγγ' |
|
|
|
this._snippets = [] |
|
} |
|
init($el) { |
|
super.init($el) |
|
|
|
this._bindEvent() |
|
this._addDefSnippets() |
|
} |
|
destroy() { |
|
super.destroy() |
|
|
|
evalCss.remove(this._style) |
|
} |
|
add(name, fn, desc) { |
|
this._snippets.push({ name, fn, desc }) |
|
|
|
this._render() |
|
|
|
return this |
|
} |
|
remove(name) { |
|
remove(this._snippets, (snippet) => snippet.name === name) |
|
|
|
this._render() |
|
|
|
return this |
|
} |
|
run(name) { |
|
const snippets = this._snippets |
|
|
|
for (let i = 0, len = snippets.length; i < len; i++) { |
|
if (snippets[i].name === name) this._run(i) |
|
} |
|
|
|
return this |
|
} |
|
clear() { |
|
this._snippets = [] |
|
this._render() |
|
|
|
return this |
|
} |
|
_bindEvent() { |
|
const self = this |
|
|
|
this._$el.on('click', '.eruda-run', function () { |
|
const idx = $(this).data('idx') |
|
|
|
self._run(idx) |
|
}) |
|
} |
|
_run(idx) { |
|
this._snippets[idx].fn.call(null) |
|
} |
|
_addDefSnippets() { |
|
each(defSnippets, (snippet) => { |
|
this.add(snippet.name, snippet.fn, snippet.desc) |
|
}) |
|
} |
|
_render() { |
|
const html = map(this._snippets, (snippet, idx) => { |
|
return `<div class="${c('section run')}" data-idx="${idx}"> |
|
<h2 class="${c('name')}">${escape(snippet.name)} |
|
<div class="${c('btn')}"> |
|
<span class="${c('icon-play')}"></span> |
|
</div> |
|
</h2> |
|
<div class="${c('description')}"> |
|
${escape(snippet.desc)} |
|
</div> |
|
</div>` |
|
}).join('') |
|
|
|
this._renderHtml(html) |
|
} |
|
_renderHtml(html) { |
|
if (html === this._lastHtml) return |
|
this._lastHtml = html |
|
this._$el.html(html) |
|
} |
|
} |
|
|