Bladeren bron

N.444 Two date picker icons (lifecycle shortcut to resolved state, or a datetime attribute on a link). Solved by a factorization of the widgets initialization so that the initialization be the same (must be idempotent)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@4438 a333f486-631f-4898-b8df-5754b55c2be0
romainq 8 jaren geleden
bovenliggende
commit
5eccd5e413

+ 4 - 21
application/ajaxwebpage.class.inc.php

@@ -202,32 +202,15 @@ EOF
 		// Render the tabs in the page (if any)
 		$this->s_content = $this->m_oTabs->RenderIntoContent($this->s_content, $this);
 		
-		// Additional UI widgets to be activated inside the ajax fragment ??
-    	if (($this->sContentType == 'text/html') && (preg_match('/class="date-pick"/', $this->s_content) || preg_match('/class="datetime-pick"/', $this->s_content)) )
+		// Additional UI widgets to be activated inside the ajax fragment
+    	if ($this->sContentType == 'text/html')
 		{
 			$this->add_ready_script(
 <<<EOF
-	$(".date-pick").datepicker({
-			showOn: 'button',
-			buttonImage: '../images/calendar.png',
-			buttonImageOnly: true,
-			dateFormat: 'yy-mm-dd',
-			constrainInput: false,
-			changeMonth: true,
-			changeYear: true
-		});
-	$(".datetime-pick").datepicker({
-			showOn: 'button',
-			buttonImage: '../images/calendar.png',
-			buttonImageOnly: true,
-			dateFormat: 'yy-mm-dd 00:00:00',
-			constrainInput: false,
-			changeMonth: true,
-			changeYear: true
-		});
+PrepareWidgets();
 EOF
 			);
-		}	
+		}
         $s_captured_output = $this->ob_get_clean_safe();
 		  if (($this->sContentType == 'text/html') &&  ($this->sContentDisposition == 'inline'))
         {

+ 34 - 24
application/itopwebpage.class.inc.php

@@ -209,7 +209,39 @@ EOF;
 			}";
 			$sJSDateTimePickerOptions = substr($sJSDateTimePickerOptions, 0, -1).$aMoreJSOptions;
 		}
-		
+		$this->add_script(
+<<< EOF
+	function PrepareWidgets()
+	{
+		// note: each action implemented here must be idempotent,
+		//       because this helper function might be called several times on a given page 
+	
+		$(".date-pick").datepicker($sJSDatePickerOptions);
+	
+		// Hack for the date and time picker addon issue on Chrome (see #1305)
+		// The workaround is to instantiate the widget on demand
+		// It relies on the same markup, thus reverting to the original implementation should be straightforward
+		$(".datetime-pick:not(.is-widget-ready)").each(function(){
+			var oInput = this;
+			$(oInput).addClass('is-widget-ready');
+			$('<img class="datetime-pick-button" src="../images/calendar.png">')
+				.insertAfter($(this))
+				.on('click', function(){
+					$(oInput)
+						.datetimepicker($sJSDateTimePickerOptions)
+						.datetimepicker('show')
+						.datetimepicker('option', 'onClose', function(dateText,inst){
+							$(oInput).datetimepicker('destroy');
+						})
+						.on('click keypress', function(){
+							$(oInput).datetimepicker('hide');
+						});
+				});
+		});
+	}
+EOF
+		);
+
 		$this->m_sInitScript =
 <<< EOF
 	try
@@ -445,29 +477,7 @@ EOF
 
 	// End of Tabs handling
 
-	$(".date-pick").datepicker($sJSDatePickerOptions);
-
-	// Hack for the date and time picker addon issue on Chrome (see #1305)
-	// The workaround is to instantiate the widget on demand
-	// It relies on the same markup, thus reverting to the original implementation should be straightforward
-	$(".datetime-pick").each(function(){
-		var oInput = this;
-		$('<img class="datetime-pick-button" src="../images/calendar.png">')
-			.insertAfter($(this))
-			.on('click', function(){
-				$(oInput)
-					.datetimepicker($sJSDateTimePickerOptions)
-					.datetimepicker('show')
-					.datetimepicker('option', 'onClose', function(dateText,inst){
-						$(oInput).datetimepicker('destroy');
-					})
-					.on('click keypress', function(){
-						$(oInput).datetimepicker('hide');
-					});
-				});
-		});
-
-	$(".datetime-pick-button")
+	PrepareWidgets();
 
 	// Make sortable, everything that claims to be sortable
 	$('.sortable').sortable( {axis: 'y', cursor: 'move', handle: '.drag_handle', stop: function()

+ 1 - 29
application/ui.linkswidget.class.inc.php

@@ -163,38 +163,10 @@ class UILinksWidget
 				$aFieldsMap[$sFieldCode] = $sSafeId;
 			}
 			$sState = '';
-			$sJSDaysMin = json_encode(array(Dict::S('DayOfWeek-Sunday-Min'), Dict::S('DayOfWeek-Monday-Min'), Dict::S('DayOfWeek-Tuesday-Min'), Dict::S('DayOfWeek-Wednesday-Min'),
-											Dict::S('DayOfWeek-Thursday-Min'), Dict::S('DayOfWeek-Friday-Min'), Dict::S('DayOfWeek-Saturday-Min')));
-			$sJSMonthsShort = json_encode(array(Dict::S('Month-01-Short'), Dict::S('Month-02-Short'), Dict::S('Month-03-Short'), Dict::S('Month-04-Short'), Dict::S('Month-05-Short'), Dict::S('Month-06-Short'), 
-												Dict::S('Month-07-Short'), Dict::S('Month-08-Short'), Dict::S('Month-09-Short'), Dict::S('Month-10-Short'), Dict::S('Month-11-Short'), Dict::S('Month-12-Short')));
-			$iFirstDayOfWeek = (int) Dict::S('Calendar-FirstDayOfWeek');
 
 			$oP->add_script(
 <<<EOF
-$(".date-pick").datepicker({
-		showOn: 'button',
-		buttonImage: '../images/calendar.png',
-		buttonImageOnly: true,
-		dateFormat: 'yy-mm-dd',
-		constrainInput: false,
-		changeMonth: true,
-		changeYear: true,
-		dayNamesMin: $sJSDaysMin,
-		monthNamesShort: $sJSMonthsShort,
-		firstDay: $iFirstDayOfWeek
-});
-$(".datetime-pick").datepicker({
-		showOn: 'button',
-		buttonImage: '../images/calendar.png',
-		buttonImageOnly: true,
-		dateFormat: 'yy-mm-dd 00:00:00',
-		constrainInput: false,
-		changeMonth: true,
-		changeYear: true,
-		dayNamesMin: $sJSDaysMin,
-		monthNamesShort: $sJSMonthsShort,
-		firstDay: $iFirstDayOfWeek
-});
+PrepareWidgets();
 EOF
 			);
 		}