コード例 #1
0
        protected KnockoutBindingGroup BuildControlKnockoutBinding()
        {
            var binding = new KnockoutBindingGroup();

            binding.Add("maxItemsCount", this, MaxItemsCountProperty, () =>
            {
                binding.Add("maxItemsCount", MaxItemsCount.ToString());
            });

            binding.Add("groupName", this, GroupNameProperty, () =>
            {
                binding.Add("groupName", KnockoutHelper.MakeStringLiteral(GroupName));
            });

            binding.Add("allowedOperations", KnockoutHelper.MakeStringLiteral(AllowedOperations.ToString()));

            if (HasBinding(ItemDroppedProperty))
            {
                var tempContainer = GetDataContextTarget(this, ItemDroppedProperty);
                var function      = KnockoutHelper.GenerateClientPostBackExpression(nameof(ItemDropped), GetCommandBinding(ItemDroppedProperty), tempContainer, new PostbackScriptOptions()
                {
                    ElementAccessor = CodeParameterAssignment.FromIdentifier("target")
                });
                binding.Add("onItemDropped", $"function (target) {{ {function} }}");
            }

            return(binding);
        }
コード例 #2
0
 public virtual void AddKnockoutDataBind(string name, KnockoutBindingGroup bindingGroup)
 {
     if (validator.ValidateKnockoutDataBind(name))
     {
         writer.AddKnockoutDataBind(name, bindingGroup); // this should never happen because knockout bindings are invalid in AMP
     }
 }
コード例 #3
0
        protected override void AddAttributesToRender(IHtmlWriter writer, IDotvvmRequestContext context)
        {
            var binding = new KnockoutBindingGroup();

            binding.Add("component", (string)GetValue(NameProperty));
            binding.Add("props", CreateProps().ToString());
            writer.AddKnockoutDataBind("dotvvm-contrib-ReactBridge", binding);
            Attributes.Clear();
        }
コード例 #4
0
        private static void AddBindProperty(IHtmlWriter writer, IDotvvmRequestContext context, DotvvmPropertyGroup group, DotvvmControl control, IEnumerable <DotvvmProperty> properties)
        {
            var bindingGroup = new KnockoutBindingGroup();

            foreach (var prop in properties)
            {
                bindingGroup.Add(prop.Name.Split(':')[1], control, prop);
            }
            writer.AddKnockoutDataBind("fast-attr", bindingGroup);
        }
コード例 #5
0
        protected override void AddAttributesToRender(IHtmlWriter writer, IDotvvmRequestContext context)
        {
            var knockoutBindingGroup = new KnockoutBindingGroup();

            {
                knockoutBindingGroup.Add("swPath", this, ServiceWorkerPathProperty);
                knockoutBindingGroup.Add("scope", this, ScopeProperty);
            }
            writer.AddKnockoutDataBind("dotvvm-pwa-registerServiceWorker", knockoutBindingGroup);
        }
コード例 #6
0
        protected override void AddAttributesToRender(IHtmlWriter writer, IDotvvmRequestContext context)
        {
            this.AddDotvvmUniqueIdAttribute();
            base.AddAttributesToRender(writer, context);

            var group = new KnockoutBindingGroup();

            group.Add("html", this, HtmlProperty);

            writer.AddKnockoutDataBind("dotvvm-contrib-CkEditorMinimal", group);
        }
コード例 #7
0
        private KnockoutBindingGroup BuildKnockoutBindingsInputAttributes()
        {
            var bindings = new KnockoutBindingGroup();

            bindings.Add("id", this, NameProperty, () =>
            {
                bindings.Add("id", Name, true);
            });

            return(bindings);
        }
コード例 #8
0
        public static void AddNegation(this KnockoutBindingGroup group, string name, DotvvmControl control, DotvvmProperty property, Func <bool> nullBindingAction)
        {
            var binding = control.GetValueBinding(property);

            if (binding == null)
            {
                group.Add(name, (!nullBindingAction()).ToString().ToLower());
            }
            else
            {
                string expression = control.GetValueBinding(property).GetKnockoutBindingExpression();
                group.Add(name, $"!{expression}()");
            }
        }
コード例 #9
0
        public static void AddExtender(this KnockoutBindingGroup group, string name, DotvvmControl control, DotvvmProperty property, string extenderName)
        {
            var binding = control.GetValueBinding(property);

            if (binding == null)
            {
                throw new NotSupportedException();
                //group.Add(name, (!nullBindingAction()).ToString().ToLower());
            }
            else
            {
                string expression = control.GetValueBinding(property).GetKnockoutBindingExpression();
                group.Add(name, $"{expression}.{extenderName}");
            }
        }
コード例 #10
0
        public static void AddSimpleBinding(this KnockoutBindingGroup group, string name, DotvvmControl control, DotvvmProperty property)
        {
            var binding = control.GetValueBinding(property);

            if (binding == null)
            {
                string value = JsonConvert.ToString(property.GetValue(control));
                group.Add(name, value, false);
            }
            else
            {
                string expression = control.GetValueBinding(property).GetKnockoutBindingExpression();
                group.Add(name, $"{expression}");
            }
        }
コード例 #11
0
        protected override void AddAttributesToRender(IHtmlWriter writer, IDotvvmRequestContext context)
        {
            base.AddAttributesToRender(writer, context);

            writer.AddAttribute("class", "dotvvm-contrib-Switch", true);

            KnockoutBindingGroup group = new KnockoutBindingGroup()
            {
            };

            group.AddSimpleBinding("value", this, ValueProperty);
            group.AddSimpleBinding("orientation", this, OrientationProperty);
            group.AddSimpleBinding("direction", this, DirectionProperty);
            group.AddSimpleBinding("enabled", this, EnabledProperty);

            writer.AddKnockoutDataBind("dotvvm-contrib-Switch", group);
        }
コード例 #12
0
        KnockoutBindingGroup CreateProps()
        {
            var props = new KnockoutBindingGroup();

            foreach (var attr in Attributes)
            {
                props.Add(attr.Key,
                          attr.Value is IValueBinding binding ? $"dotvvm.serialization.serialize({binding.GetKnockoutBindingExpression()})" :
                          (attr.Value is IStaticValueBinding staticBinding ? staticBinding.Evaluate(this) : attr.Value).Apply(JsonConvert.SerializeObject)
                          );
            }
            foreach (var update in this.Update)
            {
                props.Add(update.Key, "function (a) {(" + update.Value.GetKnockoutBindingExpression() + ")(a)}");
            }
            return(props);
        }
コード例 #13
0
        public static void WriteRouteLinkHrefAttribute(RouteLink control, IHtmlWriter writer, IDotvvmRequestContext context)
        {
            // Render client-side knockout expression only if there exists a parameter with value binding
            var containsBindingParam = control.Params.RawValues.Any(p => p.Value is IValueBinding);

            if (containsBindingParam)
            {
                var group = new KnockoutBindingGroup();
                group.Add("href", GenerateKnockoutHrefExpression(control.RouteName, control, context));
                writer.AddKnockoutDataBind("attr", group);
            }

            if (control.RenderOnServer || !containsBindingParam)
            {
                writer.AddAttribute("href", EvaluateRouteUrl(control.RouteName, control, context));
            }
        }
コード例 #14
0
        private KnockoutBindingGroup BuildKnockoutBidningLabelAttributes()
        {
            var bindings = new KnockoutBindingGroup();

            bindings.Add("for", this, NameProperty, () =>
            {
                bindings.Add("for", Name);
            });
            bindings.Add("style",
                         "'background-image:url(\"'+"
                         + GetValueBinding(IconProperty).GetKnockoutBindingExpression()
                         + "()"
                         + "+'\");"
                         + "color: black;"
                         + "text-shadow: 2px 0 0 #fff, -2px 0 0 #fff, 0 2px 0 #fff, 0 -2px 0 #fff, 1px 1px #fff, -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff;"
                         + "width:150px;"
                         + "height:150px;"
                         + "display:inline-block;"
                         + "background-size:150px, 150px'");
            return(bindings);
        }