You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Sylvain Vieujot <sv...@apache.org> on 2004/11/30 13:46:53 UTC

Javascript Hell

Hello everybody,

Right now, some components require you to include some javascript
libraries in your app, and to reference those libraries in your page's
header.
Just for your example webapp, the header looks like that :

    <!-- JSCook Menu -->

  <script language="JavaScript" src="jscookmenu/JSCookMenu.js" type="text/javascript"></script>
  <script language="JavaScript" src="jscookmenu/ThemeOffice/theme.js"></script>
  <link rel="stylesheet" href="jscookmenu/ThemeOffice/theme.css" type="text/css">
  <script language="JavaScript" src="jscookmenu/ThemeMiniBlack/theme.js"></script>
  <link rel="stylesheet" href="jscookmenu/ThemeMiniBlack/theme.css" type="text/css">
  <script language="JavaScript" src="jscookmenu/ThemeIE/theme.js"></script>
  <link rel="stylesheet" href="jscookmenu/ThemeIE/theme.css" type="text/css">
  <script language="JavaScript" src="jscookmenu/ThemePanel/theme.js"></script>
  <link rel="stylesheet" href="jscookmenu/ThemePanel/theme.css" type="text/css">

  <!-- JSCalendar -->
  <script language="JavaScript" src="jscalendar/popcalendar.js" type="text/javascript"></script>
  <link rel="stylesheet" href="jscalendar/jscalendar-WH/theme.css" type="text/css">
  <link rel="stylesheet" href="jscalendar/jscalendar-DB/theme.css" type="text/css">

  <!-- JSPopup -->
  <script language="JavaScript" src="jspopup/JSPopup.js" type="text/javascript"></script>


I'm now working on a new component that is javascript intensive too, and
that would require the include of at least 5 other .js files.

I think we should make this transparent to the user by :

     1. Including the scripts/css/whatever required in the myfaces.jar
        file as resources. So, we are sure we always have the .js file's
        version that works, and the developer just needs to include the
        myfaces lib. (this will grow a bite the size of the jar though).
     2. Have the components load the script/css/whatever in a standard
        way so that the page's developer doesn't need to bother, and so
        that the script/css/... is only included once in the page.

So, starting to think about a solution for this, here is my first idea :

- Have all those scripts/css/... as resources

- Make an additional servlet that the webapp developper would include in
his web.xml declarations, and that would be invoqued like :
    http://my.webserver.com/webapp/myFacesRessource?name=jspopup.js

        This is the only thing the webapp developper would have to do
        (declare the servlet), but I don't see how we could avoid that
        without writing the scripts/css/... into the page.
        Writing the scripts/css/... into the page would be bad for
        caching, and wouldn't allow us to use standard images with this
        facility.

- Have a facility so that the component's renderer can call something
like includeRessourceScriptLibrary(facesContext,"jspopup/JSPopup.js")
(similar helper for css, ...), and the code calling the above servlet is
automatically included in the page.

Any thoughts on this ?

Sylvain.