1function CreanetLightbox(options, fOptions){ 2 let L = this; 3 4 $.extend(L.swiperOptions, fOptions); 5 $.extend(L.options, options); 6 7 if(typeof $("." + L.boxClass)[0] != "Object") $("body").prepend(`<div class="${L.boxClass}"></div>`); 8 9 L.box = $("." + L.boxClass); 10 11 L.collections = new Object; 12 L.swiper = undefined; 13 L.updateCollections(); 14 L.initEventListener(); 15}; 16 17CreanetLightbox.prototype = { 18 version: "2.0.0", 19 isOpen: 0, 20 boxClass: "cislightbox", 21 titleIsVisible: false, 22 hasTitle: false, 23 triggerSelector: "[data-cislightbox]", 24 options: { 25 dev: false, 26 displayTextAlways: true 27 }, 28 swiperOptions: { 29 lazy:true, 30 keyboard: { 31 enabled:true 32 }, 33 pagination: { 34 el: ".cislightbox__counter", 35 type: "fraction", 36 lockClass: "cislightbox__counter--never-hide" 37 }, 38 }, 39 addCollection: function(collection){ 40 let L = this; 41 42 if(L.options["dev"]) console.log("addCollection"); 43 44 if(L.collections.hasOwnProperty(collection)) return false; 45 46 L.collections[collection] = new Object(); 47 L.collections[collection]["options"] = new Object(); 48 L.collections[collection]["images"] = new Array(); 49 L.collections[collection]["titles"] = new Array(); 50 51 L.collections[collection]["options"]["id"] = parseInt(Math.random() * 1000000); 52 }, 53 initEventListener: function(){ 54 let L = this; 55 56 if(L.options["dev"]) console.log("initEventListener"); 57 58 $(document).on("click", L.triggerSelector, function(e){ 59 e.preventDefault(); 60 if(L.options["dev"]) console.log("click"); 61 62 let collection = $(this).data("cislightbox"); 63 64 if(!L.collections.hasOwnProperty(collection)){ 65 console.log("=> implement updateCollections()"); 66 } else { 67 let imageIndex = L.collections[collection]["images"].indexOf($(this).attr("data-image")); 68 69 return L.open(collection, imageIndex); 70 } 71 return false; 72 }); 73 74 if(!L.options.displayTextAlways){ 75 $(document).on("click",".cislightbox__show-text-toggle", function(e){ 76 e.preventDefault(); 77 L.titleIsVisible = !L.titleIsVisible; 78 79 if(L.titleIsVisible){ 80 L.box.find(".cislightbox__text-wrapper").slideDown(); 81 $(this).addClass("cislightbox__show-text-toggle--on"); 82 } else { 83 L.box.find(".cislightbox__text-wrapper").slideUp(); 84 $(this).removeClass("cislightbox__show-text-toggle--on"); 85 } 86 }); 87 } else { 88 L.titleIsVisible = true; 89 L.box.find(".cislightbox__text-wrapper").slideDown(); 90 $(this).addClass("cislightbox__show-text-toggle--on"); 91 } 92 }, 93 enableBoxListeners: function(){ 94 let L = this; 95 96 if(L.options["dev"]) console.log("enableBoxListeners"); 97 98 $(".cislightbox__close-background, .cislightbox__close-button").on("click", function(e){ 99 e.preventDefault(); 100 L.close(); 101 }); 102 103 $(".body--cislightbox-open").off("keyup").on("keyup", e => { 104 if(e.which == 27) L.close(); 105 }); 106 }, 107 open: function(collection, initialIndex){ 108 let L = this, 109 $gallery; 110 111 if(isNaN(initialIndex)) initialIndex = 0; 112 113 if(L.options["dev"]) console.log("open"); 114 if(L.isOpen == 1) return false; 115 116 L.box.html(L.getBoxTemplate(collection)); 117 118 $gallery = L.box.find(".cislightbox__wrapper"); 119 120 L.collections[collection]["images"].forEach(function(v,i){ 121 $gallery.append(L.getImageTemplate(v,L.collections[collection]["titles"][i] || "")); 122 }); 123 124 if(initialIndex != -1) L.swiperOptions.initialSlide = initialIndex; 125 126 if(L.collections[collection]["images"].length >= 2){ 127 $.extend(L.swiperOptions, { 128 loop:true, 129 navigation: { 130 prevEl: ".cislightbox__navigation--previous", 131 nextEl: ".cislightbox__navigation--next", 132 }, 133 }); 134 } 135 136 L.swiper = new Swiper(`.cislightbox__gallery--${L.collections[collection]["options"]["id"]}`, L.swiperOptions); 137 138 L.box.show(); 139 140 $(".body").addClass("body--cislightbox-open"); 141 142 L.enableBoxListeners(); 143 L.isOpen = 1; 144 }, 145 close: function(){ 146 let L = this; 147 148 if(L.options["dev"]) console.log("close"); 149 $(".body").removeClass("body--cislightbox-open"); 150 151 if(L.swiper !== undefined || !L.swiper.__swiper__) L.swiper.destroy(); 152 153 L.box.empty(); 154 L.box.hide(); 155 156 L.isOpen = 0; 157 }, 158 addImage: function(collection, image, title){ 159 let L = this; 160 if(L.options["dev"]) console.log("addImage"); 161 162 if(L.collections[collection]["images"].indexOf(image) == -1){ 163 L.collections[collection]["images"].push(image); 164 165 if(title) { 166 title.replace(/\n/g, "<br>"); 167 L.hasTitle = true; 168 } 169 170 L.collections[collection]["titles"].push(title || null); 171 } 172 }, 173 updateCollections: function(){ 174 let L = this; 175 176 if(L.options["dev"]) console.log("updateCollections"); 177 178 $(L.triggerSelector).each(function(){ 179 let elementData = $(this).data(), 180 collection = elementData["cislightbox"], 181 image = elementData["image"], 182 title = null; 183 184 if ("title" in elementData) title = String(elementData["title"]); 185 186 if(!L.collections.hasOwnProperty(collection)) L.addCollection(collection); 187 L.addImage(collection, image, title); 188 }) 189 }, 190 removeCollection: function(collection){ 191 let L = this; 192 193 if(typeof collection === "string"){ 194 if(L.collections.hasOwnProperty(collection)){ 195 delete L.collections[collection]; 196 } else { 197 console.log("collection not found"); 198 199 return false; 200 } 201 } else { 202 L.collections = {}; 203 } 204 205 return true; 206 }, 207 getImageTemplate: function(image, title){ 208 let L = this, 209 T = new Array(); 210 211 if(L.options["dev"]) console.log("getImageTemplate"); 212 213 T.push(` 214 <div class="cislightbox__slide swiper-slide"> 215 <div class="cislightbox__close-background"></div> 216 <img class="cislightbox__image" src="${image}" alt="${(title.length ? title : "")}" loading="lazy" /> 217 <div class="swiper-lazy-preloader swiper-lazy-preloader-white"></div> 218 ${title ? ` 219 <div class="cislightbox__text-wrapper${!L.options.displayTextAlways ? " cislightbox__text-wrapper--hidden-initially" : ""}"> 220 <div class="cislightbox__text"> 221 <span class="swiper-no-swiping">${title}</span> 222 </div> 223 </div> 224 ` : ''} 225 </div> 226 `); 227 228 return T.join(""); 229 }, 230 getBoxTemplate: function(collection){ 231 let L = this, 232 T = new Array(), 233 displayShowTextToggle = L.hasTitle && !L.options.displayTextAlways; 234 235 if(L.options["dev"]) console.log("getBoxTemplate"); 236 237 T.push(`
238 <div class="cislightbox__gallery cislightbox__gallery--${L.collections[collection]["options"]["id"]} swiper"> 239 <div class="cislightbox__wrapper swiper-wrapper"></div> 240 241 ${L.collections[collection]["images"].length >= 2 ? ` 242 <div class="cislightbox__navigation cislightbox__navigation--previous swiper-button-prev"></div> 243 <div class="cislightbox__navigation cislightbox__navigation--next swiper-button-next"></div> 244 ` : ''} 245 246 <div class="cislightbox__bar"> 247 <div class="cislightbox__counter swiper-pagination"></div> 248 ${displayShowTextToggle ? ` 249 <div class="cislightbox__show-text-toggle"></div> 250 ` : ''} 251 <div class="cislightbox__close-button"></div> 252 </div> 253 </div> 254 `); 255 256 return T.join(""); 257 } 258};
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.