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 }); }
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); }