ICEfaces
  1. ICEfaces
  2. ICE-5830

New JavaScript context API for adding Component JavaScript to the DOM

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0-Alpha2
    • Fix Version/s: 2.0-Beta2, 2.0.0
    • Component/s: ICE-Components
    • Labels:
      None
    • Environment:
      ICEfaces 2.0, Sparkle component platform
    • Affects:
      Documentation (User Guide, Ref. Guide, etc.)

      Description

      Currently, Sparkle components are "manually" rendering their Script tags inside a <SPAN> tag in the renderer. Since this is a very common requirement for the component, Ted suggests we consider using a bridge API to render the script in a span instead, such as JavaScriptContext, instead of rendering the JS Spans directly in the comp. renderer. \

      This may require adding APIs to support the req. of the components in terms of timing of execution of the JS, including detection of whether the component has changed. At a minimum, the rendering of the embedded SPAN tag + JS tag should be factored into a utility method.

        Issue Links

          Activity

          Ken Fyten created issue -
          Ken Fyten made changes -
          Field Original Value New Value
          Salesforce Case []
          Fix Version/s 2.0-Beta [ 10231 ]
          Affects [Documentation (User Guide, Ref. Guide, etc.)]
          Assignee Priority P2
          Assignee Mircea Toma [ mircea.toma ]
          Hide
          Greg Dick added a comment -

          This is the pattern of HTML elements for the commandLink component.

          <div id="clientId" >
          <span id="clientId" + "_span" class="yui-button yui-link-button" >
          <span id="clientId" + "_s2" class="first-child" >
          <a id="cliendId" + "_anchor" actionListener="..." href="..." etc>
          </span>
          </span>
          <span id="clientId" + "_js">
          <script ...>
          yadda
          </script>
          </span>
          </div>

          The first two spans are necessary for the YUI toolkit to find and replace our stuff. The third span is useful to wrap the script with id so it can be replaced independent of the component.

          Show
          Greg Dick added a comment - This is the pattern of HTML elements for the commandLink component. <div id="clientId" > <span id="clientId" + "_span" class="yui-button yui-link-button" > <span id="clientId" + "_s2" class="first-child" > <a id="cliendId" + "_anchor" actionListener="..." href="..." etc> </span> </span> <span id="clientId" + "_js"> <script ...> yadda </script> </span> </div> The first two spans are necessary for the YUI toolkit to find and replace our stuff. The third span is useful to wrap the script with id so it can be replaced independent of the component.
          Mircea Toma made changes -
          Link This issue blocks ICE-4418 [ ICE-4418 ]
          Mircea Toma made changes -
          Link This issue blocks ICE-4418 [ ICE-4418 ]
          Mircea Toma made changes -
          Link This issue duplicates ICE-4418 [ ICE-4418 ]
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #21817 Tue Jun 29 09:00:43 MDT 2010 mircea.toma ICE-5830, ICE-4418 Introduce utility class for writing script markup and code.
          Files Changed
          Commit graph ADD /icefaces/scratchpads/glimmer/core/src/main/java/org/icefaces/render/ScriptWriter.java
          Hide
          Mircea Toma added a comment - - edited

          Introduced ScriptWriter utility class to eliminate component renderer boiler plate code when writing script code to be evaluated on the client.

          There are two ways to write (and eventually evaluate) JS code.

          Calling ScriptWriter.insertScript(FacesContext , UIComponent, String) allows the component renderer to write the script markup and code in one method call. This method is useful when the JS code complexity is low. For example:

          public void encodeEnd(FacesContext context, UIComponent component) throws IOException

          { .... .... ScriptWriter.insertScript(context, component, "ice.component.calendar.init();"); .... }

          The other method of writing the JS code allows writing the code gradually by streaming it directly through the response writer. This method can be used when the complexity of JS code is higher. For example:

          public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException {
          ....
          ScriptWriter writer = ScriptWriter.insertScript(facesContext, uiComponent);
          writer.startScript();
          writer.write("ice.yui3.slider.updateProperties('");
          writer.write(clientId);
          writer.write("', ");
          //pass through YUI slider properties
          writer.write("

          {"); writer.write("min:"); writer.write(slider.getMin()); writer.write(", "); writer.write("max:"); writer.write(slider.getMax()); writer.write(", "); writer.write("value:"); writer.write(slider.getValue()); .... .... writer.write("tabindex:"); writer.write(slider.getTabindex()); writer.write("}

          );");
          writer.endScript();
          }

          Show
          Mircea Toma added a comment - - edited Introduced ScriptWriter utility class to eliminate component renderer boiler plate code when writing script code to be evaluated on the client. There are two ways to write (and eventually evaluate) JS code. Calling ScriptWriter.insertScript(FacesContext , UIComponent, String) allows the component renderer to write the script markup and code in one method call. This method is useful when the JS code complexity is low. For example: public void encodeEnd(FacesContext context, UIComponent component) throws IOException { .... .... ScriptWriter.insertScript(context, component, "ice.component.calendar.init();"); .... } The other method of writing the JS code allows writing the code gradually by streaming it directly through the response writer. This method can be used when the complexity of JS code is higher. For example: public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException { .... ScriptWriter writer = ScriptWriter.insertScript(facesContext, uiComponent); writer.startScript(); writer.write("ice.yui3.slider.updateProperties('"); writer.write(clientId); writer.write("', "); //pass through YUI slider properties writer.write(" {"); writer.write("min:"); writer.write(slider.getMin()); writer.write(", "); writer.write("max:"); writer.write(slider.getMax()); writer.write(", "); writer.write("value:"); writer.write(slider.getValue()); .... .... writer.write("tabindex:"); writer.write(slider.getTabindex()); writer.write("} );"); writer.endScript(); }
          Mircea Toma made changes -
          Status Open [ 1 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Hide
          Ken Fyten added a comment -

          Need to move this into the Sparkle platform (out of the std. bridge) as a new utility API. Please review and complete the move.

          Show
          Ken Fyten added a comment - Need to move this into the Sparkle platform (out of the std. bridge) as a new utility API. Please review and complete the move.
          Ken Fyten made changes -
          Resolution Fixed [ 1 ]
          Status Resolved [ 5 ] Reopened [ 4 ]
          Assignee Priority P2 P1
          Assignee Mircea Toma [ mircea.toma ] Mark Collette [ mark.collette ]
          Ken Fyten made changes -
          Salesforce Case []
          Component/s Components [ 10012 ]
          Component/s Bridge [ 10011 ]
          Ken Fyten made changes -
          Salesforce Case []
          Assignee Mark Collette [ mark.collette ] Greg Dick [ greg.dick ]
          Ken Fyten made changes -
          Salesforce Case []
          Assignee Greg Dick [ greg.dick ] Yip Ng [ yip.ng ]
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #21860 Wed Jul 07 15:50:52 MDT 2010 yip.ng ICE-5830: New JavaScript context API for adding Component JavaScript to the DOM.
          Files Changed
          Commit graph ADD /icefaces/scratchpads/sparkle/component/src/org/icefaces/component/utils/ScriptWriter.java
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #21861 Wed Jul 07 15:59:19 MDT 2010 yip.ng ICE-5830: New JavaScript context API for adding Component JavaScript to the DOM.
          Files Changed
          Commit graph DEL /icefaces/scratchpads/glimmer/core/src/main/java/org/icefaces/render/ScriptWriter.java
          Hide
          yip.ng added a comment -

          Done. It is now org.icefaces.component.utils.ScriptWriter.

          Show
          yip.ng added a comment - Done. It is now org.icefaces.component.utils.ScriptWriter.
          yip.ng made changes -
          Status Reopened [ 4 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #21868 Thu Jul 08 12:11:15 MDT 2010 judy.guglielmin ICE-5875 updates for ICE-5830 and 5831 as 5805 already done and 5832 is not applicable for this component
          Files Changed
          Commit graph MODIFY /icefaces/scratchpads/sparkle/component/src/org/icefaces/component/pushbutton/PushButtonRenderer.java
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #21876 Thu Jul 08 15:56:34 MDT 2010 judy.guglielmin update for ICE-5831 and ICE-5830
          Files Changed
          Commit graph MODIFY /icefaces/scratchpads/sparkle/component/src/org/icefaces/component/menubutton/MenuButtonRenderer.java
          Ken Fyten made changes -
          Security Private [ 10001 ]
          Ken Fyten made changes -
          Salesforce Case []
          Fix Version/s 2.0-Beta2 [ 10242 ]
          Fix Version/s 2.0-Beta1 [ 10231 ]
          Assignee Priority P1
          Ken Fyten made changes -
          Fix Version/s 2.0.0 [ 10230 ]
          Ken Fyten made changes -
          Status Resolved [ 5 ] Closed [ 6 ]

            People

            • Assignee:
              yip.ng
              Reporter:
              Ken Fyten
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: