@lv-saharan/omii
Version:
OMII,OMI + I ,quick web framework!
125 lines (112 loc) • 3.87 kB
JavaScript
/**
* @license
* Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
* This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
* The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
* Code distributed by Google as part of the polymer project is also
* subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
/**
* This shim allows elements written in, or compiled to, ES5 to work on native
* implementations of Custom Elements v1. It sets new.target to the value of
* this.constructor so that the native HTMLElement constructor can access the
* current under-construction element's definition.
*/
;(function () {
if (
// No Reflect, no classes, no need for shim because native custom elements
// require ES2015 classes or Reflect.
window.Reflect === undefined ||
window.customElements === undefined ||
// The webcomponentsjs custom elements polyfill doesn't require
// ES2015-compatible construction (`super()` or `Reflect.construct`).
window.customElements.hasOwnProperty('polyfillWrapFlushCallback')
) {
return
}
const BuiltInHTMLElement = HTMLElement
window.HTMLElement = function HTMLElement() {
return Reflect.construct(BuiltInHTMLElement, [], this.constructor)
}
HTMLElement.prototype = BuiltInHTMLElement.prototype
HTMLElement.prototype.constructor = HTMLElement
Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement)
})()
export function cssToDom(css) {
const node = document.createElement('style')
node.textContent = css
return node
}
export function camelCase(str) {
return str.replace(/-(\w)/g, ($, $1) => {
return $1.toUpperCase()
})
}
export function Fragment(props) {
return props.children
}
export function extend(obj, props) {
for (let i in props) obj[i] = props[i]
return obj
}
/** Invoke or update a ref, depending on whether it is a function or object ref.
* @param {object|function} [ref=null]
* @param {any} [value]
*/
export function applyRef(ref, value) {
if (ref != null) {
if (typeof ref == 'function') ref(value)
else ref.current = value
}
}
/**
* Call a function asynchronously, as soon as possible. Makes
* use of HTML Promise to schedule the callback if available,
* otherwise falling back to `setTimeout` (mainly for IE<11).
* @type {(callback: function) => void}
*/
export const defer =
typeof Promise == 'function'
? Promise.resolve().then.bind(Promise.resolve())
: setTimeout
export function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]'
}
export function pathToArr(path) {
if (typeof path !== 'string' || !path) return []
// return path.split(/\.|\[|\]/).filter(name => !!name)
return path.replace(/]/g, '').replace(/\[/g, '.').split('.')
}
const hyphenateRE = /\B([A-Z])/g
export function hyphenate(str) {
return str.replace(hyphenateRE, '-$1').toLowerCase()
}
export function capitalize(name) {
return name
.replace(/\-(\w)/g, function (all, letter) {
return letter.toUpperCase()
})
.replace(/^\S/, (s) => s.toUpperCase())
}
export function getValByPath(path, current) {
const arr = pathToArr(path)
arr.forEach((prop) => {
current = current[prop]
})
return current
}
export function removeItem(item, arr) {
if (!arr) return
for (let i = 0, len = arr.length; i < len; i++) {
if (arr[i] === item) {
arr.splice(i, 1)
break
}
}
}
export function createStyleSheet(style) {
const styleSheet = new CSSStyleSheet()
styleSheet.replaceSync(style)
return styleSheet
}