private static void AddAutoCompleteControl(this HtmlHelper html, TagBuilder tag, RouteValueDictionary htmlAttributes, PropertyContext context, IObjectFacade valueNakedObject) { tag.InnerHtml += html.GetAutoCompleteTextBox(context, htmlAttributes, valueNakedObject) + html.GetMandatoryIndicator(context) + html.ValidationMessage(context.GetAutoCompleteFieldId()); }
private static string GetAutoCompleteTextBox(this HtmlHelper html, PropertyContext context, RouteValueDictionary htmlAttributes, IObjectFacade valueNakedObject) { string completionAjaxUrl = html.GenerateUrl("GetPropertyCompletions", "Ajax", new RouteValueDictionary(new { id = Encode(html.Facade().OidTranslator.GetOidTranslation(context.Target)), propertyId = context.Property.Id })); RouteValueDictionary attrs = CreateAutoCompleteAttributes(context.Property, completionAjaxUrl); attrs.ForEach(kvp => htmlAttributes.Add(kvp.Key, kvp.Value)); string title = valueNakedObject == null ? "" : html.GetDisplayTitle(context.Property, valueNakedObject); return html.TextBox(context.GetAutoCompleteFieldId(), title, htmlAttributes).ToHtmlString(); }
private static string GetReferenceField(this HtmlHelper html, PropertyContext propertyContext, string id, string tooltip, IList<ElementDescriptor> childElements, bool addToThis, bool readOnly, bool noFinder) { var tag = new TagBuilder("div"); tag.AddCssClass(IdConstants.ObjectName); if (!propertyContext.Property.IsVisible(propertyContext.Target)) { var existingValue = propertyContext.GetValue(html.Facade()); string value = existingValue == null ? String.Empty : Encode(html.Facade().OidTranslator.GetOidTranslation(existingValue)); tag.InnerHtml += html.Encrypted(id, value).ToString(); propertyContext.IsPropertyEdit = false; } else { if (readOnly) { var valueNakedObject = propertyContext.GetValue(html.Facade()); string valueId = valueNakedObject == null ? String.Empty : Encode(html.Facade().OidTranslator.GetOidTranslation(valueNakedObject)); tag.InnerHtml += html.ObjectIcon(propertyContext.Property.GetValue(propertyContext.Target)) + html.GetFieldValue(propertyContext) + html.CustomEncrypted(id, valueId); propertyContext.IsPropertyEdit = false; } else if (propertyContext.Property.IsChoicesEnabled != Choices.NotEnabled) { IEnumerable<SelectListItem> items = html.GetItems(id, propertyContext); tag.InnerHtml += html.ObjectIcon(propertyContext.Property.GetValue(propertyContext.Target)) + html.DropDownList(id, items, new { title = tooltip }) + html.GetMandatoryIndicator(propertyContext) + html.ValidationMessage(id); } else { var valueNakedObject = html.GetExistingValue(id, propertyContext); var suggestedItem = html.GetSuggestedItem(id, valueNakedObject); string valueId = suggestedItem == null ? String.Empty : Encode(html.Facade().OidTranslator.GetOidTranslation(suggestedItem)); if (!propertyContext.Target.IsTransient) { // do not only allow drag and drop onto transients - otherwise attempt to validate // may depend on missing fields/data. cf check at top of AjaxControllerImpl:ValidateProperty string url = html.GenerateUrl("ValidateProperty", "Ajax", new RouteValueDictionary(new { id = Encode(html.Facade().OidTranslator.GetOidTranslation(propertyContext.Target)), propertyName = propertyContext.Property.Id })); tag.MergeAttribute("data-validate", url); } //Translates to: Only render finder if the Context is FindMenu enabled AND //calling code has not overridden it by setting noFinder to true. noFinder = noFinder || !propertyContext.IsFindMenuEnabled(); tag.InnerHtml += html.ObjectIcon(suggestedItem) + html.GetFieldValue(propertyContext, suggestedItem, noFinder) + html.GetMandatoryIndicator(propertyContext) + html.ValidationMessage(propertyContext.Property.IsAutoCompleteEnabled ? propertyContext.GetAutoCompleteFieldId() : id) + html.CustomEncrypted(id, valueId); propertyContext.IsPropertyEdit = false; } } AddInsertedElements(childElements, addToThis, tag); return tag.ToString(); }
private static string GetReferenceField(this HtmlHelper html, PropertyContext propertyContext, string id, string tooltip, IList<ElementDescriptor> childElements, bool addToThis, bool readOnly, bool noFinder) { var tag = new TagBuilder("div"); tag.AddCssClass(IdHelper.ObjectName); if (!propertyContext.Property.IsVisible(NakedObjectsContext.Session, propertyContext.Target)) { INakedObject existingValue = propertyContext.GetValue(); string value = existingValue == null ? string.Empty : FrameworkHelper.GetObjectId(existingValue); tag.InnerHtml += html.Encrypted(id, value).ToString(); propertyContext.IsPropertyEdit = false; } else { if (readOnly) { INakedObject valueNakedObject = propertyContext.GetValue(); string valueId = valueNakedObject == null ? string.Empty : FrameworkHelper.GetObjectId(valueNakedObject); tag.InnerHtml += html.ObjectIcon(propertyContext.Property.GetNakedObject(propertyContext.Target)) + html.GetFieldValue(propertyContext) + html.CustomEncrypted(id, valueId); propertyContext.IsPropertyEdit = false; } else if (((IOneToOneAssociation) propertyContext.Property).IsChoicesEnabled) { IEnumerable<SelectListItem> items = html.GetItems(id, propertyContext); tag.InnerHtml += html.ObjectIcon(propertyContext.Property.GetNakedObject(propertyContext.Target)) + html.DropDownList(id, items, new {title = tooltip}) + GetMandatoryIndicator(propertyContext) + html.ValidationMessage(id); } else { INakedObject valueNakedObject = html.GetExistingValue(id, propertyContext); INakedObject suggestedItem = html.GetSuggestedItem(id, valueNakedObject); string valueId = suggestedItem == null ? string.Empty : FrameworkHelper.GetObjectId(suggestedItem); if (!propertyContext.Target.ResolveState.IsTransient() || MvcIdentityAdapterHashMap.StoringTransientsInSession) { // only allow drag and drop onto transients if they are stored in session - otherwise attempt to validate // may depend on missing fields/data. cf check at top of AjaxControllerImpl:ValidateProperty string url = html.GenerateUrl("ValidateProperty", "Ajax", new RouteValueDictionary(new { id = FrameworkHelper.GetObjectId(propertyContext.Target), propertyName = propertyContext.Property.Id })); tag.MergeAttribute("data-validate", url); } tag.InnerHtml += html.ObjectIcon(suggestedItem) + html.GetFieldValue(propertyContext, suggestedItem) + (noFinder ? string.Empty : html.FinderActions(propertyContext.Property.Specification, new ActionContext(propertyContext.Target, null), propertyContext.Property.Id)) + GetMandatoryIndicator(propertyContext) + html.ValidationMessage(((IOneToOneAssociation) propertyContext.Property).IsAutoCompleteEnabled ? propertyContext.GetAutoCompleteFieldId() : id) + html.CustomEncrypted(id, valueId); propertyContext.IsPropertyEdit = false; } } AddInsertedElements(childElements, addToThis, tag); return tag.ToString(); }