/// <summary> /// Creates a display setup object for display that depends on this page-modification value. /// </summary> public static DisplaySetup ToDisplaySetup(this PageModificationValue <bool> pageModificationValue, bool componentsDisplayedWhenValueSet = true) { return (new DisplaySetup( Tuple.Create <Action <string>, Action <string> >( statements => pageModificationValue.AddJsModificationStatement( valueExpression => "if( {0} )".FormatWith(componentsDisplayedWhenValueSet ? valueExpression : "!( {0} )".FormatWith(valueExpression)) + " { " + statements + " }"), statements => pageModificationValue.AddJsModificationStatement( valueExpression => "if( {0} )".FormatWith(componentsDisplayedWhenValueSet ? "!( {0} )".FormatWith(valueExpression) : valueExpression) + " { " + statements + " }")), () => pageModificationValue.Value ^ !componentsDisplayedWhenValueSet)); }
/// <summary> /// Creates a condition that depends on this page-modification value. /// </summary> public static PageModificationValueCondition ToCondition(this PageModificationValue <bool> pageModificationValue, bool isTrueWhenValueSet = true) { return(new PageModificationValueCondition( statementGetter => pageModificationValue.AddJsModificationStatement( valueExpression => statementGetter(isTrueWhenValueSet ? valueExpression : "!( {0} )".FormatWith(valueExpression))), () => pageModificationValue.Value ^ !isTrueWhenValueSet)); }
/// <summary> /// Creates a condition that depends on this page-modification value. /// </summary> public static PageModificationValueCondition ToCondition <T>( this PageModificationValue <T> pageModificationValue, IEnumerable <T> values, bool isTrueOnMatch = true) { values = values.ToImmutableArray(); return(new PageModificationValueCondition( statementGetter => pageModificationValue.AddJsModificationStatement( valueExpression => statementGetter( "[ {0} ].indexOf( {1} ) {2} -1".FormatWith( StringTools.ConcatenateWithDelimiter(", ", values.Select(i => "'" + i.ObjectToString(true) + "'").ToArray()), valueExpression, isTrueOnMatch ? "!=" : "=="))), () => values.Contains(pageModificationValue.Value) ^ !isTrueOnMatch)); }
/// <summary> /// Creates a display setup object for display that depends on this page-modification value. /// </summary> public static DisplaySetup ToDisplaySetup <T>( this PageModificationValue <T> pageModificationValue, IEnumerable <T> values, bool componentsDisplayedOnMatch = true) { values = values.ToImmutableArray(); return (new DisplaySetup( Tuple.Create <Action <string>, Action <string> >( statements => pageModificationValue.AddJsModificationStatement( valueExpression => "if( [ {0} ].indexOf( {1} ) {2} -1 )".FormatWith( StringTools.ConcatenateWithDelimiter(", ", values.Select(i => "'" + i.ObjectToString(true) + "'").ToArray()), valueExpression, componentsDisplayedOnMatch ? "!=" : "==") + " { " + statements + " }"), statements => pageModificationValue.AddJsModificationStatement( valueExpression => "if( [ {0} ].indexOf( {1} ) {2} -1 )".FormatWith( StringTools.ConcatenateWithDelimiter(", ", values.Select(i => "'" + i.ObjectToString(true) + "'").ToArray()), valueExpression, componentsDisplayedOnMatch ? "==" : "!=") + " { " + statements + " }")), () => values.Contains(pageModificationValue.Value) ^ !componentsDisplayedOnMatch)); }
/// <summary> /// Creates a generic phrasing container (i.e. span element) that depends on this page-modification value. /// </summary> public static IReadOnlyCollection <PhrasingComponent> ToGenericPhrasingContainer <ModificationValueType>( this PageModificationValue <ModificationValueType> pageModificationValue, Func <ModificationValueType, string> textSelector, Func <string, string> jsTextExpressionGetter) { return(new CustomPhrasingComponent( new DisplayableElement( context => { pageModificationValue.AddJsModificationStatement( valueExpression => "$( '#{0}' ).text( {1} );".FormatWith(context.Id, jsTextExpressionGetter(valueExpression))); return new DisplayableElementData( null, () => new DisplayableElementLocalData("span", focusDependentData: new DisplayableElementFocusDependentData(includeIdAttribute: true)), children: new TextNode(() => textSelector(pageModificationValue.Value)).ToCollection()); }).ToCollection()).ToCollection()); }
// Web Forms compatibility. Remove when EnduraCode goal 790 is complete. public static void AddDisplayLink( this PageModificationValue <bool> pageModificationValue, IEnumerable <WebControl> controls, bool controlsDisplayedWhenValueSet = true) { controls = controls.ToImmutableArray(); foreach (var control in controls) { pageModificationValue.AddJsModificationStatement( valueExpression => "setElementDisplay( '{0}', {1} );".FormatWith( control.ClientID, controlsDisplayedWhenValueSet ? valueExpression : "!( {0} )".FormatWith(valueExpression))); } EwfPage.Instance.AddDisplayLink(new DisplayLinkAdapter(controls, () => pageModificationValue.Value ^ !controlsDisplayedWhenValueSet)); }
/// <summary> /// Creates an element-class set that depends on this page-modification value. /// </summary> public static ElementClassSet ToElementClassSet( this PageModificationValue <bool> pageModificationValue, ElementClassSet staticClassSet, bool classesPresentWhenValueSet = true) { if (staticClassSet.JsModificationStatementAdderAndInclusionPredicatePairsByClassName.Values.Any(i => i != null)) { throw new ApplicationException("At least one class already has dynamic behavior."); } return (new ElementClassSet( staticClassSet.JsModificationStatementAdderAndInclusionPredicatePairsByClassName.Keys.ToImmutableDictionary( i => i, i => Tuple.Create <Action <Func <string, string> >, Func <bool> >( statementGetter => pageModificationValue.AddJsModificationStatement( valueExpression => statementGetter(classesPresentWhenValueSet ? valueExpression : "!( {0} )".FormatWith(valueExpression))), () => pageModificationValue.Value ^ !classesPresentWhenValueSet)))); }
// Web Forms compatibility. Remove when EnduraCode goal 790 is complete. public static void AddDisplayLink <T>( this PageModificationValue <T> pageModificationValue, IEnumerable <T> values, IEnumerable <WebControl> controls, bool controlsDisplayedOnMatch = true) { values = values.ToImmutableArray(); controls = controls.ToImmutableArray(); foreach (var control in controls) { pageModificationValue.AddJsModificationStatement( valueExpression => "setElementDisplay( '{0}', [ {1} ].indexOf( {2} ) {3} -1 );".FormatWith( control.ClientID, StringTools.ConcatenateWithDelimiter(", ", values.Select(i => "'" + i.ObjectToString(true) + "'").ToArray()), valueExpression, controlsDisplayedOnMatch ? "!=" : "==")); } EwfPage.Instance.AddDisplayLink(new DisplayLinkAdapter(controls, () => values.Contains(pageModificationValue.Value) ^ !controlsDisplayedOnMatch)); }