Пример #1
0
        /// <summary>
        /// Creates a new Checkbox control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        /// <param name="datasource">The checkbox datasource.</param>
        public FWCheckboxControl(FWRequestContext requestContext, object model, ModelMetadata metadata, IEnumerable <FWDatasourceItem> datasource)
            : base(requestContext, model, metadata)
        {
            _values = new Dictionary <string, string>();
            foreach (var item in datasource)
            {
                _values.Add(item.Id, item.Value);
            }

            if (FWReflectionHelper.IsCollection(metadata.ModelType))
            {
                var list = model as IEnumerable;
                foreach (var item in list)
                {
                    _selected.Add(item.ToString());
                }
            }
            else
            {
                if (model != null)
                {
                    _selected.Add(model.ToString());
                }
            }
        }
Пример #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FWListController" />.
 /// </summary>
 /// <param name="memoryCache">The memory cache service reference.</param>
 /// <param name="serviceProvider">The service provider.</param>
 /// <param name="urlHelperFactory">The url helper factory.</param>
 /// <param name="actionAccessor">The action accessor.</param>
 /// <param name="metadataProvider">The model metadata provider.</param>
 public FWListController(IMemoryCache memoryCache, IServiceProvider serviceProvider,
                         IUrlHelperFactory urlHelperFactory, IActionContextAccessor actionAccessor, IModelMetadataProvider metadataProvider)
 {
     _memoryCache     = memoryCache;
     _serviceProvider = serviceProvider;
     _requestContext  = new FWRequestContext(urlHelperFactory, actionAccessor, metadataProvider);
 }
Пример #3
0
 /// <summary>
 /// Creates a new Radio control.
 /// </summary>
 /// <param name="requestContext">The request helper.</param>
 /// <param name="model">The current model.</param>
 /// <param name="metadata">The model metadata.</param>
 public FWRadioControl(FWRequestContext requestContext, object model, ModelMetadata metadata)
     : base(requestContext, model, metadata)
 {
     if (FWReflectionHelper.CheckType <bool>(metadata.ModelType))
     {
         _isBoolean = true;
         _values    = new Dictionary <string, string>
         {
             { "true", GetModelResource("TRUE") },
             { "false", GetModelResource("FALSE") }
         };
         if (model != null)
         {
             _selected = model.ToString();
         }
     }
     else if (FWReflectionHelper.IsEnum(metadata.ModelType))
     {
         var enumDictionary = FWEnumHelper.GetEnumAsDictonary(metadata.ModelType);
         _values = new Dictionary <string, string>();
         // Gets the resource values for the enum items.
         foreach (var item in enumDictionary)
         {
             _values.Add(item.Key, GetModelResource(item.Value));
         }
         _selected = FWEnumHelper.GetValues(model as Enum).FirstOrDefault();
     }
     else
     {
         throw new FWMissingDatasourceException(Id);
     }
 }
Пример #4
0
 /// <summary>
 /// Creates a new control.
 /// </summary>
 /// <param name="requestContext">The request helper.</param>
 /// <param name="model">The current model.</param>
 /// <param name="metadata">The model metadata.</param>
 public FWInputControlFactory(FWRequestContext requestContext, object model, ModelMetadata metadata)
 {
     _requestContext = requestContext;
     _modelType      = FWReflectionHelper.GetUnderlyingType(metadata.ModelType);
     _model          = model;
     _metadata       = metadata;
 }
Пример #5
0
 /// <summary>
 /// Creates a new Currency control.
 /// </summary>
 /// <param name="requestContext">The request helper.</param>
 /// <param name="model">The current model.</param>
 /// <param name="metadata">The model metadata.</param>
 public FWCurrencyControl(FWRequestContext requestContext, object model, ModelMetadata metadata)
     : base(requestContext, model, metadata)
 {
     if (ModelType != FWKnownTypes.Decimal)
     {
         throw new ArgumentException("Currency must use decimal properties.");
     }
 }
Пример #6
0
        /// <summary>
        /// Creates a new Display control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        public FWDisplayControl(FWRequestContext requestContext, object model, ModelMetadata metadata)
            : base(metadata)
        {
            Name = metadata.PropertyName;

            _requestContext = requestContext;
            _modelType      = FWReflectionHelper.GetUnderlyingType(metadata.ModelType);
            _model          = model;
            _metadata       = metadata;
        }
Пример #7
0
        /// <summary>
        /// Creates a new List control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="metadata">The model metadata.</param>
        /// <param name="model">The current model.</param>
        public FWListControl(FWRequestContext requestContext, ModelMetadata metadata, IEnumerable model)
        {
            RequestContext = requestContext;
            Data           = model;

            if (model is IFWPagination pagination)
            {
                _paginator = new FWPaginator(pagination);
            }
        }
        /// <summary>
        /// Creates a new DetailTable control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        public FWDetailTableControl(FWRequestContext requestContext, IEnumerable model, ModelMetadata metadata)
            : base(requestContext, model, metadata)
        {
            // Sets the sizes of columns of the table to be defined by the user.
            AutoSizeColumns = false;

            if (_model == null)
            {
                _model = Activator.CreateInstance(metadata.ModelType.GetGenericArguments()[0]);
            }
        }
Пример #9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="FWInputControl" />.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        protected FWInputControl(FWRequestContext requestContext, object model, ModelMetadata metadata)
            : base(metadata)
        {
            RequestContext = requestContext;
            Name           = metadata.PropertyName;

            Model         = model;
            DisplayName   = metadata.DisplayName;
            ModelType     = FWReflectionHelper.GetUnderlyingType(metadata.ModelType);
            ContainerType = metadata.ContainerType;
            IsRequired    = metadata.IsRequired();
            IsReadOnly    = metadata.IsReadOnly;
        }
Пример #10
0
        /// <summary>
        /// Creates a new Grid control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="metadata">The model metadata.</param>
        /// <param name="options">Initialization options for the grid.</param>
        public FWGridControl(FWRequestContext requestContext, ModelMetadata metadata, FWGridOptions options)
            : base(requestContext, null, metadata, options.Id)
        {
            _fullRender = true;
            _cacheKey   = options.CacheKey;

            // Checks if the filter has a pagination.
            if (_pagination.IsAssignableFrom(options.FilterType))
            {
                var dataOptions = Activator.CreateInstance(options.FilterType);
                InitializeDataFiltering(dataOptions as IFWPagination);
            }
        }
Пример #11
0
        /// <summary>
        /// Creates a new Grid control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="metadata">The model metadata.</param>
        /// <param name="model">The current model.</param>
        public FWGridControl(FWRequestContext requestContext, ModelMetadata metadata, IEnumerable model)
            : base(requestContext, model, metadata)
        {
            if (model is IFWPagination pagination)
            {
                InitializeDataFiltering(pagination);
            }

            if (model is IFWSelectable selectable)
            {
                _selection = selectable.Selected;
            }
        }
Пример #12
0
        /// <summary>
        /// Creates a new Table.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        /// <param name="id">The control id.</param>
        public FWTableControl(FWRequestContext requestContext, IEnumerable model, ModelMetadata metadata, string id)
            : base(id)
        {
            //if (!FWReflectionHelper.IsCollection(metadata.ModelType))
            //    throw new FWInvalidPropertyTypeException(metadata.PropertyName, FWKnownTypes.IEnumerable);

            Metadata       = metadata;
            Data           = model;
            RequestContext = requestContext;

            ListType   = metadata.ModelType.GetGenericArguments().First();
            ParentType = metadata.ContainerType ?? metadata.ModelType;
        }
Пример #13
0
        /// <summary>
        /// Creates a new Radio control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        /// <param name="datasource">The radiobutton datasource.</param>
        public FWRadioControl(FWRequestContext requestContext, object model, ModelMetadata metadata, IEnumerable <FWDatasourceItem> datasource)
            : base(requestContext, model, metadata)
        {
            _values = new Dictionary <string, string>();
            foreach (var item in datasource)
            {
                _values.Add(item.Id, item.Value);
            }

            if (model != null)
            {
                _selected = model.ToString();
            }
        }
        /// <summary>
        /// Creates a new DetailGrid control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        public FWDetailGridControl(FWRequestContext requestContext, IEnumerable model, ModelMetadata metadata)
            : base(requestContext, model, metadata)
        {
            _listType = metadata.ModelType.GenericTypeArguments.FirstOrDefault();
            if (_listType == null)
            {
                throw new FWInvalidModelException("Detail Grid model must be a generic list.");
            }

            _properties  = FWReflectionHelper.GetPublicProperties(_listType).Where(f => !f.IsDefined(typeof(FWDatasourceAttribute)));
            _modelPrefix = metadata.PropertyName;

            _parentType = metadata.ContainerType ?? metadata.ModelType;
        }
Пример #15
0
        /// <summary>
        /// Gets the column text value.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="item">The column object item.</param>
        /// <param name="index">The line index.</param>
        /// <returns>The column text value.</returns>
        public override string GetValue(FWRequestContext requestContext, object item, object index)
        {
            HtmlContentBuilder builder = new HtmlContentBuilder();

            foreach (var template in _templates)
            {
                // Formats the template the the object values.
                Dictionary <string, string> dictionary = item.GetType().GetProperties()
                                                         .ToDictionary(x => x.Name, x => x.GetValue(item)?.ToString() ?? "");
                dictionary.Add("FWTemplateIndex", index.ToString());
                var html = Smart.Format(template, dictionary);
                builder.AppendHtml(html);
            }
            return(builder.GetContent());
        }
Пример #16
0
        /// <summary>
        /// Creates a new List control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="metadata">The model metadata.</param>
        /// <param name="options">Initialization options for the list.</param>
        public FWListControl(FWRequestContext requestContext, ModelMetadata metadata, FWListOptions options)
            : base(options.Id)
        {
            _fullRender    = true;
            _cacheKey      = options.CacheKey;
            RequestContext = requestContext;

            ListType   = metadata.ModelType.GetGenericArguments().First();
            ParentType = metadata.ContainerType ?? metadata.ModelType;

            if (_paginationInterface.IsAssignableFrom(options.FilterType))
            {
                _paginator = new FWPaginator(Activator.CreateInstance(options.FilterType) as IFWPagination);
            }
        }
Пример #17
0
        /// <summary>
        /// Creates a new Textbox control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        public FWTextboxControl(FWRequestContext requestContext, object model, ModelMetadata metadata)
            : base(requestContext, model, metadata)
        {
            if (metadata.AdditionalValues.ContainsKey(nameof(FWMaskAttribute)))
            {
                var mask = (metadata.AdditionalValues[nameof(FWMaskAttribute)] as FWMaskAttribute);
                _mask        = mask.Mask;
                _reversemask = mask.Reverse;
            }

            if (_regexPattern == null)
            {
                if (FWReflectionHelper.IsNumeric(ModelType))
                {
                    _regexPattern = (FWReflectionHelper.IsIntegral(ModelType)) ? @"^\d+$" : $@"^[0-9]\d*(\{CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator}\d*)?$";
                }
            }
        }
Пример #18
0
        /// <summary>
        /// Gets the column text value.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="item">The column object item.</param>
        /// <param name="index">The line index.</param>
        /// <returns>The column text value.</returns>
        public virtual string GetValue(FWRequestContext requestContext, object item, object index)
        {
            var model = Property.GetValue(item);

            if (model != null)
            {
                try
                {
                    var label = new FWDisplayControl(requestContext, model, Metadata);
                    // Clears the sizes of the internal controls.
                    label.Sizes.Clear();
                    label.Attributes.Add("data-type", "fw-cell-text");
                    return(label.ToString());
                }
                catch (FWMissingDatasourceException)
                {
                    return(model.ToString());
                }
            }
            return(string.Empty);
        }
Пример #19
0
        /// <summary>
        /// Creates a new Checkbox control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        public FWCheckboxControl(FWRequestContext requestContext, object model, ModelMetadata metadata)
            : base(requestContext, model, metadata)
        {
            if (FWReflectionHelper.CheckType <bool>(metadata.ModelType))
            {
                _isBoolean = true;
                _values    = new Dictionary <string, string>
                {
                    { "true", DisplayName }
                };
                if (model != null)
                {
                    _selected.Add(model.ToString());
                }

                //If the property is boolean, there is no sense in being required.
                if (metadata.ModelType == FWKnownTypes.Bool)
                {
                    IsRequired = false;
                }

                HideLabel();
            }
            else if (FWReflectionHelper.IsEnum(metadata.ModelType))
            {
                var enumDictionary = FWEnumHelper.GetEnumAsDictonary(metadata.ModelType);
                _values = new Dictionary <string, string>();
                // Gets the resource values for the enum items.
                foreach (var item in enumDictionary)
                {
                    _values.Add(item.Key, GetModelResource(item.Value));
                }
                _selected = FWEnumHelper.GetValues(model as Enum).ToList();
            }
            else
            {
                throw new FWMissingDatasourceException(Id);
            }
        }
Пример #20
0
        /// <summary>
        /// Gets the column text value.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="item">The column object item.</param>
        /// <param name="index">The line index.</param>
        /// <returns>The column text value.</returns>
        public override string GetValue(FWRequestContext requestContext, object item, object index)
        {
            var model = Property.GetValue(item);

            var div = new FWDivElement
            {
                DataType = "fw-cell-model"
            };

            var factory = new FWInputControlFactory(requestContext, model, Metadata)
            {
                Container = item
            };
            var control = factory.CreateControl();

            // Clears the sizes of the internal controls.
            control.Sizes.Clear();
            control.Name = $"{ModelPrefix}[{index}].{Metadata.PropertyName}";
            control.Id   = $"{ModelPrefix}_{Metadata.PropertyName}{index}";

            if (control.DataBind)
            {
                // Do not set a prefix for templates
                if (int.TryParse(index.ToString(), out int result))
                {
                    // Sets the bind prefix.
                    control.DataBind.BindPrefix = $"{ModelPrefix}()[{index}].";
                }
            }

            control.DisplayLabel = false;

            div.Add(control.ToString());

            return(div.ToString());
        }
Пример #21
0
 /// <summary>
 /// Creates a new Textarea control.
 /// </summary>
 /// <param name="requestContext">The request helper.</param>
 /// <param name="model">The current model.</param>
 /// <param name="metadata">The model metadata.</param>
 public FWTextareaControl(FWRequestContext requestContext, object model, ModelMetadata metadata)
     : base(requestContext, model, metadata)
 {
 }
Пример #22
0
 /// <summary>
 /// Creates a new Table.
 /// </summary>
 /// <param name="requestContext">The request helper.</param>
 /// <param name="model">The current model.</param>
 /// <param name="metadata">The model metadata.</param>
 public FWTableControl(FWRequestContext requestContext, IEnumerable model, ModelMetadata metadata)
     : this(requestContext, model, metadata, metadata.PropertyName ?? metadata.ModelType.GetGenericArguments().FirstOrDefault()?.Name)
 {
 }
Пример #23
0
 /// <summary>
 /// Creates a new <see cref="FWTimelineControl"/> control.
 /// </summary>
 /// <param name="id">The control id.</param>
 /// <param name="entries">The timeline entries.</param>
 /// <param name="requestContext">The request context.</param>
 public FWTimelineControl(string id, IEnumerable <FWTimelineEntry> entries, FWRequestContext requestContext)
     : base(id)
 {
     _requestContext = requestContext;
     _entries        = entries.OrderByDescending(o => o.Date).GroupBy(g => g.Date.Date);
 }
 /// <summary>
 /// Creates a new DatePicker control.
 /// </summary>
 /// <param name="requestContext">The request helper.</param>
 /// <param name="model">The current model.</param>
 /// <param name="metadata">The model metadata.</param>
 public FWDatepickerControl(FWRequestContext requestContext, object model, ModelMetadata metadata)
     : base(requestContext, model, metadata)
 {
 }
Пример #25
0
        /// <summary>
        /// Creates a new Select control.
        /// </summary>
        /// <param name="requestContext">The request helper.</param>
        /// <param name="model">The current model.</param>
        /// <param name="metadata">The model metadata.</param>
        /// <param name="container">The model container object.</param>
        public FWSelectControl(FWRequestContext requestContext, object model, ModelMetadata metadata, object container = null)
            : base(requestContext, model, metadata)
        {
            if (metadata.UnderlyingOrModelType == FWKnownTypes.Bool)
            {
                _datasource = new List <IFWDatasourceItem>
                {
                    new FWDatasourceItem()
                    {
                        Id = "true", Value = GetModelResource("TRUE")
                    },
                    new FWDatasourceItem()
                    {
                        Id = "false", Value = GetModelResource("FALSE")
                    }
                };

                if (model != null)
                {
                    _selected = model.ToString();
                }
            }
            else if (FWReflectionHelper.IsEnum(metadata.ModelType))
            {
                var enumDictionary = FWEnumHelper.GetEnumAsDictonary(metadata.ModelType);
                var datasource     = new List <IFWDatasourceItem>();
                // Gets the resource values for the enum items.
                foreach (var item in enumDictionary)
                {
                    datasource.Add(new FWDatasourceItem()
                    {
                        Id = item.Key, Value = GetModelResource(item.Value)
                    });
                }
                _datasource = datasource;

                _selected = FWEnumHelper.GetValues(model as Enum).FirstOrDefault();
            }
            else
            {
                // Looks for the datasource inside the view model.
                _datasource = FWDatasourceHelper.GetDatasourceFromModel(_datasourceName, requestContext.Model);

                // If the datasource is not found, try to look for it inside the container object.
                if (_datasource == null)
                {
                    _datasource = FWDatasourceHelper.GetDatasourceFromModel(_datasourceName, container);
                }

                if (model != null)
                {
                    _selected = model.ToString();
                }
            }

            if (DataBind)
            {
                requestContext.HttpContext.AddDatasource(metadata.PropertyName, metadata.ContainerMetadata.ModelType, _datasource);
                _datasourceName = metadata.PropertyName;
            }

            _allowClear = !IsRequired;
        }