Esempio n. 1
0
        public override void Update(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            Observable <float> observable = (Observable <float>)valueAccessor();
            float value = KnockoutUtils.UnwrapObservable(observable);

            jQuery.FromElement(element).Plugin <ProgressBarObject>().ProgressBar(ProgressBarMethod.Value, value);
        }
        public override void Update(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            // Whenever the value subsequently changes, slowly fade the element in or out
            Observable <bool> observable = (Observable <bool>)valueAccessor();
            string            effectIn   = (string)((object)allBindingsAccessor()["effectIn"]);
            string            effectOut  = (string)((object)allBindingsAccessor()["effectOut"]);
            jQueryObject      item       = jQuery.FromElement(element);
            string            effect     = KnockoutUtils.UnwrapObservable(observable) ? effectIn : effectOut;

            switch (effect)
            {
            case "fadeIn":
                item.FadeIn();
                break;

            case "fadeOut":
                item.FadeOut();
                break;

            case "slideUp":
                item.SlideUp();
                break;

            case "slideDown":
                item.SlideDown();
                break;
            }
        }
        public override void Init(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            Observable <bool> observable = (Observable <bool>)valueAccessor();


            // Initially set the element to be instantly visible/hidden depending on the value
            jQuery.FromElement(element).Toggle(KnockoutUtils.UnwrapObservable(observable));
        }
        public GiftViewModel(Gift[] gifts)
        {
            var self = this;

            self.Gifts      = Knockout.ObservableArray(gifts);
            self.AddGift    = () => self.Gifts.Push(new Gift(name: "", price: 0));
            self.RemoveGift = gift => self.Gifts.Remove(gift);
            self.Save       = () => Window.Alert("Could now transmit to server: " + KnockoutUtils.StringifyJson(self.Gifts));
        }
        public static string getCurrencySymbol(Func <object> valueAccessor)
        {
            EntityReference value = (EntityReference)KnockoutUtils.UnwrapObservable(valueAccessor());

            if (value != null)
            {
                return(NumberEx.GetCurrencySymbol(value.Id));
            }

            return(string.Empty);
        }
Esempio n. 6
0
        public override void Update(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            jQueryObject container = jQuery.FromElement(element);

            jQueryObject inputField     = container.Find(".sparkle-input-timeofday-part");
            DateTime     value          = (DateTime)KnockoutUtils.UnwrapObservable(valueAccessor());
            string       formatString   = GetFormatString();
            string       formattedValue = DateTimeEx.FormatTimeSpecific(value, formatString);

            inputField.Value((string)formattedValue);
        }
Esempio n. 7
0
        public override void Update(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            jQueryObject container  = jQuery.FromElement(element);
            jQueryObject inputField = container.Find(".sparkle-input-duration-part");
            object       value      = KnockoutUtils.UnwrapObservable(valueAccessor());

            // Get the value in duration format
            int?   duration       = (int?)value;
            string durationString = formatDuration(duration);

            inputField.Value(durationString);
        }
Esempio n. 8
0
 public override void Init(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
 {
     KnockoutUtils.RegisterEventHandler(element, "keydown", delegate(object sender, EventArgs e)
     {
         KeyDownEventArgs eventTyped = (KeyDownEventArgs)sender;
         if (eventTyped.KeyCode == 13)
         {
             eventTyped.PreventDefault();
             eventTyped.Target.Blur();
             Script.Literal("{0}.call({1})", valueAccessor(), viewModel);
         }
     });
 }
        public override void Update(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            jQueryObject container = jQuery.FromElement(element);
            jQueryObject dateTime  = container.Find(".sparkle-input-datepicker-part");
            object       value     = KnockoutUtils.UnwrapObservable(valueAccessor());

            if ((string)Script.Literal("typeof({0})", value) == "string")
            {
                value = Date.Parse((string)value);
            }

            dateTime.Plugin <DatePickerObject>().DatePicker(DatePickerMethod.SetDate, value);
        }
Esempio n. 10
0
        public override void Update(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            jQueryObject    container  = jQuery.FromElement(element);
            jQueryObject    inputField = container.Find(".sparkle-input-lookup-part");
            EntityReference value      = (EntityReference)KnockoutUtils.UnwrapObservable(valueAccessor());

            string displayName = "";

            if (value != null)
            {
                displayName = value.Name;
            }
            inputField.Value(displayName);
        }
Esempio n. 11
0
        public override void Init(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            string       formatString = GetFormatString();
            jQueryObject container    = jQuery.FromElement(element);

            jQueryObject inputField   = container.Find(".sparkle-input-timeofday-part");
            jQueryObject selectButton = container.Find(".sparkle-input-timeofday-button-part");

            AutoCompleteOptions options = XrmTimeEditor.GetTimePickerAutoCompleteOptions(formatString);

            options.Position = new Dictionary <string, object>("collision", "fit");
            options.Select   = delegate(jQueryEvent e, AutoCompleteSelectEvent uiEvent)
            {
                // Note we assume that the binding has added an array of string items
                string value = ((Dictionary)uiEvent.Item)["value"].ToString();

                TrySetObservable(valueAccessor, inputField, value);
            };

            inputField = inputField.Plugin <AutoCompleteObject>().AutoComplete(options);


            // Add the click binding to show the drop down
            selectButton.Click(delegate(jQueryEvent e)
            {
                inputField.Plugin <AutoCompleteObject>().AutoComplete(AutoCompleteMethod.Search, ""); // Give "" to show all items
            });
            //// Set initial value
            //Observable<DateTime> dateValueAccessor = (Observable<DateTime>)valueAccessor();
            //DateTime intialValue = dateValueAccessor.GetValue();
            //FormatterUpdate(inputField, intialValue);

            //handle the field changing
            KnockoutUtils.RegisterEventHandler(inputField.GetElement(0), "change", delegate(object sender, EventArgs e)
            {
                string value = inputField.GetValue();
                TrySetObservable(valueAccessor, inputField, value);
            });

            Action disposeCallBack = delegate()
            {
                Script.Literal("$({0}).autocomplete(\"destroy\")", element);
            };

            //handle disposal (if KO removes by the template binding)
            Script.Literal("ko.utils.domNodeDisposal.addDisposeCallback({0}, {1})", element, (object)disposeCallBack);

            // Note: Because the time picker is always part of the date picker - we don't need to display validation messages
            //Knockout.BindingHandlers["validationCore"].Init(element, valueAccessor, allBindingsAccessor, null, null);
        }
        public override void Update(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            // Whenever the value subsequently changes, slowly fade the element in or out
            Observable <bool> observable = (Observable <bool>)valueAccessor();

            if (KnockoutUtils.UnwrapObservable(observable))
            {
                jQuery.FromElement(element).FadeIn();
            }
            else
            {
                jQuery.FromElement(element).FadeOut();
            }
        }
Esempio n. 13
0
        public override void Update(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            object value = KnockoutUtils.UnwrapObservable(valueAccessor());

            // //handle date data coming via json from Microsoft
            // if (String(value).indexOf('/Date(') == 0) {
            //     value = new Date(parseInt(value.replace(/\/Date\((.*?)\)\//gi, "$1")));
            // }

            // current = $(element).datepicker("getDate");
            jQuery.FromElement(element).Value((string)value);
            // if (value - current !== 0) {
            //     $(element).datepicker("setDate", value);
            // }
        }
Esempio n. 14
0
        public override void Init(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            jQueryObject        container    = jQuery.FromElement(element);
            jQueryObject        inputField   = container.Find(".sparkle-input-duration-part");
            jQueryObject        selectButton = container.Find(".sparkle-input-duration-button-part");
            AutoCompleteOptions options      = new AutoCompleteOptions();

            options.Position  = new Dictionary <string, object>("collision", "fit");
            options.Source    = new string[] { "1 m", "2 m", "1 h", "2 h", "1 d" };
            options.Delay     = 0;
            options.MinLength = 0;

            options.Select = delegate(jQueryEvent e, AutoCompleteSelectEvent uiEvent)
            {
                // Note we assume that the binding has added an array of string items
                string value = ((Dictionary)uiEvent.Item)["value"].ToString();

                TrySetObservable(valueAccessor, inputField, value);
            };

            inputField = inputField.Plugin <AutoCompleteObject>().AutoComplete(options);

            // Add the click binding to show the drop down
            selectButton.Click(delegate(jQueryEvent e)
            {
                inputField.Plugin <AutoCompleteObject>().AutoComplete(AutoCompleteMethod.Search, "");// Give "" to show all items
            });

            //handle the field changing
            KnockoutUtils.RegisterEventHandler(element, "change", delegate(object sender, EventArgs e)
            {
                string value = inputField.GetValue();
                TrySetObservable(valueAccessor, inputField, value);
            });

            Action disposeCallBack = delegate()
            {
                Script.Literal("$({0}).autocomplete(\"destroy\")", element);
            };

            //handle disposal (if KO removes by the template binding)
            Script.Literal("ko.utils.domNodeDisposal.addDisposeCallback({0}, {1})", element, (object)disposeCallBack);
            //Knockout.BindingHandlers["validationCore"].Init(element, valueAccessor, allBindingsAccessor, null, null);
        }
Esempio n. 15
0
        public override void Init(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            jQueryObject        inputField = jQuery.FromElement(element);
            AutoCompleteOptions options    = (AutoCompleteOptions)((object)allBindingsAccessor()["autocompleteOptions"]);

            options.Select = delegate(jQueryEvent e, AutoCompleteSelectEvent uiEvent)
            {
                // Note we assume that the binding has added an array of string items
                string value = ((Dictionary)uiEvent.Item)["value"].ToString();

                TrySetObservable(valueAccessor, inputField, value);
            };

            inputField = inputField.Plugin <AutoCompleteObject>().AutoComplete(options);
            jQueryObject selectButton = inputField.Siblings(".timeSelectButton");

            // Add the click binding to show the drop down
            selectButton.Click(delegate(jQueryEvent e)
            {
                inputField.Plugin <AutoCompleteObject>().AutoComplete(AutoCompleteMethod.Search);
            });

            //handle the field changing
            KnockoutUtils.RegisterEventHandler(element, "change", delegate(object sender, EventArgs e)
            {
                string value = inputField.GetValue();
                TrySetObservable(valueAccessor, inputField, value);
            });

            Action disposeCallBack = delegate()
            {
                Script.Literal("$({0}).autocomplete(\"destroy\")", element);
            };

            //handle disposal (if KO removes by the template binding)
            Script.Literal("ko.utils.domNodeDisposal.addDisposeCallback({0}, {1})", element, (object)disposeCallBack);
            Knockout.BindingHandlers["validationCore"].Init(element, valueAccessor, allBindingsAccessor, null, null);
        }
Esempio n. 16
0
        public ContactsViewModel(List <Contact> contacts)
        {
            var self = this;

            self.Contacts = Knockout.ObservableArray(KnockoutUtils.ArrayMap(
                                                         contacts,
                                                         contact => new Contact(
                                                             firstName: contact.FirstName,
                                                             lastName: contact.LastName,
                                                             phones: Knockout.ObservableArray(contact.Phones.Value))
                                                         ));
            self.AddContact = () => self.Contacts.Push(new Contact(
                                                           firstName: "",
                                                           lastName: "",
                                                           phones: Knockout.ObservableArray <Phone>()));
            self.RemoveContact = contact => self.Contacts.Remove(contact);
            self.AddPhone      = contact => contact.Phones.Push(new Phone(type: "", number: ""));
            self.RemovePhone   = phone => jQuery.Each(self.Contacts.ToList(), (index, value) => value.Phones.Remove(phone));
            self.Save          = () => {
                self.LastSavedJson.Value = Json.Stringify(Knockout.ToObject(self.Contacts), (string[])null, 2);
            };
            self.LastSavedJson = Knockout.Observable("");
        }
        public AnimatedTransitionsViewModel()
        {
            var self = this;

            Planets = Knockout.ObservableArray(new[] {
                new Planet(name: "Mercury", type: "rock"),
                new Planet(name: "Venus", type: "rock"),
                new Planet(name: "Earth", type: "rock"),
                new Planet(name: "Mars", type: "rock"),
                new Planet(name: "Jupiter", type: "gasgiant"),
                new Planet(name: "Saturn", type: "gasgiant"),
                new Planet(name: "Uranus", type: "gasgiant"),
                new Planet(name: "Neptune", type: "gasgiant"),
                new Planet(name: "Pluto", type: "rock")
            });

            TypeToShow             = Knockout.Observable("all");
            DisplayAdvancedOptions = Knockout.Observable(false);
            AddPlanet = type => self.Planets.Push(new Planet("New planet", type));

            PlanetsToShow = Knockout.Computed(() =>
            {
                // Represents a filtered list of planets
                // i.e., only those matching the "typeToShow" condition
                var desiredType = self.TypeToShow.Value;

                if (desiredType == "all")
                {
                    return(self.Planets.Value);
                }
                return(KnockoutUtils.ArrayFilter(self.Planets.Value, planet => planet.Type == desiredType));
            });

            // Animation callbacks for the planets list
            ShowPlanetElement = elem => {
                if (elem.NodeType == ElementType.Element)
                {
                    jQuery.FromElement(elem).Hide().SlideDown();
                }
            };
            HidePlanetElement = elem => {
                if (elem.NodeType == ElementType.Element)
                {
                    jQuery.FromElement(elem).SlideUp(EffectDuration.Slow, () => jQuery.FromElement(elem).Remove());
                }
            };

            // Here's a custom Knockout binding that makes elements
            // shown/hidden via jQuery's fadeIn()/fadeOut() methods
            //Could be stored in a separate utility library
            Knockout.BindingHandlers["fadeVisible"] = new InlineBindingHandler <Observable <bool> >(
                init: (element, valueAccessor, allBindingsAccessor, model) => {
                // Initially set the element to be instantly visible/hidden
                // depending on the value
                var value = valueAccessor.Invoke();

                // Use "unwrapObservable" so we can handle values that may
                // or may not be observable
                jQuery.FromElement(element).Toggle(KnockoutUtils.UnwrapObservable(value));
            },
                update: (element, valueAccessor, allBindingsAccessor, model) => {
                // Whenever the value subsequently changes, slowly fade the
                // element in or out
                var value = valueAccessor.Invoke();
                if (KnockoutUtils.UnwrapObservable(value))
                {
                    jQuery.FromElement(element).FadeIn();
                }
                else
                {
                    jQuery.FromElement(element).FadeOut();
                }
            }
                );
        }
        public override void  Init(System.Html.Element element, Func <object> valueAccessor, Func <System.Collections.Dictionary> allBindingsAccessor, object viewModel, object context)
        {
            jQueryObject container  = jQuery.FromElement(element);
            jQueryObject dateTime   = container.Find(".sparkle-input-datepicker-part");
            jQueryObject dateButton = container.Find(".sparkle-input-datepicker-button-part");
            // Add Date Picker
            DatePickerOptions2 options = new DatePickerOptions2();

            options.ShowOn          = "";
            options.ButtonImageOnly = true;

            options.FirstDay = OrganizationServiceProxy.OrganizationSettings != null ? OrganizationServiceProxy.OrganizationSettings.WeekStartDayCode.Value.Value : 0;
            //options.ButtonImage = @"../images/btn_off_Cal.gif";

            string dateFormat = "dd/MM/yy";

            if (OrganizationServiceProxy.UserSettings != null)
            {
                dateFormat = OrganizationServiceProxy.UserSettings.DateFormatString;
            }
            options.DateFormat = dateFormat;


            dateTime.Plugin <DatePickerPlugIn>().DatePicker(options);
            //// Get current value
            //Observable<DateTime> dateValueAccessor = (Observable<DateTime>)valueAccessor();
            //DateTime intialValue = dateValueAccessor.GetValue();
            //dateTime.Plugin<DatePickerObject>().DatePicker(DatePickerMethod.SetDate, intialValue);

            dateButton.Click(delegate(jQueryEvent e)
            {
                // Note: This is using a custom plugin definition since the standard didn't include show
                dateTime.Plugin <DatePickerPlugIn>().DatePicker(DatePickerMethod2.Show);
            });



            //handle the field changing
            KnockoutUtils.RegisterEventHandler(dateTime.GetElement(0), "change", delegate(object sender, EventArgs e)
            {
                Observable <DateTime> observable = (Observable <DateTime>)valueAccessor();


                bool isValid = true;

                if (((string)Script.Literal("typeof({0}.IsValid)", observable)) != "undefined")
                {
                    isValid = ((IValidatedObservable)observable).IsValid() == true;
                }

                if (isValid)
                {
                    DateTime selectedDate = (DateTime)dateTime.Plugin <DatePickerObject>().DatePicker(DatePickerMethod.GetDate);
                    // Get Current observable value - we only want to set the date part
                    DateTime currentValue = observable.GetValue();
                    DateTimeEx.SetTime(selectedDate, currentValue);
                    observable.SetValue(selectedDate);
                }
                dateTime.Blur();
            });

            Action disposeCallBack = delegate() {
                Script.Literal("$({0}).datepicker(\"destroy\")", element);
            };

            //handle disposal (if KO removes by the template binding)
            Script.Literal("ko.utils.domNodeDisposal.addDisposeCallback({0}, {1})", element, (object)disposeCallBack);

            //Knockout.BindingHandlers["validationCore"].Init(element, valueAccessor, allBindingsAccessor,null,null);
        }
        public TwitterViewModel(List <TweetGroup> lists, string selectedList)
        {
            var self = this;

            this.SavedLists  = Knockout.ObservableArray(lists);
            this.EditingList = new TweetGroup(
                name: Knockout.Observable(selectedList),
                userNames: Knockout.ObservableArray <string>()
                );
            this.UserNameToAdd = Knockout.Observable("");
            this.CurrentTweets = Knockout.ObservableArray(new object[0]);
            this.FindSavedList = name => KnockoutUtils.ArrayFirst(self.SavedLists.Value, grp => grp.Name.Value == name, self);
            this.AddUser       = () => {
                if (self.UserNameToAdd.Value != null && self.UserNameToAddIsValid.Value)
                {
                    self.EditingList.UserNames.Push(self.UserNameToAdd.Value);
                    self.UserNameToAdd.Value = "";
                }
            };
            this.RemoveUser  = userName => self.EditingList.UserNames.Remove(userName);
            this.SaveChanges = new Action(OnSaveChanges);
            this.DeleteList  = () => {
                var nameToDelete = self.EditingList.Name.Value;
                var savedListsExceptOneToDelete = self.SavedLists.Value.Filter(grp => grp.Name.Value != nameToDelete);
                self.EditingList.Name.Value =
                    savedListsExceptOneToDelete.Length == 0
                        ? null
                        : savedListsExceptOneToDelete[0].Name.Value;
                self.SavedLists.Value = savedListsExceptOneToDelete;
            };
            Knockout.Computed(() => {
                // Observe viewModel.editingList.name(), so when it changes
                // (i.e., user selects a different list) we know to copy the
                // saved list into the editing list
                var savedList = self.FindSavedList(self.EditingList.Name.Value);
                if (savedList != null)
                {
                    var userNamesCopy = savedList.UserNames.Slice(0);
                    self.EditingList.UserNames.Value = userNamesCopy;
                }
                else
                {
                    self.EditingList.UserNames.Value = new string[0];
                }
            });
            this.HasUnsavedChanges = Knockout.Computed(() => {
                if (self.EditingList.Name.Value == null)
                {
                    return(self.EditingList.UserNames.Value.Length > 0);
                }
                var savedData   = self.FindSavedList(self.EditingList.Name.Value).UserNames;
                var editingData = self.EditingList.UserNames.Value;
                return(savedData.Value.Join("|") != editingData.Join("|"));
            });
            this.UserNameToAddIsValid = Knockout.Computed(() => {
                var pattern = @"^\s*[a-zA-Z0-9_]{1,15}\s*$";
                return(self.UserNameToAdd.Value == "" ||
                       self.UserNameToAdd.Value.Match(new Regex(pattern, "g")) != null);
            });
            this.CanAddUserName = Knockout.Computed(() => {
                return(self.UserNameToAddIsValid.Value && self.UserNameToAdd.Value != "");
            });
            // The active user tweets are (asynchronously) computed from editingList.userNames
            Knockout.Computed(() => {
                TwitterApi.GetTweetsForUsers <object[]>(
                    self.EditingList.UserNames.Value,
                    result => {
                    self.CurrentTweets.Value = result;
                });
            });
        }