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 new file mode 100644 index 0000000..31b3113 --- /dev/null +++ b/bower.json @@ -0,0 +1,29 @@ +{ + "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": [ + "JavaScript", + "utility", + "library" + ], + "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..5a45b53 100644 --- a/src/tiny.js +++ b/src/tiny.js @@ -1,109 +1,134 @@ -/*! Tiny.js v0.3.0 **/ +/*! + * Tiny.js v0.4.0 + * https://github.com/UserScript/tiny.js + */ -//namespace -var $ = function (s, eWrapper) { - return (eWrapper || document).querySelectorAll(s); -}; +void function (root) { + '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; -}; + //type + $.isArray = function (arr) { + return Array.isArray(arr) + } -//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); -}; + //data collection + //TODO + //$.extend() + $.each = function (arr, fn, context) { + //todo: object + 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 + } -//creat -$.crElem = function (s) { - return document.createElement(s); -}; -$.crText = function (s) { - return document.createTextNode(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 + } -//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); -}; + //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) + } -//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(); - } -}; + //create + $.createElem = function (s) { + return document.createElement(s) + } + $.createText = function (s) { + return document.createTextNode(s) + } -//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 = ''; + //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) + } + + //class name + $.hasClass = function (e, s) { + return $.str.include(' ' + e.className + ' ', ' ' + s + ' ') + } + $.addClass = function (e, s) { + if (!$.hasClass(e, s)) { + e.className += (' ' + s) + } + } + $.removeClass = function (e, s) { + if ($.hasClass(e, s)) { + e.className = (' ' + e.className + ' ').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 + root.$ = $ +}(this)