1;(() => { 2 class OwO { 3 constructor(option) { 4 const defaultOption = { 5 container: document.getElementsByClassName('OwO')[0], 6 target: document.getElementsByTagName('textarea')[0], 7 position: 'down', 8 width: '100%', 9 maxHeight: '250px', 10 api: 'https://api.anotherhome.net/OwO/OwO.json' 11 } 12 for (let defaultKey in defaultOption) { 13 if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) { 14 option[defaultKey] = defaultOption[defaultKey] 15 } 16 } 17 this.container = option.container 18 this.target = option.target 19 if (option.position === 'up') { 20 this.container.classList.add('OwO-up') 21 } 22 const xhr = new XMLHttpRequest() 23 xhr.onreadystatechange = () => { 24 if (xhr.readyState === 4) { 25 if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { 26 this.odata = JSON.parse(xhr.responseText) 27 this.init(option) 28 } else { 29 console.log('OwO data request was unsuccessful: ' + xhr.status) 30 } 31 } 32 } 33 xhr.open('get', option.api, true) 34 xhr.send(null) 35 } 36 37 init(option) { 38 this.area = option.target 39 this.packages = Object.keys(this.odata) 40 41 // fill in HTML 42 let html = ` 43 <div class="OwO-logo"><span>OÏO</span></div> 44 <div class="OwO-body" style="width: ${option.width}"><div class="OwO-jio"></div>` 45 46 for (let i = 0; i < this.packages.length; i++) { 47 html += ` 48 <ul class="OwO-items OwO-items-${this.odata[this.packages[i]].type}" style="max-height: ${parseInt(option.maxHeight) - 53 + 'px'};">` 49 var type = this.odata[this.packages[i]].type 50 let opackage = this.odata[this.packages[i]].container 51 for (let i = 0; i < opackage.length; i++) { 52 if (type == 'image') { 53 html += ` 54 <li class="OwO-item" data-id="${opackage[i].data}" title="${opackage[i].text}"><img class="biaoqing ${opackage[i].css}" src="${Config.cdnUrl+opackage[i].icon}"></li>` 55 } else { 56 html += ` 57 <li class="OwO-item" data-id="not-given" title="${opackage[i].text}">${opackage[i].icon}</li>` 58 } 59 } 60 61 html += ` 62 </ul>` 63 } 64 65 html += ` 66 <div class="OwO-bar"> 67 <ul class="OwO-packages">` 68 69 for (let i = 0; i < this.packages.length; i++) { 70 html += ` 71 <li><span>${this.packages[i]}</span></li>` 72 } 73 74 html += ` 75 </ul> 76 </div> 77 </div> 78 ` 79 this.container.innerHTML = html 80 81 // bind event 82 this.logo = document.getElementsByClassName('OwO-logo')[0] 83 this.logo.addEventListener('click', e => { 84 e.stopPropagation() 85 this.toggle() 86 }) 87 88 this.container.getElementsByClassName('OwO-body')[0].addEventListener('click', e => { 89 let target = null 90 if (e.target.classList.contains('OwO-item')) { 91 target = e.target 92 } else if (e.target.parentNode.classList.contains('OwO-item')) { 93 target = e.target.parentNode 94 } 95 if (target) { 96 const cursorPos = this.area.selectionEnd 97 let areaValue = this.area.value 98 //this.area.value = areaValue.slice(0, cursorPos) + target.innerHTML + areaValue.slice(cursorPos); 99 if (target.dataset.id == 'not-given') { 100 this.area.value = areaValue.slice(0, cursorPos) + target.innerHTML + areaValue.slice(cursorPos) 101 } else { 102 this.area.value = areaValue.slice(0, cursorPos) + target.dataset.id + areaValue.slice(cursorPos) 103 } 104 this.area.focus() 105 this.toggle() 106 } 107 }) 108 this.packagesEle = this.container.getElementsByClassName('OwO-packages')[0] 109 for (let i = 0; i < this.packagesEle.children.length; i++) { 110 ;(index => { 111 this.packagesEle.children[i].addEventListener('click', e => { 112 e.stopPropagation() 113 this.tab(index) 114 }) 115 })(i) 116 } 117 this.tab(0) 118 } 119 120 toggle() { 121 if (this.container.classList.contains('OwO-open')) { 122 this.container.classList.remove('OwO-open') 123 } else { 124 this.container.classList.add('OwO-open') 125 } 126 } 127 128 tab(index) { 129 const itemsShow = this.container.getElementsByClassName('OwO-items-show')[0] 130 if (itemsShow) { 131 itemsShow.classList.remove('OwO-items-show') 132 } 133 this.container.getElementsByClassName('OwO-items')[index].classList.add('OwO-items-show') 134 135 const packageActive = this.container.getElementsByClassName('OwO-package-active')[0] 136 if (packageActive) { 137 packageActive.classList.remove('OwO-package-active') 138 } 139 this.packagesEle.getElementsByTagName('li')[index].classList.add('OwO-package-active') 140 } 141 } 142 143 if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { 144 module.exports = OwO 145 } else { 146 window.OwO = OwO 147 } 148})()
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.