PageSourceSearch

https://degenstberg.be/wp-content/plugins/doctapp-core/assets/calendar/jquery-nao-calendar.js?ver=1.0

js degenstberg.be collected 2026-10-02 00:26:25 UTC 10,202 bytes, 333 lines download raw bytes

1jQuery( document ).ready(function( $ ) {
2	'use strict';
3	$("body").tooltip({ selector: '[data-toggle=tooltip]' });
4
5	(function (factory) {
6		if (typeof define === 'function' && define.amd) {
7			// AMD. Register as an anonymous module.
8			define(['jquery'], factory);
9		} else if (typeof exports === 'object') {
10			// Node/CommonJS style for Browserify
11			module.exports = factory;
12		} else {
13			// Browser globals
14			factory(jQuery);
15		}
16	}(
17	/**
18	 * @param {jQuery} $
19	 */
20	function($) {
21		// disable drop open behavior
22		$('html').on('dragover drop', function(e) { e.preventDefault() });
23		
24		$.fn.scrollbars = function(a,b,c) {
25			if(window.isMobile || window.isTouch) {//} && window.isTouch) {
26				switch(a) {
27					case 'scrollTo':
28						return this.scrollTop(b);
29					// case 'update':
30					// 	return this.mCustomScrollbar('update');
31					case '':
32						return this;
33					default:
34						console.log('SCROLLBARS: ',a,b,c)
35						if(typeof a == 'object' && typeof b == 'undefined') {
36							this.css('overflow', 'auto')
37						}
38						return this;
39				}
40			} else {
41				return this.mCustomScrollbar(a,b,c);
42			}
43		}
44		
45		$.fn.calendar = function (opt,val) {
46			var self = this;
47			if(typeof opt === 'string' && typeof val !== 'undefined') switch(opt) { // setter | method with args
48				
49				// return this;
50			}
51			else if(typeof opt === 'string') switch(opt) { // getter | method with no args
52				// return;
53			}
54			var def = {
55				date: new Date(),
56				autoSelect: false,
57				select: function(date) {},
58				toggle: function(y, m) {},
59			}
60			var current = {
61				y: def.date.getFullYear(),
62				m: def.date.getMonth()+1,
63				d: def.date.getDate(),
64			}
65			var selected = {
66				y: 0,
67				m: 0,
68				d: 0,
69			}
70			$(this).prop('selected', selected);
71			def = $.extend(def, opt);
72			var weekDays = 'Sun Mon Tue Wed Thu Fri Sat'.split(' ');
73			var yearMonths = 'January February March April May June July August September October November December'.split(' ');
74			var yearMonthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');
75			var today = new Date();
76			var todayDate = today.getDate();
77			var makeMonth = function(y,m,d) {
78				var body = $('<table>')
79					.addClass('month-body')
80					// .appendTo(month)
81				var week = $('<thead>')
82					.addClass('month-week')
83					.appendTo(body)
84					.append('<tr></tr>')
85					.find('tr')
86				var days = $('<tbody>')
87					.addClass('month-days')
88					.appendTo(body)
89				for(i=0;i<7;i++) {
90					week.append('<th>'+weekDays[i]+'</th>');
91				}
92				var date = new Date(y,m-1,1);
93				var today = new Date();
94				var todayDate = today.getDate();
95				var thisMonth = !!(today.getMonth()+1 === m && today.getFullYear() === y);
96				// date.setFullYear(y,m-1,1);
97				var numDays = (new Date(y,m,0)).getDate();
98				var numWeeks = Math.ceil((numDays + date.getDay())/7);
99				var day = 1;
100				// console.log(date.getDay(), date.getMonth(), numDays);
101				// for(var i=0; i<numWeeks; i++) {
102				for(var i=0; i<5; i++) {
103					var wk = $('<tr>').appendTo(days);
104					for(var j=0;j<7;j++) {
105						if((i===0 && j<date.getDay()) || (day>numDays)) {
106							wk.append('<td></td>')
107							// wk.append('<td class="fade"> - </td>')
108							// continue;
109						} else {
110							$('<td>')
111								.text(day < 10 ? '0'+day : day)
112								// .addClass(day === d ? 'active' : '')
113								.addClass(thisMonth && day === todayDate ? 'today' : '')
114								.attr('data-date', day)
115								// .ripple({ type: 'icon' })
116								.appendTo(wk)
117								.click(function(e) {
118									$(this).parent().parent().find('.active').removeClass('active')
119									$(this).addClass('active')
120									selectDate(y, m, parseInt($(this).attr('data-date')))
121								})
122							day++;
123						}
124					}
125					// if(wk.text().trim() === '' && days.children(':first').text().split(' ').join('').split('0').join('').length === 7) wk.prependTo(days);
126					if(i === 5 && days.children(':first').text().split(' ').join('').split('0').join('').length === 7) wk.prependTo(days);
127				}
128				// days.find('td[data-date]').ripple({ type: 'centered' })
129				days.find('td[data-date]').ripple()
130				if(def.autoSelect) {
131					days.find('td[data-date="'+d+'"]').click()//.addClass('active')
132				}
133				return body;
134			}
135			var selectDate = function(y,m,d) {
136				selected.d = d;
137				selected.m = m;
138				selected.y = y;
139				var dt = new Date(y,m-1,d);
140				def.select.bind(self)(dt);
141			}
142			var bringMonth = function(p_n,y,m,d) {
143				isMoving = true;
144				month.addClass('no-overflow');
145				yMon.text(yearMonths[m-1]+' '+y)
146				yrnm.text(y)
147				yrbd.find('.active').removeClass('active')
148				yrbd.find('[data-month="'+m+'"]').addClass('active')
149				if(d === null && y === selected.y && m === selected.m) d = selected.d;
150				var mon = makeMonth(y,m,d)
151					.addClass(p_n)
152					.insertBefore(body)
153				def.toggle.bind(self)(current.y, current.m);
154				// requestAnimationFrame(function() {
155				setTimeout(function() {
156					mon.addClass('come')
157				}, 1000/60)
158				body.one('transitionend', function(e) {
159					body.remove()
160					body = mon;
161					body.removeClass(p_n+' come')
162					month.removeClass('no-overflow');
163					// def.toggle.bind(self)(current.y, current.m);
164					isMoving = false;
165				})
166			}
167			var showYearPicker = function(e) {
168				year.addClass('visible')
169			}
170			var hideYearPicker = function(e) {
171				year.removeClass('visible')
172			}
173			var isMoving = false;
174			var date = def.date;
175			// var month = $('<div>')
176			var month = $(this[0])
177				.addClass('nao-month')
178				// .appendTo(dpkr)
179			var btn1 = $('<button>')
180				.addClass('ic ic-arrow-angle-left')
181				.ripple()
182				.attr('data-toggle', 'tooltip')
183				.attr('title', 'Previous month')
184				.click(function(e) {
185					e.preventDefault();
186					if(isMoving) return;
187					current.m = current.m-1 === 0 ? 12 : current.m-1;
188					current.y = current.m === 12 ? current.y-1 : current.y;
189					bringMonth('prev', current.y, current.m, null);
190				})
191				.focus(hideYearPicker)
192			var btn2 = $('<button>')
193				.addClass('ic ic-arrow-angle-right')
194				.ripple()
195				.attr('data-toggle', 'tooltip')
196				.attr('title', 'Next month')
197				.click(function(e) {
198					e.preventDefault();
199					if(isMoving) return;
200					current.m = current.m+1 === 13 ? 1 : current.m+1;
201					current.y = current.m === 1 ? current.y+1 : current.y;
202					bringMonth('next', current.y, current.m, null);
203				})
204				.focus(hideYearPicker)
205			var btn3 = $('<button>')
206				.addClass('btn ic ic-arrow-circle-angle-down')
207				.ripple()
208				.attr('data-toggle', 'tooltip')
209				.attr('title', 'View current month')
210				.click(function(e) {
211					e.preventDefault();
212					if(isMoving) return;
213					var dt = new Date();
214					if(dt.getFullYear() === current.y && dt.getMonth()+1 === current.m) return;
215					var dr = current.y*12+current.m > dt.getFullYear()*12+dt.getMonth()+1 ? 'prev' : 'next';
216					current.y = dt.getFullYear();
217					current.m = dt.getMonth()+1;
218					bringMonth(dr, current.y, current.m, null);
219				})
220				.focus(hideYearPicker)
221			var btn4 = $('<button>')
222				.addClass('btn ic ic-target')
223				.ripple()
224				.attr('data-toggle', 'tooltip')
225				.attr('title', 'View selected date')
226				.click(function(e) {
227					e.preventDefault();
228					if(isMoving) return;
229					if(selected.d < 1) return;
230					if(selected.y === current.y && selected.m === current.m) return;
231					var dr = current.y*12+current.m > selected.y*12+selected.m ? 'prev' : 'next';
232					current.y = selected.y;
233					current.m = selected.m;
234					bringMonth(dr, current.y, current.m, null);
235				})
236				.focus(hideYearPicker)
237			var yMon = $('<div>')
238				.text(yearMonths[date.getMonth()]+' '+date.getFullYear())
239				.attr('data-toggle', 'tooltip')
240				.attr('title', 'Year and Month')
241				// .click(showYearPicker)
242			var head = $('<div>')
243				.addClass('month-head')
244				// .text(yearMonths[date.getMonth()]+' '+date.getFullYear())
245				.append(btn1)
246				.append(btn3)
247				.append(btn2)
248				.append(btn4)
249				.append(yMon)
250				.appendTo(month)
251			var body = makeMonth(current.y, current.m, (opt && opt.date) ? current.d : null)
252				.appendTo(month)
253			var togg = def.toggle.bind(self)(current.y, current.m);
254			var year = $('<div>')
255				.addClass('year-month')
256				.prependTo(month)
257			var yrnx = $('<button>')
258				// .addClass('span')
259				.addClass('ic ic-arrow-angle-right')
260				.ripple()
261				.click(function(e) {
262					e.preventDefault();
263					if(isMoving) return;
264					current.y++;
265					yrnm.text(current.y)
266					bringMonth('next', current.y, current.m, null);
267				})
268				.focus(showYearPicker)
269			var yrpv = $('<button>')
270				// .addClass('span')
271				.addClass('ic ic-arrow-angle-left')
272				.ripple()
273				.click(function(e) {
274					e.preventDefault();
275					if(isMoving) return;
276					current.y--;
277					yrnm.text(current.y)
278					bringMonth('prev', current.y, current.m, null);
279				})
280				.focus(showYearPicker)
281			var yrnm = $('<div>')
282				.text(current.y)
283				.attr('data-toggle', 'tooltip')
284				.attr('title', 'Go back to calendar')
285				.click(hideYearPicker)
286			var yrhd = $('<div>')
287				.addClass('month-head')
288				// .addClass('year-head')
289				.append(yrpv)
290				.append(yrnx)
291				.append(yrnm)
292				.appendTo(year)
293			var yrbd = $('<table>')
294				.addClass('year-body')
295				.appendTo(year)
296				.html('<tbody></tbody>')
297				.find('tbody')
298			var yrft = $('<div>')
299				.addClass('year-footer ic ic-arrow-circle-angle-up')
300				.attr('data-toggle', 'tooltip')
301				.attr('title', 'Go back to calendar')
302				.ripple()
303				.appendTo(year)
304				.click(function(e) {
305					year.removeClass('visible')
306				})
307			for(var i=0; i<4; i++) {
308				var row = $('<tr>').appendTo(yrbd)
309				for(var j=0; j<3; j++) {
310					var idx = i*3+j;
311					var col = $('<td>')
312						.text(yearMonths[idx])
313						.attr('data-month', idx+1)
314						.addClass(current.m === idx+1 ? 'active' : '')
315						.appendTo(row)
316						.ripple()
317						.click(function(e) {
318							if(isMoving) return;
319							var mm = parseInt($(this).attr('data-month'))
320							if(mm == current.m) return;
321							var dr = current.m > mm ? 'prev' : 'next';
322							current.m = mm;
323							$(this).parent().parent().find('.active').removeClass('active')
324							$(this).addClass('active')
325							bringMonth(dr, current.y, current.m, null);
326						})
327				}
328			}
329			return this;
330		}
331		return $;
332	}));
333});

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.