Skip to content

Commit 90a2a9c

Browse files
authored
Merge pull request #448 from BeAPI/feat/js-optimization
Feat/js optimization
2 parents 8334c7e + 9f4e77e commit 90a2a9c

File tree

5 files changed

+16
-61
lines changed

5 files changed

+16
-61
lines changed

src/js/classes/Header.js

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import AbstractDomElement from './AbstractDomElement'
2-
import each from '../utils/each'
32
import { Tween } from 'oneloop.js'
43
import isRTL from '../utils/isRTL'
54

@@ -14,10 +13,10 @@ class Header extends AbstractDomElement {
1413

1514
const that = this
1615
const el = this._element
17-
const toggle = el.getElementsByClassName('header__menu-toggle')[0]
18-
const menuList = el.getElementsByClassName('header__menu-list')[0]
19-
const liWithChidren = el.getElementsByClassName('menu-item-has-children')
20-
const menu = el.getElementsByClassName('header__menu')[0]
16+
const toggle = el.querySelector('.header__menu-toggle')
17+
const menuList = el.querySelector('.header__menu-list')
18+
const liWithChidren = el.querySelectorAll('.menu-item-has-children')
19+
const menu = el.querySelector('.header__menu')
2120

2221
this._menu = menu
2322
this._toggle = toggle
@@ -30,11 +29,7 @@ class Header extends AbstractDomElement {
3029
easing: 'easeInOutExpo',
3130
onUpdate: function (timestamp, tick, percent) {
3231
const bp = 768
33-
let direction = window.innerWidth >= bp ? -1 : 1
34-
35-
if (isRTL()) {
36-
direction = window.innerWidth >= bp ? 1 : -1
37-
}
32+
let direction = (window.innerWidth >= bp ? -1 : 1) * (isRTL() ? -1 : 1)
3833

3934
menu.style.transform = 'translateX(' + 100 * (percent - 1) * direction + '%)'
4035
},
@@ -48,18 +43,18 @@ class Header extends AbstractDomElement {
4843

4944
// avoid error for empty theme
5045
if (menuList) {
51-
each(menuList.children, function (li) {
46+
for (const li of menuList.children) {
5247
li.addEventListener('mouseenter', onMouseEnterFirstLevelLi.bind(that))
53-
})
48+
}
5449

55-
each(liWithChidren, function (li) {
50+
for (const li of liWithChidren) {
5651
const subMenuToggle = li.children[1]
5752
li.addEventListener('mouseenter', onMouseEnterLi.bind(that))
5853
li.addEventListener('mouseleave', onMouseLeaveLi.bind(that))
5954

6055
subMenuToggle.addEventListener('keypress', onKeyPressSubMenuToggle.bind(that))
6156
subMenuToggle.addEventListener('touchstart', onTouchStartSubMenuToggle.bind(that))
62-
})
57+
}
6358

6459
toggle.addEventListener('click', onClickToggle.bind(this))
6560
document.addEventListener('keyup', onKeyup.bind(this))

src/js/utils/each.js

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/js/utils/extend.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ export default function extend() {
66
const deep = firstArgIsBool ? args[0] : false
77
const start = firstArgIsBool ? 1 : 0
88
const rt = isPlainObject(args[start]) ? args[start] : {}
9-
var i
10-
var prop
119

12-
for (i = start + 1; i < args.length; i++) {
13-
for (prop in args[i]) {
10+
for (let i = start + 1; i < args.length; i++) {
11+
for (let prop in args[i]) {
1412
if (deep && isPlainObject(args[i][prop])) {
1513
rt[prop] = extend(true, {}, rt[prop], args[i][prop])
1614
} else if (typeof args[i][prop] !== 'undefined') {

src/js/utils/isPlainObject.js

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,9 @@
11
/*!
2-
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
2+
* isPlainObject <https://stackoverflow.com/questions/18531624/isplainobject-thing>
33
*
4-
* Copyright (c) 2014-2017, Jon Schlinkert.
5-
* Released under the MIT License.
4+
* Copyright https://stackoverflow.com/users/6023279/trunow.
65
*/
76

8-
function isObject(o) {
9-
return Object.prototype.toString.call(o) === '[object Object]'
10-
}
11-
127
export default function isPlainObject(o) {
13-
let ctor, prot
14-
15-
if (isObject(o) === false) {
16-
return false
17-
}
18-
19-
// If has modified constructor
20-
ctor = o.constructor
21-
if (ctor === undefined) {
22-
return true
23-
}
24-
25-
// If has modified prototype
26-
prot = ctor.prototype
27-
if (isObject(prot) === false) {
28-
return false
29-
}
30-
31-
// If constructor does not have an Object-specific method
32-
// eslint-disable-next-line no-prototype-builtins
33-
if (prot.hasOwnProperty('isPrototypeOf') === false) {
34-
return false
35-
}
36-
37-
// Most likely a plain Object
38-
return true
8+
return o?.constructor === Object || Object.getPrototypeOf(o ?? 0) === null
399
}

src/js/utils/isRTL.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default function isRTL() {
1+
export default function isRTL(container = document.documentElement) {
22
const rtlLanguages = [
33
'ar', // Arabic
44
'fa', // Persian (Farsi)
@@ -13,5 +13,5 @@ export default function isRTL() {
1313
'yi', // Yiddish
1414
]
1515

16-
return document.documentElement.dir === 'rtl' || rtlLanguages.includes(document.documentElement.lang)
16+
return container.dir === 'rtl' || rtlLanguages.includes(container.lang)
1717
}

0 commit comments

Comments
 (0)