From dbdf3730ab4250a2dfa79261ab7933a64cf1d4b6 Mon Sep 17 00:00:00 2001 From: nikoloza Date: Fri, 22 Oct 2021 17:27:21 +0400 Subject: [PATCH] added packages --- packages/cookie/index.js | 22 ++++++++++++++++++++++ packages/emotion/index.js | 34 ++++++++++++++++++++++++++++++++++ packages/routeLink/index.js | 23 +++++++++++++++++++++++ packages/router/index.js | 18 ++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 packages/cookie/index.js create mode 100644 packages/emotion/index.js create mode 100644 packages/routeLink/index.js create mode 100644 packages/router/index.js diff --git a/packages/cookie/index.js b/packages/cookie/index.js new file mode 100644 index 00000000..3bfc5769 --- /dev/null +++ b/packages/cookie/index.js @@ -0,0 +1,22 @@ +'use strict' + +export const isMobile = (() => /Mobi/.test(navigator.userAgent))() + +export const setCookie = (cname, cvalue, exdays = 365) => { + const d = new Date() + d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)) + const expires = `expires=${d.toUTCString()}` + document.cookie = `${cname}=${cvalue};${expires};path=/` +} + +export const getCookie = (cname) => { + const name = `${cname}=` + const decodedCookie = decodeURIComponent(document.cookie) + const ca = decodedCookie.split(';') + for (let i = 0; i < ca.length; i++) { + let c = ca[i] + while (c.charAt(0) === ' ') c = c.substring(1) + if (c.indexOf(name) === 0) return c.substring(name.length, c.length) + } + return '' +} diff --git a/packages/emotion/index.js b/packages/emotion/index.js new file mode 100644 index 00000000..bbe018ca --- /dev/null +++ b/packages/emotion/index.js @@ -0,0 +1,34 @@ +'use strict' + +import DOM from '../../src' +import { isObjectLike, exec } from '../../src/utils' +import { classList } from '../../src/element/mixins' + +import { css } from 'emotion' + +const style = (params, element, node) => { + if (params) { + if (isObjectLike(element.class)) element.class.style = params + else element.class = { style: params } + } + classf(element.class, element, node) +} + +const classf = (params, element, node) => { + if (isObjectLike(params)) { + const classObjHelper = {} + for (const key in params) { + const prop = exec(params[key], element) + const CSSed = css(prop) + classObjHelper[key] = CSSed + } + classList(classObjHelper, element, node) + } +} + +DOM.define({ + style, + class: classf +}, { + overwrite: true +}) diff --git a/packages/routeLink/index.js b/packages/routeLink/index.js new file mode 100644 index 00000000..1b61c9bf --- /dev/null +++ b/packages/routeLink/index.js @@ -0,0 +1,23 @@ +'use strict' + +import { Link } from '@rackai/symbols' +import { deepMerge } from '../../src/utils' +import route from './router' + +const RouteLink = { + on: { + click: (event, element, state) => { + const root = element.lookup('app') + const { href } = element.props + const firstThree = href[0] + href[1] + href[2] + if (href && firstThree !== 'htt' && firstThree !== 'ske') { + route(root, href, {}) + event.preventDefault() + } + } + } +} + +deepMerge(Link, RouteLink) + +export default RouteLink diff --git a/packages/router/index.js b/packages/router/index.js new file mode 100644 index 00000000..36b6ad90 --- /dev/null +++ b/packages/router/index.js @@ -0,0 +1,18 @@ +'use strict' + +export const splitRoute = (route = window.location.pathname) => route.slice(1).split('/') + +export default (rootElement, path, state = {}, level = 0, pushState = true) => { + const route = path || window.location.pathname + const routes = splitRoute(route) + + const content = rootElement.routes[`/${routes[level]}`] + + if (content) { + if (pushState) window.history.pushState(state, null, route) + rootElement.set({ proto: content }) + .node.scrollIntoView({ behavior: 'smooth' }) + } + + if (level === 0) rootElement.state.update({ activePage: routes[level] }) +}