Exemplo n.º 1
0
        public PageZone(
            PageElementDependencies dependencies,
            PageElement parent,
            IRegion region,
            IElement content,
            IPageData pageData)
            : base(dependencies, parent, region, pageData)
        {
            _dataContextBuilder = pageData.BeginAddElement(Element, this);

            content = content ?? region.Content;
            var layout    = content as ILayout;
            var component = content as IComponent;

            if (layout != null)
            {
                var pageLayout = new PageLayout(dependencies, this, layout, null, pageData);
                _writeContent = pageLayout.WritePageArea;
                Children      = new PageElement[] { pageLayout };
            }
            else if (component != null)
            {
                var pageComponent = new PageComponent(dependencies, this, component, pageData);
                _writeContent = pageComponent.WritePageArea;
                Children      = new PageElement[] { pageComponent };
            }
            else
            {
                Children      = null;
                _writeContent = (rc, pa) => WriteResult.Continue();
            }

            pageData.EndAddElement(Element);
        }
Exemplo n.º 2
0
        public PageData(IPageDependenciesFactory dependencies, Page page)
        {
            _page = page;

            var assetDeployment = page.AssetDeployment;

            if (page.Module != null)
            {
                assetDeployment = page.Module.AssetDeployment;
            }

            if (assetDeployment == AssetDeployment.Inherit)
            {
                assetDeployment = AssetDeployment.PerModule;
            }

            if (assetDeployment == AssetDeployment.PerModule && page.Module == null)
            {
                assetDeployment = AssetDeployment.PerWebsite;
            }

            RootDataContextBuilder = dependencies.DataContextBuilderFactory.Create(page);

            _currentState = new State
            {
                MessagePrefix      = page.Name + ": ",
                AssetDeployment    = assetDeployment,
                DataContextBuilder = RootDataContextBuilder,
                Module             = page.Module
            };
        }
Exemplo n.º 3
0
        public DataContext Initialize(
            Action <IReusable> disposeAction,
            IRenderContext renderContext,
            IDataContextBuilder dataContextBuilder,
            DataContext parent)
        {
            if (dataContextBuilder == null)
            {
                throw new ArgumentNullException("dataContextBuilder");
            }

            if (renderContext == null)
            {
                throw new ArgumentNullException("renderContext");
            }

            Initialize(disposeAction);

            _properties.Clear();
            _renderContext     = renderContext;
            _parent            = parent;
            DataContextBuilder = dataContextBuilder;

            return(this);
        }
Exemplo n.º 4
0
        public IDataContext Create(
            IRenderContext renderContext,
            IDataContextBuilder dataContextBuilder,
            DataContext parent)
        {
            var dataContext = (DataContext)Queue.DequeueOrDefault()
                              ?? new DataContext(_dictionaryFactory, this, _dataDependencyFactory, _idManager);

            return(dataContext.Initialize(DisposeAction, renderContext, dataContextBuilder, parent));
        }
Exemplo n.º 5
0
        public virtual void Initialize()
        {
            var data = new PageData(_dependencies, this);

            var elementDependencies = new PageElementDependencies
            {
                DictionaryFactory     = _dependencies.DictionaryFactory,
                DataDependencyFactory = _dependencies.DataDependencyFactory
            };

            if (Layout != null)
            {
                var regionElements = new List <Tuple <string, IRegion, IElement> >();
                foreach (var zoneName in Layout.GetZoneNames())
                {
                    var element = _layoutZones != null && _layoutZones.ContainsKey(zoneName)
                        ? _layoutZones[zoneName]
                        : Layout.GetElement(zoneName);
                    var region = element as IRegion;

                    if (region == null)
                    {
                        region = Layout.GetRegion(zoneName);
                    }
                    else
                    {
                        element = null;
                    }

                    regionElements.Add(new Tuple <string, IRegion, IElement>(zoneName, region, element));
                }
                _layout = new PageLayout(elementDependencies, null, Layout, regionElements, data);
            }

            if (_components == null)
            {
                _pageComponents = new PageComponent[0];
            }
            else
            {
                _pageComponents = _components
                                  .ToList()
                                  .Select(c => new PageComponent(elementDependencies, null, c, data))
                                  .ToArray();

                foreach (var component in _components)
                {
                    data.BeginAddElement(component, null);
                    data.EndAddElement(component);
                }
            }

            _dataContextBuilder = data.RootDataContextBuilder;
            _dataContextBuilder.ResolveSupplies();

            _referencedModules = new List <IModule>();
            var styles    = _dependencies.CssWriterFactory.Create();
            var functions = _dependencies.JavascriptWriterFactory.Create();

#if TRACE
            System.Diagnostics.Trace.WriteLine("Page '" + Name + "' asset deployment");
#endif
            var elements = new HashSet <string>();

            foreach (var element in data.Elements)
            {
                var name = string.IsNullOrEmpty(element.Element.Name)
                    ? element.Element.GetType().Name
                    : element.Element.Name;

                var elementUniqueName = element.Element.ElementType.ToString() + ":" + name;
                if (!elements.Add(elementUniqueName))
                {
                    continue;
                }

                string deployment;
                switch (element.AssetDeployment)
                {
                case AssetDeployment.PerWebsite:
                    deployment = "website assets";
                    _dependencies.AssetManager.AddWebsiteAssets(element.Element);
                    break;

                case AssetDeployment.PerModule:
                    deployment = element.Module.Name + " module";
                    _dependencies.AssetManager.AddModuleAssets(element.Element, element.Module);
                    if (_referencedModules.All(m => m.Name != element.Module.Name))
                    {
                        _referencedModules.Add(element.Module);
                    }
                    break;

                case AssetDeployment.PerPage:
                    deployment = "page assets";
                    _dependencies.AssetManager.AddPageAssets(element.Element, this);
                    break;

                case AssetDeployment.InPage:
                    deployment = "page head";
                    element.Element.WriteStaticCss(styles);
                    element.Element.WriteStaticJavascript(functions);
                    break;

                default:
                    deployment = element.AssetDeployment.ToString().ToLower();
                    break;
                }

#if DEBUG
                System.Diagnostics.Trace.WriteLine("   " + name + " deployed to " + deployment);
#endif
            }

            _inPageCssLines    = styles.ToLines();
            _inPageScriptLines = functions.ToLines();
        }
Exemplo n.º 6
0
 IDataContext IDataContext.CreateChild(IDataContextBuilder dataContextBuilder)
 {
     return(_dataContextFactory.Create(_renderContext, dataContextBuilder, this));
 }
Exemplo n.º 7
0
 public IDataContext Create(
     IRenderContext renderContext,
     IDataContextBuilder dataContextBuilder)
 {
     return(Create(renderContext, dataContextBuilder, null));
 }
Exemplo n.º 8
0
 IDataContext IDataContext.CreateChild(IDataContextBuilder dataContextBuilder)
 {
     throw new Exception("You can not create child data contexts for a service endpoint");
 }
Exemplo n.º 9
0
 public IDataContext CreateChild(IDataContextBuilder dataContextBuilder = null)
 {
     return(this);
 }