private void ApplyPlaceholderProperty(DotvvmControl control) { if (control.IsPropertySet(Amp.PlaceholderProperty) && control.GetValue <bool>(Amp.PlaceholderProperty) && control is HtmlGenericControl genericControl) { genericControl.Attributes.Add("placeholder", null); } }
/// <summary> /// Gets the validation target expression. /// </summary> public static string GetValidationTargetExpression(DotvvmControl control) { if (!(bool)control.GetValue(Validate.EnabledProperty)) { return(null); } // find the closest control int dataSourceChanges; var validationTargetControl = control.GetClosestWithPropertyValue(out dataSourceChanges, c => c.GetValueBinding(Validate.TargetProperty) != null); if (validationTargetControl == null) { return("$root"); } // reparent the expression to work in current DataContext // FIXME: This does not work: var validationBindingExpression = validationTargetControl.GetValueBinding(Validate.TargetProperty); string validationExpression = validationBindingExpression.GetKnockoutBindingExpression(); validationExpression = string.Join("", Enumerable.Range(0, dataSourceChanges).Select(i => "$parent.")) + validationExpression; return(validationExpression); }
private void ApplyFallbackProperty(DotvvmControl control) { if (control.IsPropertySet(Amp.FallbackProperty) && control.GetValue <bool>(Amp.FallbackProperty) && control is HtmlGenericControl genericControl) { genericControl.Attributes.Add("fallback", null); } }
/// <summary> /// Generates a list of postback update handlers. /// </summary> private static string GetPostBackHandlersScript(DotvvmControl control, string eventName) { var handlers = (List <PostBackHandler>)control.GetValue(PostBack.HandlersProperty); if (handlers == null) { return("null"); } var effectiveHandlers = handlers.Where(h => string.IsNullOrEmpty(h.EventName) || h.EventName == eventName); var sb = new StringBuilder(); sb.Append("["); foreach (var handler in effectiveHandlers) { if (sb.Length > 1) { sb.Append(","); } sb.Append("{name:'"); sb.Append(handler.ClientHandlerName); sb.Append("',options:function(){return {"); foreach (var option in handler.GetHandlerOptionClientExpressions()) { sb.Append(option.Key); sb.Append(":"); sb.Append(option.Value); } sb.Append("};}}"); } sb.Append("]"); return(sb.ToString()); }
protected override DotvvmControl CreateReplacementControl(DotvvmControl control) { var replacementControl = new Layout { Layout = control.GetValue <AmpLayout>(Amp.LayoutProperty) }; return(replacementControl); }
protected override void TransferControlProperties(DotvvmControl source, DotvvmControl target) { if (source.IsPropertySet(Amp.LayoutProperty)) { target.SetValueRaw(AmpControl.LayoutProperty, source.GetValue <AmpLayout>(Amp.LayoutProperty)); } if (source.IsPropertySet(Amp.WidthProperty)) { target.SetValueRaw(AmpControl.WidthProperty, source.GetValue <string>(Amp.WidthProperty)); } if (source.IsPropertySet(Amp.HeightProperty)) { target.SetValueRaw(AmpControl.HeightProperty, source.GetValue <string>(Amp.HeightProperty)); } base.TransferControlProperties(source, target); }
public static CommandBindingExpression RegisterExtensionCommand(this DotvvmControl control, Delegate action, string methodUsageId) { var bindingService = control.GetValue(Internal.RequestContextProperty).CastTo <IDotvvmRequestContext>() .Configuration.ServiceProvider.GetRequiredService <BindingCompilationService>(); var id = control.GetDotvvmUniqueId() + methodUsageId; var propertyName = control.GetType().FullName + "/" + methodUsageId; var property = DotvvmProperty.ResolveProperty(typeof(PropertyBox), propertyName) ?? DotvvmProperty.Register(propertyName, typeof(object), typeof(PropertyBox), null, false, null, typeof(PropertyBox), throwOnDuplicitRegistration: false); var binding = new CommandBindingExpression(bindingService, action, id); control.SetBinding(property, binding); return(binding); }
public static CommandBindingExpression RegisterExtensionCommand(this DotvvmControl control, Delegate action, string methodUsageId) { var bindingService = control.GetValue(Internal.RequestContextProperty).CastTo <IDotvvmRequestContext>() .Configuration.ServiceLocator.GetService <BindingCompilationService>(); var id = control.GetDotvvmUniqueId() + methodUsageId; var propertyName = control.GetType().FullName + "/" + methodUsageId; var property = DotvvmProperty.Register <object, PropertyBox>(propertyName); var binding = new CommandBindingExpression(bindingService, action, id); control.SetBinding(property, binding); return(binding); }
private static void AddValidatedValue(IHtmlWriter writer, IDotvvmRequestContext context, DotvvmProperty prop, DotvvmControl control) { writer.AddKnockoutDataBind("dotvvmValidation", control, ValueProperty); // render options var bindingGroup = new KnockoutBindingGroup(); foreach (var property in ValidationOptionProperties) { var javascriptName = KnockoutHelper.ConvertToCamelCase(property.Name); var optionValue = control.GetValue(property); if (!object.Equals(optionValue, property.DefaultValue)) { bindingGroup.Add(javascriptName, JsonConvert.SerializeObject(optionValue)); } } writer.AddKnockoutDataBind("dotvvmValidationOptions", bindingGroup); }
public static IEnumerable <string> GetContextPath(DotvvmControl control) { while (control != null) { var pathFragment = control.GetValue(Internal.PathFragmentProperty, false) as string; if (pathFragment != null) { yield return(pathFragment); } else { var dataContextBinding = control.GetBinding(DotvvmBindableObject.DataContextProperty, false) as IValueBinding; if (dataContextBinding != null) { yield return(dataContextBinding.GetKnockoutBindingExpression()); } } control = control.Parent; } }
/// <summary> /// Processes the control tree. /// </summary> private void ProcessControlTreeCore(DotvvmControl control, Action <DotvvmControl> action) { // if there is a DataContext binding, locate the correct token var hasDataContext = false; var pathValue = control.GetValue(Internal.PathFragmentProperty, false); if (pathValue != null) { CurrentPath.Push(pathValue as string); RefreshCurrentPathArray(); hasDataContext = true; } else { var binding = control.GetValueBinding(DotvvmBindableObject.DataContextProperty, false); if (binding != null) { CurrentPath.Push(binding.GetKnockoutBindingExpression()); RefreshCurrentPathArray(); hasDataContext = true; } } action(control); // go through all children foreach (var child in control.GetChildren()) { ProcessControlTreeCore(child, action); } if (hasDataContext) { CurrentPath.Pop(); RefreshCurrentPathArray(); } }
public static IEnumerable<string> GetContextPath(DotvvmControl control) { while (control != null) { var pathFragment = control.GetValue(Internal.PathFragmentProperty, false) as string; if (pathFragment != null) { yield return pathFragment; } else { var dataContextBinding = control.GetBinding(DotvvmBindableObject.DataContextProperty, false) as IValueBinding; if (dataContextBinding != null) { yield return dataContextBinding.GetKnockoutBindingExpression(); } } control = control.Parent; } }
/// <summary> /// Generates a list of postback update handlers. /// </summary> private static string GetPostBackHandlersScript(DotvvmControl control, string eventName) { var handlers = (List<PostBackHandler>)control.GetValue(PostBack.HandlersProperty); if (handlers == null) return "null"; var effectiveHandlers = handlers.Where(h => string.IsNullOrEmpty(h.EventName) || h.EventName == eventName); var sb = new StringBuilder(); sb.Append("["); foreach (var handler in effectiveHandlers) { if (sb.Length > 1) { sb.Append(","); } sb.Append("{name:'"); sb.Append(handler.ClientHandlerName); sb.Append("',options:function(){return {"); var isFirst = true; var options = handler.GetHandlerOptionClientExpressions(); options.Add("enabled", handler.TranslateValueOrBinding(PostBackHandler.EnabledProperty)); foreach (var option in options) { if (!isFirst) { sb.Append(','); } isFirst = false; sb.Append(option.Key); sb.Append(":"); sb.Append(option.Value); } sb.Append("};}}"); } sb.Append("]"); return sb.ToString(); }
protected virtual bool ShouldBeRendered(DotvvmControl control, IDotvvmRequestContext context) { return(!control.IsPropertySet(Amp.ExcludeProperty) || !control.GetValue <bool>(Amp.ExcludeProperty)); }