From e5ef0fd7640ce55cd5f54215925d3e2cca0823c8 Mon Sep 17 00:00:00 2001 From: zhangpeng Date: Mon, 3 Nov 2014 14:01:25 +0800 Subject: [PATCH 1/3] Update. --- bower.json | 28 ++++++ dist/tiny.min.js | 2 - src/tiny.js | 220 ++++++++++++++++++++++++++--------------------- 3 files changed, 150 insertions(+), 100 deletions(-) create mode 100644 bower.json delete mode 100644 dist/tiny.min.js diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..edfc56a --- /dev/null +++ b/bower.json @@ -0,0 +1,28 @@ +{ + "name": "tiny.js", + "version": "0.4.0", + "homepage": "https://github.com/UserScript/tiny.js", + "authors": [ + "cssmagic" + ], + "description": "A tiny JavaScript utility library.", + "main": "src/tiny.js", + "moduleType": [ + "globals" + ], + "keywords": [ + "weibo", + "v5" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "**.sh", + "package.json", + "node_modules", + "bower_components", + "test" + ], + "dependencies": {}, + "devDependencies": {} +} diff --git a/dist/tiny.min.js b/dist/tiny.min.js deleted file mode 100644 index ceba7c6..0000000 --- a/dist/tiny.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! Tiny.js v0.3.0 **/ -var $=function(a,b){return(b||document).querySelectorAll(a)};$.each=function(a,b,c){for(var d=0,e=a.length;e>d;++d)b.call(c||window,a[d],d,a)},$.strstr=function(a,b){return a.indexOf(b)>-1},$.id=function(a){return document.getElementById(a)},$.class=function(a,b){return(b||document).getElementsByClassName(a)},$.tag=function(a,b){return(b||document).getElementsByTagName(a)},$.crElem=function(a){return document.createElement(a)},$.crText=function(a){return document.createTextNode(a)},$.insertBefore=function(a,b){b.parentNode.insertBefore(a,b)},$.before=function(a,b){$.insBefore(b,a)},$.append=function(a,b){a.appendChild(b)},$.appendTo=function(a,b){$.append(b,a)},$.remove=function(a){a.parentNode.removeChild(a)},$.hasClass=function(a,b){return $.strstr(" "+a.className+" "," "+b+" ")},$.addClass=function(a,b){var c=a.className;$.hasClass(c,b)||(a.className+=" "+b)},$.removeClass=function(a,b){var c=a.className;$.hasClass(c,b)&&(a.className=(" "+c+" ").replace(" "+b+" "," ").trim())},$.visible=function(a,b){var c=b?"visible":"hidden";a.style.visibility=c},$.hide=function(a){a.style.display="none"},$.show=function(a){a.style.display=""},$.setStyle=function(a,b,c){v?a.style[b]=c:a.style.cssText=b},$.css=function(a){var b=$.crElem("style"),c=a||$.cssText;c&&(b.innerHTML=c,$.tag("head")[0].appendChild(b))},$.cssText="",$.on=function(a,b,c){a.addEventListener(b,c,!1)},$.off=function(a,b,c){a.removeEventListener(b,c,!1)}; diff --git a/src/tiny.js b/src/tiny.js index 12640f1..f12b47e 100644 --- a/src/tiny.js +++ b/src/tiny.js @@ -1,109 +1,133 @@ -/*! Tiny.js v0.3.0 **/ +/*! + * Tiny.js + * https://github.com/UserScript/tiny.js + */ -//namespace -var $ = function (s, eWrapper) { - return (eWrapper || document).querySelectorAll(s); -}; +void function () { + 'use strict' -//utilties - array-like -$.each = function (a, fn, context) { - for (var i = 0, l = a.length; i < l; ++i) { - fn.call(context || window, a[i], i, a); + //namespace + var $ = function (s, eWrapper) { + return (eWrapper || document).querySelectorAll(s) } -}; -//utilties - str -$.strstr = function (so, s) { - return so.indexOf(s) > -1; -}; + //utilities + //TODO + //$.extend() + $.each = function (a, fn, context) { + //todo: object + for (var i = 0, l = a.length; i < l; ++i) { + fn.call(context || window, a[i], i, a) + } + } -//dom query -$.id = function (s) { - return document.getElementById(s); -}; -$.class = function (s, eWrapper) { - return (eWrapper || document).getElementsByClassName(s); -}; -$.tag = function (s, eWrapper) { - return (eWrapper || document).getElementsByTagName(s); -}; + //str + $.str = {} + $.str.include = function (so, s) { + return so.indexOf(s) > -1 + } + //TODO + //$.str.endsWith() + $.str.startsWith = function (so, s) { + return so.indexOf(s) === 0 + } -//creat -$.crElem = function (s) { - return document.createElement(s); -}; -$.crText = function (s) { - return document.createTextNode(s); -}; + //dom query + $.id = function (s) { + return document.getElementById(s) + } + $.cls = function (s, eWrapper) { + return (eWrapper || document).getElementsByClassName(s) + } + $.tag = function (s, eWrapper) { + return (eWrapper || document).getElementsByTagName(s) + } -//mod dom -$.insertBefore = function (e, eTarget) { - eTarget.parentNode.insertBefore(e, eTarget); -}; -$.before = function (eTarget, e) { - $.insBefore(e, eTarget); -}; -$.append = function (eWrapper, e) { - eWrapper.appendChild(e); -} -$.appendTo = function (e, eWrapper) { - $.append(eWrapper, e); -} -$.remove = function (e) { - e.parentNode.removeChild(e); -}; + //create + $.createElem = function (s) { + return document.createElement(s) + } + $.createText = function (s) { + return document.createTextNode(s) + } -//classname -$.hasClass = function (e, s) { - return $.strstr(' ' + e.className + ' ', ' ' + s + ' '); -}; -$.addClass = function (e, s) { - var so = e.className; - if (!$.hasClass(so, s)) { - e.className += (' ' + s); - } -}; -$.removeClass = function (e,s) { - var so = e.className; - if ($.hasClass(so, s)) { - e.className = (' ' + so + ' ').replace(' ' + s + ' ', ' ').trim(); - } -}; + //mod dom + //TODO + //$.after() + //$.insertAfter() + $.insertBefore = function (e, eTarget) { + eTarget.parentNode.insertBefore(e, eTarget) + } + $.before = function (eTarget, e) { + eTarget.parentNode.insertBefore(e, eTarget) + } + //TODO + //$.prepend() + //$.prependTo() + $.append = function (eWrapper, e) { + eWrapper.appendChild(e) + } + $.appendTo = function (e, eWrapper) { + eWrapper.appendChild(e) + } + $.remove = function (e) { + e.parentNode.removeChild(e) + } -//style -$.visible = function (e, b) { - var val = b ? 'visible' : 'hidden'; - e.style.visibility = val; -}; -$.hide = function (e) { - e.style.display = 'none'; -}; -$.show = function (e) { - e.style.display = ''; -}; -$.setStyle = function (e, prop, val) { - if (v) { - e.style[prop] = val; - } else { - e.style.cssText = prop; - } -}; -$.css = function (s) { - var e = $.crElem('style'); - var cssText = s || $.cssText; - if (cssText) { - e.innerHTML = cssText; - //console.log(css); - $.tag('head')[0].appendChild(e); - } -}; -$.cssText = ''; + //class name + $.hasClass = function (e, s) { + return $.str.include(' ' + e.className + ' ', ' ' + s + ' ') + } + $.addClass = function (e, s) { + var so = e.className + if (!$.hasClass(so, s)) { + e.className += (' ' + s) + } + } + $.removeClass = function (e,s) { + var so = e.className + if ($.hasClass(so, s)) { + e.className = (' ' + so + ' ').replace(' ' + s + ' ', ' ').trim() + } + } + + //style + $.hide = function (e) { + e.style.display = 'none' + } + $.show = function (e) { + e.style.display = '' + } + $.css = function (e, prop, val) { + if (arguments.length === 3) { + e.style[prop] = val + } else { + e.style.cssText = prop + } + } + $.insertCSS = function (s) { + if (!s) return false + var e = $.createElem('style') + e.innerHTML = s + $.tag('head')[0].appendChild(e) + return e + } + + //event + $.on = function (e, sEvent, fn) { + e.addEventListener(sEvent, fn, false) + } + $.off = function (e, sEvent, fn) { + e.removeEventListener(sEvent, fn, false) + } -//event -$.on = function (e, sEvent, fn) { - e.addEventListener(sEvent, fn, false); -}; -$.off = function (e, sEvent, fn) { - e.removeEventListener(sEvent, fn, false); -}; + //exports + if ( + !('jQuery' in window) && + !('Zepto' in window) && + !('$' in window) + ) { + window.$ = $ + } +}() From 731d00643b33156eae7d1ecc6530265538249244 Mon Sep 17 00:00:00 2001 From: zhangpeng Date: Wed, 5 Nov 2014 12:15:11 +0800 Subject: [PATCH 2/3] Update. --- README.md | 10 +++++++++- bower.json | 5 +++-- src/tiny.js | 31 +++++++++++++++++-------------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index c886397..82f9f4c 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,20 @@ A tiny JavaScript utility library. ## 简介 -一个非常小巧的 JavaScript 工具库,适用于用户脚本(userscript)、演示案例等比较紧凑的场景。 +一个非常小巧的 JavaScript 工具库,适用于用户脚本、演示案例等比较紧凑的场景。 因为使用了一些较先进的 JavaScript/DOM API,仅适用于现代浏览器。 **注意**:仍在开发中,API 仍不稳定。 +## 安装 + +```bash +$ bower install tiny.js +``` + +*** + ## License [MIT License](http://www.opensource.org/licenses/mit-license.php) diff --git a/bower.json b/bower.json index edfc56a..31b3113 100644 --- a/bower.json +++ b/bower.json @@ -11,8 +11,9 @@ "globals" ], "keywords": [ - "weibo", - "v5" + "JavaScript", + "utility", + "library" ], "license": "MIT", "ignore": [ diff --git a/src/tiny.js b/src/tiny.js index f12b47e..28b8683 100644 --- a/src/tiny.js +++ b/src/tiny.js @@ -1,9 +1,9 @@ /*! - * Tiny.js + * Tiny.js v0.4.0 * https://github.com/UserScript/tiny.js */ -void function () { +void function (root) { 'use strict' //namespace @@ -11,15 +11,24 @@ void function () { return (eWrapper || document).querySelectorAll(s) } - //utilities + //type + $.isArray = function (arr) { + return Array.isArray(arr) + } + + //data collection //TODO //$.extend() - $.each = function (a, fn, context) { + $.each = function (arr, fn, context) { //todo: object - for (var i = 0, l = a.length; i < l; ++i) { - fn.call(context || window, a[i], i, a) + for (var i = 0, l = arr.length; i < l; ++i) { + fn.call(context || window, arr[i], i, arr) } } + $.inArray = function (arr, item) { + if (!$.isArray(arr)) return false + return arr.indexOf(item) > -1 + } //str $.str = {} @@ -122,12 +131,6 @@ void function () { } //exports - if ( - !('jQuery' in window) && - !('Zepto' in window) && - !('$' in window) - ) { - window.$ = $ - } + root.$ = $ -}() +}(this) From 2dc2aeef7efdbf44266a705179b3acf5f696d6fa Mon Sep 17 00:00:00 2001 From: zhangpeng Date: Wed, 5 Nov 2014 12:24:46 +0800 Subject: [PATCH 3/3] Fix class name APIs. --- src/tiny.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/tiny.js b/src/tiny.js index 28b8683..5a45b53 100644 --- a/src/tiny.js +++ b/src/tiny.js @@ -88,15 +88,13 @@ void function (root) { return $.str.include(' ' + e.className + ' ', ' ' + s + ' ') } $.addClass = function (e, s) { - var so = e.className - if (!$.hasClass(so, s)) { + if (!$.hasClass(e, s)) { e.className += (' ' + s) } } - $.removeClass = function (e,s) { - var so = e.className - if ($.hasClass(so, s)) { - e.className = (' ' + so + ' ').replace(' ' + s + ' ', ' ').trim() + $.removeClass = function (e, s) { + if ($.hasClass(e, s)) { + e.className = (' ' + e.className + ' ').replace(' ' + s + ' ', ' ').trim() } }