neft
Version:
Universal Platform
172 lines (141 loc) • 4.51 kB
text/coffeescript
'use strict'
signal = require 'src/signal'
isFirefox = exports.isFirefox = navigator.userAgent.indexOf('Firefox') isnt -1
# get transform CSS property name
transformProp = exports.transformProp = do ->
prefix = do ->
tmp = document.createElement 'div'
return 't' if tmp.style.transform?
return 'webkitT' if tmp.style.webkitTransform?
return 'mozT' if tmp.style.mozTransform?
return 'msT' if tmp.style.msTransform?
"#{prefix}ransform"
transformCSSProp = exports.transformCSSProp = do ->
if transformProp.indexOf('T') isnt -1
'-' + transformProp.replace('T', '-t')
else
transformProp
exports.transform3dSupported = do ->
tmp = document.createElement 'div'
tmp.style[transformProp] = 'translate3d(1px,1px,0)'
tmp.style[transformProp].indexOf('translate3d') isnt -1
exports.onWindowLoad = (callback) ->
if document.readyState is 'complete'
callback()
else
window.addEventListener 'load', callback
return
exports.rad2deg = (rad) ->
rad * 180/Math.PI
exports.getFontWeight = (val) ->
Math.round(val * 8) * 100 + 100
exports.prependElement = (parent, child) ->
if first = parent.firstChild
parent.insertBefore child, first
else
parent.appendChild child
exports.insertAfter = (child, afterElem) ->
if afterElem.nextElement
afterElem.parentElement.insertBefore child, afterElem.nextElement
else
afterElem.parentElement.appendChild child
exports.encodeImageSrc = do ->
DATA_URI_RE = ///^data:([a-z+/]+)///
(val) ->
if DATA_URI_RE.test(val)
val.replace ///\#///g, encodeURIComponent('#')
else
val
exports.pointerWheelEventName = do ->
if 'onwheel' of document.createElement("div")
'wheel'
else if document.onmousewheel isnt undefined
'mousewheel'
else
'MozMousePixelScroll'
exports.keysEvents = do ->
SPECIAL_KEY_CODES =
32: 'Space'
13: 'Enter'
9: 'Tab'
27: 'Escape'
8: 'Backspace'
16: 'Shift'
17: 'Ctrl'
18: 'Alt'
20: 'CapsLock'
144: 'NumLock'
37: 'Left'
38: 'Up'
39: 'Right'
40: 'Down'
45: 'Insert'
46: 'Delete'
36: 'Home'
35: 'End'
33: 'PageUp'
34: 'PageDown'
112: 'F1'
113: 'F2'
114: 'F3'
115: 'F4'
116: 'F5'
117: 'F6'
118: 'F7'
119: 'F8'
120: 'F9'
121: 'F10'
122: 'F11'
123: 'F12'
pressedKeys = Object.create null
# pressed
window.addEventListener 'keydown', (e) ->
code = e.which or e.keyCode
key = SPECIAL_KEY_CODES[code] or String.fromCharCode(code)
if pressedKeys[key] and pressedKeys[key] isnt e
return false
pressedKeys[key] = e
if device = keysEvents.device
{keyboard} = device
keyboard.key = key
device.onKeyPress.emit keyboard
# hold
window.addEventListener 'keydown', (e) ->
code = e.which or e.keyCode
key = SPECIAL_KEY_CODES[code] or String.fromCharCode(code)
if device = keysEvents.device
{keyboard} = device
keyboard.key = key
device.onKeyHold.emit keyboard
# released
window.addEventListener 'keyup', (e) ->
code = e.which or e.keyCode
key = SPECIAL_KEY_CODES[code] or String.fromCharCode(code)
pressedKeys[key] = null
if device = keysEvents.device
{keyboard} = device
keyboard.key = key
device.onKeyRelease.emit keyboard
# input
window.addEventListener 'keypress', (e) ->
code = e.charCode or e.which or e.keyCode
text = String.fromCharCode(code)
if device = keysEvents.device
{keyboard} = device
keyboard.text = text
device.onKeyInput.emit keyboard
keysEvents =
device: null
signal.create exports, 'onFontLoaded'
exports.loadingFonts = Object.create null
exports.loadedFonts = Object.create null
exports.DEFAULT_FONTS =
__proto__: null
'sans': 'neft-sans-6-normal'
'sans-serif': 'neft-sans-serif-6-normal'
'monospace': 'neft-monospace-6-normal'
exports.NEFT_DEFAULT_FONTS =
__proto__: null
'neft-sans-6-normal': 'sans'
'neft-sans-serif-6-normal': 'sans-serif'
'neft-monospace-6-normal': 'monospace'