public override string ProcessTag(NDjango.Interfaces.IContext context, string content, object[] parms) { var htmlHelperOption = context.tryfind("Html"); if (htmlHelperOption == null) return ""; var htmlHelper = (HtmlHelper)htmlHelperOption.Value; var string_writer = new StringWriter(); var writer = htmlHelper.ViewContext.Writer; try { htmlHelper.ViewContext.Writer = string_writer; var form = htmlHelper.BeginForm(); string_writer.Flush(); var start = string_writer.ToString(); string_writer = new StringWriter(); htmlHelper.ViewContext.Writer = string_writer; form.EndForm(); string_writer.Flush(); var end = string_writer.ToString(); return start + content + end; } finally { htmlHelper.ViewContext.Writer = writer; } }
/// <summary> /// Creates a new node provider /// </summary> /// <param name="parser"></param> /// <param name="buffer">buffer to watch</param> public NodeProvider(IProjectHandler project, string filename, NDjango.TypeResolver.ITypeResolver type_resolver) { Project = project; this.type_resolver = type_resolver; Filename = filename; // we need to run rebuildNodes on a separate thread. Using timer // for this seems to be an overkill, but we need the timer anyway so - why not parserTimer = new Timer(rebuildNodes, null, 0, Timeout.Infinite); }
public override string GenerateUrl(string pathTemplate, string[] parameters, NDjango.Interfaces.IContext context) { var htmlHelperOption = context.tryfind("Html"); if (htmlHelperOption == null) return ""; var htmlHelper = (HtmlHelper)htmlHelperOption.Value; var anchor = LinkExtensions.ActionLink(htmlHelper, pathTemplate, pathTemplate, parameters[0]).ToHtmlString(); //retriving relativePath from anchor element. var startindex = anchor.IndexOf("href") + 6; var endIndex = anchor.IndexOf("\"", startindex); return anchor.Substring(startindex, endIndex - startindex); }
/// <summary> /// Creates a new node provider /// </summary> /// <param name="parser"></param> /// <param name="buffer">buffer to watch</param> public NodeProvider(IProjectHandler project, string filename, NDjango.TypeResolver.ITypeResolver type_resolver) { Project = project; this.type_resolver = type_resolver; Filename = filename; // we need to run rebuildNodes on a separate thread. Using timer // for this seems to be an overkill, but we need the timer anyway so - why not parserTimer = new Timer(rebuildNodes, null, 0, Timeout.Infinite); djangoSymbolLibrary = new NDjangoSymbolLibrary(); //GlobalServices.ObjectManager.RegisterSimpleLibrary(djangoSymbolLibrary, out libraryCookie); }
public override string GenerateUrl(string pathTemplate, string[] parameters, NDjango.Interfaces.IContext context) { var contextOption = context.tryfind(NDjangoView.aspmvcContextKey); if (contextOption == null || contextOption.Value == null) throw new ApplicationException("Unable to locate asp mvc request context. Did someone modify djangocontext." + NDjangoView.aspmvcContextKey + "?"); RequestContext requestContext = contextOption.Value as RequestContext; if (parameters.Length > 1) throw new ApplicationException("Only 0 or 1 parameters are supported by the asp.mvc version of the URL tag"); else if (parameters.Length == 1) return new UrlHelper(requestContext).Action(pathTemplate, parameters[0]); else return new UrlHelper(requestContext).Action(pathTemplate); }
/// <summary> /// Processes the tag. /// </summary> /// <param name="content">The content.</param> /// <param name="parms">The parms.</param> /// <returns></returns> public override string ProcessTag(NDjango.Interfaces.IContext context, string content, object[] parms) { IValidator v = null; foreach (string ns in parms) v = v == null ? ValidationRepository.Instance.GetValidatorForNamespace(ns) : v.Merge(ValidationRepository.Instance.GetValidatorForNamespace(ns)); return new StringBuilder() .AppendLine("\r\n<script type=\"text/javascript\">") .AppendLine("if (validation == undefined) var validation = new Array();") .AppendLine(JSEmitter.Instance.Emit(v, "validation[\"" + v.Name + "\"]")) .AppendLine("</script>") .ToString(); }
public override string ProcessTag(NDjango.Interfaces.IContext context, string content, object[] parms) { var htmlHelperOption = context.tryfind("Html"); if (htmlHelperOption == null) return ""; var htmlHelper = (HtmlHelper)htmlHelperOption.Value; var string_writer = new StringWriter(); var writer = htmlHelper.ViewContext.Writer; try { htmlHelper.ViewContext.Writer = string_writer; htmlHelper.RenderPartial(parms[0].ToString()); string_writer.Flush(); } finally { htmlHelper.ViewContext.Writer = writer; } return string_writer.ToString(); }
public override string ProcessTag(NDjango.Interfaces.IContext context, string content, object[] parms) { var htmlHelperOption = context.tryfind("Html"); if (htmlHelperOption == null) return ""; var htmlHelper = (HtmlHelper)htmlHelperOption.Value; var metadata_provider = new DataAnnotationsModelMetadataProvider(); if (context.ModelType == null) htmlHelper.ViewData.ModelMetadata = null; else { var model = Activator.CreateInstance(context.ModelType.Value); htmlHelper.ViewData.ModelMetadata = metadata_provider.GetMetadataForType(() => model, context.ModelType.Value); } var result = htmlHelper.Label(parms[0].ToString()); if (result == null) return ""; else return result.ToHtmlString(); }
public void Run(NDjango.Interfaces.ITemplateManager manager) { if (ResultForDesigner != null) { ValidateSyntaxTree(manager); return; } var context = new Dictionary<string, object>(); if (ContextValues != null) for (int i = 0; i <= ContextValues.Length - 2; i += 2) context.Add(ContextValues[i].ToString(), ContextValues[i + 1]); try { if (resultGetter != null) Result = resultGetter(); Assert.AreEqual(Result[0], runTemplate(manager, Template, context), "** Invalid rendering result"); //if (Vars.Length != 0) // Assert.AreEqual(Vars, manager.GetTemplateVariables(Template), "** Invalid variable list"); } catch (Exception ex) { // Result[0] is either some object, in which case this shouldn't have happened // or it's the type of the exception the calling code expects. if (resultGetter != null) Result = resultGetter(); Assert.AreEqual(Result[0], ex.GetType(), "Exception: " + ex.Message); } }
public override string GenerateUrl(string pathTemplate, string[] parameters, NDjango.Interfaces.IContext context) { return rootDir + String.Format(pathTemplate.Trim('/'), parameters); }
/// <summary> /// Parses the template /// </summary> /// <param name="template">a reader with the template</param> /// <returns>A list of the syntax nodes</returns> public FSharpList<INodeImpl> ParseTemplate(string filename, NDjango.TypeResolver.ITypeResolver resolver) { return parser.GetTemplate(filename, resolver, new NDjango.TypeResolver.ModelDescriptor(GetDefaultModel(filename))).Nodes; }
public static string runTemplate(NDjango.Interfaces.ITemplateManager manager, string templateName, IDictionary<string,object> context) { var template = manager.RenderTemplate(templateName, context); string retStr = template.ReadToEnd(); return retStr; }
public override string GenerateUrl(string formatString, string[] parameters, NDjango.Interfaces.IContext context) { return "/appRoot/" + String.Format(formatString.Trim('/'), parameters); }
/// <summary> /// Updates the manager with the one returned by rendering operations /// </summary> /// <param name="manager">The manager.</param> /// <param name="viewContext">The view context.</param> protected virtual void ReturnManager(NDjango.Interfaces.ITemplateManager manager, ViewContext viewContext) { viewContext.HttpContext.Items[NDjangoHandle.MANAGER_HANDLE] = manager; }
public override string ProcessTag(NDjango.Interfaces.IContext context, string contents, object[] parms) { StringBuilder res = new StringBuilder(); foreach (object o in parms) res.Append(o); return res .Append(contents) .ToString(); }
private void ValidateSyntaxTree(NDjango.Interfaces.ITemplateManager manager) { ITemplate template = manager.GetTemplate(Template, new TestTyperesolver(), new NDjango.TypeResolver.ModelDescriptor(new NDjango.TypeResolver.IDjangoType[] { new NDjango.TypeResolver.CLRTypeDjangoType("Standard", typeof(EmptyClass)) })); //the same logic responsible for retriving nodes as in NodeProvider class (DjangoDesigner). List<INode> nodes = GetNodes(template.Nodes.ToList<INodeImpl>().ConvertAll (node => (INode)node)).FindAll(node => (node is ICompletionValuesProvider) || (node.NodeType == NodeType.ParsingContext) || (node.ErrorMessage.Message != "")); List<DesignerData> actualResult = nodes.ConvertAll( node => { var value_provider = node as ICompletionValuesProvider; var values = value_provider == null ? new List<string>() : value_provider.Values; List<string> contextValues = new List<string>(values); if (node.NodeType == NodeType.ParsingContext) { contextValues.InsertRange(0 ,(node.Context.TagClosures)); return new DesignerData(node.Position, node.Length, contextValues.ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message); } else if (node.NodeType == NodeType.Reference) { return new DesignerData(node.Position, node.Length, GetModelValues(node.Context.Model, RecursionDepth).ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message); } else return new DesignerData(node.Position, node.Length, new List<string>(values).ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message); }); for (int i = 0; i < actualResult.Count; i++) { if (actualResult[i].Values.Length == 0) continue; Assert.AreEqual(ResultForDesigner[i].Length, actualResult[i].Length, "Invalid Length"); Assert.AreEqual(ResultForDesigner[i].Position, actualResult[i].Position, "Invalid Position"); Assert.AreEqual(ResultForDesigner[i].Severity, actualResult[i].Severity, "Invalid Severity"); Assert.AreEqual(ResultForDesigner[i].ErrorMessage, actualResult[i].ErrorMessage, "Invalid ErrorMessage"); Assert.AreEqual(ResultForDesigner[i].Values, actualResult[i].Values, "Invalid Values Array " + i); } }
private static List<string> GetModelValues(NDjango.TypeResolver.IDjangoType model, int recursionDepth) { List<string> result = new List<string>(); int remainingSteps = recursionDepth - 1; foreach (var member in model.Members) { if (remainingSteps > 0) { result.Add(member.Name); result.AddRange(GetModelValues(member, remainingSteps)); } else { result.Add(member.Name); } } return result; }
public string runTemplate(NDjango.Interfaces.ITemplateManager manager, string templateName, IDictionary<string,object> context) { Stopwatch stopwatch = new Stopwatch(); string retStr = ""; stopwatch.Start(); for (int i = 0; i < 1; i++) { var template = manager.RenderTemplate(templateName, context); retStr = template.ReadToEnd(); } using (TextWriter stream = System.IO.File.AppendText("Timers.txt")) stream.WriteLine(Name + "," + stopwatch.ElapsedTicks); return retStr; }
public DjangoView(NDjango.Interfaces.ITemplateManager iTemplateManager, string viewPath) { this.iTemplateManager = iTemplateManager; this.viewPath = viewPath; }
private void ValidateSyntaxTree(NDjango.Interfaces.ITemplateManager manager) { ITemplate template = manager.GetTemplate(Template); //the same logic responsible for retriving nodes as in NodeProvider class (DjangoDesigner). List<INode> nodes = GetNodes(template.Nodes.ToList<INodeImpl>().ConvertAll (node => (INode)node)).FindAll(node => (node.Values.ToList().Count != 0) || (node.NodeType == NodeType.ParsingContext) || (node.ErrorMessage.Message != "")); List<DesignerData> actualResult = nodes.ConvertAll( node => { List<string> contextValues = new List<string>(node.Values); if (node.NodeType == NodeType.ParsingContext) { contextValues.InsertRange(0 ,((ParserNodes.ParsingContextNode)node).Context.TagClosures); return new DesignerData(node.Position, node.Length, contextValues.ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message); } else return new DesignerData(node.Position, node.Length, new List<string>(node.Values).ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message); }); for (int i = 0; i < actualResult.Count; i++) { if (actualResult[i].Values.Length == 0) continue; Assert.AreEqual(actualResult[i].Length, ResultForDesigner[i].Length, "Invalid Length"); Assert.AreEqual(actualResult[i].Position, ResultForDesigner[i].Position, "Invalid Position"); Assert.AreEqual(actualResult[i].Severity, ResultForDesigner[i].Severity, "Invalid Severity"); Assert.AreEqual(actualResult[i].ErrorMessage, ResultForDesigner[i].ErrorMessage, "Invalid ErrorMessage"); Assert.AreEqual(actualResult[i].Values, ResultForDesigner[i].Values, "Invalid Values"); } }
public void AnalyzeBlockNameNode(NDjango.Interfaces.ITemplateManager manager) { ITemplate template = manager.GetTemplate(Template); INode bn_node = GetNodes(template.Nodes.ToList<INodeImpl>().ConvertAll (node => (INode)node)).Find(node => node.NodeType == NodeType.BlockName); var value_provider = bn_node as ICompletionValuesProvider; var values = (value_provider == null) ? new List<string>() : value_provider.Values; List<string> blockNames = new List<string>(values); Assert.Greater(0, blockNames.Count(), "The dropdown with block names is empty"); foreach(string name in Result) Assert.Contains(name, blockNames, "Invalid block names list: there is no " + name); }
private void ValidateSyntaxTree(NDjango.Interfaces.ITemplateManager manager) { ITemplate template = manager.GetTemplate(Template); //the same logic responsible for retriving nodes as in NodeProvider class (DjangoDesigner). List<INode> nodes = GetNodes(template.Nodes.ToList<INodeImpl>().ConvertAll(node => (INode)node)); List<DesignerData> actualResult = nodes.ConvertAll( node => new DesignerData(node.Position, node.Length, new List<string>(node.Values).ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message)); for (int i = 0; i < nodes.Count; i++) { Assert.AreEqual(actualResult[i].Length, ResultForDesigner[i].Length, "Invalid Length"); Assert.AreEqual(actualResult[i].Position, ResultForDesigner[i].Position, "Invalid Position"); Assert.AreEqual(actualResult[i].Severity, ResultForDesigner[i].Severity, "Invalid Severity"); Assert.AreEqual(actualResult[i].ErrorMessage, ResultForDesigner[i].ErrorMessage, "Invalid ErrorMessage"); Assert.AreEqual(actualResult[i].Values, ResultForDesigner[i].Values, "Invalid Values"); } }