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); }
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); }
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); }
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); }
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); }
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(); } }
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); // } }
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); }
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); }
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; }); }); }