Don't extend $.

This commit is contained in:
Nicolas Stepien 2013-04-24 23:44:06 +02:00
parent d1abf7541f
commit c00fad9bd3

View File

@ -6,19 +6,13 @@ $ = (selector, root=d.body) ->
$$ = (selector, root=d.body) ->
[root.querySelectorAll(selector)...]
$.extend = (object, properties) ->
for key, val of properties
object[key] = val
return
$.extend $,
SECOND: 1000
MINUTE: 1000 * 60
HOUR : 1000 * 60 * 60
DAY : 1000 * 60 * 60 * 24
id: (id) ->
$.SECOND = 1000
$.MINUTE = 1000 * 60
$.HOUR = 1000 * 60 * 60
$.DAY = 1000 * 60 * 60 * 24
$.id = (id) ->
d.getElementById id
ready: (fc) ->
$.ready = (fc) ->
if d.readyState in ['interactive', 'complete']
$.queueTask fc
return
@ -26,7 +20,7 @@ $.extend $,
$.off d, 'DOMContentLoaded', cb
fc()
$.on d, 'DOMContentLoaded', cb
formData: (form) ->
$.formData = (form) ->
if form instanceof HTMLFormElement
return new FormData form
fd = new FormData()
@ -39,7 +33,11 @@ $.extend $,
else
fd.append key, val
fd
ajax: (url, callbacks, opts={}) ->
$.extend = (object, properties) ->
for key, val of properties
object[key] = val
return
$.ajax = (url, callbacks, opts={}) ->
{type, cred, headers, upCallbacks, form, sync} = opts
r = new XMLHttpRequest()
type or= form and 'post' or 'get'
@ -51,7 +49,7 @@ $.extend $,
r.withCredentials = cred
r.send form
r
cache: do ->
$.cache = do ->
reqs = {}
(url, cb) ->
if req = reqs[url]
@ -69,78 +67,78 @@ $.extend $,
onerror: rm
req.callbacks = [cb]
reqs[url] = req
cb:
$.cb =
checked: ->
$.set @name, @checked
Conf[@name] = @checked
value: ->
$.set @name, @value.trim()
Conf[@name] = @value
asap: (test, cb) ->
$.asap = (test, cb) ->
if test()
cb()
else
setTimeout $.asap, 25, test, cb
addStyle: (css) ->
$.addStyle = (css) ->
style = $.el 'style',
textContent: css
$.asap (-> d.head), ->
$.add d.head, style
style
x: (path, root=d.body) ->
$.x = (path, root=d.body) ->
# XPathResult.ANY_UNORDERED_NODE_TYPE === 8
d.evaluate(path, root, null, 8, null).singleNodeValue
addClass: (el, className) ->
$.addClass = (el, className) ->
el.classList.add className
rmClass: (el, className) ->
$.rmClass = (el, className) ->
el.classList.remove className
hasClass: (el, className) ->
$.hasClass = (el, className) ->
el.classList.contains className
rm: do ->
$.rm = do ->
if 'remove' of Element.prototype
(el) -> el.remove()
else
(el) -> el.parentNode?.removeChild el
rmAll: (root) ->
$.rmAll = (root) ->
# jsperf.com/emptify-element
while node = root.firstChild
# HTMLSelectElement.remove !== Element.remove
root.removeChild node
return
tn: (s) ->
$.tn = (s) ->
d.createTextNode s
nodes: (nodes) ->
$.nodes = (nodes) ->
unless nodes instanceof Array
return nodes
frag = d.createDocumentFragment()
for node in nodes
frag.appendChild node
frag
add: (parent, el) ->
$.add = (parent, el) ->
parent.appendChild $.nodes el
prepend: (parent, el) ->
$.prepend = (parent, el) ->
parent.insertBefore $.nodes(el), parent.firstChild
after: (root, el) ->
$.after = (root, el) ->
root.parentNode.insertBefore $.nodes(el), root.nextSibling
before: (root, el) ->
$.before = (root, el) ->
root.parentNode.insertBefore $.nodes(el), root
replace: (root, el) ->
$.replace = (root, el) ->
root.parentNode.replaceChild $.nodes(el), root
el: (tag, properties) ->
$.el = (tag, properties) ->
el = d.createElement tag
$.extend el, properties if properties
el
on: (el, events, handler) ->
$.on = (el, events, handler) ->
for event in events.split ' '
el.addEventListener event, handler, false
return
off: (el, events, handler) ->
$.off = (el, events, handler) ->
for event in events.split ' '
el.removeEventListener event, handler, false
return
event: (event, detail, root=d) ->
$.event = (event, detail, root=d) ->
root.dispatchEvent new CustomEvent event, {bubbles: true, detail}
open: do ->
$.open = do ->
if GM_openInTab?
(URL) ->
# XXX fix GM opening file://// for protocol-less URLs.
@ -148,7 +146,7 @@ $.extend $,
GM_openInTab a.href
else
(URL) -> window.open URL, '_blank'
debounce: (wait, fn) ->
$.debounce = (wait, fn) ->
timeout = null
that = null
args = null
@ -166,7 +164,7 @@ $.extend $,
# after wait, let next invocation execute immediately
timeout = setTimeout exec, wait
queueTask: do ->
$.queueTask = do ->
# inspired by https://www.w3.org/Bugs/Public/show_bug.cgi?id=15007
taskQueue = []
execTask = ->
@ -184,12 +182,12 @@ $.extend $,
->
taskQueue.push arguments
setTimeout execTask, 0
globalEval: (code) ->
$.globalEval = (code) ->
script = $.el 'script',
textContent: code
$.add (d.head or doc), script
$.rm script
bytesToString: (size) ->
$.bytesToString = (size) ->
unit = 0 # Bytes
while size >= 1024
size /= 1024
@ -204,8 +202,8 @@ $.extend $,
# Round to an integer otherwise.
Math.round size
"#{size} #{['B', 'KB', 'MB', 'GB'][unit]}"
syncing: {}
sync: do ->
$.syncing = {}
$.sync = do ->
<% if (type === 'crx') { %>
chrome.storage.onChanged.addListener (changes) ->
for key of changes
@ -214,28 +212,27 @@ $.extend $,
return
(key, cb) -> $.syncing[key] = cb
<% } else { %>
window.addEventListener 'storage', (e) ->
$.on window, 'storage', (e) ->
if cb = $.syncing[e.key]
cb JSON.parse e.newValue
, false
(key, cb) -> $.syncing[g.NAMESPACE + key] = cb
<% } %>
item: (key, val) ->
$.item = (key, val) ->
item = {}
item[key] = val
item
<% if (type === 'crx') { %>
# https://developer.chrome.com/extensions/storage.html
delete: (keys) ->
$.delete = (keys) ->
chrome.storage.sync.remove keys
get: (key, val, cb) ->
$.get = (key, val, cb) ->
if typeof cb is 'function'
items = $.item key, val
else
items = key
cb = val
chrome.storage.sync.get items, cb
set: (key, val) ->
$.set = (key, val) ->
items = if typeof key is 'string'
$.item key, val
else
@ -287,7 +284,7 @@ do ->
return
<% } else { %>
# http://wiki.greasespot.net/Main_Page
delete: (keys) ->
$.delete = (keys) ->
unless keys instanceof Array
keys = [keys]
for key in keys
@ -295,7 +292,7 @@ do ->
localStorage.removeItem key
GM_deleteValue key
return
get: (key, val, cb) ->
$.get = (key, val, cb) ->
if typeof cb is 'function'
items = $.item key, val
else
@ -306,7 +303,7 @@ do ->
if val = GM_getValue g.NAMESPACE + key
items[key] = JSON.parse val
cb items
set: do ->
$.set = do ->
set = (key, val) ->
key = g.NAMESPACE + key
val = JSON.stringify val