From d6bf47ca61b62ce0aa73a36dc1979a3685381145 Mon Sep 17 00:00:00 2001 From: luckyadam Date: Wed, 22 Mar 2017 17:59:40 +0800 Subject: [PATCH] update:events --- . babelrc | 10 +++++++ .editorconfig | 12 ++++++++ .gitignore | 32 +++++++++++++++++++++ package.json | 19 +++++++++++++ src/events.js | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/widget.js | 14 ++++++++++ 6 files changed, 164 insertions(+) create mode 100644 . babelrc create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 package.json create mode 100644 src/events.js create mode 100644 src/widget.js diff --git a/. babelrc b/. babelrc new file mode 100644 index 00000000..3511b299 --- /dev/null +++ b/. babelrc @@ -0,0 +1,10 @@ +{ + "plugins": ["transform-class-properties"], + "presets": [ + ["env", { + "targets": { + "browsers": ["last 2 versions", "safari >= 7"] + } + }] + ] +} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..5760be58 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..82e90324 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules +.DS_Store +dist + +# editor config +.vscode/ \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 00000000..8930905f --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "o2_base", + "version": "0.0.1", + "description": "o2_base", + "main": "index.js", + "scripts": { + "build": "rm -rf dist && babel src -d dist" + }, + "keywords": [ + "base" + ], + "author": "luckyadam", + "license": "MIT", + "devDependencies": { + "babel-cli": "^6.24.0", + "babel-plugin-transform-class-properties": "^6.23.0", + "babel-preset-env": "^1.2.2" + } +} diff --git a/src/events.js b/src/events.js new file mode 100644 index 00000000..593f628f --- /dev/null +++ b/src/events.js @@ -0,0 +1,77 @@ +class Events { + static eventSplitter = /\s+/; + constructor (opts) { + if (typeof opts !== 'undefined' && opts.callbacks) { + this.callbacks = opts.callbacks; + } else { + this.callbacks = {}; + } + } + + on (events, callback, context) { + let calls, event, node, tail, list; + if (!callback) { + return this; + } + events = events.split(Events.eventSplitter); + calls = this.callbacks; + while (event = events.shift()) { + list = calls[event]; + node = list ? list.tail : {}; + node.next = tail = {}; + node.context = context; + node.callback = callback; + calls[event] = { + tail: tail, + next: list ? list.next : node + }; + } + return this; + } + + off (events, callback, context) { + let event, calls, node, tail, cb, ctx; + if (!(calls = this.callbacks)) { + return this; + } + if (!(events || callback || context)) { + delete this.callbacks; + return this; + } + events = events ? events.split(Events.eventSplitter) : Object.keys(calls); + while (event = events.shift()) { + node = calls[event]; + delete calls[event]; + if (!node || !(callback || context)) { + continue; + } + tail = node.tail; + while ((node = node.next) !== tail) { + cb = node.callback; + ctx = node.context; + if ((callback && cb !== callback) || (context && ctx !== context)) { + this.on(event, cb, ctx); + } + } + } + return this; + } + + trigger (events) { + let event, node, calls, tail, args, all, rest; + if (!(calls = this.callbacks)) { + return this; + } + events = events.split(Events.eventSplitter); + rest = [].slice.call(arguments, 1); + while (event = events.shift()) { + if (node = calls[event]) { + tail = node.tail; + while ((node = node.next) !== tail) { + node.callback.apply(node.context || this, rest); + } + } + } + return this; + } +} \ No newline at end of file diff --git a/src/widget.js b/src/widget.js new file mode 100644 index 00000000..46228ffc --- /dev/null +++ b/src/widget.js @@ -0,0 +1,14 @@ +class Widget { + constructor ({ $el }) { + this.$el = $el; + this.template = ''; + } + + fetch () { + + } + + update () { + + } +} \ No newline at end of file