// // YavscAjaxHelper.cs // // Author: // Paul Schneider // // Copyright (c) 2015 GNU GPL // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . using System; using System.Web.Mvc; using System.Collections.Generic; using Yavsc.Model.Messaging; using System.Runtime.Serialization.Json; using System.IO; using System.Text; using System.Globalization; using System.Diagnostics.CodeAnalysis; using System.Web; namespace Yavsc.Helpers { /// /// Yavsc ajax helper. /// public static class YavscAjaxHelper { /// /// Notify the specified helper, message and click_action. /// /// Helper. /// Message. /// Click action. public static void Notify(this AjaxHelper helper, object message, string click_action=null) { if (helper.ViewData ["Notifications"] == null) helper.ViewData ["Notifications"] = new List (); (helper.ViewData ["Notifications"] as List).Add ( new Notification { body = QuoteJavascriptString((string)message), click_action = click_action } ) ; } /// /// Globalizations the script. /// /// The script. /// Ajax helper. public static MvcHtmlString YaGlobalizationScript(this AjaxHelper ajaxHelper) { return YaGlobalizationScript(ajaxHelper, CultureInfo.CurrentCulture); } /// /// Globalizations the script. /// /// The script. /// Ajax helper. /// Culture info. [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "ajaxHelper", Justification = "This is an extension method")] public static MvcHtmlString YaGlobalizationScript(this AjaxHelper ajaxHelper, CultureInfo cultureInfo) { return YaGlobalizationScriptHelper(AjaxHelper.GlobalizationScriptPath, cultureInfo); } internal static MvcHtmlString YaGlobalizationScriptHelper(string scriptPath, CultureInfo cultureInfo) { if (cultureInfo == null) { throw new ArgumentNullException("cultureInfo"); } // references the global script : TagBuilder tagBuilder = new TagBuilder("script"); tagBuilder.MergeAttribute("type", "text/javascript"); string src = VirtualPathUtility.AppendTrailingSlash(scriptPath) + "globalize.js"; tagBuilder.MergeAttribute("src", VirtualPathUtility.ToAbsolute (src)); TagBuilder tagCurrentBuilder = new TagBuilder("script"); string srccurrent = VirtualPathUtility.AppendTrailingSlash(scriptPath) + "cultures/globalize.culture." + HttpUtility.UrlEncode(cultureInfo.Name) + ".js"; tagCurrentBuilder.MergeAttribute("src", VirtualPathUtility.ToAbsolute (srccurrent)); string html = tagBuilder.ToString(TagRenderMode.Normal)+tagCurrentBuilder.ToString(TagRenderMode.Normal); return new MvcHtmlString(html); } /// /// Quotes the javascript string. /// /// The javascript string. /// String. public static string QuoteJavascriptString(object str) { string tmpstr = (string) str; tmpstr = tmpstr.Replace ("\n", "\\n"); if (tmpstr.Contains ("'")) if (tmpstr.Contains ("\"")) return "'" + tmpstr.Replace ("'", "\\'") + "'"; else return "\"" + tmpstr + "\""; return "'" + tmpstr + "'"; } /// /// Js the son string. /// /// The son string. /// Helper. /// Object. public static string JSonString(this AjaxHelper helper, object obj) { string result = null; DataContractJsonSerializer ser = new DataContractJsonSerializer (obj.GetType()); var e = Encoding.UTF8; using (MemoryStream streamQuery = new MemoryStream ()) { ser.WriteObject (streamQuery, obj); streamQuery.Seek (0, SeekOrigin.Begin); using (StreamReader sr = new StreamReader (streamQuery)) { result = sr.ReadToEnd (); } } return result; } /// /// Js the string. /// /// The string. /// Helper. /// Text. public static string JString(this AjaxHelper helper, object text) { return QuoteJavascriptString ((string)text); } } }