1/* 2 Author: Jack Ducasse; 3 Version: 0.1.0; 4 (â â¿â â¿) 5*/ 6var Calendar = function(model, options, date){ 7 // Default Values 8 this.Options = { 9 Color: '', 10 LinkColor: '', 11 NavShow: true, 12 NavVertical: false, 13 NavLocation: '', 14 DateTimeShow: true, 15 DateTimeFormat: 'mmm, yyyy', 16 DatetimeLocation: '', 17 EventClick: '', 18 EventTargetWholeDay: true, 19 DisabledDays: [], 20 ModelChange: model 21 }; 22 // Overwriting default values 23 for(var key in options){ 24 this.Options[key] = typeof options[key]=='string'?options[key].toLowerCase():options[key]; 25 } 26 27 model?this.Model=model:this.Model={}; 28 this.Today = new Date(); 29 30 this.Selected = this.Today 31 this.Today.Month = this.Today.getMonth(); 32 this.Today.Year = this.Today.getFullYear(); 33 if(date){this.Selected = date} 34 this.Selected.Month = this.Selected.getMonth(); 35 this.Selected.Year = this.Selected.getFullYear(); 36 37 this.Selected.Days = new Date(this.Selected.Year, (this.Selected.Month + 1), 0).getDate(); 38 this.Selected.FirstDay = new Date(this.Selected.Year, (this.Selected.Month), 1).getDay(); 39 this.Selected.LastDay = new Date(this.Selected.Year, (this.Selected.Month + 1), 0).getDay(); 40 41 this.Prev = new Date(this.Selected.Year, (this.Selected.Month - 1), 1); 42 if(this.Selected.Month==0){this.Prev = new Date(this.Selected.Year-1, 11, 1);} 43 this.Prev.Days = new Date(this.Prev.getFullYear(), (this.Prev.getMonth() + 1), 0).getDate(); 44}; 45 46function createCalendar(calendar, element, adjuster){ 47 if(typeof adjuster !== 'undefined'){ 48 var newDate = new Date(calendar.Selected.Year, calendar.Selected.Month + adjuster, 1); 49 calendar = new Calendar(calendar.Model, calendar.Options, newDate); 50 element.innerHTML = ''; 51 }else{ 52 for(var key in calendar.Options){ 53 typeof calendar.Options[key] != 'function' && typeof calendar.Options[key] != 'object' && calendar.Options[key]?element.className += " " + key + "-" + calendar.Options[key]:0; 54 } 55 } 56 var months = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"]; 57 58 function AddSidebar(){ 59 var sidebar = document.createElement('div'); 60 sidebar.className += 'cld-sidebar'; 61 62 var monthList = document.createElement('ul'); 63 monthList.className += 'cld-monthList'; 64 65 for(var i = 0; i < months.length - 3; i++){ 66 var x = document.createElement('li'); 67 x.className += 'cld-month'; 68 var n = i - (4 - calendar.Selected.Month); 69 // Account for overflowing month values 70 if(n<0){n+=12;} 71 else if(n>11){n-=12;} 72 // Add Appropriate Class 73 if(i==0){ 74 x.className += ' cld-rwd cld-nav'; 75 x.addEventListener('click', function(){ 76 typeof calendar.Options.ModelChange == 'function'?calendar.Model = calendar.Options.ModelChange():calendar.Model = calendar.Options.ModelChange; 77 createCalendar(calendar, element, -1);}); 78 x.innerHTML += '<svg height="15" width="15" viewBox="0 0 100 75" fill="rgba(255,255,255,0.5)"><polyline points="0,75 100,75 50,0"></polyline></svg>'; 79 } 80 else if(i==months.length - 4){ 81 x.className += ' cld-fwd cld-nav'; 82 x.addEventListener('click', function(){ 83 typeof calendar.Options.ModelChange == 'function'?calendar.Model = calendar.Options.ModelChange():calendar.Model = calendar.Options.ModelChange; 84 createCalendar(calendar, element, 1);} ); 85 x.innerHTML += '<svg height="15" width="15" viewBox="0 0 100 75" fill="rgba(255,255,255,0.5)"><polyline points="0,0 100,0 50,75"></polyline></svg>'; 86 } 87 else{ 88 if(i < 4){x.className += ' cld-pre';} 89 else if(i > 4){x.className += ' cld-post';} 90 else{x.className += ' cld-curr';} 91 92 //prevent losing var adj value (for whatever reason that is happening) 93 (function () { 94 var adj = (i-4); 95 //x.addEventListener('click', function(){createCalendar(calendar, element, adj);console.log('kk', adj);} ); 96 x.addEventListener('click', function(){ 97 typeof calendar.Options.ModelChange == 'function'?calendar.Model = calendar.Options.ModelChange():calendar.Model = calendar.Options.ModelChange; 98 createCalendar(calendar, element, adj);} ); 99 x.setAttribute('style', 'opacity:' + (1 - Math.abs(adj)/4)); 100 x.innerHTML += months[n].substr(0,3); 101 }()); // immediate invocation 102 103 if(n==0){ 104 var y = document.createElement('li'); 105 y.className += 'cld-year'; 106 if(i<5){ 107 y.innerHTML += calendar.Selected.Year; 108 }else{ 109 y.innerHTML += calendar.Selected.Year + 1; 110 } 111 monthList.appendChild(y); 112 } 113 } 114 monthList.appendChild(x); 115 } 116 sidebar.appendChild(monthList); 117 if(calendar.Options.NavLocation){ 118 document.getElementById(calendar.Options.NavLocation).innerHTML = ""; 119 document.getElementById(calendar.Options.NavLocation).appendChild(sidebar); 120 } 121 else{element.appendChild(sidebar);} 122 } 123 124 var mainSection = document.createElement('div'); 125 mainSection.className += "cld-main"; 126 127 function AddDateTime(){ 128 var datetime = document.createElement('div'); 129 datetime.className += "cld-datetime"; 130 if(calendar.Options.NavShow && !calendar.Options.NavVertical){ 131 var rwd = document.createElement('div'); 132 rwd.className += " cld-rwd cld-nav"; 133 rwd.addEventListener('click', function(){createCalendar(calendar, element, -1);} ); 134 rwd.innerHTML = '<svg height="15" width="15" viewBox="0 0 75 100" fill="rgba(0,0,0,0.5)"><polyline points="0,50 75,0 75,100"></polyline></svg>'; 135 datetime.appendChild(rwd); 136 } 137 var today = document.createElement('div'); 138 today.className += ' today'; 139 today.innerHTML = months[calendar.Selected.Month] + ", " + calendar.Selected.Year; 140 datetime.appendChild(today); 141 if(calendar.Options.NavShow && !calendar.Options.NavVertical){ 142 var fwd = document.createElement('div'); 143 fwd.className += " cld-fwd cld-nav"; 144 fwd.addEventListener('click', function(){createCalendar(calendar, element, 1);} ); 145 fwd.innerHTML = '<svg height="15" width="15" viewBox="0 0 75 100" fill="rgba(0,0,0,0.5)"><polyline points="0,0 75,50 0,100"></polyline></svg>'; 146 datetime.appendChild(fwd); 147 } 148 if(calendar.Options.DatetimeLocation){ 149 document.getElementById(calendar.Options.DatetimeLocation).innerHTML = ""; 150 document.getElementById(calendar.Options.DatetimeLocation).appendChild(datetime); 151 } 152 else{mainSection.appendChild(datetime);} 153 } 154 155 function AddLabels(){ 156 var labels = document.createElement('ul'); 157 labels.className = 'cld-labels'; 158 var labelsList = ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"]; 159 for(var i = 0; i < labelsList.length; i++){ 160 var label = document.createElement('li'); 161 label.className += "cld-label"; 162 label.innerHTML = labelsList[i]; 163 labels.appendChild(label); 164 } 165 mainSection.appendChild(labels); 166 } 167 function AddDays(){ 168 // Create Number Element 169 function DayNumber(n){ 170 var number = document.createElement('p'); 171 number.className += "cld-number"; 172 number.innerHTML += n; 173 return number; 174 } 175 var days = document.createElement('ul'); 176 days.className += "cld-days"; 177 // Previous Month's Days 178 for(var i = 0; i < (calendar.Selected.FirstDay); i++){ 179 var day = document.createElement('li'); 180 day.className += "cld-day prevMonth"; 181 //Disabled Days 182 var d = i%7; 183 for(var q = 0; q < calendar.Options.DisabledDays.length; q++){ 184 if(d==calendar.Options.DisabledDays[q]){ 185 day.className += " disableDay"; 186 } 187 } 188 189 var number = DayNumber((calendar.Prev.Days - calendar.Selected.FirstDay) + (i+1)); 190 day.appendChild(number); 191 192 days.appendChild(day); 193 } 194 // Current Month's Days 195 for(var i = 0; i < calendar.Selected.Days; i++){ 196 var day = document.createElement('li'); 197 day.className += "cld-day currMonth"; 198 //Disabled Days 199 var d = (i + calendar.Selected.FirstDay)%7; 200 for(var q = 0; q < calendar.Options.DisabledDays.length; q++){ 201 if(d==calendar.Options.DisabledDays[q]){ 202 day.className += " disableDay"; 203 } 204 } 205 var number = DayNumber(i+1); 206 // Check Date against Event Dates 207 for(var n = 0; n < calendar.Model.length; n++){ 208 var evDate = calendar.Model[n].Date; 209 var toDate = new Date(calendar.Selected.Year, calendar.Selected.Month, (i+1)); 210 if(evDate.getTime() == toDate.getTime()){ 211 number.className += " eventday"; 212 var title = document.createElement('span'); 213 title.className += "cld-title"; 214 if(typeof calendar.Model[n].Link == 'function' || calendar.Options.EventClick){ 215 var a = document.createElement('a'); 216 a.setAttribute('href', '#'); 217 a.innerHTML += calendar.Model[n].Title; 218 if(calendar.Options.EventClick){ 219 var z = calendar.Model[n].Link; 220 if(typeof calendar.Model[n].Link != 'string'){ 221 a.addEventListener('click', calendar.Options.EventClick.bind.apply(calendar.Options.EventClick, [null].concat(z)) ); 222 if(calendar.Options.EventTargetWholeDay){ 223 day.className += " clickable"; 224 day.addEventListener('click', calendar.Options.EventClick.bind.apply(calendar.Options.EventClick, [null].concat(z)) ); 225 } 226 }else{ 227 a.addEventListener('click', calendar.Options.EventClick.bind(null, z) ); 228 if(calendar.Options.EventTargetWholeDay){ 229 day.className += " clickable"; 230 day.addEventListener('click', calendar.Options.EventClick.bind(null, z) ); 231 } 232 } 233 }else{ 234 a.addEventListener('click', calendar.Model[n].Link); 235 if(calendar.Options.EventTargetWholeDay){ 236 day.className += " clickable"; 237 day.addEventListener('click', calendar.Model[n].Link); 238 } 239 } 240 title.appendChild(a); 241 }else{ 242 title.innerHTML += '<a href="' + calendar.Model[n].Link + '">' + calendar.Model[n].Title + '</a>'; 243 } 244 number.appendChild(title); 245 } 246 } 247 day.appendChild(number); 248 // If Today..
249 if((i+1) == calendar.Today.getDate() && calendar.Selected.Month == calendar.Today.Month && calendar.Selected.Year == calendar.Today.Year){ 250 day.className += " today"; 251 } 252 days.appendChild(day); 253 } 254 // Next Month's Days 255 // Always same amount of days in calander 256 var extraDays = 13; 257 if(days.children.length>35){extraDays = 6;} 258 else if(days.children.length<29){extraDays = 20;} 259 260 for(var i = 0; i < (extraDays - calendar.Selected.LastDay); i++){ 261 var day = document.createElement('li'); 262 day.className += "cld-day nextMonth"; 263 //Disabled Days 264 var d = (i + calendar.Selected.LastDay + 1)%7; 265 for(var q = 0; q < calendar.Options.DisabledDays.length; q++){ 266 if(d==calendar.Options.DisabledDays[q]){ 267 day.className += " disableDay"; 268 } 269 } 270 271 var number = DayNumber(i+1); 272 day.appendChild(number); 273 274 days.appendChild(day); 275 } 276 mainSection.appendChild(days); 277 } 278 if(calendar.Options.Color){ 279 mainSection.innerHTML += '<style>.cld-main{color:' + calendar.Options.Color + ';}</style>'; 280 } 281 if(calendar.Options.LinkColor){ 282 mainSection.innerHTML += '<style>.cld-title a{color:' + calendar.Options.LinkColor + ';}</style>'; 283 } 284 element.appendChild(mainSection); 285 286 if(calendar.Options.NavShow && calendar.Options.NavVertical){ 287 AddSidebar(); 288 } 289 if(calendar.Options.DateTimeShow){ 290 AddDateTime(); 291 } 292 AddLabels(); 293 AddDays(); 294} 295 296function caleandar(el, data, settings){ 297 var obj = new Calendar(data, settings); 298 createCalendar(obj, el); 299}
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.