Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        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();
        }
Exemplo n.º 7
0
        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();
        }
Exemplo n.º 8
0
        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();
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 10
0
 public override string GenerateUrl(string pathTemplate, string[] parameters, NDjango.Interfaces.IContext context)
 {
     return rootDir + String.Format(pathTemplate.Trim('/'), parameters);
 }
Exemplo n.º 11
0
 /// <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;
 }
Exemplo n.º 12
0
 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;
 }
Exemplo n.º 13
0
 public override string GenerateUrl(string formatString, string[] parameters, NDjango.Interfaces.IContext context)
 {
     return "/appRoot/" + String.Format(formatString.Trim('/'), parameters);
 }
Exemplo n.º 14
0
 /// <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;
 }
Exemplo n.º 15
0
            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();
            }
Exemplo n.º 16
0
        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);
            }
        }
Exemplo n.º 17
0
 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;
 }
Exemplo n.º 18
0
 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;
 }
Exemplo n.º 19
0
 public DjangoView(NDjango.Interfaces.ITemplateManager iTemplateManager, string viewPath)
 {
     this.iTemplateManager = iTemplateManager;
     this.viewPath = viewPath;
 }
Exemplo n.º 20
0
        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");
            }
        }
Exemplo n.º 21
0
 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);
 }
Exemplo n.º 22
0
        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");
            }
        }