1 2 3(function (w, d) { 4 var 5 atc_url = '//addtocalendar.com/atc/', 6 atc_version = '1.5'; 7 8 9 if (!Array.indexOf) { 10 Array.prototype.indexOf = function (obj) { 11 for (var i = 0, l = this.length; i < l; i++) { 12 if (this[i] == obj) { 13 return i 14 } 15 } 16 return -1 17 } 18 } 19 20 if (!Array.prototype.map) { 21 Array.prototype.map = function (f) { 22 var result = []; 23 for (var i = 0, l = this.length; i < l; i++) { 24 result.push(f(this[i])) 25 } 26 return result 27 } 28 } 29 30 var isArray = function (obj) { 31 return Object.prototype.toString.call(obj) === "[object Array]" 32 }; 33 34 var isFunc = function (obj) { 35 return Object.prototype.toString.call(obj) === "[object Function]" 36 }; 37 38 var ready = function (w, d) { 39 var inited = false, 40 loaded = false, 41 queue = [], 42 done, old; 43 44 function go() { 45 if (!inited) { 46 if (!d.body) return setTimeout(go, 13); 47 inited = true; 48 if (queue) { 49 var j, k = 0; 50 while (j = queue[k++]) j.call(null); 51 queue = null 52 } 53 } 54 } 55 56 function check() { 57 if (loaded) return; 58 loaded = true; 59 if (d.readyState === "complete") return go(); 60 if (d.addEventListener) { 61 d.addEventListener("DOMContentLoaded", done, false); 62 w.addEventListener("load", go, false) 63 } else { 64 if (d.attachEvent) { 65 d.attachEvent("onreadystatechange", done); 66 w.attachEvent("onload", go); 67 var k = false; 68 try { 69 k = w.frameElement == null 70 } catch (j) { 71 } 72 if (b.doScroll && k) ie() 73 } else { 74 old = w.onload; 75 w.onload = function (e) { 76 old(e); 77 go() 78 } 79 } 80 } 81 } 82 83 if (d.addEventListener) { 84 done = function () { 85 d.removeEventListener("DOMContentLoaded", done, false); 86 go() 87 } 88 } else { 89 if (d.attachEvent) { 90 done = function () { 91 if (d.readyState === "complete") { 92 d.detachEvent("onreadystatechange", done); 93 go() 94 } 95 } 96 } 97 } 98 99 function ie() { 100 if (inited) return; 101 try { 102 b.doScroll("left") 103 } catch (j) { 104 setTimeout(ie, 1); 105 return 106 } 107 go() 108 } 109 110 return function (callback) { 111 check(); 112 if (inited) { 113 callback.call(null) 114 } else { 115 queue.push(callback) 116 } 117 } 118 }(w, d); 119 120 if (w.addtocalendar && typeof w.addtocalendar.start == "function") return; 121 if (!w.addtocalendar) w.addtocalendar = {}; 122 123 addtocalendar.languages = { 124 'ca': 'Afegeix al Calendari', 125 'en': 'Add to Calendar', 126 'es': 'Añadir al Calendario', 127 'fr': 'Ajouter au calendrier' 128 }; 129 130 addtocalendar.calendar_urls = {} 131 132 addtocalendar.loadSettings = function (element) { 133 var settings = { 134 'language': 'auto', 135 'show-list-on': 'click', 136 'calendars': [ 137 'iCalendar', 138 'Google Calendar', 139 'Outlook', 140 'Outlook Online', 141 'Yahoo! Calendar' 142 ], 143 'secure': 'auto', 144 'on-button-click': function () { 145 }, 146 'on-calendar-click': function () { 147 } 148 }; 149 150 for (var option in settings) { 151 var pname = 'data-' + option; 152 var eattr = element.getAttribute(pname); 153 if (eattr != null) { 154 155 if (isArray(settings[option])) { 156 settings[option] = eattr.replace(/\s*,\s*/g, ',').replace(/^\s+|\s+$/g, '').split(','); 157 continue; 158 } 159 160 if (isFunc(settings[option])) { 161 var fn = window[eattr]; 162 if (isFunc(fn)) { 163 settings[option] = fn; 164 } else { 165 settings[option] = eval('(function(mouseEvent){' + eattr + '})'); 166 } 167 continue; 168 } 169 170 settings[option] = element.getAttribute(pname); 171 } 172 } 173 174 return settings; 175 }; 176 177 addtocalendar.load = function () { 178 179 var calendarsUrl = { 180 'iCalendar': 'ical', 181 'Google Calendar': 'google',
182 'Outlook': 'outlook', 183 'Outlook Online': 'outlookonline', 184 'Yahoo! Calendar': 'yahoo' 185 }; 186 var utz = (-(new Date()).getTimezoneOffset().toString()); 187 188 var languages = addtocalendar.languages; 189 190 var dom = document.getElementsByTagName('*'); 191 for (var tagnum = 0; tagnum < dom.length; tagnum++) { 192 var tag_class = dom[tagnum].className; 193 194 if (tag_class.length && tag_class.split(" ").indexOf('addtocalendar') != -1) { 195 196 var settings = addtocalendar.loadSettings(dom[tagnum]); 197 198 var protocol = 'http:'; 199 if (settings['secure'] == 'auto') { 200 protocol = location.protocol == 'https:' ? 'https:' : 'http:'; 201 } else if (settings['secure'] == 'true') { 202 protocol = 'https:'; 203 } 204 205 var tag_id = dom[tagnum].id; 206 var atc_button_title = languages['en']; 207 if (settings['language'] == 'auto') { 208 var user_lang = "no_lang"; 209 if (typeof navigator.language === "string") { 210 user_lang = navigator.language.substr(0, 2) 211 } else if (typeof navigator.browserLanguage === "string") { 212 user_lang = navigator.browserLanguage.substr(0, 2) 213 } 214 215 if (languages.hasOwnProperty(user_lang)) { 216 atc_button_title = languages[user_lang]; 217 } 218 } else if (languages.hasOwnProperty(settings['language'])) { 219 atc_button_title = languages[settings['language']]; 220 } 221 222 var url_paramteres = [ 223 'utz=' + utz, 224 'uln=' + navigator.language, 225 'vjs=' + atc_version 226 ]; 227 228 var addtocalendar_div = dom[tagnum].getElementsByTagName('var'); 229 var event_number = -1; 230 for (var varnum = 0; varnum < addtocalendar_div.length; varnum++) { 231 var param_name = addtocalendar_div[varnum].className.replace("atc_", "").split(" ")[0]; 232 var param_value = addtocalendar_div[varnum].innerHTML; 233 234 if (param_name == 'event') { 235 event_number++; 236 continue; 237 } 238 239 if (param_name == addtocalendar_div[varnum].className) { 240 if (param_name == 'atc-body') { 241 atc_button_title = param_value; 242 } 243 continue; 244 } 245 246 if (event_number == -1) { 247 continue; 248 } 249 250 url_paramteres.push('e[' + event_number + '][' + param_name + ']' + '=' + encodeURIComponent(param_value)); 251 } 252 253 254 var atcb_link_id_val = (tag_id == '' ? '' : (tag_id + '_link') ); 255 var atcb_list = document.createElement('ul'); 256 atcb_list.className = 'atcb-list'; 257 258 var menu_links = ''; 259 for (var cnum in settings['calendars']) { 260 if (!calendarsUrl.hasOwnProperty(settings['calendars'][cnum])) { 261 continue; 262 } 263 var cal_id = calendarsUrl[settings['calendars'][cnum]]; 264 var atcb_cal_link_id = (tag_id == '' ? '' : ('id="' + tag_id + '_' + cal_id + '_link"') ); 265 menu_links += '<li class="atcb-item '+cal_id+'"><a ' + atcb_cal_link_id + ' class="atcb-item-link" href="' 266 + (cal_id == 'ical' && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream ? 'webcal:' : protocol) 267 + atc_url 268 + cal_id + '?' + url_paramteres.join('&') 269 + '" target="_blank">' + settings['calendars'][cnum] + '</a></li>'; 270 } 271 atcb_list.innerHTML = menu_links; 272 273 var atcb_link; 274 if (dom[tagnum].querySelector('.atcb-link') == undefined) { 275 atcb_link = document.createElement('a'); 276 atcb_link.className = 'atcb-link'; 277 atcb_link.innerHTML = atc_button_title; 278 atcb_link.id = atcb_link_id_val; 279 atcb_link.tabIndex = 1; 280 281 dom[tagnum].appendChild(atcb_link); 282 dom[tagnum].appendChild(atcb_list); 283 } else { 284 atcb_link = dom[tagnum].querySelector('.atcb-link'); 285 atcb_link.parentNode.appendChild(atcb_list); 286 atcb_link.tabIndex = 1; 287 if (atcb_link.id == '') { 288 atcb_link.id = atcb_link_id_val; 289 } 290 } 291 292 if (atcb_link.addEventListener) { 293 atcb_link.addEventListener('click', settings['on-button-click'], false); 294 } else { 295 atcb_link.attachEvent('onclick', settings['on-button-click']); 296 } 297 298 var item_links = dom[tagnum].querySelectorAll('atcb-item-link'); 299 300 for (var varnum = 0; varnum < item_links.length; varnum++) { 301 var item_link = item_links[varnum]; 302 if (item_link.addEventListener) { 303 item_link.addEventListener('click', settings['on-calendar-click'], false); 304 }else{ 305 item_link.attachEvent('onclick', settings['on-calendar-click']); 306 } 307 308 } 309 } 310 } 311 }; 312 313})(window, document);
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.