Пример #1
0
        public static RenderRespnose RenderJs(CommandDiskSourceProvider sourceProvider, RenderOption option, RenderContext context, string RelativeUrl)
        {
            var fullname = sourceProvider.GetFullFileName(context, RelativeUrl);

            if (string.IsNullOrEmpty(fullname))
            {
                return(new RenderRespnose()
                {
                    Body = null
                });
            }

            // cache
            if (RelativeUrl.ToLower().Contains("monaco"))
            {
                context.Response.Headers["Expires"] = DateTime.UtcNow.AddDays(7).ToString("r");
            }

            if (option.EnableMultilingual && RelativeUrl.ToLower().EndsWith(option.MultilingualJsFile))
            {
                return(RenderJsLangFile(fullname, context));
            }

            System.IO.FileInfo info = new System.IO.FileInfo(fullname);

            if (info != null && info.LastWriteTime != null)
            {
                JsRenderPlan renderplan = null;

                Guid hash = Lib.Security.Hash.ComputeGuidIgnoreCase(info.LastWriteTime.ToLongTimeString());

                var cacheplan = GetJs(RelativeUrl);

                if (cacheplan != null && cacheplan.Hash == hash)
                {
                    renderplan = cacheplan;
                }

                //either not key found not hash not the same.
                if (renderplan == null)
                {
                    string fulltext = VirtualResources.ReadAllText(fullname);

                    renderplan       = new JsRenderPlan();
                    renderplan.Tasks = GetJsRenderPlan(fulltext);
                    renderplan.Hash  = hash;
                    SetJs(RelativeUrl, renderplan);
                }

                if (renderplan != null)
                {
                    string result = string.Empty;
                    foreach (var task in renderplan.Tasks)
                    {
                        result += task.Render(sourceProvider, option, context, RelativeUrl);
                    }
                    return(new RenderRespnose()
                    {
                        Body = result, ContentType = "application/javascript"
                    });
                }
            }
            else
            {
                return(new RenderRespnose()
                {
                    Body = null
                });
            }

            return(new RenderRespnose()
            {
                Body = null
            });
        }
Пример #2
0
        public static List <IServerTask> GetJsRenderPlan(CommandDiskSourceProvider sourceProvider, RenderOption option, RenderContext context, string fullfilename, string relativeUrl)
        {
            List <IServerTask> result = new List <IServerTask>();

            List <preTask> pretask = new List <preTask>();

            string source = VirtualResources.ReadAllText(fullfilename);

            if (string.IsNullOrWhiteSpace(source))
            {
                result.Add(new StringTask()
                {
                    content = ""
                });
                return(result);
            }

            foreach (var item in TaskContainer.list)
            {
                var startEndList = GetStartEndList(source, item.Key);

                foreach (var one in startEndList)
                {
                    var line = source.Substring(one.Key, one.Value - one.Key + 1);

                    var paras = GetParas(line);

                    var taskInstance = Activator.CreateInstance(item.Value) as IServerTask;
                    taskInstance.paras = paras;

                    pretask.Add(new preTask()
                    {
                        start = one.Key, end = one.Value, Task = taskInstance
                    });
                }
            }

            if (pretask.Count() > 0)
            {
                int currentIndex = 0;
                foreach (var item in pretask.OrderBy(o => o.start))
                {
                    int len = item.start - currentIndex;

                    if (len > 0)
                    {
                        string before = source.Substring(currentIndex, len);
                        result.Add(new StringTask()
                        {
                            content = before
                        });
                    }

                    result.Add(item.Task);

                    currentIndex = item.end + 1;
                }
            }
            else
            {
                result.Add(new StringTask()
                {
                    content = source
                });
            }

            return(result);
        }