1/* DOKUWIKI:include_once vendor/pnotify/jquery.pnotify.js */
2/**
3 * DokuWiki Plugin timetrack (JavaScript Component)
4 *
5 * Plugin timetrack
6 *
7 * @author     peterfromearth <coder@peterfromearth.de>
8 *
9 */
10jQuery.pnotify.defaults.styling = "jqueryui";
11jQuery.pnotify.defaults.delay = 2000;
12jQuery.pnotify.defaults.history = false;
13
14jQuery(function() {
15	jQuery(document).on("click","li.plugin_timetrack a",function(e) {
16		e.preventDefault();
17		jQuery(this).blur();
18		if(!jQuery('#timetrack__dialog').length){
19	        jQuery('body').append('<div id="timetrack__dialog" position="absolute" border=1 height="800px"><div><div class="ui-tabs-panel"></div></div></div>');
20	        jQuery( "#timetrack__dialog" ).dialog({title:LANG.plugins.timetrack['timetrack'],
21	            height:Math.min(700,jQuery(window).height()-50),
22	            width: Math.min(700,jQuery(window).width()-50),
23	            autoOpen:true,
24	            modal:true,
25
26	        });
27
28	    }
29		jQuery("#timetrack__dialog").dialog("open");
30		timetrack_loadDialog('current');
31
32	});
33
34	jQuery(document).on('click','#timetrack-form button',function(event){
35		event.preventDefault();
36		var $btn = jQuery(event.target);
37
38		timetrack_loadDialog(jQuery('#timetrack-form input[name=cmd]').val(),{act:$btn.attr('name'),yearweek:$btn.attr('value')});
39
40	});
41
42	jQuery(document).on('click','#timetrack-form input',function(event){
43		this.select();
44	});
45	jQuery(document).on('change keyup','#timetrack-form input',function(event){
46		var $input = jQuery(this);
47
48		if($input.val() *1 < 0) $input.val(0);
49
50		var date = $input.data('date');
51
52		var $dateInputs = jQuery('#timetrack-form input[data-date="'+date+'"]');
53
54		var date_sum = 0;
55		$dateInputs.each(function(e){
56			date_sum += parseInt(jQuery(this).val() * 1);
57		});
58
59		var $th = jQuery('#timetrack-form th[data-date="'+date+'"]');
60
61		$th.text($th.data('otherhours')*1 + date_sum);
62
63	});
64	jQuery(document).on('keyup','#timetrack-form input',function(event){
65		var $input = jQuery(this);
66		var $input_next;
67		var pos;
68		switch(event.which) {
69	        case 37: // left
70	        	$input_next = $input.closest('td').prev().find('input');
71	        	if(!$input_next.length) {
72	        		$input_next = $input.closest('tr').prev().find('input').last();
73	        	}
74	        	$input_next.focus().select();
75	        	break;
76
77	        case 38: // up
78	        	pos = $input.closest('tr').find('input').index($input);
79
80	        	$input_next = jQuery($input.closest('tr').prev().find('input')[pos]);
81	        	if($input_next.length) {
82	        		$input_next.focus().select();
83	        	}
84	        	break;
85
86	        case 39: // right
87	        	$input_next = $input.closest('td').next().find('input');
88	        	if(!$input_next.length) {
89	        		$input_next = $input.closest('tr').next().find('input').first();
90	        	}
91	        	$input_next.focus().select();
92	        	break;
93
94	        case 40: // down
95	        	pos = $input.closest('tr').find('input').index($input);
96
97	        	$input_next = jQuery($input.closest('tr').next().find('input')[pos]);
98	        	if($input_next.length) {
99	        		$input_next.focus().select();
100	        	}
101	        	break;
102
103	        default: return; // exit this handler for other keys
104	    }
105		event.preventDefault(); // prevent the default action (scroll / move caret)
106
107	});
108
109	function timetrack_loadDialog(cmd,data) {
110		jQuery.ajax({
111			type:'POST',
112			url:DOKU_BASE + 'lib/exe/ajax.php',
113		    data:{ call: 'plugin_timetrack', cmd: cmd, pageid:JSINFO.id, data:data, sectok:JSINFO.sectok },
114		    success:timetrack_result,
115		    beforeSend:function() {jQuery('#timetrack__dialog').addClass("loading");}
116		});
117	}
118
119	function timetrack_save(applyonly) {
120		var $form = jQuery('#timetrack-form');
121
122		jQuery.ajax({
123			type:'POST',
124			url:DOKU_BASE + 'lib/exe/ajax.php',
125		    data:$form.serialize(),
126		    success:applyonly ? timetrack_resultapply : timetrack_resultnoapply,
127		    beforeSend:function() {jQuery('#timetrack__dialog').addClass("loading");}
128		});
129	}
130
131	function timetrack_resultapply(data) {
132		timetrack_result(data,true);
133	}
134	function timetrack_resultnoapply(data) {
135		timetrack_result(data,false);
136	}
137	function timetrack_result(data, applyonly) {
138		if(!data) {
139			console.log('timetrack returns false');
140			return false;
141		}
142		var data = JSON.parse(data);
143
144		if(data.dialog) {
145			jQuery("#timetrack__dialog > div").empty();
146	        jQuery("#timetrack__dialog > div").html(data.dialog);
147	        jQuery("#timetrack-dialog-tabs").tabs({
148	        	beforeActivate: function( event, ui ) {
149	        		event.preventDefault();
150	        		timetrack_loadDialog(ui.newTab.data('tabid'));
151	        	},
152	        	active:jQuery("#timetrack-dialog-tabs ul a[selected=selected]").data('index')
153	        });
154	        if(data.cmd === 'current' || data.cmd === 'recent') {
155	        	jQuery("#timetrack__dialog").dialog({
156			        buttons:[
157		                {text:LANG.plugins.timetrack['closeDialog'],icons: {primary:'ui-icon-close'}, class: 'left-button' ,click: function() {jQuery(this).dialog('close');}},
158		                {text:LANG.plugins.timetrack['save'],icons: {primary:'ui-icon-check'},click: function() {timetrack_save(false);}},
159		                {text:LANG.plugins.timetrack['apply'],icons: {primary:'ui-icon-refresh'},click: function() {timetrack_save(true);}},
160		                ],
161			    });
162				jQuery('#timetrack-form input[data-date="'+new Date().toISOString().slice(0, 10)+'"]').first().select().focus();
163
164			} else if(data.cmd === 'overview') {
165	        	jQuery("#timetrack__dialog").dialog({
166			        buttons:[
167				         {text:LANG.plugins.timetrack['closeDialog'],click: function() {jQuery(this).dialog('close');}},
168
169			        ],
170			    });
171			}
172	        jQuery("#timetrack__dialog").dialog("open");
173	        jQuery('#timetrack__dialog').removeClass('loading');
174
175
176		}
177
178		if(data.success ==  true) {
179			if(applyonly !== true) jQuery("#timetrack__dialog").dialog("close");
180
181			 jQuery.pnotify({
182		            title: false,
183		            text: data.msg?data.msg:'gespeichert',
184		            type: 'success',
185		            icon: false,
186		            delay: data.notifyDelay?data.notifyDelay*1000:2000,
187		            animate_speed: 100,
188		            animation: {
189		                effect_in:'bounce',
190		                effect_out:'drop',
191		            }
192		        });
193		}
194
195	}
196});
197