1jQuery(window).ready(function () { 2 jQuery(".cluevo-blocked").click(function (e) { 3 e.preventDefault(); 4 var item = this; 5 jQuery(item) 6 .find(".cluevo-meta-item.cluevo-access") 7 .addClass("cluevo-alert"); 8 setTimeout(function () { 9 jQuery(item) 10 .find(".cluevo-meta-item.cluevo-access") 11 .removeClass("cluevo-alert"); 12 }, 1000); 13 }); 14 jQuery(".cluevo-content-list-style-switch .cluevo-btn").click(function (e) { 15 var value = ""; 16 var prefix = "cluevo-content-list-style-"; 17 if (jQuery(this).hasClass("cluevo-content-list-style-row")) { 18 value = prefix + "row"; 19 if ( 20 !jQuery(".cluevo-content-list").hasClass( 21 "cluevo-content-list-style-row", 22 ) 23 ) { 24 jQuery(".cluevo-content-list").addClass( 25 "cluevo-content-list-style-row", 26 ); 27 } 28 jQuery(".cluevo-content-list-style-col").removeClass("active"); 29 } 30 if (jQuery(this).hasClass("cluevo-content-list-style-col")) { 31 value = prefix + "col"; 32 jQuery(".cluevo-content-list").removeClass( 33 "cluevo-content-list-style-row", 34 ); 35 jQuery(".cluevo-content-list-style-row").removeClass("active"); 36 } 37 38 if (!jQuery(this).hasClass("active")) { 39 jQuery(this).addClass("active"); 40 } 41 42 var d = new Date(); 43 d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000); 44 var expires = "expires=" + d.toUTCString(); 45 document.cookie = 46 "cluevo-content-list-style=" + value + ";" + expires + ";path=/"; 47 }); 48 49 jQuery(".cluevo-content-item-link.access-denied:not(.missing-reqs)").click( 50 cluevoDisplayAccessDenied, 51 ); 52 jQuery(".cluevo-content-item-link.access-denied.missing-reqs").click( 53 cluevoDisplayMissingDependencies, 54 ); 55 56 // jQuery('.cluevo-pdf-download-link').click(function(e) { 57 // e.preventDefault(); 58 // e.stopPropagation(); 59 // window.open(jQuery(this).data('href')); 60 // }); 61}); 62 63function cluevoDisplayAccessDenied(e) { 64 e.preventDefault(); 65 66 let text = 67 jQuery(this).data("access-denied-text") && 68 jQuery(this).data("access-denied-text") != "" 69 ? jQuery(this).data("access-denied-text") 70 : cluevoStrings.message_access_denied; 71 cluevoAlert(cluevoStrings.message_title_access_denied, text, "error"); 72} 73 74function cluevoDisplayMissingDependencies(e) { 75 e.preventDefault(); 76 77 const itemId = jQuery(this).data("item-id"); 78 const reqLevel = Number(jQuery(this).data("level-required")); 79 const reqPoints = Number(jQuery(this).data("points-required")); 80 const userLevel = Number(jQuery(this).data("user-level")); 81 const userPoints = Number(jQuery(this).data("user-points")); 82 83 if (!itemId) return cluevoDisplayAccessDenied(e); 84 85 let text = 86 jQuery(this).data("access-denied-text") && 87 jQuery(this).data("access-denied-text") != "" 88 ? jQuery(this).data("access-denied-text") 89 : cluevoStrings.message_access_denied; 90 91 const msg = Vue.createApp( 92 { 93 props: [ 94 "itemId", 95 "text", 96 "requiredLevel", 97 "userLevel", 98 "requiredPoints", 99 "userPoints", 100 ], 101 data() { 102 return { 103 dependencies: [], 104 strings: null, 105 }; 106 }, 107 created() { 108 this.strings = window.cluevoStrings; 109 const deps = document.getElementById( 110 `cluevo-missing-dependencies-${this.itemId}`, 111 )?.textContent; 112 if (!deps) return; 113 this.dependencies = JSON.parse(deps); 114 }, 115 computed: { 116 levelString() { 117 return `${this.strings.message_level_required.replace( 118 "%d", 119 this.requiredLevel, 120 )} ${this.strings.message_your_level.replace("%d", this.userLevel)}`; 121 }, 122 pointsString() { 123 return `${this.strings.message_points_required.replace( 124 "%d", 125 this.requiredPoints, 126 )} ${this.strings.message_your_points.replace( 127 "%d", 128 this.userPoints, 129 )}`; 130 }, 131 }, 132 methods: { 133 close() { 134 jQuery(this.$el).fadeOut(300, () => { 135 this.unmount(); 136 this.$el.remove(); 137 }); 138 }, 139 }, 140 template: ` 141 <div class="cluevo-alert-overlay cluevo-dismiss-click-area error" @click.self="close"> 142 <div class="cluevo-alert"> 143 <p class="cluevo-alert-title">
143{{ strings.message_title_access_denied }}</p> 144 <p>{{ text }}</p> 145 <template v-if="requiredLevel"> 146 <p>{{ levelString }}</p> 147 </template> 148 <template v-if="requiredPoints"> 149 <p>{{ pointsString }}</p> 150 </template> 151 <template v-if="dependencies?.length"> 152 <p>{{ strings.message_missing_dependencies }}</p> 153 <ul> 154 <li v-for="d, i of dependencies" :key="i"> 155 <a v-if="d.access" :href="d.url">{{ d.title }}</a> 156 <span v-else>{{ d.title }}</span> 157 </li> 158 </ul> 159 </template> 160 <div class="cluevo-alert-close-button cluevo-dismiss-click-area">â³</div> 161 </div> 162 </div> 163 `, 164 }, 165 { 166 itemId, 167 text, 168 requiredLevel: reqLevel, 169 requiredPoints: reqPoints, 170 userLevel, 171 userPoints, 172 }, 173 ); 174 175 const container = document.createElement("div"); 176 msg.mount(container); 177 document.body.appendChild(container); 178 const overlay = container.querySelector(".cluevo-alert-overlay"); 179 const btn = overlay.querySelector(".cluevo-alert-close-button"); 180 btn?.addEventListener("click", () => { 181 jQuery(overlay).fadeOut(300, () => { 182 msg.unmount(); 183 overlay.remove(); 184 }); 185 }); 186 jQuery(overlay).animate( 187 { 188 opacity: 1, 189 }, 190 200, 191 ); 192} 193 194function cluevoAlert(title, message, type) { 195 jQuery(".cluevo-alert-overlay").remove(); 196 var box = jQuery( 197 '<div class="cluevo-alert-overlay cluevo-dismiss-click-area ' + 198 cluevo_encodeHTML(type) + 199 '"><div class="cluevo-alert ' + 200 cluevo_encodeHTML(type) + 201 '"><p class="cluevo-alert-title">' + 202 cluevo_encodeHTML(title) + 203 "</p><p>" + 204 cluevo_nl2br(cluevo_encodeHTML(message)) + 205 '</p><div class="cluevo-alert-close-button cluevo-dismiss-click-area">â³</div></div></div>', 206 ); 207 jQuery(box).on("click", ".cluevo-alert-close-button", function (e) { 208 e.stopPropagation(); 209 if (jQuery(this).hasClass("cluevo-dismiss-click-area")) { 210 jQuery(".cluevo-alert-overlay").fadeOut(200, function () { 211 jQuery(this).remove(); 212 }); 213 } 214 }); 215 jQuery(box).on("click", function (e) { 216 e.stopPropagation(); 217 if (e.target != this) return; 218 if (jQuery(this).hasClass("cluevo-dismiss-click-area")) { 219 jQuery(".cluevo-alert-overlay").fadeOut(200, function () { 220 jQuery(this).remove(); 221 }); 222 } 223 }); 224 box.appendTo("body").animate( 225 { 226 opacity: 1, 227 }, 228 200, 229 ); 230} 231 232function cluevo_nl2br(str) { 233 if (typeof str === "undefined" || str === null) { 234 return ""; 235 } 236 return (str + "").replace( 237 /([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, 238 "$1" + "<br />" + "$2", 239 ); 240} 241 242function cluevo_encodeHTML(s) { 243 if (!s) return ""; 244 return s 245 .toString() 246 .replace(/&/g, "&") 247 .replace(/</g, "<") 248 .replace(/>/g, ">") 249 .replace(/"/g, """); 250} 251 252// const cluevoDependencyList = Vue.extend(cluevoDependencyListComp);
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.