public void Bind(string key, SillyView view)
        {
            if (view == null ||
                view.Html == null)
            {
                TextNode errorNode = new TextNode("Error binding " + key + ": no view or HTML to bind");

                BindVals[key] = new SillyTextAttribute(key, errorNode);

                return;
            }

            BindVals[key] = new SillyWidgetAttribute(key, view.Html.Root);
        }
        public async Task <bool> BindAsync(string key, string bucket, string bucketKey, Amazon.RegionEndpoint endpoint)
        {
            SillyView s3View = new SillyView();

            bool loaded = await s3View.LoadS3Async(bucket, bucketKey, endpoint);

            if (loaded)
            {
                Bind(key, s3View);
            }
            else
            {
                Bind(key, "Silly view not found: " + key);
            }

            return(loaded);
        }
        public SillyView Load(string filepath)
        {
            if (filepath == null ||
                filepath.Length == 0)
            {
                throw new SillyException(SillyHttpStatusCode.NotFound, "Invalid view file specified, either NULL or empty");
            }

            if (!File.Exists(filepath))
            {
                throw new SillyException(SillyHttpStatusCode.NotFound, "View file '" + filepath + "' does not exist");
            }

            SillyView  view       = null;
            FileStream fileStream = new FileStream(filepath, FileMode.Open);

            using (StreamReader reader = new StreamReader(fileStream))
            {
                view = new SillyView();
                view.Load(reader);
            }

            return(view);
        }