using System.Collections.Generic;
public static void Main()
Asset asset = new Asset(390204);
<$@ Page Language=""C#"" $>
<%-- Notice how meta name=robots gets mangled in ViewOutput. --%>
if(Request.RawUrl.IndexOf("".cp-access.com"") > -1)
noIndex = ""<meta name=\""robots\"" content=\""noindex\"" />"";
var cpt_viewoutput = new CrownPeakWebAPI.cpt_viewoutput();
var response = cpt_viewoutput.GetViewOutput( asset);
Console.WriteLine("HTTP/1.1 OK");
Console.WriteLine(response);
namespace CrownPeakWebAPI
public class cpt_viewoutput : Controller
[Route("{instance}/cpt_viewoutput/{assetId}")]
public IHttpActionResult GetViewOutput(string instance, int assetId)
return GetViewOutput(Asset.Load(assetId), targetUI);
public IHttpActionResult GetViewOutput(Asset asset, string targetUI="V3")
string generatedOutput = asset.GenerateOutput();
var opts = new CodeMirrorOptions() { mode = "text/html", lineNumbers = true, readOnly = true };
opts.value = generatedOutput;
var sb = new StringBuilder(viewoutput_html_template);
sb.Replace("#{ASSET.ID}", asset.Id.ToStringInvariant());
sb.Replace("#{STATUS.NAME}", status);
sb.Replace("#{CODEMIRROROPTIONS_OUTPUT}", JsonConvert.SerializeObject(opts, Formatting.Indented));
return new ContentResult("text/html", sb.ToString());
string viewoutput_html_template = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
<html xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""en"">
<script>var cpCmsId = ""#{ASSET.ID}"";var cpCmsView='ViewOutput';</script>
<div style='background-color: #cccccc; padding: 10px; margin: 0'>Status being used for render: #{STATUS.NAME}</div>
<!-- ############################## BEGIN PAGE TEXT ############################## -->
<div id=""codeMirrorPlaceholder""></div>
<style>html,body{margin:0;}#codeMirrorPlaceholder{position:absolute;top:38px;bottom:0;width:100%;}</style>
<link rel=""stylesheet"" href=""/cpt_style/codemirror-5.2.1.css"">
<script src=""/cpt_javascript/codemirror-5.2.1-compressed.js""></script>
var doc = CodeMirror(document.getElementById('codeMirrorPlaceholder'), #{CODEMIRROROPTIONS_OUTPUT});
doc.setSize('100%', '100%');
<!-- ############################## END PAGE TEXT ############################## -->";
public class CodeMirrorOptions
public string mode { get;set; }
public bool lineNumbers { get; set; }
public bool readOnly { get; set; }
public string value { get; set; }
public Asset(int id) { this.Id = id; }
public static Asset Load(int id) { throw new NotImplementedException(); }
private Dictionary<string,string> _Fields = new Dictionary<string,string>();
public int Id { get; private set; }
public string this[string name]
if(_Fields.TryGetValue(name, out value)==true)
public string GenerateOutput()
var sb = new StringBuilder(_Fields["body"]);
public class Controller { }
public class HttpGetAttribute : System.Attribute { }
public class RouteAttribute : System.Attribute { public RouteAttribute(string route) { } }
public interface IHttpActionResult { }
public class ContentResult : IHttpActionResult
public ContentResult(string mimeType, string content) { this.MimeType = mimeType; this.Content = content; }
public override string ToString()
return "Content-Type: " + this.MimeType + "\n"
public static class StringExtensions
public static string ToStringInvariant(this int value) { return value.ToString(System.Globalization.CultureInfo.InvariantCulture); }
public static string ToStringInvariant(this Single value) { return value.ToString(System.Globalization.CultureInfo.InvariantCulture); }
public static string ToStringInvariant(this Double value) { return value.ToString(System.Globalization.CultureInfo.InvariantCulture); }
public static string ToStringInvariant(this Decimal value) { return value.ToString(System.Globalization.CultureInfo.InvariantCulture); }
public static string ToStringInvariant(this DateTime value)
return value.ToString("O", System.Globalization.CultureInfo.InvariantCulture);