예제 #1
0
 /// <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));
 }
예제 #4
0
 /// <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));
 }
예제 #5
0
 /// <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());
 }
예제 #6
0
        // 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));
        }
예제 #7
0
 /// <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))));
 }
예제 #8
0
        // 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));
        }