export default (() => {
//此js已经被魔改,和原作者的OwO.js有所不同,CVer谨慎使用.. by inleft
class OwO {
constructor(option) {
const defaultOption = {
container: document.getElementsByClassName('OwO')[0],
target: document.getElementsByTagName('textarea')[0],
position: 'down',
width: '100%',
maxHeight: '250px',
api: 'https://api.anotherhome.net/OwO/OwO.json'
}
for (let defaultKey in defaultOption) {
if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) {
option[defaultKey] = defaultOption[defaultKey]
}
}
this.container = option.container
this.target = option.target
if (option.position === 'up') {
this.container.classList.add('OwO-up')
}
if (option.jsonText != null && option.jsonText != undefined && option.jsonText != '') {
this.odata = option.jsonText
this.init(option)
} else {
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
this.odata = JSON.parse(xhr.responseText)
this.init(option)
} else {
console.log('OwO data request was unsuccessful: ' + xhr.status)
}
}
}
xhr.open('get', option.api, true)
xhr.send(null)
}
}
init(option) {
this.area = option.target
this.packages = Object.keys(this.odata)
// fill in HTML
let html = `
`
for (let i = 0; i < this.packages.length; i++) {
html +=
`
`
var type = this.odata[this.packages[i]].type
let opackage = this.odata[this.packages[i]].container
for (let i = 0; i < opackage.length; i++) {
if (type == 'image') {
html +=
`
`
} else {
html += `
- ${opackage[i].icon}
`
}
}
html += `
`
}
html += `
`
for (let i = 0; i < this.packages.length; i++) {
html += `
- ${this.packages[i]}
`
}
html += `
`
this.container.innerHTML = html
// bind event
//this.logo = document.getElementsByClassName('OwO-logo')[0]
//多个logo,获取当前容器下的子节点 by inleft
this.logo = this.container.getElementsByClassName("OwO-logo")[0];
this.logo.addEventListener('click', e => {
e.stopPropagation()
this.toggle()
})
this.container.getElementsByClassName('OwO-body')[0].addEventListener('click', e => {
let target = null
if (e.target.classList.contains('OwO-item')) {
target = e.target
} else if (e.target.parentNode.classList.contains('OwO-item')) {
target = e.target.parentNode
}
if (target) {
const cursorPos = this.area.selectionEnd
let areaValue = this.area.value
//this.area.value = areaValue.slice(0, cursorPos) + target.innerHTML + areaValue.slice(cursorPos);
if (target.dataset.id == 'not-given') {
this.area.value = areaValue.slice(0, cursorPos) + target.innerHTML + areaValue
.slice(
cursorPos)
} else {
this.area.value = areaValue.slice(0, cursorPos) + target.dataset.id + areaValue
.slice(
cursorPos)
}
this.area.focus()
this.toggle()
}
})
this.packagesEle = this.container.getElementsByClassName('OwO-packages')[0]
for (let i = 0; i < this.packagesEle.children.length; i++) {
;
(index => {
this.packagesEle.children[i].addEventListener('click', e => {
e.stopPropagation()
this.tab(index)
})
})(i)
}
this.tab(0)
}
toggle() {
if (this.container.classList.contains('OwO-open')) {
this.container.classList.remove('OwO-open')
} else {
this.container.classList.add('OwO-open')
}
}
tab(index) {
const itemsShow = this.container.getElementsByClassName('OwO-items-show')[0]
if (itemsShow) {
itemsShow.classList.remove('OwO-items-show')
}
this.container.getElementsByClassName('OwO-items')[index].classList.add('OwO-items-show')
const packageActive = this.container.getElementsByClassName('OwO-package-active')[0]
if (packageActive) {
packageActive.classList.remove('OwO-package-active')
}
this.packagesEle.getElementsByTagName('li')[index].classList.add('OwO-package-active')
}
}
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = OwO
} else {
window.OwO = OwO
}
})()