From a395b47e66338b935025a996bfac29d34539626c Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Fri, 25 Feb 2011 23:52:45 -0800 Subject: [PATCH] Rendering the Model as a tree in shape tracing --HG-- branch : dev --- .../Orchard.DesignerTools.csproj | 1 + .../orchard-designertools-shapetracing.js | 24 ++++++- .../Services/ObjectDumper.cs | 16 +++-- .../Services/ShapeTracingFactory.cs | 64 ++++++++--------- .../Styles/images/menu-glyph.png | Bin 0 -> 427 bytes .../orchard-designertools-shapetracing.css | 68 ++++++++++++++++++ .../Views/ShapeTracingMeta.cshtml | 2 +- .../Views/ShapeTracingWrapper.cshtml | 6 +- 8 files changed, 139 insertions(+), 42 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.DesignerTools/Styles/images/menu-glyph.png diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj b/src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj index adbff5a92..07e058f5d 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj @@ -60,6 +60,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Scripts/orchard-designertools-shapetracing.js b/src/Orchard.Web/Modules/Orchard.DesignerTools/Scripts/orchard-designertools-shapetracing.js index 7bce98726..e7297dab8 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Scripts/orchard-designertools-shapetracing.js +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Scripts/orchard-designertools-shapetracing.js @@ -59,7 +59,7 @@ function bindTab(selector) { $('li' + selector).click(function () { var _this = $(this); - + // toggle the selected class on the tab li _this.parent().children('li').toggleClass('selected', false); _this.toggleClass('selected', true); @@ -71,11 +71,33 @@ }); } + var glyph = $(""); + $('div.model div.type').prev().prepend(glyph); + + $('div.model ul ul').toggle(false); + + $('span.expando-glyph-container').click(function () { + var __this = $(this); + + if (__this.hasClass("closed") || __this.hasClass("closing")) { + __this.parent().parent().parent().children('ul').slideDown(300, function () { __this.removeClass("opening").removeClass("closed").addClass("open"); }); + __this.addClass("opening"); + } + else { + __this.parent().parent().parent().children('ul').slideUp(300, function () { __this.removeClass("closing").removeClass("open").addClass("closed"); }); + __this.addClass("closing"); + } + + return false; + }); + bindTab('.shape'); bindTab('.model'); bindTab('.placement'); bindTab('.templates'); bindTab('.source'); bindTab('.html'); + + }); })(jQuery); diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ObjectDumper.cs b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ObjectDumper.cs index b39553cd4..5af60bf25 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ObjectDumper.cs +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ObjectDumper.cs @@ -62,15 +62,19 @@ namespace Orchard.DesignerTools.Services { private void DumpValue(object o, string name) { string formatted = FormatValue(o); _node.Add( - new XElement("div", new XAttribute("class", "name"), name), - new XElement("div", new XAttribute("class", "value"), formatted) + new XElement("h3", + new XElement("div", new XAttribute("class", "name"), name), + new XElement("div", new XAttribute("class", "value"), formatted) + ) ); } private void DumpObject(object o, string name) { _node.Add( - new XElement("div", new XAttribute("class", "name"), name), - new XElement("div", new XAttribute("class", "type"), FormatType(o.GetType())) + new XElement("h3", + new XElement("div", new XAttribute("class", "name"), name), + new XElement("div", new XAttribute("class", "type"), FormatType(o.GetType())) + ) ); if (_parents.Count >= _levels) { @@ -168,6 +172,10 @@ namespace Orchard.DesignerTools.Services { _node.Add(_node = new XElement("ul")); foreach (var key in props.Keys) { + // ignore private members (added dynmically by the shape wrapper) + if(key.ToString().StartsWith("_")) { + continue; + } Dump(props[key], key.ToString()); } _node = _node.Parent; diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ShapeTracingFactory.cs b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ShapeTracingFactory.cs index bbc2a6c87..a8ee48bad 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ShapeTracingFactory.cs +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ShapeTracingFactory.cs @@ -33,58 +33,56 @@ namespace Orchard.DesignerTools.Services { && context.ShapeType != "PlaceChildContent" && context.ShapeType != "ContentZone" && context.ShapeType != "ShapeTracingMeta") { - - var shape = context.Shape; + var shapeMetadata = (ShapeMetadata)context.Shape.Metadata; - var currentTheme = _themeManager.GetRequestTheme(_workContext.HttpContext.Request.RequestContext); - var shapeTable = _shapeTableManager.GetShapeTable(currentTheme.Id); - if(!shapeTable.Descriptors.ContainsKey(shapeMetadata.Type)) { + if (!shapeTable.Descriptors.ContainsKey(shapeMetadata.Type)) { return; } - var descriptor = shapeTable.Descriptors[shapeMetadata.Type]; - shapeMetadata.Wrappers.Add("ShapeTracingWrapper"); - - shape.Definition = descriptor.BindingSource; - - try { - if (_webSiteFolder.FileExists(descriptor.BindingSource)) { - shape.DefinitionContent = _webSiteFolder.ReadFile(descriptor.BindingSource); - } - } - catch { - // the url might be invalid in case of a code shape - } - - shape.Dump = DumpObject(shape); - } - } - - static string DumpObject(object o) { - var dumper = new ObjectDumper(6); - var el = dumper.Dump(o, "Model"); - using (var sw = new StringWriter()) { - el.WriteTo(new XmlTextWriter(sw) { Formatting = Formatting.Indented }); - return sw.ToString(); } } public void Displaying(ShapeDisplayingContext context) { - var shapeMetadata = (ShapeMetadata)context.Shape.Metadata; - - if(!shapeMetadata.Wrappers.Contains("ShapeTracingWrapper")) { + var shape = context.Shape; + var shapeMetadata = (ShapeMetadata) context.Shape.Metadata; + var currentTheme = _themeManager.GetRequestTheme(_workContext.HttpContext.Request.RequestContext); + var shapeTable = _shapeTableManager.GetShapeTable(currentTheme.Id); + + if (!shapeMetadata.Wrappers.Contains("ShapeTracingWrapper")) { return; } - if( shapeMetadata.PlacementSource != null && _webSiteFolder.FileExists(shapeMetadata.PlacementSource)) { + var descriptor = shapeTable.Descriptors[shapeMetadata.Type]; + + // dump the Shape's content + var dumper = new ObjectDumper(6); + var el = dumper.Dump(context.Shape, "Model"); + using (var sw = new StringWriter()) { + el.WriteTo(new XmlTextWriter(sw) {Formatting = Formatting.Indented}); + context.Shape._Dump = sw.ToString(); + } + + shape._Definition = descriptor.BindingSource; + + try { + if (_webSiteFolder.FileExists(descriptor.BindingSource)) { + shape._DefinitionContent = _webSiteFolder.ReadFile(descriptor.BindingSource); + } + } + catch { + // the url might be invalid in case of a code shape + } + + if (shapeMetadata.PlacementSource != null && _webSiteFolder.FileExists(shapeMetadata.PlacementSource)) { context.Shape.PlacementContent = _webSiteFolder.ReadFile(shapeMetadata.PlacementSource); } } + public void Displayed(ShapeDisplayedContext context) { } } diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Styles/images/menu-glyph.png b/src/Orchard.Web/Modules/Orchard.DesignerTools/Styles/images/menu-glyph.png new file mode 100644 index 0000000000000000000000000000000000000000..3b49ee6633da81b86a86c28f308f5d17a83d8408 GIT binary patch literal 427 zcmeAS@N?(olHy`uVBq!ia0vp^+(4|z!3-oVTo<|kDdu7)&kzm{j@u9Y9{{<@0X`wF z|NsA&l#~`0mEsqa;^vctuptb%2!!$F>leSEaBu%$PoF?{FJBjTFK1Uz2PaosM|WF$ zCkrbFb4x2zGYey5V@*vhHBBQGHEm^8O+_UofuLxRb&4fHe!&cBK+w_Av3vLKckkW- zEk_53J-^KYD&{Qkh%5$rK?sByFWs&C0~C}gag8Vm&QB{TPb^Aha7@WhN>y;nEJ`iU zFUl@fa1J(M+jMyWP+ga&i(`ny)Uy{hiZvPVv_9n4662b_j3ZZ5;r;(9VuddjZJzmW zvZ}g#L-ysZxwVe7ep^Wj?hnn}{mu3$-{Y`FGpn5W7I$;aHB9n+-t4BGB(E&_>`Ix1 zan_ZGle?XES{|?LE7WgzB^j*y`>jQo#@ek~AM`)pJ($AhK9BFo&p)>t&&bTM+;QgM c|FR0k(^b literal 0 HcmV?d00001 diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Styles/orchard-designertools-shapetracing.css b/src/Orchard.Web/Modules/Orchard.DesignerTools/Styles/orchard-designertools-shapetracing.css index f5587a687..acaeb7fdc 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Styles/orchard-designertools-shapetracing.css +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Styles/orchard-designertools-shapetracing.css @@ -138,3 +138,71 @@ ul.debuggerMenu { margin:8px 0 -8px 0; } -webkit-border-radius: 3px; -moz-border-radius: 3px; } + +.meta .model div.name +{ + display:block; + float:left; + width:30%; +} + +.meta .model ul +{ + padding:0; + margin-left:-15px; + margin:0; + list-style-type:none; +} + +.meta .model ul li +{ + padding-left:15px; +} + +.meta .model h3 +{ + margin:0; + padding:0; +} + +h3:hover +{ + background-color: #eee; +} + +.expando-glyph { + background:transparent no-repeat 0 -19px; + background-image:url(images/menu-glyph.png); + + line-height:12px; + padding-left:15px; + margin-left:-15px; +} + +.expando-glyph:hover { + background-image:url(images/menu-glyph.png); +} + +.expando-glyph-container.closed .expando-glyph { + background-image:url(images/menu-glyph.png); + background-position:0 3px; +} +.expando-glyph-container.closed .expando-glyph:hover { + background-image:url(images/menu-glyph.png); +} +.expando-glyph-container.closing .expando-glyph { + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + -webkit-transform:rotate(-90deg) translate(3px, -3px); + -moz-transform:rotate(-90deg) translate(3px, -3px); + transform:rotate(-90deg) translate(3px, -3px); +} +.expando-glyph-container.opening .expando-glyph { + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + -webkit-transform:rotate(90deg) translate(3px, 3px); + -moz-transform:rotate(90deg) translate(3px, 3px); + transform:rotate(90deg) translate(3px, 3px); +} diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Views/ShapeTracingMeta.cshtml b/src/Orchard.Web/Modules/Orchard.DesignerTools/Views/ShapeTracingMeta.cshtml index 5f56c5216..185e19c06 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Views/ShapeTracingMeta.cshtml +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Views/ShapeTracingMeta.cshtml @@ -24,7 +24,7 @@