1 2/* 3 ================================================ 4 PVII Style Class Switcher scripts 5 Copyright (c) 2018 Project Seven Development 6 www.projectseven.com 7 Version: 1.1.3 -build 11 8 ================================================ 9 10 */ 11var p7SCS = { 12 ctl: [], 13 once: false 14}; 15function P7_SCSaddLoad(){ 16 if (window.addEventListener) { 17 document.addEventListener("DOMContentLoaded", P7_SCSinit, false); 18 window.addEventListener("load", P7_SCSinit, false); 19 } else if (window.attachEvent) { 20 window.attachEvent("onload", P7_SCSinit); 21 } 22} 23 24P7_SCSaddLoad(); 25function P7_SCSinit(){ 26 var i, j, dT, tB, nL, el; 27 if (p7SCS.once) { 28 return; 29 } 30 p7SCS.once = true; 31 if (document.querySelectorAll) { 32 dT = document.querySelectorAll('*[data-scs]'); 33 } else { 34 return; 35 } 36 for (j = 0; j < dT.length; j++) { 37 p7SCS.ctl.push(dT[j]); 38 tB = dT[j]; 39 tB.scsOpt = tB.getAttribute('data-scs').split(','); 40 tB.scsState = 'off'; 41 if (tB.scsOpt[3] && tB.scsOpt[3] !== '') { 42 tB.scsEl = document.getElementById(tB.scsOpt[3]); 43 P7_SCSremClass(document.getElementById(tB.scsOpt[3]), 'scs-noscript'); 44 } else { 45 tB.scsEl = tB; 46 } 47 P7_SCSremClass(tB, 'scs-noscript'); 48 P7_SCSbindPointer(tB); 49 P7_SCSaddEvent(tB, 'mousedown', function(evt){ 50 if (!this.scsEl) { 51 return; 52 } 53 if (this.scsOpt[1] == 1 && this.scsState == 'on') { 54 P7_SCSswitch(this, 'off'); 55 } else { 56 P7_SCSswitch(this, 'on'); 57 } 58 return false; 59 }); 60 if (tB.tagName && tB.tagName == 'A') { 61 P7_SCSaddEvent(tB, 'click', function(evt){ 62 var m = false, wH = window.location.href; 63 if (this.href != wH && this.href != wH + '#') { 64 if (this.href.toLowerCase().indexOf('javascript:') == -1) { 65 m = true; 66 } 67 } 68 if (!m) { 69 evt.preventDefault(); 70 } 71 return m; 72 }); 73 } 74 if (tB.scsOpt[2] == 1) { 75 P7_SCSaddEvent(tB, 'mouseover', function(evt){ 76 if (!this.scsEl) { 77 return; 78 } 79 if (this.scsPointer) { 80 return; 81 } 82 P7_SCSswitch(this, 'on'); 83 }); 84 if (tB.scsOpt[1] == 1) { 85 P7_SCSaddEvent(tB, 'mouseout', function(evt){ 86 var tg, pp, m = true; 87 if (!this.scsEl) { 88 return; 89 } 90 if (this.scsPointer) { 91 return; 92 } 93 evt = (evt) ? evt : event; 94 tg = (evt.toElement) ? evt.toElement : evt.relatedTarget; 95 if (tg) { 96 pp = tg; 97 while (pp) { 98 if (pp == this) { 99 m = false; 100 break; 101 } 102 pp = pp.parentNode; 103 } 104 if (m) { 105 P7_SCSswitch(this, 'off'); 106 } 107 } 108 }); 109 } 110 } 111 } 112} 113 114function P7_SCSswitch(el, ac){ 115 if (!el.scsEl) { 116 return; 117 } 118 if (ac == 'off') { 119 if (el.scsOpt[5] == 1) { 120 P7_SCSremClass(el, 'scs-active'); 121 } 122 P7_SCSremClass(el.scsEl, el.scsOpt[0]); 123 el.scsState = 'off'; 124 } else { 125 if (el.scsOpt[5] == 1) { 126 P7_SCSsetClass(el, 'scs-active'); 127 } 128 if (el.scsOpt[6] && el.scsOpt[6] !== '') { 129 P7_SCStoggle(el, el.scsOpt[6]); 130 } 131 if (el.scsOpt[4] == 1) { 132 el.scsEl.className = el.scsOpt[0]; 133 } else { 134 P7_SCSsetClass(el.scsEl, el.scsOpt[0]); 135 } 136 el.scsState = 'on'; 137 } 138} 139 140function P7_SCStoggle(el, cl){ 141 var i, j, cT, dT; 142 cT = document.querySelectorAll('.' + cl); 143 if (cT && cl && cl !== '') { 144 for (i = 0; i < cT.length; i++) { 145 dT = cT[i].querySelectorAll('*[data-scs]'); 146 if (dT) { 147 for (j = 0; j < dT.length; j++) { 148 if (dT[j].scsState == 'on' && dT[j] != el) { 149 P7_SCSswitch(dT[j], 'off'); 150 } 151 } 152 } 153 } 154 } 155} 156 157function P7_SCSsetClass(ob, cl){ 158 if (ob) { 159 var cc, nc, r = /\s+/g; 160 cc = ob.className; 161 nc = cl; 162 if (cc && cc.length > 0) { 163 if (cc.indexOf(cl) == -1) { 164 nc = cc + ' ' + cl; 165 } else { 166 nc = cc; 167 } 168 } 169 nc = nc.replace(r, ' '); 170 ob.className = nc; 171 } 172} 173 174function P7_SCSremClass(ob, cl){ 175 if (ob) { 176 var cc, nc; 177 cc = ob.className; 178 cl = cl.replace('-', '\-'); 179 var re = new RegExp('\\b' + cl + '\\b'); 180 if (re.test(cc)) { 181 nc = cc.replace(re, ''); 182 nc = nc.replace(/\s+/g, ' '); 183 nc = nc.replace(/\s$/, ''); 184 nc = nc.replace(/^\s/, ''); 185 if (nc === '' || nc === ' ') { 186 ob.removeAttribute('class'); 187 } else { 188 ob.className = nc; 189 } 190 } 191 } 192} 193 194function P7_SCSaddEvent(obj, evt, fn){ 195 if (obj.addEventListener) { 196 obj.addEventListener(evt, fn, false); 197 } else if (obj.attachEvent) { 198 obj.attachEvent('on' + evt, fn); 199 } 200} 201 202function P7_SCSbindPointer(el){ 203 if (typeof el.ontouchstart !== 'undefined') { 204 el.addEventListener('touchstart', P7_SCSsetPointer, false); 205 } else if (navigator.maxTouchPoints) { 206 el.addEventListener('pointerdown', P7_SCSsetPointer, false); 207 el.addEventListener('mouseover', P7_SCSsetPointer, false); 208 el.addEventListener('pointerout', P7_SCSsetPointer, false); 209 el.addEventListener('mouseout', P7_SCSsetPointer, false); 210 } else if (navigator.msMaxTouchPoints) { 211 el.addEventListener('MSPointerDown', P7_SCSsetPointer, false); 212 el.addEventListener('mouseover', P7_SCSsetPointer, false); 213 el.addEventListener('MSPointerOut', P7_SCSsetPointer, false); 214 el.addEventListener('mouseout', P7_SCSsetPointer, false); 215 } 216} 217 218function P7_SCSsetPointer(evt){ 219 if (evt.pointerType) { 220 if (evt.MSPOINTER_TYPE_TOUCH || evt.pointerType == 'touch') { 221 this.scsPointer = true; 222 } else if (evt.MSPOINTER_TYPE_PEN || evt.pointerType == 'pen') { 223 this.scsPointer = true; 224 } else { 225 this.scsPointer = false;
226 } 227 } else if (this.ontouchstart !== undefined) { 228 this.scsPointer = true; 229 } 230}
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.