From: Dion O. <dol...@us...> - 2006-01-24 22:25:17
|
Update of /cvsroot/magicajax/magicajax/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20314/magicajax/Core Modified Files: AjaxCallHelper.cs MagicAjax NET 2.0.csproj MagicAjax.csproj Log Message: Moved reflecting of added scripts and hidden fields to Page.PreRenderComplete and Page.UnLoad Index: MagicAjax NET 2.0.csproj =================================================================== RCS file: /cvsroot/magicajax/magicajax/Core/MagicAjax NET 2.0.csproj,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** MagicAjax NET 2.0.csproj 20 Jan 2006 01:35:56 -0000 1.14 --- MagicAjax NET 2.0.csproj 24 Jan 2006 22:25:04 -0000 1.15 *************** *** 124,128 **** <SubType>Code</SubType> </Compile> - <Compile Include="UI\Controls\AjaxHtmlForm.cs" /> <Compile Include="UI\Controls\ClientEventControls\BaseClientEventWrapper.cs" /> <Compile Include="UI\Controls\ClientEventControls\ClientEventControl.cs" /> --- 124,127 ---- Index: MagicAjax.csproj =================================================================== RCS file: /cvsroot/magicajax/magicajax/Core/MagicAjax.csproj,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** MagicAjax.csproj 20 Jan 2006 01:35:56 -0000 1.11 --- MagicAjax.csproj 24 Jan 2006 22:25:04 -0000 1.12 *************** *** 203,211 **** /> <File - RelPath = "UI\Controls\AjaxHtmlForm.cs" - SubType = "Code" - BuildAction = "Compile" - /> - <File RelPath = "UI\Controls\AjaxHtmlImage.cs" SubType = "Code" --- 203,206 ---- Index: AjaxCallHelper.cs =================================================================== RCS file: /cvsroot/magicajax/magicajax/Core/AjaxCallHelper.cs,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** AjaxCallHelper.cs 24 Jan 2006 16:30:26 -0000 1.22 --- AjaxCallHelper.cs 24 Jan 2006 22:25:04 -0000 1.23 *************** *** 506,546 **** } } ! ! /// <summary> ! /// Find the first and last AjaxPanel ! /// So later on (on prerender and render) we can do some extra processing ! /// before and after rendering of the AjaxPanels. This extra processing involves ! /// reflecting hidden fields, scripts and stylesheets that were added/changed ! /// on a callback. ! /// </summary> ! /// <param name="panelClientID"></param> ! public static void TrackFirstOrLastPanel(Page page, string panelClientID) { ! if (MagicAjaxContext.Current.IsBrowserSupported) ! { ! page.RegisterHiddenField("__MAGICAJAX_SCRIPT_FINGERPRINTS", String.Empty); ! page.RegisterHiddenField("__MAGICAJAX_HEAD_FINGERPRINTS", String.Empty); ! } ! ! if (!HttpContext.Current.Items.Contains("__MAGICAJAX_FIRST_PANELID")) { ! HttpContext.Current.Items.Add("__MAGICAJAX_FIRST_PANELID", panelClientID); ! if (MagicAjaxContext.Current.IsAjaxCall) ! { ! #if NET_2_0 ! page.PreRenderComplete += new EventHandler(page_PreRender); ! #else ! page.PreRender += new EventHandler(page_PreRender); ! #endif ! } } - - if (!HttpContext.Current.Items.Contains("__MAGICAJAX_LAST_PANELID")) - HttpContext.Current.Items.Add("__MAGICAJAX_LAST_PANELID", panelClientID); - else - HttpContext.Current.Items["__MAGICAJAX_LAST_PANELID"] = panelClientID; } ! /// <summary> /// Reflects registered Hidden fields if added/changed on callback --- 506,527 ---- } } ! ! public static void Page_Unload(object sender, EventArgs e) { ! // Reflect added startup-scripts and arrays AFTER reflecting the controls HTML ! if (MagicAjaxContext.Current.IsAjaxCall) { ! Page page = (Page)sender; ! ! HandleArrayDeclares(page, true); ! HandleClientStartupScripts(page, true); ! // Store scriptblock fingerprints in hidden field ! string allScriptFPs = string.Join(";", (string[])_currentScriptFPs.ToArray(typeof(string))); ! if (HttpContext.Current.Request.Form["__MAGICAJAX_SCRIPT_FINGERPRINTS"] != allScriptFPs) ! AjaxCallHelper.WriteSetFieldScript("__MAGICAJAX_SCRIPT_FINGERPRINTS", allScriptFPs); } } ! /// <summary> /// Reflects registered Hidden fields if added/changed on callback *************** *** 548,633 **** /// <param name="sender"></param> /// <param name="e"></param> ! public static void page_PreRender(object sender, EventArgs e) { Page page = (Page)sender; ! if (page != null) { ! IDictionary regFields = GetPageHiddenDictionary(page, "_registeredHiddenFields"); ! if (regFields != null) { ! foreach (DictionaryEntry fld in regFields) ! { ! string key = (string)fld.Key; ! string value = (string)fld.Value; ! // For now, don't reflect system hidden fields (starting with "__"). ! // TODO: find out why __VIEWSTATE is never registered...? ! if (key != null && !key.StartsWith("__") && value != page.Request.Form[key]) ! { ! if (page.Request.Form[key] == null) ! AjaxCallHelper.WriteAddHiddenFieldScript(key, value); ! else ! AjaxCallHelper.WriteSetFieldScript(key, value); ! } ! } } } ! } ! ! public static void PreRenderReflecting(string controlClientID, Page page, HtmlTextWriter writer) ! { ! //Reflect all kinds of scripts ! if ((string)HttpContext.Current.Items["__MAGICAJAX_FIRST_PANELID"] == controlClientID) { ! #if NET_2_0 ! // For ASP.NET 2.0, reflect the head-tag's stylesheet- or ! // title-changes back to client ! if (MagicAjaxContext.Current.IsAjaxCall) ! HandleHeader(true, page, null); ! else ! HandleHeader(false, page, writer); ! #endif ! if (MagicAjaxContext.Current.IsAjaxCall) ! { ! // Get the fingerprints of the scripts sent previous time ! if (page.Request.Form["__MAGICAJAX_SCRIPT_FINGERPRINTS"] != null) ! { ! _previousScriptFPs.AddRange(page.Request.Form["__MAGICAJAX_SCRIPT_FINGERPRINTS"].Split(';')); ! } ! ! HandleClientScriptBlocks(page, true); ! HandleOnSubmitStatements(page, true); ! } ! else ! { ! // Not in Ajax call, so create fingerprints of all script blocks ! HandleClientScriptBlocks(page, false); ! HandleArrayDeclares(page, false); ! HandleClientStartupScripts(page, false); ! HandleOnSubmitStatements(page, false); ! ! // Store scriptblock fingerprints in hidden field ! writer.WriteLine( ! string.Format("<script type='text/javascript'>AJAXCbo.SetField('__MAGICAJAX_SCRIPT_FINGERPRINTS','{0}');</script>", ! string.Join(";", (string[])_currentScriptFPs.ToArray(typeof(string))))); ! } } } ! ! public static void PostRenderReflecting(string controlClientID, Page page) { ! //Reflect client-arrays and startup-scripts added on Ajax call ! if (MagicAjaxContext.Current.IsAjaxCall && (string)HttpContext.Current.Items["__MAGICAJAX_LAST_PANELID"] == controlClientID) { ! // Reflect added startup-scripts and arrays AFTER reflecting the controls HTML ! if (MagicAjaxContext.Current.IsAjaxCall) { ! HandleArrayDeclares(page, true); ! HandleClientStartupScripts(page, true); ! ! // Store scriptblock fingerprints in hidden field ! string allScriptFPs = string.Join(";", (string[])_currentScriptFPs.ToArray(typeof(string))); ! if (page.Request.Form["__MAGICAJAX_SCRIPT_FINGERPRINTS"] != allScriptFPs) ! AjaxCallHelper.WriteSetFieldScript("__MAGICAJAX_SCRIPT_FINGERPRINTS", allScriptFPs); } } --- 529,588 ---- /// <param name="sender"></param> /// <param name="e"></param> ! public static void Page_PreRender(object sender, EventArgs e) { Page page = (Page)sender; ! ! #if NET_2_0 ! // For ASP.NET 2.0, reflect the head-tag's stylesheet- or ! // title-changes back to client ! HandleHeader(MagicAjaxContext.Current.IsAjaxCall, page); ! #endif ! if (MagicAjaxContext.Current.IsAjaxCall) { ! // Get the fingerprints of the scripts sent previous time ! if (page.Request.Form["__MAGICAJAX_SCRIPT_FINGERPRINTS"] != null) { ! _previousScriptFPs.AddRange(page.Request.Form["__MAGICAJAX_SCRIPT_FINGERPRINTS"].Split(';')); } + HandleHiddenFields(page); + HandleClientScriptBlocks(page, true); + HandleOnSubmitStatements(page, true); } ! else { ! // Not in Ajax call, so create fingerprints of all script blocks ! HandleClientScriptBlocks(page, false); ! HandleArrayDeclares(page, false); ! HandleClientStartupScripts(page, false); ! HandleOnSubmitStatements(page, false); ! // Store scriptblock fingerprints in hidden field ! page.RegisterHiddenField("__MAGICAJAX_SCRIPT_FINGERPRINTS", ! string.Join(";", (string[])_currentScriptFPs.ToArray(typeof(string)))); } } ! ! /// <summary> ! /// Reflects registered Hidden fields if added/changed on callback ! /// </summary> ! /// <param name="page"></param> ! /// <param name="reflectToClient"></param> ! private static void HandleHiddenFields(Page page) { ! IDictionary regFields = GetPageHiddenDictionary(page, "_registeredHiddenFields"); ! if (regFields != null) { ! foreach (DictionaryEntry fld in regFields) { ! string key = (string)fld.Key; ! string value = (string)fld.Value; ! // For now, don't reflect system hidden fields (starting with "__"). ! if (key != null && !key.StartsWith("__") && value != page.Request.Form[key]) ! { ! if (page.Request.Form[key] == null) ! AjaxCallHelper.WriteAddHiddenFieldScript(key, value); ! else ! AjaxCallHelper.WriteSetFieldScript(key, value); ! } } } *************** *** 808,812 **** /// </summary> /// <param name="reflectToClient"></param> ! private static void HandleHeader(bool reflectToClient, Page page, HtmlTextWriter writer) { if (page != null && page.Header != null) --- 763,767 ---- /// </summary> /// <param name="reflectToClient"></param> ! private static void HandleHeader(bool reflectToClient, Page page) { if (page != null && page.Header != null) *************** *** 866,871 **** AjaxCallHelper.WriteSetFieldScript("__MAGICAJAX_HEAD_FINGERPRINTS", allHeadFPs); else if (!reflectToClient) ! writer.WriteLine( ! string.Format("<script type='text/javascript'>AJAXCbo.SetField('__MAGICAJAX_HEAD_FINGERPRINTS','{0}');</script>", allHeadFPs)); } } --- 821,825 ---- AjaxCallHelper.WriteSetFieldScript("__MAGICAJAX_HEAD_FINGERPRINTS", allHeadFPs); else if (!reflectToClient) ! page.RegisterHiddenField("__MAGICAJAX_HEAD_FINGERPRINTS", allHeadFPs); } } |