easystruts-cvs Mailing List for EasyStruts (Page 7)
Brought to you by:
eboudrant,
pombredanne
You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
(39) |
May
(128) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(16) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(22) |
Feb
(21) |
Mar
|
Apr
(7) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:18
|
Update of /cvsroot/easystruts/easystruts-website/web/templates/easystruts/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web/templates/easystruts/images Added Files: leftMenuTopshadow-blue.gif .htaccess spacer.gif contentTopshadow.gif easystruts-small-195x44r.png headerBackground-blue620x1.gif favicon.ico Log Message: Added new web site sources and data --- NEW FILE: contentTopshadow.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: spacer.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: easystruts-small-195x44r.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: .htaccess --- Options -Indexes --- NEW FILE: leftMenuTopshadow-blue.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: favicon.ico --- (This appears to be a binary file; contents omitted.) --- NEW FILE: headerBackground-blue620x1.gif --- (This appears to be a binary file; contents omitted.) |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:18
|
Update of /cvsroot/easystruts/easystruts-website/web-edit/WEB-INF In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web-edit/WEB-INF Added Files: jspwiki.tld oscache.tld c-rt.tld .htaccess web.xml Log Message: Added new web site sources and data --- NEW FILE: c-rt.tld --- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>c_rt</short-name> <uri>http://java.sun.com/jstl/core_rt</uri> <display-name>JSTL core RT</display-name> <description>JSTL 1.0 core library</description> <validator> <validator-class> org.apache.taglibs.standard.tlv.JstlCoreTLV </validator-class> <description> Provides core validation features for JSTL tags. </description> </validator> <tag> <name>catch</name> <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class> <body-content>JSP</body-content> <description> Catches any Throwable that occurs in its body and optionally exposes it. </description> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>choose</name> <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class> <body-content>JSP</body-content> <description> Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <when> and <otherwise> </description> </tag> <tag> <name>if</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class> <body-content>JSP</body-content> <description> Simple conditional tag, which evalutes its body if the supplied condition is true and optionally exposes a Boolean scripting variable representing the evaluation of this condition </description> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>import</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.ImportTag</tag-class> <tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class> <body-content>JSP</body-content> <description> Retrieves an absolute or relative URL and exposes its contents to either the page, a String in 'var', or a Reader in 'varReader'. </description> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>varReader</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>context</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>charEncoding</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>forEach</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class> <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class> <body-content>JSP</body-content> <description> The basic iteration tag, accepting many different collection types and supporting subsetting and other functionality </description> <attribute> <name>items</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.Object</type> </attribute> <attribute> <name>begin</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>end</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>step</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>varStatus</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>forTokens</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.ForTokensTag</tag-class> <body-content>JSP</body-content> <description> Iterates over tokens, separated by the supplied delimeters </description> <attribute> <name>items</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> </attribute> <attribute> <name>delims</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> </attribute> <attribute> <name>begin</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>end</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>step</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>varStatus</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>out</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.OutTag</tag-class> <body-content>JSP</body-content> <description> Like <%= ... >, but for expressions. </description> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>default</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>escapeXml</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>otherwise</name> <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class> <body-content>JSP</body-content> <description> Subtag of <choose> that follows <when> tags and runs only if all of the prior conditions evaluated to 'false' </description> </tag> <tag> <name>param</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.ParamTag</tag-class> <body-content>JSP</body-content> <description> Adds a parameter to a containing 'import' tag's URL. </description> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>redirect</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.RedirectTag</tag-class> <body-content>JSP</body-content> <description> Redirects to a new URL. </description> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>url</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>context</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>remove</name> <tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class> <body-content>empty</body-content> <description> Removes a scoped variable (from a particular scope, if specified). </description> <attribute> <name>var</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>set</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.SetTag</tag-class> <body-content>JSP</body-content> <description> Sets the result of an expression evaluation in a 'scope' </description> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>target</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>property</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>url</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.UrlTag</tag-class> <body-content>JSP</body-content> <description> Creates a URL with optional query parameters. </description> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>context</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>when</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.WhenTag</tag-class> <body-content>JSP</body-content> <description> Subtag of <choose> that includes its body if its condition evalutes to 'true' </description> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> </tag> </taglib> --- NEW FILE: .htaccess --- Options -Indexes --- NEW FILE: jspwiki.tld --- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_1.dtd"> <!-- JSPWiki tag libraries are defined here. Note that we support only the 1.1 spec for now, simply because there is no reason to break compatibility. --> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>jspwiki</shortname> <tag> <name>AttachmentsIterator</name> <tagclass>com.ecyrd.jspwiki.tags.AttachmentsIteratorTag</tagclass> <teiclass>com.ecyrd.jspwiki.tags.AttachmentsIteratorInfo</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>id</name> </attribute> </tag> <tag> <name>Author</name> <tagclass>com.ecyrd.jspwiki.tags.AuthorTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>Breadcrumbs</name> <tagclass>com.ecyrd.jspwiki.tags.BreadcrumbsTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>maxpages</name> <required>false</required><!-- the default value is 10 --> </attribute> <attribute> <name>separator</name> <required>false</required><!-- the default value is " | " --> </attribute> </tag> <tag> <name>Calendar</name> <tagclass>com.ecyrd.jspwiki.tags.CalendarTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>pageformat</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>urlformat</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>monthurlformat</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>CheckLock</name> <tagclass>com.ecyrd.jspwiki.tags.CheckLockTag</tagclass> <teiclass>com.ecyrd.jspwiki.tags.CheckLockInfo</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>mode</name> </attribute> <attribute> <name>id</name> </attribute> </tag> <tag> <name>CheckRequestContext</name> <tagclass>com.ecyrd.jspwiki.tags.CheckRequestContextTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>context</name> </attribute> </tag> <tag> <name>CheckVersion</name> <tagclass>com.ecyrd.jspwiki.tags.CheckVersionTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>mode</name> </attribute> </tag> <tag> <name>CommentLink</name> <tagclass>com.ecyrd.jspwiki.tags.CommentLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> </tag> <tag> <name>ContentEncoding</name> <tagclass>com.ecyrd.jspwiki.tags.ContentEncodingTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>DiffLink</name> <tagclass>com.ecyrd.jspwiki.tags.DiffLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> <attribute> <name>version</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>newVersion</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>EditLink</name> <tagclass>com.ecyrd.jspwiki.tags.EditLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> <attribute> <name>version</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>HasAttachments</name> <tagclass>com.ecyrd.jspwiki.tags.HasAttachmentsTag</tagclass> <bodycontent>JSP</bodycontent> </tag> <tag> <name>HistoryIterator</name> <tagclass>com.ecyrd.jspwiki.tags.HistoryIteratorTag</tagclass> <teiclass>com.ecyrd.jspwiki.tags.HistoryIteratorInfo</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> </attribute> <attribute> <name>id</name> </attribute> </tag> <tag> <name>Include</name> <tagclass>com.ecyrd.jspwiki.tags.IncludeTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>InsertDiff</name> <tagclass>com.ecyrd.jspwiki.tags.InsertDiffTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>InsertPage</name> <tagclass>com.ecyrd.jspwiki.tags.InsertPageTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>mode</name> </attribute> </tag> <tag> <name>LinkTo</name> <tagclass>com.ecyrd.jspwiki.tags.LinkToTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> <attribute> <name>version</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>template</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>LinkToParent</name> <tagclass>com.ecyrd.jspwiki.tags.LinkToParentTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> <attribute> <name>version</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>NoSuchPage</name> <tagclass>com.ecyrd.jspwiki.tags.NoSuchPageTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> </attribute> </tag> <tag> <name>PageExists</name> <tagclass>com.ecyrd.jspwiki.tags.PageExistsTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>PageInfoLink</name> <tagclass>com.ecyrd.jspwiki.tags.PageInfoLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> </tag> <tag> <name>PageDate</name> <tagclass>com.ecyrd.jspwiki.tags.PageDateTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>PageName</name> <tagclass>com.ecyrd.jspwiki.tags.PageNameTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>PageSize</name> <tagclass>com.ecyrd.jspwiki.tags.PageSizeTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>PageType</name> <tagclass>com.ecyrd.jspwiki.tags.PageTypeTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>type</name> </attribute> </tag> <tag> <name>PageVersion</name> <tagclass>com.ecyrd.jspwiki.tags.PageVersionTag</tagclass> <bodycontent>JSP</bodycontent> </tag> <tag> <name>ParentPageName</name> <tagclass>com.ecyrd.jspwiki.tags.ParentPageNameTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>Permission</name> <tagclass>com.ecyrd.jspwiki.tags.PermissionTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>permission</name> </attribute> </tag> <tag> <name>Plugin</name> <tagclass>com.ecyrd.jspwiki.tags.PluginTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>plugin</name> <required>true</required> </attribute> <attribute> <name>args</name> <required>true</required> </attribute> </tag> <tag> <name>RSSLink</name> <tagclass>com.ecyrd.jspwiki.tags.RSSLinkTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>RSSImageLink</name> <tagclass>com.ecyrd.jspwiki.tags.RSSImageLinkTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>title</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>RSSUserlandLink</name> <tagclass>com.ecyrd.jspwiki.tags.RSSCoffeeCupLinkTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>title</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>SearchResultIterator</name> <tagclass>com.ecyrd.jspwiki.tags.SearchResultIteratorTag</tagclass> <teiclass>com.ecyrd.jspwiki.tags.SearchResultIteratorInfo</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>id</name> </attribute> <attribute> <name>maxItems</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>list</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>TemplateDir</name> <tagclass>com.ecyrd.jspwiki.tags.TemplateDirTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>Translate</name> <tagclass>com.ecyrd.jspwiki.tags.TranslateTag</tagclass> <bodycontent>JSP</bodycontent> </tag> <tag> <name>UploadLink</name> <tagclass>com.ecyrd.jspwiki.tags.UploadLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> </tag> <tag> <name>UserName</name> <tagclass>com.ecyrd.jspwiki.tags.UserNameTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>UserCheck</name> <tagclass>com.ecyrd.jspwiki.tags.UserCheckTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>status</name> </attribute> <attribute> <name>exists</name> </attribute> </tag> <tag> <name>Variable</name> <tagclass>com.ecyrd.jspwiki.tags.VariableTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>var</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>default</name> </attribute> </tag> </taglib> --- NEW FILE: web.xml --- <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>JSPWiki</display-name> <description> JSPWiki is a free JSP-based WikiClone. It is licenced under the Lesser GNU General Public License. JSPWiki is maintained by Janne Jalkanen (+others), jal...@ec.... This version was customized for nexb. </description> <!-- Attachment exchange handler. --> <servlet> <servlet-name>AttachmentServlet</servlet-name> <servlet-class>com.ecyrd.jspwiki.attachment.AttachmentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AttachmentServlet</servlet-name> <url-pattern>/attach</url-pattern> </servlet-mapping> <!-- This means that we don't have to use redirection from index.html anymore. Yay! --> <welcome-file-list> <welcome-file>Wiki.jsp</welcome-file> </welcome-file-list> <!-- Here we define the users which are allowed to access JSPWiki editor. I'll provide here an example case where you can set up a Wiki which allows everyone read access, but only authenticated users are allowed to edit (i.e. access the Edit.jsp page). To enable this, remove the comments signs. We setup here two sample roles, "admin" and "user". There is no real difference between these two for now. You must also add to your $TOMCAT_HOME/conf/tomcat-users.xml the actual user accounts. --> <!-- START OF ACCESS RESTRICTION --> <security-constraint> <web-resource-collection> <web-resource-name>Protected Area</web-resource-name> <url-pattern>/Edit.jsp</url-pattern> <url-pattern>/attach/*</url-pattern> <http-method>DELETE</http-method> <http-method>GET</http-method> <http-method>POST</http-method> <http-method>PUT</http-method> </web-resource-collection> <auth-constraint> <role-name>strutsedit</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>Struts Editor</realm-name> </login-config> </web-app> --- NEW FILE: oscache.tld --- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.5</tlibversion> <jspversion>1.1</jspversion> <shortname>oscache</shortname> <info>OSCache - see http://www.opensymphony.com/oscache</info> <tag> <name>cache</name> <tagclass>com.opensymphony.module.oscache.web.tag.CacheTag</tagclass> <bodycontent>JSP</bodycontent> <info>A tag to cache post-processed JSP contents</info> <attribute> <name>time</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>duration</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>refreshpolicyclass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>refreshpolicyparam</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>refresh</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>key</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>language</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>encoding</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>usecached</name> <tagclass>com.opensymphony.module.oscache.web.tag.UseCachedTag</tagclass> <info>A tag to tell the cache to use the cached version</info> <attribute> <name>use</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>flush</name> <tagclass>com.opensymphony.module.oscache.web.tag.FlushTag</tagclass> <info>A tag to flush the cache</info> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>key</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>language</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>pattern</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> |
Update of /cvsroot/easystruts/easystruts-website/web-edit/templates/easystruts-edit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web-edit/templates/easystruts-edit Added Files: FindContent.jsp LeftMenu.jsp DisplayMessage.jsp ViewTemplate.jsp EditContent.jsp cssinclude.js PreviewContent.jsp search_highlight.js DiffContent.jsp PageContent.jsp x_core.js InfoContent.jsp nexb.css EditTemplate.jsp x_event.js UploadTemplate.jsp .htaccess nexb-print.css ConflictContent.jsp SearchBox.jsp CommentContent.jsp LoginBox.jsp PreferencesContent.jsp LeftMenuFooter.jsp Log Message: Added new web site sources and data --- NEW FILE: ViewTemplate.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title><wiki:Variable var="applicationname" />: <wiki:PageName /></title> <meta http-equiv="content-type" content="text/html; charset=<wiki:ContentEncoding />" /> <script src="templates/<wiki:TemplateDir />/search_highlight.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="templates/<wiki:TemplateDir/>/nexb.css" title="nexB look" /> <script type="text/javascript" src="templates/<wiki:TemplateDir/>/x_core.js"></script> <script type="text/javascript" src="templates/<wiki:TemplateDir/>/x_event.js"></script> <script type="text/javascript"> function adjustLayout() { // Get natural heights var cHeight = xHeight("bodyText"); var lHeight = xHeight("leftMenuBox"); var rHeight = xHeight("rightBox"); // Find the maximum height var maxHeight = Math.max(cHeight, Math.max(lHeight, rHeight)); // Assign maximum height to all columns xHeight("content", maxHeight); xHeight("leftMenu", maxHeight); xHeight("right", maxHeight); // Show the footer xShow("footer"); } window.onload = function() { xAddEventListener(window, "resize", adjustLayout, false); adjustLayout(); } </script> </head> <body> <!-- ###### Header ###### --> <div class="header"> <div class="headerBanner"> <div class="headerSearch"> <wiki:InsertPage page="RightMenuBar" /> <form method="get" action='<wiki:Variable var="baseURL"/>Search.jsp' accept-charset="<wiki:ContentEncoding />"> <input type="text" class="searchText" name="query" maxlength="255" /> <input type="submit" class="searchButton" name="ok" value="Search" /> </form> </div> <div class="headerTitle"> <img src="templates/<wiki:TemplateDir/>/images/easystruts-small-195x44r.png" width="190" height"44" alt="EasyStruts."/> </div> </div> <div class="menuBar"> <wiki:InsertPage page="MenuBar" /> </div> </div> <!-- ###### Content ###### --> <div class="mainContent"> <!-- ###### Left Menu ###### --> <div class="leftMenu"> <div class="leftMenuBox"> <wiki:InsertPage page="LeftMenu" /> <p> <wiki:CheckRequestContext context="view"> <wiki:EditLink>Edit this page</wiki:EditLink> </wiki:CheckRequestContext> </p> <br /> <!-- address some display issues with Mozilla to avoid footer overlapp --> </div> </div> <!-- ###### Right Highlight box ###### --> <div class="right"> <div class="rightBox"> <!-- <wiki:InsertPage page="BodyRight" /> --> </div> </div> <!-- ###### Body Text ###### --> <div class="content"> <div class="bodyText"> <div class="breadcrumbsBar"> <p>Your trail : <wiki:Breadcrumbs maxpages="5" separator=" | "/></p> </div> <h1><wiki:PageName/></h1> <span class="bodyTextContent"> <wiki:CheckRequestContext context="view"> <wiki:Include page="PageContent.jsp" /> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="diff"> <wiki:Include page="DiffContent.jsp" /> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="info"> <wiki:Include page="InfoContent.jsp" /> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="preview"> <wiki:Include page="PreviewContent.jsp" /> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="conflict"> <wiki:Include page="ConflictContent.jsp" /> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="find"> <wiki:Include page="FindContent.jsp" /> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="prefs"> <wiki:Include page="PreferencesContent.jsp" /> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="error"> <wiki:Include page="DisplayMessage.jsp" /> </wiki:CheckRequestContext> <br /> <!-- address some display issues with Mozilla to avoid footer overlapp --> </span> </div> </div> </div> <!-- ###### Footer ###### --> <div class="footer"> <div class="footerContent"> <div class="footerLeft"> <p> <wiki:InsertPage page="LeftFooter" /> <br />Last modified: <wiki:PageDate/> </p> </div> <div class="footerRight"> <p> <wiki:InsertPage page="RightFooter" /> </p> </div> </div> </div> <hr> <table border="0" cellspacing="8" width="95%"> <tr> <td> <h2>Referring pages</h2> </td> <td> <h2>Unused pages</h2> </td> <td> <h2>Undefined Pages</h2> </td> <td> <h2>Recent Changes</h2> </td> </tr> <tr> <td> <wiki:Plugin plugin="ReferringPagesPlugin" args="max='20' maxwidth='50'" /> </td> <td> <wiki:Plugin plugin="UnusedPagesPlugin" args="" /> </td> <td> <wiki:Plugin plugin="UndefinedPagesPlugin" args="" /> </td> <td> <wiki:Plugin plugin="RecentChangesPlugin" args="since='10'" /> </td> </tr> </table> </body> </html> --- NEW FILE: ConflictContent.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <div class="conflictnote"> <p><b>Oops! Someone modified the page while you were editing it!</b></p> <p>Since I am stupid and can't figure out what the difference between those pages is, you will need to do that for me. I've printed here the text (in Wiki) of the new page, and the modifications you made. You'll now need to copy the text onto a scratch pad (Notepad or emacs will do just fine), and then edit the page again.</p> <p>Note that when you go back into the editing mode, someone might have changed the page again. So be quick.</p> </div> <p><font color="#0000FF">Here is the modified text (by someone else):</font></p> <p><hr /></p> <tt> <%=pageContext.getAttribute("conflicttext",PageContext.REQUEST_SCOPE)%> </tt> <p><hr /></p> <p><font color="#0000FF">And here's your text:</font></p> <tt> <%=pageContext.getAttribute("usertext",PageContext.REQUEST_SCOPE)%> </tt> <p><hr /></p> <p> <i>Go edit <wiki:EditLink><wiki:PageName /></wiki:EditLink>.</i> </p> --- NEW FILE: PageContent.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%-- Inserts page content. --%> <%-- If the page is an older version, then offer a note and a possibility to restore this version as the latest one. --%> <wiki:CheckVersion mode="notlatest"> <font color="red"> <p class="versionnote">This is version <wiki:PageVersion/>. It is not the current version, and thus it cannot be edited.<br /> <wiki:LinkTo>[Back to current version]</wiki:LinkTo> <wiki:EditLink version="this">[Restore this version]</wiki:EditLink></p> </font> </wiki:CheckVersion> <%-- Inserts no text if there is no page. --%> <wiki:InsertPage /> <wiki:NoSuchPage> <!-- FIXME: Should also note when a wrong version has been fetched. --> This page does not exist. Why don't you go and <wiki:EditLink>create it</wiki:EditLink>? </wiki:NoSuchPage> <wiki:HasAttachments> <b>Attachments:</b> <div> <table> <wiki:AttachmentsIterator id="att"> <tr> <td><wiki:LinkTo><%=att.getFileName()%></wiki:LinkTo></td> <td><wiki:PageInfoLink><img src="images/attachment_big.png" border="0" alt="Info on <%=att.getFileName()%>" /></wiki:PageInfoLink></td> <td><%=att.getSize()%> bytes</td> </tr> </wiki:AttachmentsIterator> </table> </div> </wiki:HasAttachments> <table> <tr> <td > <a href="#Top">Go to top</a> <wiki:Permission permission="edit"> <wiki:EditLink>Edit this page</wiki:EditLink> </wiki:Permission> <wiki:PageInfoLink>More info...</wiki:PageInfoLink> <a href="javascript:window.open('<wiki:UploadLink format="url" />','Upload','width=640,height=480,toolbar=1,menubar=1,scrollbars=1,resizable=1,').focus()">Attach file...</a> <br /> </td> </tr> <tr> <td> <wiki:CheckVersion mode="latest"> <i>This page last changed on <wiki:DiffLink version="latest" newVersion="previous"><wiki:PageDate/></wiki:DiffLink> by <wiki:Author />.</i> </wiki:CheckVersion> <wiki:CheckVersion mode="notlatest"> <i>This particular version was published on <wiki:PageDate/> by <wiki:Author /></i>. </wiki:CheckVersion> <wiki:NoSuchPage> <i>Page not created yet.</i> </wiki:NoSuchPage> </td> </tr> </table> --- NEW FILE: SearchBox.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%-- Provides a simple searchbox that can be easily included anywhere on the page --%> <div class="searchbox"> <form action="<wiki:Variable var="baseURL"/>Search.jsp" accept-charset="<wiki:ContentEncoding />"> <wiki:LinkTo page="FindPage">Search Wiki:</wiki:LinkTo> <input type="text" name="query" size="15" /> <input type="submit" name="ok" value="Find!" /> </form> </div> --- NEW FILE: LeftMenuFooter.jsp --- <%@ page import="com.ecyrd.jspwiki.Release" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <!-- LeftMenuFooter is automatically generated from a Wiki page called "LeftMenuFooter" --> <p> <wiki:InsertPage page="LeftMenuFooter" /> <wiki:NoSuchPage page="LeftMenuFooter"> <p><hr /></p> <p align="center"> <i>No LeftMenuFooter!</i><br /> <wiki:EditLink page="LeftMenuFooter">Please make one.</wiki:EditLink><br /> </p> <p><hr /></p> </wiki:NoSuchPage> </p> <!-- End of automatically generated page --> <br /><br /><br /> <div align="center" class="small"> <%=Release.APPNAME%> v<%=Release.getVersionString()%> </div> --- NEW FILE: EditTemplate.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title><wiki:Variable var="applicationname" />: <wiki:PageName /></title> <meta http-equiv="content-type" content="text/html; charset=<wiki:ContentEncoding />" /> <script src="templates/<wiki:TemplateDir />/search_highlight.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="templates/<wiki:TemplateDir/>/nexb.css" title="nexB look" /> <script type="text/javascript" src="templates/<wiki:TemplateDir/>/x_core.js"></script> <script type="text/javascript" src="templates/<wiki:TemplateDir/>/x_event.js"></script> <script type="text/javascript"> function adjustLayout() { // Get natural heights var cHeight = xHeight("bodyText"); var lHeight = xHeight("leftMenuBox"); var rHeight = xHeight("rightBox"); // Find the maximum height var maxHeight = Math.max(cHeight, Math.max(lHeight, rHeight)); // Assign maximum height to all columns xHeight("content", maxHeight); xHeight("leftMenu", maxHeight); xHeight("right", maxHeight); // Show the footer xShow("footer"); } window.onload = function() { xAddEventListener(window, "resize", adjustLayout, false); adjustLayout(); } </script> </head> <body> <wiki:CheckRequestContext context="edit"> <body class="edit" bgcolor="#D9E8FF" onLoad="document.forms[1].text.focus()"> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="comment"> <body class="comment" bgcolor="#EEEEEE" onLoad="document.forms[1].text.focus()"> </wiki:CheckRequestContext> <!-- ###### Header ###### --> <div class="header"> <div class="headerBanner"> <div class="headerSearch"> <wiki:InsertPage page="RightMenuBar" /> <form method="get" action='<wiki:Variable var="baseURL"/>Search.jsp' accept-charset="<wiki:ContentEncoding />"> <input type="text" class="searchText" name="query" maxlength="255" /> <input type="submit" class="searchButton" name="ok" value="Search" /> </form> </div> <div class="headerTitle"> <img src="templates/<wiki:TemplateDir/>/images/easystruts-small-195x44r.png" width="190" height"44" alt="EasyStruts."/> </div> </div> <div class="menuBar"> <wiki:InsertPage page="MenuBar" /> </div> </div> <!-- ###### Content ###### --> <div class="mainContent"> <!-- ###### Left Menu ###### --> <div class="leftMenu"> <div class="leftMenuBox"> <wiki:InsertPage page="LeftMenu" /> <p> <wiki:CheckRequestContext context="view"> <wiki:EditLink>Edit this page</wiki:EditLink> </wiki:CheckRequestContext> </p> <br /> <!-- address some display issues with Mozilla to avoid footer overlapp --> </div> </div> <!-- ###### Right Highlight box ###### --> <div class="right"> <div class="rightBox"> <!-- <wiki:InsertPage page="BodyRight" /> --> </div> </div> <!-- ###### Body Text ###### --> <div class="content"> <div class="bodyText"> <div class="breadcrumbsBar"> <p>Your trail : <wiki:Breadcrumbs maxpages="5" separator=" | "/></p> </div> <h1><wiki:PageName/></h1> <span class="bodyTextContent"> <wiki:CheckRequestContext context="comment"> <wiki:Include page="CommentContent.jsp" /> </wiki:CheckRequestContext> <wiki:CheckRequestContext context="edit"> <wiki:Include page="EditContent.jsp" /> </wiki:CheckRequestContext> <br /> <!-- address some display issues with Mozilla to avoid footer overlapp --> </span> </div> </div> </div> <!-- ###### Footer ###### --> <div class="footer"> <div class="footerContent"> <div class="footerLeft"> <p> <wiki:InsertPage page="LeftFooter" /> <br />Last modified: <wiki:PageDate/> </p> </div> <div class="footerRight"> <p> <wiki:InsertPage page="RightFooter" /> </p> </div> </div> </div> </body> </html> --- NEW FILE: nexb.css --- /* Copyright (c) 2003, 2004 nexB Inc. */ /* This code is free software; you can redistribute it and/or */ /* modify it under the terms of the GNU Lesser General Public */ /* License version 2.1 as published by the Free Software Foundation; */ /* See <a href='http://www.nexb.com'>http://www.nexb.com</a> for more details */ /* Changes from the orange style sheet: ffc039 -> 99CCCC; ff8800 -> 3399CC 4b70aa -> 006699 */ /* ###### Global ###### */ body { color: black; background-color: white; font-family: Arial, Helvetica, sans-serif; width:99.7%; margin:0; padding:0; border-right: 1px solid #515D65; } img { border: none; } code { font-family: "lucida console", "courier new", courier, monospace; } table { border-collapse: collapse; empty-cells: show; margin: 1em; color: #515D65; background-color: white; border: 1px solid #515D65; font-size: small; } td { border: 1px solid #515D65; padding:1ex; } ul, li{ margin-bottom:0.1em; margin-top:0.1em; } input.searchButton { color: white; background-color: #3399CC; font-size:small; border: 1px solid white; vertical-align: middle; cursor: hand; /* for IE */ margin:0; padding:0; margin-left: 1em; } input.searchText { font-size:small; border: 1px solid black; vertical-align: middle; padding-top:2px; padding-bottom:2px; } /* ###### Headers ###### */ .header { color: #4B70AA; background-color: white; } .headerBanner { background-image: url(images/headerBackground-blue620x1.gif); background-repeat: repeat-y; background-attachment: scroll; background-position: right; border:none; border-bottom: 1px solid white; padding:0.5em 1em 0.5em; } .headerTitle { vertical-align: baseline; } .headerTitle h1{ display: inline; margin:0; margin-left:0.5em; padding:0; font-weight: normal; font-size: 300%; } .headerTitle a { text-decoration: none; border:0; } .headerSearch { font-size:73%; float: right; padding-top: 1.5em; } .headerSearch form { display: inline; margin:0; padding:0; } .headerSearch input.searchButton { color: white; background-color: #3399CC; font-size:small; border: 1px solid white; vertical-align: middle; cursor: hand; /* for IE */ margin:0; padding:0; margin-left: 1em; } .headerSearch input.searchText { font-size:small; border: 1px solid black; vertical-align: middle; padding-top:2px; padding-bottom:2px; } .headerSearch a { color: black; text-decoration: none; padding:0; padding-left:1em; padding-right:1em; } .headerSearch a:hover { text-decoration: underline; } /* ### Menu Bar ###### */ .menuBar { font-size: 73%; color: white; background-color: #4B70AA; border-top-width: 1px; border-top-style: solid; border-top-color: black; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: white; padding-top:0.25em; padding-bottom:0.25em; } .menuBar p { padding:0; padding-top:0.25em; padding-bottom:0.25em; margin:0; } .menuBar a { color: white; text-decoration: none; padding:0; padding-left:1em; padding-right:1em; } .menuBar a:hover { text-decoration: underline; color: #99CCCC; } /* ###### Left Menu ###### */ .leftMenuBox { background-image: url(images/leftMenuTopshadow-blue.gif); background-repeat: repeat-x; background-color: #99CCCC; width: 11em; border-right-width: 1px; border-right-style: solid; border-right-color: #515D65; text-align: left; padding:0; padding-top:4px; padding-bottom:1em; float: left; clear: left; } .leftMenuBox h2 { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: white; } .leftMenuBox h2 a, .leftMenuBox h2 a:hover, .leftMenuBox h2 a:visited { border: 0; } .leftMenuBox h2, .leftMenuBox h2 a, .leftMenuBox h2 a:hover, .leftMenuBox h2 a:visited { color: white; background-color: #3399CC; margin:0; margin-bottom: 0.1em; padding:0; padding-top:0.04em; padding-bottom:0.09em; padding-left: 0.6em; text-align: left; text-transform: uppercase; font-size: 90%; } .leftMenuBox h2 a:hover{ color: #515D65; } .leftMenuBox a { text-decoration: none; font-weight: bold; display: block; color: #515D65; font-size: 75%; border: 1px solid #99CCCC; border-right: 0; margin-left: 1.8em; margin-bottom: 0.15em; margin-top: 0.15em; padding-bottom: 0.25em; padding-top: 0.25em; padding-left: 0.3em; } .leftMenuBox a:hover { color: #3399CC; background-color: white; border: 1px solid #515D65; border-right: 0; text-decoration: none; font-weight: bold; } .leftMenuBox p { padding:0; padding-top:0.15em; padding-bottom:0.15em; margin:0; margin-left: 1em; } /* ###### Main Content box ###### */ .mainContent { background-color: #99CCCC; } /* ### bread crumbs ###### */ .breadcrumbsBar { background-color: white; color: #515D65; padding: 0; font-size: x-small; } .breadcrumbsBar a { text-decoration: none; color:#515D65; } .breadcrumbsBar a:hover { text-decoration: underline; } /* ###### Body Text ###### */ .bodyTextContent { font-size:small; } .bodyText p , .bodyTextContent p { padding: 0.2em; margin:0.2em; } .bodyText .searchword , .bodyTextContent .searchWord { background-color: #99CCCC; color: #515D65; } .bodyText { background-image: url(images/contentTopshadow.gif); background-repeat: repeat-x; background-color: white; color: #515D65; margin: 0; margin-left: 11em; padding:0; padding-left: 1em; padding-top: 1em; border-left-width: 1px; border-left-style: solid; border-left-color: #515D65; } .bodyText h1 { font-weight: normal; font-size: x-large; padding: 0; margin: 0; } /* ###### Optional right side Text Box ###### */ .rightBox { display: inline; float: right; clear: right; border-left-color: #515D65; border-left-style:solid; border-left-width: 1px; margin:0 } /* ###### Footer ###### */ .footer { color: #515D65; clear: both; padding:0; padding-top:1em; padding-bottom:1.5em; margin:0; border-top-width: 1px; border-top-style: solid; border-top-color: #515D65; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #515D65; font-size: x-small; } .footer a{ color: #515D65; text-align: right; text-decoration: underline; } .footer a:hover { text-align: right; color: black; text-decoration: underline; } .footerLeft { float: left; text-align: left; } .footerRight { text-align: right; } .footerLeft p , .footerRight p{ margin:0; padding:0; } .footerLeft p { margin-left:1em; } .footerRight p{ margin-right:1em; } --- NEW FILE: PreferencesContent.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <p> This is a page which allows you to set up all sorts of interesting things. You need to have cookies enabled for this to work, though. </p> <form action="<wiki:Variable var="baseURL"/>UserPreferences.jsp" method="POST" accept-charset="UTF-8"> <b>User name:</b> <input type="text" name="username" size="30" value="<wiki:UserName/>" /> <i>This must be a proper WikiName, no punctuation.</i> <br /><br /> <input type="submit" name="ok" value="Set my preferences!" /> <input type="hidden" name="action" value="save" /> </form> <hr /> <h3>Removing your preferences</h3> <p>In some cases, you may need to remove the above preferences from the computer. Click the button below to do that. Note that it will remove all preferences you've set up, permanently. You will need to enter them again.</p> <div align="center"> <form action="<wiki:Variable var="baseURL"/>UserPreferences.jsp" method="POST" accept-charset="UTF-8"> <input type="submit" name="clear" value="Remove preferences from this computer" /> </form> </div> --- NEW FILE: EditContent.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <wiki:CheckVersion mode="notlatest"> <p class="versionnote">You are about to restore version <wiki:PageVersion/>. Click on "Save" to restore. You may also edit the page before restoring it. </p> </wiki:CheckVersion> <wiki:CheckLock mode="locked" id="lock"> <p class="locknote">User '<%=lock.getLocker()%>' has started to edit this page, but has not yet saved. I won't stop you from editing this page anyway, BUT be aware that the other person might be quite annoyed. It would be courteous to wait for his lock to expire or until he stops editing the page. The lock expires in <%=lock.getTimeLeft()%> minutes. </p> </wiki:CheckLock> <form action="<wiki:EditLink format="url" />" method="POST" accept-charset="<wiki:ContentEncoding />"> <p> <%-- These are required parts of this form. If you do not include these, horrible things will happen. Do not modify them either. --%> <%-- FIXME: This is not required, is it? --%> <input type="hidden" name="page" value="<wiki:PageName/>" /> <input type="hidden" name="action" value="save" /> <input type="hidden" name="edittime" value="<%=pageContext.getAttribute("lastchange", PageContext.REQUEST_SCOPE )%>" /> <wiki:CheckRequestContext context="comment"> <input type="hidden" name="comment" value="true" /> </wiki:CheckRequestContext> <%-- End of required area --%> <textarea class="editor" wrap="virtual" name="text" rows="25" cols="80" style="width:100%;"><wiki:CheckRequestContext context="edit"><wiki:InsertPage mode="plain" /></wiki:CheckRequestContext></textarea> <p> <input type="submit" name="ok" value="Save" /> <input type="submit" name="preview" value="Preview" /> <input type="submit" name="cancel" value="Cancel" /> </p> </form> <table> <tr> <td colspan="2"> Here's a short reminder on what elements you have at your disposal: </td> </tr> <tr> <td> <pre>----</pre> </td> <td>Horizontal ruler </td> <tr> <td> <pre>\\</pre> </td> <td>Forced line break </td> </tr> <tr> <td> <pre>[link]</pre> </td> <td>Create hyperlink to "link", where "link" can be either an internal WikiName or an external link (http://) </td> </tr> <tr> <td> <pre>[text|link]</pre> </td> <td>Create a hyperlink where the link text is different from the actual hyperlink link. </td> </tr> <tr> <td> <pre>[text|wiki:link]</pre> </td> <td>Create a hyperlink where the link text is different from the actual hyperlink link, and the hyperlink points to a named Wiki. This supports interWiki linking. </td> </tr> <tr> <td> <pre>*</pre> </td> <td>Make a bulleted list (must be in first column). Use more (**) for deeper indentations. </td> </tr> <tr> <td> <pre>#</pre> </td> <td>Make a numbered list (must be in first column). Use more (##, ###) for deeper indentations. </td> </tr> <tr> <td> <pre>!, !!, !!!</pre> </td> <td>Start a line with an exclamation mark (!) to make a heading. More exclamation marks mean bigger headings. </td> </tr> <tr> <td> <pre>__text__</pre> </td> <td>Makes text bold. </td> </tr> <tr> <td> <pre>''text''</pre> </td> <td>Makes text in italics (notice that these are single quotes (')) </td> </tr> <tr> <td> <pre>{{text}}</pre> </td> <td>Makes text in monospaced font. </td> </tr> <tr> <td> <pre>;term:def</pre> </td> <td>Defines 'term' with 'def'. Use this with empty 'term' to make short comments. </td> </tr> <tr> <td> <pre>|text|more text| Makes a table. Double bars for a table heading. <tr> <td> images </td> <td> To embed images just put them available on the web using one of the approved formats, and they will get inlined automatically. </td> </tr> <tr> <td> To make a code block, use triple {'s to open, and triple }'s to close. </td> </tr> </table> --- NEW FILE: LoginBox.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%-- Provides a small login/logout form to include in a side bar. --%> <div class="loginbox" align="center"> <p> <hr /> <wiki:UserCheck status="unvalidated"> <form action="<wiki:Variable var="baseURL"/>Login.jsp" accept-charset="UTF-8" method="POST" > <p> <input type="hidden" name="page" value="<wiki:Variable var="pagename"/>" /> <input type="text" name="uid" size="8" /> <br /> <input type="password" name="passwd" size="8" /> <br /> <input type="submit" name="action" value="login" /> </p> </form> </wiki:UserCheck> <wiki:UserCheck status="validated"> <form action="<wiki:Variable var="baseURL"/>Login.jsp" accept-charset="UTF-8"> <p> <input type="hidden" name="page" value="<wiki:Variable var="pagename"/>" /> <input type="submit" name="action" value="logout" /> </p> </form> </wiki:UserCheck> </p> </div> --- NEW FILE: PreviewContent.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%-- Inserts page content for preview. --%> <div class="previewnote"> <b>This is a PREVIEW! Hit "back" on your browser to go back to the editor, or hit "Save" if you're happy with what you see.</b> </div> <p><hr /></p> <div class="previewcontent"> <wiki:Translate><%=pageContext.getAttribute("usertext",PageContext.REQUEST_SCOPE)%></wiki:Translate> </div> <br /> <p><hr /></p> <div class="previewnote"> <b>This is a PREVIEW! Hit "back" on your browser to go back to the editor, or hit "Save" if you're happy with what you see.</b> </div> <p><hr /></p> <form action="<wiki:EditLink format="url" />" method="POST" ACCEPT-CHARSET="<wiki:ContentEncoding />"> <p> <%-- These are required parts of this form. If you do not include these, horrible things will happen. Do not modify them either. --%> <input type="hidden" name="page" value="<wiki:PageName/>" /> <input type="hidden" name="action" value="save" /> <input type="hidden" name="edittime" value="<%=pageContext.getAttribute("lastchange", PageContext.REQUEST_SCOPE )%>" /> <textarea rows="4" cols="20" readonly="true" style="display:none" name="text"><%=pageContext.getAttribute("usertext", PageContext.REQUEST_SCOPE) %></textarea> <div id="previewsavebutton" align="center"> <input type="button" name="edit" value="Keep editing" onClick="javascript:back(-1);"/> <input type="submit" name="ok" value="Save" /> <input type="submit" name="cancel" value="Cancel" /> </div> </p> </form> --- NEW FILE: x_event.js --- // x_event.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xAddEventListener(e,eventType,eventListener,useCapture) { if(!(e=xGetElementById(e))) return; eventType=eventType.toLowerCase(); if((!xIE4Up && !xOp7) && e==window) { if(eventType=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eventListener; xResizeEvent(); return; } if(eventType=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eventListener; xScrollEvent(); return; } } var eh='e.on'+eventType+'=eventListener'; if(e.addEventListener) e.addEventListener(eventType,eventListener,useCapture); else if(e.attachEvent) e.attachEvent('on'+eventType,eventListener); else if(e.captureEvents) { if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.captureEvents(eval('Event.'+eventType.toUpperCase())); } eval(eh); } else eval(eh); } function xRemoveEventListener(e,eventType,eventListener,useCapture) { if(!(e=xGetElementById(e))) return; eventType=eventType.toLowerCase(); if((!xIE4Up && !xOp7) && e==window) { if(eventType=='resize') { window.xREL=null; return; } if(eventType=='scroll') { window.xSEL=null; return; } } var eh='e.on'+eventType+'=null'; if(e.removeEventListener) e.removeEventListener(eventType,eventListener,useCapture); else if(e.detachEvent) e.detachEvent('on'+eventType,eventListener); else if(e.releaseEvents) { if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.releaseEvents(eval('Event.'+eventType.toUpperCase())); } eval(eh); } else eval(eh); } function xEvent(evt) { // cross-browser event object prototype this.type = ''; this.target = null; this.pageX = 0; this.pageY = 0; this.offsetX = 0; this.offsetY = 0; this.keyCode = 0; var e = evt ? evt : window.event; if(!e) return; if(e.type) this.type = e.type; if(e.target) this.target = e.target; else if(e.srcElement) this.target = e.srcElement; if(xOp5or6) { this.pageX = e.clientX; this.pageY = e.clientY; } else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); } if(xDef(e.offsetX,e.offsetY)) { this.offsetX = e.offsetX; this.offsetY = e.offsetY; } else { this.offsetX = this.pageX - xPageX(this.target); this.offsetY = this.pageY - xPageY(this.target); } if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which else if (xDef(e.which)) { this.keyCode = e.which; } } function xResizeEvent() { // window resize event simulation if (window.xREL) setTimeout('xResizeEvent()', 250); var cw = xClientWidth(), ch = xClientHeight(); if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); } } function xScrollEvent() { // window scroll event simulation if (window.xSEL) setTimeout('xScrollEvent()', 250); var sl = xScrollLeft(), st = xScrollTop(); if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); } } // end x_event.js --- NEW FILE: InfoContent.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <wiki:PageExists> <form action="<wiki:Variable var="baseurl"/>Delete.jsp" method="POST" accept-charset="<wiki:ContentEncoding />"> <table cellspacing="4"> <tr> <td><b>Page name</b></td> <td><wiki:LinkTo><wiki:PageName /></wiki:LinkTo></td> </tr> <wiki:PageType type="attachment"> <tr> <td><b>Parent page</b></td> <td><wiki:LinkToParent><wiki:ParentPageName /></wiki:LinkToParent></td> </tr> </wiki:PageType> <tr> <td><b>Page last modified</b></td> <td><wiki:PageDate /></td> </tr> <tr> <td><b>Current page version</b></td> <td><wiki:PageVersion>No versions.</wiki:PageVersion></td> </tr> <tr> <td valign="top"><b>Page revision history</b></td> <td> <table border="1" cellpadding="4"> <tr> <th>Version</th> <th>Date <wiki:PageType type="page">(and differences to current)</wiki:PageType></th> <th>Author</th> <th>Size</th> <wiki:PageType type="page"> <th>Changes from previous</th> </wiki:PageType> <wiki:Permission permission="delete"> <th>Delete</th> </wiki:Permission> </tr> <wiki:HistoryIterator id="currentPage"> <tr> <td> <wiki:LinkTo version="<%=Integer.toString(currentPage.getVersion())%>"> <wiki:PageVersion/> </wiki:LinkTo> </td> <td> <wiki:PageType type="page"> <wiki:DiffLink version="latest" newVersion="<%=Integer.toString(currentPage.getVersion())%>"> <wiki:PageDate/> </wiki:DiffLink> </wiki:PageType> <wiki:PageType type="attachment"> <wiki:PageDate/> </wiki:PageType> </td> <td><wiki:Author /></td> <td><wiki:PageSize /></td> <wiki:PageType type="page"> <td> <% if( currentPage.getVersion() > 1 ) { %> <wiki:DiffLink version="<%=Integer.toString(currentPage.getVersion())%>" newVersion="<%=Integer.toString(currentPage.getVersion()-1)%>"> from version <%=currentPage.getVersion()-1%> to <%=currentPage.getVersion()%> </wiki:DiffLink> <% } %> </td> </wiki:PageType> <wiki:Permission permission="delete"> <td> <input type="checkbox" name="delete-<%=currentPage.getVersion()%>" /> </td> </wiki:Permission> </tr> </wiki:HistoryIterator> </table> </td> </tr> </table> <wiki:Permission permission="delete"> <input type="submit" name="delete" value="Delete marked versions"/> </wiki:Permission> </form> <br /> <wiki:PageType type="page"> <wiki:LinkTo>Back to <wiki:PageName/></wiki:LinkTo> </wiki:PageType> <wiki:PageType type="attachment"> <form action="<wiki:Variable var="baseurl"/>attach" method="POST" enctype="multipart/form-data"> <%-- Do NOT change the order of wikiname and content, otherwise the servlet won't find its parts. --%> <input type="hidden" name="page" value="<wiki:Variable var="pagename"/>" /> In order to update this attachment with a newer version, find the file using "Browse", then click on "Update". <p> <input type="file" name="content" /> <input type="submit" name="upload" value="Update" /> <input type="hidden" name="action" value="upload" /> <input type="hidden" name="nextpage" value="<wiki:PageInfoLink format="url"/>" /> </p> </form> </wiki:PageType> </wiki:PageExists> <wiki:NoSuchPage> This page does not exist. Why don't you go and <wiki:EditLink>create it</wiki:EditLink>? </wiki:NoSuchPage> --- NEW FILE: search_highlight.js --- /* http://www.kryogenix.org/code/browser/searchhi/ */ /* Modified 20021006 to fix query string parsing and add case insensitivity */ /* Modified 20030227 by sg...@hi... to skip words with "-" and cut %2B (+) preceding pages */ function highlightWord(node,word) { // Iterate into this nodes childNodes if (node.hasChildNodes) { var hi_cn; for (hi_cn=0;hi_cn<node.childNodes.length;hi_cn++) { highlightWord(node.childNodes[hi_cn],word); } } // And do this node itself if (node.nodeType == 3) { // text node tempNodeVal = node.nodeValue.toLowerCase(); tempWordVal = word.toLowerCase(); if (tempNodeVal.indexOf(tempWordVal) != -1) { pn = node.parentNode; if (pn.className != "searchword") { // word has not already been highlighted! nv = node.nodeValue; ni = tempNodeVal.indexOf(tempWordVal); // Create a load of replacement nodes before = document.createTextNode(nv.substr(0,ni)); docWordVal = nv.substr(ni,word.length); // alert( "Found: " + docWordVal ); after = document.createTextNode(nv.substr(ni+word.length)); hiwordtext = document.createTextNode(docWordVal); hiword = document.createElement("span"); hiword.className = "searchword"; hiword.appendChild(hiwordtext); pn.insertBefore(before,node); pn.insertBefore(hiword,node); pn.insertBefore(after,node); pn.removeChild(node); } } } } function googleSearchHighlight() { if (!document.createElement) return; ref = document.referrer; //or URL for highlighting in place if (ref.indexOf('?') == -1) return; qs = ref.substr(ref.indexOf('?')+1); qsa = qs.split('&'); for (i=0;i<qsa.length;i++) { qsip = qsa[i].split('='); if (qsip.length == 1) continue; // q= for Google, p= for Yahoo // query= for JSPWiki if (qsip[0] == 'query' || qsip[0] == 'q') { words = qsip[1].replace(/%2B/g,''); words = words.replace(/-\S+\s/g,''); words = unescape(words.replace(/\+/g,' ')).split(/\s+/); for (w=0;w<words.length;w++) { highlightWord(document.getElementsByTagName("body")[0],words[w]); } } } } window.onload = googleSearchHighlight; --- NEW FILE: CommentContent.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <table width="100%" cellspacing="0" cellpadding="0" border="0"> <tr> <td align="left"> <h1 class="pagename">Adding comment to <wiki:PageName/></h1></td> <td align="right"> <%@ include file="SearchBox.jsp" %> </td> </tr> </table> <p><hr></p> <wiki:InsertPage/> <p> <h3>Please enter your comments below:</h3> </p> <form action="<wiki:CommentLink format="url" />" method="POST" accept-charset="<wiki:ContentEncoding />"> <p> <%-- These are required parts of this form. If you do not include these, horrible things will happen. Do not modify them either. --%> <%-- FIXME: This is not required, is it? --%> <input type="hidden" name="page" value="<wiki:PageName/>" /> <input type="hidden" name="action" value="save" /> <input type="hidden" name="edittime" value="<%=pageContext.getAttribute("lastchange", PageContext.REQUEST_SCOPE )%>" /> <%-- End of required area --%> <textarea class="editor" wrap="virtual" name="text" rows="15" cols="60"></textarea> <p> <label for="authorname">Your name</label> <input type="text" name="author" id="authorname" value="<wiki:UserName/>" /> <label for="rememberme">Remember me?</label> <input type="checkbox" name="remember" id="rememberme" /> </p> <p> <input type="submit" name="ok" value="Save" /> <input type="submit" name="preview" value="Preview" /> <input type="submit" name="cancel" value="Cancel" /> </p> </form> <p> <wiki:NoSuchPage page="EditPageHelp"> Ho hum, it seems that the EditPageHelp<wiki:EditLink page="EditPageHelp">?</wiki:EditLink> page is missing. Someone must've done something to the installation... </wiki:NoSuchPage> </p> <wiki:InsertPage page="EditPageHelp" /> --- NEW FILE: FindContent.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="java.util.Collection" %> <%@ page import="java.util.Collection" %> <% Collection list = (Collection)pageContext.getAttribute( "searchresults", PageContext.REQUEST_SCOPE ); String query = (String)pageContext.getAttribute( "query", PageContext.REQUEST_SCOPE ); if( query == null ) query = ""; %> <form action="<wiki:Variable var="baseURL"/>Search.jsp" accept-charset="ISO-8859-1,UTF-8"> <p> <input type="text" class="searchText" name="query" size="40" value="<%=query%>" /> <input type="submit" class="searchButton" name="ok" value="Search" /> </p> </form> <% if( list != null ) { %> <p>Searched EasyStruts for <q><%=query%></q></p> <% if( list.size() > 0 ) { %> <p>Results 1-<%=(list.size()<20)?list.size():20%> out of <%=list.size()%></p> <ol> <wiki:SearchResultIterator list="<%=list%>" id="searchref" maxItems="20"> <li> <wiki:LinkTo><wiki:PageName/></wiki:LinkTo> </li> </wiki:SearchResultIterator> </ol> <% } else { %> <p>No pages were found containing <strong><q><%=query%></q></strong>.</p> <% } %> <% } %> --- NEW FILE: DisplayMessage.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%-- Inserts a string message. --%> <div class="messagecontent"> <%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE)%> </div> <br /> --- NEW FILE: nexb-print.css --- /* * CSS intended specificly for print media * e.g: <link rel=stylesheet type="text/css" media="print" href="templates/default/jspwiki_print.css"> * This stylesheet mainly hides all the webspecific stuff. * Shows content in a print friendly way. * Author PhilipVanBogaert */ /* Webpage stuff */ .headerSearch,.menuBar,.breadcrumbsBar,.leftMenuBox { display:none; } body { font-size:9pt; } a { text-decoration:none; } --- NEW FILE: cssinclude.js --- <link rel="stylesheet" href="templates/<wiki:TemplateDir/>/jspwiki.css" /> <script type="text/javascript"> <!-- Hide script contents from old browsers var IE4 = (document.all && !document.getElementById) ? true : false; var NS4 = (document.layers) ? true : false; var IE5 = (document.all && document.getElementById) ? true : false; var NS6 = (document.getElementById && !document.all) ? true : false; var IE = IE4 || IE5; var NS = NS4 || NS6; var Mac = (navigator.platform.indexOf("Mac") == -1) ? false : true; var sheet; if( NS4 ) { sheet = "jspwiki_ns.css"; } else if( Mac ) { sheet = "jspwiki_mac.css"; } else { // Let's assume all the rest of the browsers are sane // and standard's compliant. sheet = "jspwiki_ie.css"; } document.write("<link rel=\"stylesheet\" href=\"templates/<wiki:TemplateDir />/"+sheet+"\" />"); // end hiding contents from old browsers --> </script> <meta http-equiv="Content-Type" content="text/html; charset=<wiki:ContentEncoding />" /> <link rel="search" href="<wiki:LinkTo format="url" page="FindPage"/>" title="Search <wiki:Variable var="ApplicationName" />" /> <link rel="help" href="<wiki:LinkTo format="url" page="TextFormattingRules"/>" title="Help" /> <link rel="start" href="<wiki:LinkTo format="url" page="Main"/>" title="Front page" /> --- NEW FILE: UploadTemplate.jsp --- <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title><wiki:Variable var="applicationname"/>: Add Attachment</title> <%@ include file="cssinclude.js" %> <META NAME="ROBOTS" CONTENT="NOINDEX"> </head> <body class="upload" bgcolor="#FFFFFF"> <h1 class="pagename">Upload new attachment to <wiki:PageName /></h1> <hr /><p> <wiki:HasAttachments> <B>Currently existing attachments:</B> <div class="attachments" align="center"> <table width="90%"> <wiki:AttachmentsIterator id="att"> <tr> <td><wiki:LinkTo><%=att.getFileName()%></wiki:LinkTo></td> <td><wiki:PageInfoLink><img src="images/attachment_big.png" border="0" alt="Info on <%=att.getFileName()%>"></wiki:PageInfoLink></td> <td><%=att.getSize()%> bytes</td> </tr> </wiki:AttachmentsIterator> </table> </div> <hr /> </wiki:HasAttachments> <table border="0" width="100%"> <tr> <td> <form action="attach" method="POST" enctype="multipart/form-data" accept-charset="UTF-8"> <%-- Do NOT change the order of wikiname and content, otherwise the servlet won't find its parts. --%> <input type="hidden" name="page" value="<wiki:Variable var="pagename"/>"> In order to upload a new attachment to this page, please use the following box to find the file, then click on "Upload". <P> <input type="file" name="content"> <input type="submit" name="upload" value="Upload"> <input type="hidden" name="action" value="upload"> <input type="hidden" name="nextpage" value="<wiki:UploadLink format="url"/>"> </form> </td> </table> </body> </html> --- NEW FILE: LeftMenu.jsp --- <h3 class="leftmenuheading"><a href="<wiki:LinkTo page="SystemInfo" format="url"/>"><wiki:Variable var="ApplicationName" /></a></h3> <!-- LeftMenu is automatically generated from a Wiki page called "LeftMenu" --> <p> <wiki:InsertPage page="LeftMenu" /> <wiki:NoSuchPage page="LeftMenu"> <hr><p> <p align="center"> <i>No LeftMenu!</i><br /> <wiki:EditLink page="LeftMenu">Please make one.</wiki:EditLink><br /> </p> <p><hr /></p> </wiki:NoSuchPage> </p> <p> <div align="center" class="username"> <wiki:UserCheck status="known"> <b>G'day,</b><br /> <wiki:Translate>[<wiki:UserName />]</wiki:Translate> </wiki:UserCheck> <wiki:UserCheck status="unknown"> <tt> Set your name in<br /> <wiki:LinkTo page="UserPreferences">UserPreferences</wiki:LinkTo> </tt> </wiki:UserCheck> </div> <wiki:Include page="LoginBox.jsp" /> </p> <!-- End of automatically generated page --> --- NEW FILE: x_core.js --- // x_core.js // X v3.15.1, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) // Variables: var xVersion='3.15.1',xNN4=false,xOp7=false,xOp5or6=false,xIE4Up=false,xIE4=false,xIE5=false,xUA=navigator.userAgent.toLowerCase(); if(window.opera){ xOp7=(xUA.indexOf('opera 7')!=-1 || xUA.indexOf('opera/7')!=-1); if (!xOp7) xOp5or6=(xUA.indexOf('opera 5')!=-1 || xUA.indexOf('opera/5')!=-1 || xUA.indexOf('opera 6')!=-1 || xUA.indexOf('opera/6')!=-1); } else if (document.all) { xIE4Up=xUA.indexOf('msie')!=-1 && parseInt(navigator.appVersion)>=4; xIE4=xUA.indexOf('msie 4')!=-1; xIE5=xUA.indexOf('msie 5')!=-1; } // Object: function xGetElementById(e) { if(typeof(e)!='string') return e; if(document.getElementById) e=document.getElementById(e); else if(document.all) e=document.all[e]; else e=null; return e; } function xParent(e,bNode){ if (!(e=xGetElementById(e))) return null; var p=null; if (!bNode && xDef(e.offsetParent)) p=e.offsetParent; else if (xDef(e.parentNode)) p=e.parentNode; else if (xDef(e.parentElement)) p=e.parentElement; return p; } function xDef() { for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;} return true; } function xStr(s) { return typeof(s)=='string'; } function xNum(n) { return typeof(n)=='number'; } // Appearance: function xShow(e) { if(!(e=xGetElementById(e))) return; if(e.style && xDef(e.style.visibility)) e.style.visibility='visible'; } function xHide(e) { if(!(e=xGetElementById(e))) return; if(e.style && xDef(e.style.visibility)) e.style.visibility='hidden'; } function xZIndex(e,uZ) { if(!(e=xGetElementById(e))) return 0; if(e.style && xDef(e.style.zIndex)) { if(xNum(uZ)) e.style.zIndex=uZ; uZ=parseInt(e.style.zIndex); } return uZ; } function xColor(e,sColor) { if(!(e=xGetElementById(e))) return ''; var c=''; if(e.style && xDef(e.style.color)) { if(xStr(sColor)) e.style.color=sColor; c=e.style.color; } return c; } function xBackground(e,sColor,sImage) { if(!(e=xGetElementById(e))) return ''; var bg=''; if(e.style) { if(xStr(sColor)) { if(!xOp5or6) e.style.backgroundColor=sColor; else e.style.background=sColor; } if(xStr(sImage)) e.style.backgroundImage=(sImage!='')? 'url('+sImage+')' : null; if(!xOp5or6) bg=e.style.backgroundColor; else bg=e.style.background; } return bg; } // Position: function xMoveTo(e,iX,iY) { xLeft(e,iX); xTop(e,iY); } function xLeft(e,iX) { if(!(e=xGetElementById(e))) return 0; var css=xDef(e.style); if (css && xStr(e.style.left)) { if(xNum(iX)) e.style.left=iX+'px'; else { iX=parseInt(e.style.left); if(isNaN(iX)) iX=0; } } else if(css && xDef(e.style.pixelLeft)) { if(xNum(iX)) e.style.pixelLeft=iX; else iX=e.style.pixelLeft; } return iX; } function xTop(e,iY) { if(!(e=xGetElementById(e))) return 0; var css=xDef(e.style); if(css && xStr(e.style.top)) { if(xNum(iY)) e.style.top=iY+'px'; else { iY=parseInt(e.style.top); if(isNaN(iY)) iY=0; } } else if(css && xDef(e.style.pixelTop)) { if(xNum(iY)) e.style.pixelTop=iY; else iY=e.style.pixelTop; } return iY; } function xPageX(e) { if (!(e=xGetElementById(e))) return 0; var x = 0; while (e) { if (xDef(e.offsetLeft)) x += e.offsetLeft; e = xDef(e.offsetParent) ? e.offsetParent : null; } return x; } function xPageY(e) { if (!(e=xGetElementById(e))) return 0; var y = 0; while (e) { if (xDef(e.offsetTop)) y += e.offsetTop; e = xDef(e.offsetParent) ? e.offsetParent : null; } // if (xOp7) return y - document.body.offsetTop; // v3.14, temporary hack for opera bug 130324 return y; } function xOffsetLeft(e) { if (!(e=xGetElementById(e))) return 0; if (xDef(e.offsetLeft)) return e.offsetLeft; else return 0; } function xOffsetTop(e) { if (!(e=xGetElementById(e))) return 0; if (xDef(e.offsetTop)) return e.offsetTop; else return 0; } function xScrollLeft(e) { var offset=0; if (!(e=xGetElementById(e))) { if(document.documentElement && document.documentElement.scrollLeft) offset=document.documentElement.scrollLeft; else if(document.body && xDef(document.body.scrollLeft)) offset=document.body.scrollLeft; } else { if (xNum(e.scrollLeft)) offset = e.scrollLeft; } return offset; } function xScrollTop(e) { var offset=0; if (!(e=xGetElementById(e))) { if(document.documentElement && document.documentElement.scrollTop) offset=document.documentElement.scrollTop; else if(document.body && xDef(document.body.scrollTop)) offset=document.body.scrollTop; } else { if (xNum(e.scrollTop)) offset = e.scrollTop; } return offset; } function xHasPoint(ele, iLeft, iTop, iClpT, iClpR, iClpB, iClpL) { if (!xNum(iClpT)){iClpT=iClpR=iClpB=iClpL=0;} else if (!xNum(iClpR)){iClpR=iClpB=iClpL=iClpT;} else if (!xNum(iClpB)){iClpL=iClpR; iClpB=iClpT;} var thisX = xPageX(ele), thisY = xPageY(ele); return (iLeft >= thisX + iClpL && iLeft <= thisX + xWidth(ele) - iClpR && iTop >=thisY + iClpT && iTop <= thisY + xHeight(ele) - iClpB ); } // Size: function xResizeTo(e,uW,uH) { xWidth(e,uW); xHeight(e,uH); } function xWidth(e,uW) { if(!(e=xGetElementById(e))) return 0; if (xNum(uW)) { if (uW<0) uW = 0; else uW=Math.round(uW); } else uW=0; var css=xDef(e.style); if(css && xDef(e.offsetWidth) && xStr(e.style.width)) { if(uW) xSetCW(e, uW); uW=e.offsetWidth; } else if(css && xDef(e.style.pixelWidth)) { if(uW) e.style.pixelWidth=uW; uW=e.style.pixelWidth; } return uW; } function xHeight(e,uH) { if(!(e=xGetElementById(e))) return 0; if (xNum(uH)) { if (uH<0) uH = 0; else uH=Math.round(uH); } else uH=0; var css=xDef(e.style); if(css && xDef(e.offsetHeight) && xStr(e.style.height)) { if(uH) xSetCH(e, uH); uH=e.offsetHeight; } else if(css && xDef(e.style.pixelHeight)) { if(uH) e.style.pixelHeight=uH; uH=e.style.pixelHeight; } return uH; } function xGetCS(ele,sP){return parseInt(document.defaultView.getComputedStyle(ele,'').getPropertyValue(sP));} function xSetCW(ele,uW){ var pl=0,pr=0,bl=0,br=0; if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){ pl=xGetCS(ele,'padding-left'); pr=xGetCS(ele,'padding-right'); bl=xGetCS(ele,'border-left-width'); br=xGetCS(ele,'border-right-width'); } else if(xDef(ele.currentStyle,document.compatMode)){ if(document.compatMode=='CSS1Compat'){ pl=parseInt(ele.currentStyle.paddingLeft); pr=parseInt(ele.currentStyle.paddingRight); bl=parseInt(ele.currentStyle.borderLeftWidth); br=parseInt(ele.currentStyle.borderRightWidth); } } else if(xDef(ele.offsetWidth,ele.style.width)){ // ? ele.style.width=uW+'px'; pl=ele.offsetWidth-uW; } if(isNaN(pl)) pl=0; if(isNaN(pr)) pr=0; if(isNaN(bl)) bl=0; if(isNaN(br)) br=0; var cssW=uW-(pl+pr+bl+br); if(isNaN(cssW)||cssW<0) return; else ele.style.width=cssW+'px'; } function xSetCH(ele,uH){ var pt=0,pb=0,bt=0,bb=0; if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){ pt=xGetCS(ele,'padding-top'); pb=xGetCS(ele,'padding-bottom'); bt=xGetCS(ele,'border-top-width'); bb=xGetCS(ele,'border-bottom-width'); } else if(xDef(ele.currentStyle,document.compatMode)){ if(document.compatMode=='CSS1Compat'){ pt=parseInt(ele.currentStyle.paddingTop); pb=parseInt(ele.currentStyle.paddingBottom); bt=parseInt(ele.currentStyle.borderTopWidth); bb=parseInt(ele.currentStyle.borderBottomWidth); } } else if(xDef(ele.offsetHeight,ele.style.height)){ // ? ele.style.height=uH+'px'; pt=ele.offsetHeight-uH; } if(isNaN(pt)) pt=0; if(isNaN(pb)) pb=0; if(isNaN(bt)) bt=0; if(isNaN(bb)) bb=0; var cssH=uH-(pt+pb+bt+bb); if(isNaN(cssH)||cssH<0) return; else ele.style.height=cssH+'px'; } function xClip(e,iTop,iRight,iBottom,iLeft) { if(!(e=xGetElementById(e))) return; if(e.style) { if (xNum(iLeft)) e.style.clip='rect('+iTop+'px '+iRight+'px '+iBottom+'px '+iLeft+'px)'; else e.style.clip='rect(0 '+parseInt(e.style.width)+'px '+parseInt(e.style.height)+'px 0)'; } } // Window: function xClientWidth() { var w=0; if(xOp5or6) w=window.innerWidth; else if(!window.opera && document.document... [truncated message content] |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:17
|
Update of /cvsroot/easystruts/easystruts-website/web-edit/WEB-INF/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web-edit/WEB-INF/lib Added Files: multipartrequest.jar oscache.jar JSPWiki-2.1.86-alpha.jar jstl-1.0.5.jar xmlrpc.jar .htaccess oro.jar standard-1.0.5.jar log4j.jar Log Message: Added new web site sources and data --- NEW FILE: oro.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: log4j.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: oscache.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: JSPWiki-2.1.86-alpha.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: standard-1.0.5.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: jstl-1.0.5.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: xmlrpc.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: multipartrequest.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: .htaccess --- Options -Indexes |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:17
|
Update of /cvsroot/easystruts/easystruts-website/web/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web/images Added Files: attachment_big.png out.png attachment_small.png xml.png xmlCoffeeCup.png .htaccess Log Message: Added new web site sources and data --- NEW FILE: xml.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: attachment_small.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: .htaccess --- Options -Indexes --- NEW FILE: xmlCoffeeCup.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: out.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: attachment_big.png --- (This appears to be a binary file; contents omitted.) |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:17
|
Update of /cvsroot/easystruts/easystruts-website/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/x/menus In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/x/menus Added Files: xmenu4_2.html xmenu4.js xmenu4_1.js xmenu4_1.html xmenu4_2.js xmenu4_1.css xmenu4_1_dhtml.css Log Message: Added new web site sources and data --- NEW FILE: xmenu4_2.js --- // xmenu4_2.js // xMenu4 Demo 2, Cascading menus from nested ULs! // Copyright (c) 2002,2003 Michael Foster (mi...@cr...) // This code is distributed under the terms of the LGPL (gnu.org) ////--- Loader if (!xIE4 && !xNN4) { xInclude('../x_core.js', '../x_event.js', '../x_dom.js', 'xmenu4.js', 'xmenu4_1_dhtml.css'); window.onload = xOnload; } ////--- Load Event Listener function xOnload() { var me = xGetElementById('myMenu1'); if (!xDef(me.nodeName, me.firstChild, me.nextSibling)) { return; } var mo = new xMenu4( me, // id str or ele obj of outermost UL true, // outer UL position: true=absolute, false=static false, // main label positioning: true=horizontal, false=vertical 0, 1, // box horizontal and vertical offsets [-3, -10, -6, -10], // lbl focus clip array [-30, null, null, null], // box focus clip array // css class names: 'xmBar', 'xmBox', 'xmBarLbl', 'xmBarLblHvr', 'xmBarItm', 'xmBarItmHvr', 'xmBoxLbl', 'xmBoxLblHvr', 'xmBoxItm', 'xmBoxItmHvr' ); xMnuMgr.add(mo); xMnuMgr.load(); xmWinOnResize(); xAddEventListener(window, 'resize', xmWinOnResize, false); } ////--- Window Resize Event Listener function xmWinOnResize() { // !!! var me = xMnuMgr.activeMenu.ele; var rc = xGetElementById('rightColumn'); var mm = xGetElementById('menuMarker'); var mmp = xParent(mm); xMoveTo(me, xPageX(mmp)-xPageX(rc), xPageY(mmp)-xPageY(rc)); xMnuMgr.paint(); } --- NEW FILE: xmenu4_1_dhtml.css --- /* xmenu4_1_dhtml.css xMenu4 Demo 1, Cascading menus from nested ULs! This code is distributed under the terms of the LGPL (gnu.org) Mike Foster, Cross-Browser.com */ /* xMenu4 DHTML Rules (see xmenu4_1.css for downgrade rules) */ /* Bar */ /* Outermost UL (horizontal bar) */ ul.xmBar { position:absolute; visibility:hidden; margin:0; padding:4px; background:transparent; overflow:visible; cursor:default; } /* All LIs in ul.xmBar */ ul.xmBar li { list-style:none; display:inline; width:70px; margin:0 8px 0 0; padding:2px 6px; } /* Bar label */ li.xmBarLbl { color:#000; background:#cc9; border-left:1px solid #996; border-top:1px solid #996; border-right:1px solid #330; border-bottom:1px solid #330; } li.xmBarLblHvr { color:#fff; background:#996; border-left:1px solid #330; border-top:1px solid #330; border-right:1px solid #996; border-bottom:1px solid #996; } /* Bar item */ li.xmBarItm { color:#000; background:#cc9; border-left:1px solid #996; border-top:1px solid #996; border-right:1px solid #330; border-bottom:1px solid #330; } li.xmBarItmHvr { color:#fff; background:#996; border-left:1px solid #330; border-top:1px solid #330; border-right:1px solid #996; border-bottom:1px solid #996; } /* Box */ /* All ULs except outermost */ ul.xmBox { position:absolute; visibility:hidden; display:block; width:124px; margin:0; padding:4px; overflow:visible; cursor:default; background:#cc9; border-left:1px solid #996; border-top:1px solid #996; border-right:1px solid #330; border-bottom:1px solid #330; } /* All LIs in ul.xmBox */ ul.xmBox li { display:block; margin:6px 0; padding:0; width:124px; height:auto /* 16px; */ } /* Box label */ li.xmBoxLbl { color:#000; background:transparent; border-right:1px solid #330; } li.xmBoxLblHvr { color:#fff; background:#996; border-right:1px solid #660; } /* Box item */ li.xmBoxItm { color:#000; background:transparent; } li.xmBoxItmHvr { color:#fff; background:#996; } /* A element over-rides so we don't inherit unwanted styles */ ul.xmBar li a:link, ul.xmBar li a:visited, ul.xmBar li a:active { /* for all As in ul.xmBar */ display:inline; margin:0; padding:0; border:none; font-weight:normal; text-decoration:none; color:#000; background:transparent; } ul.xmBar li a:hover { /* for all As in ul.xmBar */ display:inline; margin:0; padding:0; border:none; font-weight:normal; text-decoration:none; color:#fff; background:transparent; } ul.xmBox li a:link, ul.xmBox li a:visited, ul.xmBox li a:active { /* for all As in ul.xmBox */ display:block; /* width:100%; height:100%; */ margin:0; padding:0; border:none; font-weight:normal; text-decoration:none; color:#000; background:transparent; } ul.xmBox li a:hover { /* for all As in ul.xmBox */ display:block; /* width:100%; height:100%; */ margin:0; padding:0; border:none; font-weight:normal; text-decoration:none; color:#fff; background:transparent; } /* Misc */ #menuMarker { /* menu will be positioned at this element */ display:block; position:relative; overflow:hidden; margin:0 0px 32px 0px; padding:0; background:transparent; } --- NEW FILE: xmenu4_1.css --- /* xmenu4_1.css xMenu4 Demo 1, Cascading menus from nested ULs! This code is distributed under the terms of the LGPL (gnu.org) Mike Foster, Cross-Browser.com */ /* xMenu4 Downgrade (non-js) Styles (see xmenu4_1_dhtml.css for dhtml rules) */ /* Bar */ /* Outermost UL */ ul.myBar { background:transparent; } /* All LIs in ul.myBar */ ul.myBar li { list-style:none; margin:0; padding:0; } /* Box */ /* All ULs except outermost */ ul.myBox { background:transparent; margin:0 0 .5em 1.25em; padding:0; border-left:1px dotted #666; /* font-size:small; font-weight:normal; */ } /* All LIs in ul.myBox */ ul.myBox li { list-style:none; margin:0 0 .25em 0; padding:0; } /* Label/Item A element over-rides */ .myBarLblA { font-weight:bold; } .myBarItmA { font-weight:bold; } .myBoxLblA { font-weight:bold; } /* Misc */ #menuMarker { display:none; } --- NEW FILE: xmenu4_1.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>xMenu4 - cascading menus from nested ULs</title> <link rel='stylesheet' type='text/css' href='../../css/s6.css' /> <link rel='stylesheet' type='text/css' href='xmenu4_1.css' /> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> xInclude('xmenu4_1.js', '../x_debug.js'); </script> <style type='text/css'> #rightColumn { overflow:visible; } .rightContent { overflow:visible; } </style> </head> <body> <div id='header'> <h1>Cross-Browser.com</h1> <div class='subtitle'>xMenu4 Horizontal</div> </div> <!-- end header --> <div id='leftColumn' class='column'> <!-- Begin Left Column --> <div id='menuMarker'> </div> <!-- Menu will be positioned here --> <h2>Cascading menus from nested ULs</h2> <div class='leftContent'> <h3>Intro</h3> <p><em>This is still experimental.</em> ;-)</p> <p>Also have a look at the <a href='xmenu4_2.html'>xMenu4 Vertical</a> demo.</p> <p>This code will turn a set of nested ULs into a cascading dhtml menu. It is completely downgradeable. Disable javascript and reload the page - you'll see the nested ULs with my downgrade css applied.</p> <h3>Revisions</h3> <p>2 Mar 04<br />No changes to xMenu4.js, but I moved the menu to a page with a different layout and experimented with a few things - so it may be a little <i>less</i> cross-browser right now. There's plenty of tweaking that could still be done - but I'm tired of foolin with it for now ;-)</p> <p>v0.07, 15 Jan 04<br />Now supports vertical positioning of main labels. Special thanks to <a href='http://www.hftonline.com/forum/showthread.php?s=&threadid=14063'>Chris</a> for helping with this.</p> <p>v0.06, 3 Nov 03<br />Many improvements this time - rewrote the css and changed some menu code; found an Opera7 bug (130324); IE6's css-support gave me headaches.</p> <p>v0.05, 27 Oct 03<br />Separated css and js into two files each. Tweaked css. The menu code now applies the styles on load, so the inline class names can be for downgrade mode. Improved downgrade styles - disable js and reload page to see it. Much remains to be done.</p> <p>v0.04, 25 Oct 03<br />More tweaks. As a test I moved the UL to several different places in the html. It is now in one of the content DIVs.</p> <p>v0.03, 24 Oct 03<br />Improved event handling and tweaked over-all design.</p> <p>v0.02, 23 Oct 03<br />I rewrote the event handling and added A elements in each label element.</p> </div> <!-- end leftContent --> <h2 id='js' >Javascript</h2> <div class='leftContent'> <p>The js is in two files. One is for page-related js - the loader and onload listener, the other is the menu system code.</p> <p><a href='xmenu4.js'>xmenu4.js</a> - the menu system, don't rename this file.</p> <p><a href='xmenu4_1.js'>xmenu4_1.js</a> - your page onload code, rename this to 'myPage.js'. The contents of this file follow.</p> <pre> ////--- Loader if (!xIE4 && !xNN4) { xInclude('../x_core.js', '../x_event.js', '../x_dom.js', 'xmenu4.js', 'xmenu4_1_dhtml.css'); window.onload = xOnload; } ////--- Load Event Listener function xOnload() { var me = xGetElementById('myMenu1'); if (!xDef(me.nodeName, me.firstChild, me.nextSibling)) { return; } var mo = new xMenu4( me, // id str or ele obj of outermost UL true, // outer UL position: true=absolute, false=static true, // main label positioning: true=horizontal, false=vertical 0, 1, // box horizontal and vertical offsets [-3, -10, -6, -10], // lbl focus clip array [-30, null, null, null], // box focus clip array // css class names: 'xmBar', 'xmBox', 'xmBarLbl', 'xmBarLblHvr', 'xmBarItm', 'xmBarItmHvr', 'xmBoxLbl', 'xmBoxLblHvr', 'xmBoxItm', 'xmBoxItmHvr' ); xMnuMgr.add(mo); xMnuMgr.load(); xmWinOnResize(); xAddEventListener(window, 'resize', xmWinOnResize, false); } ////--- Window Resize Event Listener function xmWinOnResize() { // !!! var me = xMnuMgr.activeMenu.ele; var rc = xGetElementById('rightColumn'); var mm = xGetElementById('menuMarker'); var mmp = xParent(mm); xMoveTo(me, xPageX(mmp)-xPageX(rc), xPageY(mmp)-xPageY(rc)); xMnuMgr.paint(); } </pre> </div> <!-- end leftContent --> <h2 id='css'>CSS</h2> <div class='leftContent'> <p>The css is in two files. One supplies default and downgrade mode styles, the other supplies dhtml-related style rules.</p> <p><a href='xmenu4_1.css'>xmenu4_1.css</a> - default and downgrade styles, rename this to 'myPage.css'.</p> <p><a href='xmenu4_1_dhtml.css'>xmenu4_1_dhtml.css</a> - dhtml-related styles, rename this to 'myPage_dhtml.css'.</p> </div> <!-- end leftContent --> <h2 id='xhtml'>XHTML</h2> <div class='leftContent'> <p>No IDs are required, except for the outermost UL. The inline class names are for downgrade mode. Non-downgrade mode class names are passed to the menu object constructor. When Javascript and/or CSS are disabled the menu downgrades to standard nested ULs.</p> <pre> <ul id='myMenu1' class='myBar'> <!-- Begin myMenu1 --> <!-- Bar Label 1 --> <li><a class='myBarLblA' href=''>lbl-1</a> <ul class='myBox'> <li><a href=''>item 1-1</a></li> <li><a href=''>item 1-2</a></li> <li><a class='myBoxLblA' href=''>lbl-1-1</a> <ul class='myBox'> <li><a href=''>item 1-1-1</a></li> <li><a href=''>item 1-1-2</a></li> </ul> <!-- end box-1-1 --> </li> <!-- end lbl-1-1 --> <li><a class='myBoxLblA' href=''>lbl-1-2</a> <ul class='myBox'> <li><a href=''>item 1-2-1</a></li> <li><a href=''>item 1-2-2</a></li> <li><a class='myBoxLblA' href=''>lbl-1-2-1</a> <ul class='myBox'> <li><a href=''>item 1-2-1-1</a></li> <li><a href=''>item 1-2-1-2</a></li> </ul> <!-- end box-1-2-1 --> </li> <!-- end lbl-1-2-1 --> </ul> <!-- end box-1-2 --> </li> <!-- end lbl-1-2 --> </ul> <!-- end box-1 --> </li> <!-- end lbl-1 --> <!-- Bar Label 2 --> <li><a class='myBarLblA' href=''>lbl-2</a> <ul class='myBox'> <li><a href=''>item 2-1</a></li> <li><a href=''>item 2-2</a></li> <li><a class='myBoxLblA' href=''>lbl-2-1</a> <ul class='myBox'> <li><a href=''>item 2-1-1</a></li> <li><a href=''>item 2-1-2</a></li> <li><a class='myBoxLblA' href=''>lbl-2-1-1</a> <ul class='myBox'> <li><a href=''>item 2-1-1-1</a></li> <li><a href=''>item 2-1-1-2</a></li> </ul> <!-- end box-2-1-1 --> </li> <!-- end lbl-2-1-1 --> </ul> <!-- end box-2-1 --> </li> <!-- end lbl-2-1 --> <li><a class='myBoxLblA' href=''>lbl-2-2</a> <ul class='myBox'> <li><a href=''>item 2-2-1</a></li> <li><a href=''>item 2-2-2</a></li> </ul> <!-- end lbl-2-2 --> </li> <!-- end box-2-2 --> </ul> <!-- end box-2 --> </li> <!-- end lbl-2 --> <!-- Bar Item 1 --> <li><a class='myBarItmA' href=''>item-1</a></li> </ul> <!-- end myMenu1 --> </pre> </div> <!-- end leftContent --> <div class='leftContent'> <a href='http://cross-browser.com/'>Cross-Browser.com</a> - DHTML libraries and applications. </div> <!-- end leftContent --> </div> <!-- end leftColumn --> <div id='rightColumn' class='column'> <!-- Begin Right Column --> <div class='rightContent'> <ul id='myMenu1' class='myBar'> <!-- Begin myMenu1 --> <!-- Menu will downgrade here --> <!-- Bar Label 1 --> <li><a class='myBarLblA' href=''>Welcome</a> <ul class='myBox'> <li><a class='myBoxLblA' href=''>This Page</a> <ul class='myBox'> <li><a href='#js'>Javascript</a></li> <li><a href='#css'>CSS</a></li> <li><a href='#xhtml'>XHTML</a></li> </ul> </li> <!-- end 'This Page' --> <li><a href=''>item 1-2</a></li> <li><a class='myBoxLblA' href=''>Support</a> <ul class='myBox'> <li><a href='http://www.sitepointforums.com/forumdisplay.php?forumid=15'>SitePoint Forums</a></li> <li><a href='http://www.hftonline.com/forum/forumdisplay.php?forumid=16'>HFTOnline Forums</a></li> </ul> </li> <!-- end 'Support' --> <li><a class='myBoxLblA' href=''>lbl-1-2</a> <ul class='myBox'> <li><a href=''>item 1-2-1</a></li> <li><a href=''>item 1-2-2</a></li> <li><a class='myBoxLblA' href=''>lbl-1-2-1</a> <ul class='myBox'> <li><a href=''>item 1-2-1-1</a></li> <li><a href=''>item 1-2-1-2</a></li> </ul> <!-- end box-1-2-1 --> </li> <!-- end lbl-1-2-1 --> </ul> <!-- end box-1-2 --> </li> <!-- end lbl-1-2 --> </ul> <!-- end box-1 --> </li> <!-- end 'Welcome' --> <!-- Bar Label 2 --> <li><a class='myBarLblA' href=''>More</a> <ul class='myBox'> <li><a href=''>item 2-1</a></li> <li><a href=''>item 2-2</a></li> <li><a class='myBoxLblA' href=''>lbl-2-1</a> <ul class='myBox'> <li><a href=''>item 2-1-1</a></li> <li><a href=''>item 2-1-2</a></li> <li><a class='myBoxLblA' href=''>lbl-2-1-1</a> <ul class='myBox'> <li><a href=''>item 2-1-1-1</a></li> <li><a href=''>item 2-1-1-2</a></li> </ul> <!-- end box-2-1-1 --> </li> <!-- end lbl-2-1-1 --> </ul> <!-- end box-2-1 --> </li> <!-- end lbl-2-1 --> <li><a class='myBoxLblA' href=''>X Demos</a> <ul class='myBox'> <li><a href='http://cross-browser.com/x/hawk/'>Hawk</a></li> <li><a href='http://cross-browser.com/x/examples/tooltips.html'>Tooltips</a></li> <li><a href='http://cross-browser.com/x/examples/arrowkeys.html'>Key Events</a></li> <li><a href='http://cross-browser.com/x/examples/slideouts.html'>Slideouts</a></li> <li><a href='http://cross-browser.com/x/examples/drag1.html'>Drag 1</a></li> </ul> </li> <!-- end 'X Demos' --> </ul> <!-- end box-2 --> </li> <!-- end 'More' --> <!-- Bar Item 1 --> <li><a class='myBarItmA' href='http://cross-browser.com/'>Home</a></li> </ul> <!-- end myMenu1 --> </div> <!-- end rightContent --> <div class='rightContent'> <h3>More</h3> <p>For more dhtml toys visit <a href='http://cross-browser.com/'>Cross-Browser.com</a></p> <p>By your use of X and xMenu4 you consent to the LGPL License. Please <a href='../../license.html'>read it</a>.</p> <h3>Support</h3> <p>Myself and other DHTML developers offer free support at the following forums. I hope you visit us.</p> <p><a href='http://www.sitepoint.com/forums/forumdisplay.php?f=15'>SitePoint Javascript Forum</a></p> <p><a href='http://www.hftonline.com/forum/forumdisplay.php?forumid=16'>HFTOnline Webmastering Forum</a></p> </div> <!-- end rightContent --> </div> <!-- end rightColumn --> </body> </html> --- NEW FILE: xmenu4_2.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>xMenu4 - cascading menus from nested ULs</title> <link rel='stylesheet' type='text/css' href='../../css/s6.css' /> <link rel='stylesheet' type='text/css' href='xmenu4_1.css' /> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> xInclude('xmenu4_2.js', '../x_debug.js'); </script> <style type='text/css'> /* over-ride some rules from xmenu4_1_dhtml.css */ #rightColumn { overflow:visible; } .rightContent { overflow:visible; } ul.xmBar li { list-style:none; display:block; margin:0 0 6px 0; padding:0px; } #menuMarker { /* menu will be positioned at this element */ display:block; position:relative; overflow:hidden; margin:0 0px 80px 0px; padding:0; background:transparent; } </style> </head> <body> <div id='header'> <h1>Cross-Browser.com</h1> <div class='subtitle'>xMenu4 Vertical</div> </div> <!-- end header --> <div id='leftColumn' class='column'> <!-- Begin Left Column --> <div id='menuMarker'> </div> <!-- Menu will be positioned here --> <h2>Cascading menus from nested ULs</h2> <div class='leftContent'> <h3>Intro</h3> <p><em>This is still experimental.</em> ;-)</p> <p>Also have a look at the <a href='xmenu4_1.html'>xMenu4 Horizontal</a> demo.</p> <p>This code will turn a set of nested ULs into a cascading dhtml menu. It is completely downgradeable. Disable javascript and reload the page - you'll see the nested ULs with my downgrade css applied.</p> <h3>Revisions</h3> <p>2 Mar 04<br />No changes to xMenu4.js, but I moved the menu to a page with a different layout and experimented with a few things - so it may be a little <i>less</i> cross-browser right now. There's plenty of tweaking that could still be done - but I'm tired of foolin with it for now ;-)</p> <p>See the horizontal demo for more revision info.</p> </div> <!-- end leftContent --> <h2 id='js' >Javascript</h2> <div class='leftContent'> <p>The js is in two files. One is for page-related js - the loader and onload listener, the other is the menu system code.</p> <p><a href='xmenu4.js'>xmenu4.js</a> - the menu system, don't rename this file.</p> <p><a href='xmenu4_2.js'>xmenu4_2.js</a> - your page onload code, rename this to 'myPage.js'. The contents of this file follow.</p> <pre> ////--- Loader if (!xIE4 && !xNN4) { xInclude('../x_core.js', '../x_event.js', '../x_dom.js', 'xmenu4.js', 'xmenu4_1_dhtml.css'); window.onload = xOnload; } ////--- Load Event Listener function xOnload() { var me = xGetElementById('myMenu1'); if (!xDef(me.nodeName, me.firstChild, me.nextSibling)) { return; } var mo = new xMenu4( me, // id str or ele obj of outermost UL true, // outer UL position: true=absolute, false=static false, // main label positioning: true=horizontal, false=vertical 0, 1, // box horizontal and vertical offsets [-3, -10, -6, -10], // lbl focus clip array [-30, null, null, null], // box focus clip array // css class names: 'xmBar', 'xmBox', 'xmBarLbl', 'xmBarLblHvr', 'xmBarItm', 'xmBarItmHvr', 'xmBoxLbl', 'xmBoxLblHvr', 'xmBoxItm', 'xmBoxItmHvr' ); xMnuMgr.add(mo); xMnuMgr.load(); xmWinOnResize(); xAddEventListener(window, 'resize', xmWinOnResize, false); } ////--- Window Resize Event Listener function xmWinOnResize() { // !!! var me = xMnuMgr.activeMenu.ele; var rc = xGetElementById('rightColumn'); var mm = xGetElementById('menuMarker'); var mmp = xParent(mm); xMoveTo(me, xPageX(mmp)-xPageX(rc), xPageY(mmp)-xPageY(rc)); xMnuMgr.paint(); } </pre> </div> <!-- end leftContent --> <h2 id='css'>CSS</h2> <div class='leftContent'> <p>The css is in two files. One supplies default and downgrade mode styles, the other supplies dhtml-related style rules.</p> <p><a href='xmenu4_1.css'>xmenu4_1.css</a> - default and downgrade styles, rename this to 'myPage.css'.</p> <p><a href='xmenu4_1_dhtml.css'>xmenu4_1_dhtml.css</a> - dhtml-related styles, rename this to 'myPage_dhtml.css'.</p> </div> <!-- end leftContent --> <h2 id='xhtml'>XHTML</h2> <div class='leftContent'> <p>No IDs are required, except for the outermost UL. The inline class names are for downgrade mode. Non-downgrade mode class names are passed to the menu object constructor. When Javascript and/or CSS are disabled the menu downgrades to standard nested ULs.</p> <pre> <ul id='myMenu1' class='myBar'> <!-- Begin myMenu1 --> <!-- Bar Label 1 --> <li><a class='myBarLblA' href=''>lbl-1</a> <ul class='myBox'> <li><a href=''>item 1-1</a></li> <li><a href=''>item 1-2</a></li> <li><a class='myBoxLblA' href=''>lbl-1-1</a> <ul class='myBox'> <li><a href=''>item 1-1-1</a></li> <li><a href=''>item 1-1-2</a></li> </ul> <!-- end box-1-1 --> </li> <!-- end lbl-1-1 --> <li><a class='myBoxLblA' href=''>lbl-1-2</a> <ul class='myBox'> <li><a href=''>item 1-2-1</a></li> <li><a href=''>item 1-2-2</a></li> <li><a class='myBoxLblA' href=''>lbl-1-2-1</a> <ul class='myBox'> <li><a href=''>item 1-2-1-1</a></li> <li><a href=''>item 1-2-1-2</a></li> </ul> <!-- end box-1-2-1 --> </li> <!-- end lbl-1-2-1 --> </ul> <!-- end box-1-2 --> </li> <!-- end lbl-1-2 --> </ul> <!-- end box-1 --> </li> <!-- end lbl-1 --> <!-- Bar Label 2 --> <li><a class='myBarLblA' href=''>lbl-2</a> <ul class='myBox'> <li><a href=''>item 2-1</a></li> <li><a href=''>item 2-2</a></li> <li><a class='myBoxLblA' href=''>lbl-2-1</a> <ul class='myBox'> <li><a href=''>item 2-1-1</a></li> <li><a href=''>item 2-1-2</a></li> <li><a class='myBoxLblA' href=''>lbl-2-1-1</a> <ul class='myBox'> <li><a href=''>item 2-1-1-1</a></li> <li><a href=''>item 2-1-1-2</a></li> </ul> <!-- end box-2-1-1 --> </li> <!-- end lbl-2-1-1 --> </ul> <!-- end box-2-1 --> </li> <!-- end lbl-2-1 --> <li><a class='myBoxLblA' href=''>lbl-2-2</a> <ul class='myBox'> <li><a href=''>item 2-2-1</a></li> <li><a href=''>item 2-2-2</a></li> </ul> <!-- end lbl-2-2 --> </li> <!-- end box-2-2 --> </ul> <!-- end box-2 --> </li> <!-- end lbl-2 --> <!-- Bar Item 1 --> <li><a class='myBarItmA' href=''>item-1</a></li> </ul> <!-- end myMenu1 --> </pre> </div> <!-- end leftContent --> <div class='leftContent'> <a href='http://cross-browser.com/'>Cross-Browser.com</a> - DHTML libraries and applications. </div> <!-- end leftContent --> </div> <!-- end leftColumn --> <div id='rightColumn' class='column'> <!-- Begin Right Column --> <div class='rightContent'> <ul id='myMenu1' class='myBar'> <!-- Begin myMenu1 --> <!-- Menu will downgrade here --> <!-- Bar Label 1 --> <li><a class='myBarLblA' href=''>Welcome</a> <ul class='myBox'> <li><a class='myBoxLblA' href=''>This Page</a> <ul class='myBox'> <li><a href='#js'>Javascript</a></li> <li><a href='#css'>CSS</a></li> <li><a href='#xhtml'>XHTML</a></li> </ul> </li> <!-- end 'This Page' --> <li><a href=''>item 1-2</a></li> <li><a class='myBoxLblA' href=''>Support</a> <ul class='myBox'> <li><a href='http://www.sitepointforums.com/forumdisplay.php?forumid=15'>SitePoint Forums</a></li> <li><a href='http://www.hftonline.com/forum/forumdisplay.php?forumid=16'>HFTOnline Forums</a></li> </ul> </li> <!-- end 'Support' --> <li><a class='myBoxLblA' href=''>lbl-1-2</a> <ul class='myBox'> <li><a href=''>item 1-2-1</a></li> <li><a href=''>item 1-2-2</a></li> <li><a class='myBoxLblA' href=''>lbl-1-2-1</a> <ul class='myBox'> <li><a href=''>item 1-2-1-1</a></li> <li><a href=''>item 1-2-1-2</a></li> </ul> <!-- end box-1-2-1 --> </li> <!-- end lbl-1-2-1 --> </ul> <!-- end box-1-2 --> </li> <!-- end lbl-1-2 --> </ul> <!-- end box-1 --> </li> <!-- end 'Welcome' --> <!-- Bar Label 2 --> <li><a class='myBarLblA' href=''>More</a> <ul class='myBox'> <li><a href=''>item 2-1</a></li> <li><a href=''>item 2-2</a></li> <li><a class='myBoxLblA' href=''>lbl-2-1</a> <ul class='myBox'> <li><a href=''>item 2-1-1</a></li> <li><a href=''>item 2-1-2</a></li> <li><a class='myBoxLblA' href=''>lbl-2-1-1</a> <ul class='myBox'> <li><a href=''>item 2-1-1-1</a></li> <li><a href=''>item 2-1-1-2</a></li> </ul> <!-- end box-2-1-1 --> </li> <!-- end lbl-2-1-1 --> </ul> <!-- end box-2-1 --> </li> <!-- end lbl-2-1 --> <li><a class='myBoxLblA' href=''>X Demos</a> <ul class='myBox'> <li><a href='http://cross-browser.com/x/hawk/'>Hawk</a></li> <li><a href='http://cross-browser.com/x/examples/tooltips.html'>Tooltips</a></li> <li><a href='http://cross-browser.com/x/examples/arrowkeys.html'>Key Events</a></li> <li><a href='http://cross-browser.com/x/examples/slideouts.html'>Slideouts</a></li> <li><a href='http://cross-browser.com/x/examples/drag1.html'>Drag 1</a></li> </ul> </li> <!-- end 'X Demos' --> </ul> <!-- end box-2 --> </li> <!-- end 'More' --> <!-- Bar Item 1 --> <li><a class='myBarItmA' href='http://cross-browser.com/'>Home</a></li> </ul> <!-- end myMenu1 --> </div> <!-- end rightContent --> <div class='rightContent'> <h3>More</h3> <p>For more dhtml toys visit <a href='http://cross-browser.com/'>Cross-Browser.com</a></p> <p>By your use of X and xMenu4 you consent to the LGPL License. Please <a href='../../license.html'>read it</a>.</p> <h3>Support</h3> <p>Myself and other DHTML developers offer free support at the following forums. I hope you visit us.</p> <p><a href='http://www.sitepoint.com/forums/forumdisplay.php?f=15'>SitePoint Javascript Forum</a></p> <p><a href='http://www.hftonline.com/forum/forumdisplay.php?forumid=16'>HFTOnline Webmastering Forum</a></p> </div> <!-- end rightContent --> </div> <!-- end rightColumn --> </body> </html> --- NEW FILE: xmenu4_1.js --- // xmenu4_1.js // xMenu4 Demo 1, Cascading menus from nested ULs! // Copyright (c) 2002,2003 Michael Foster (mi...@cr...) // This code is distributed under the terms of the LGPL (gnu.org) ////--- Loader if (!xIE4 && !xNN4) { xInclude('../x_core.js', '../x_event.js', '../x_dom.js', 'xmenu4.js', 'xmenu4_1_dhtml.css'); window.onload = xOnload; } ////--- Load Event Listener function xOnload() { var me = xGetElementById('myMenu1'); if (!xDef(me.nodeName, me.firstChild, me.nextSibling)) { return; } var mo = new xMenu4( me, // id str or ele obj of outermost UL true, // outer UL position: true=absolute, false=static true, // main label positioning: true=horizontal, false=vertical 0, 1, // box horizontal and vertical offsets [-3, -10, -6, -10], // lbl focus clip array [-30, null, null, null], // box focus clip array // css class names: 'xmBar', 'xmBox', 'xmBarLbl', 'xmBarLblHvr', 'xmBarItm', 'xmBarItmHvr', 'xmBoxLbl', 'xmBoxLblHvr', 'xmBoxItm', 'xmBoxItmHvr' ); xMnuMgr.add(mo); xMnuMgr.load(); xmWinOnResize(); xAddEventListener(window, 'resize', xmWinOnResize, false); } ////--- Window Resize Event Listener function xmWinOnResize() { // !!! var me = xMnuMgr.activeMenu.ele; var rc = xGetElementById('rightColumn'); var mm = xGetElementById('menuMarker'); var mmp = xParent(mm); xMoveTo(me, xPageX(mmp)-xPageX(rc), xPageY(mmp)-xPageY(rc)); xMnuMgr.paint(); } --- NEW FILE: xmenu4.js --- // xmenu4.js // xMenu4 v0.07, Cascading menus from nested ULs! // Copyright (c) 2002,2003 Michael Foster (mi...@cr...) // This code is distributed under the terms of the LGPL (gnu.org) ////--- xMenuManager (not complete, basically just a stub) var xMnuMgr = new xMenuManager(); function xMenuManager() { /// Properties this.activeMenu = null; this.firstLd = true; this.menus = new Array(); /// Methods this.add = function(xm) { this.activeMenu = xm; this.menus[this.menus.length] = xm; } this.load = function() { var i; for (i=0; i<this.menus.length; ++i) { this.menus[i].load(); } if (this.firstLd) { this.firstLd = false; xAddEventListener(document, 'mousemove', xmDocOnMousemove, false); } } this.paint = function() { var i; for (i=0; i<this.menus.length; ++i) { this.menus[i].paint(); } } } // end xMenuManager object prototype ////--- Document Mousemove Event Listener function xmDocOnMousemove(oEvent) { if (xMnuMgr.activeMenu) { xMnuMgr.activeMenu.onMousemove(oEvent); } } ////--- xMenu4 Object Prototype (still experimental) function xMenu4( sULId, // id str or ele obj of outermost UL bAbsolute, // outer UL position: true=absolute, false=static bHorizontal, // main label positioning: true=horizontal, false=vertical iOfsX, iOfsY, // box horizontal and vertical offsets aLblClp, aBoxClp, // lbl and box focus clip arrays // css class names: clsBar, clsBox, // bar and box clsBarLbl, clsBarLblHvr, // bar lbl LI clsBarItm, clsBarItmHvr, // bar itm LI clsBoxLbl, clsBoxLblHvr, // box lbl LI clsBoxItm, clsBoxItmHvr) // box itm LI { /// Properties this.ele = xGetElementById(sULId); this.active = null; // active box this.item = null; // active item this.ori1 = bHorizontal ? 1 : 2; // 1==under/over, 2==right/left (not complete) this.ori2 = 2; this.abs = bAbsolute; this.ofsX = iOfsX; this.ofsY = iOfsY; this.lblClp = aLblClp; this.boxClp = aBoxClp; this.clsBar = clsBar; this.clsBox = clsBox; this.clsBarLbl = clsBarLbl; this.clsBarLblHvr = clsBarLblHvr; this.clsBarItm = clsBarItm; this.clsBarItmHvr = clsBarItmHvr; this.clsBoxLbl = clsBoxLbl; this.clsBoxLblHvr = clsBoxLblHvr; this.clsBoxItm = clsBoxItm; this.clsBoxItmHvr = clsBoxItmHvr; } // end xMenu4 object prototype ////--- xMenu4.traversePre() Pre-order traversal on ULs (and LIs if bLI) starting with oUL xMenu4.prototype.traversePre = function(oUL, sMthd, bLI, iLvl) { if (!iLvl) iLvl = 0; var isUL = oUL.nodeName.toUpperCase()=='UL'; if (bLI || isUL) { this[sMthd](oUL, iLvl); if (isUL) ++iLvl; } var c = oUL.firstChild; while (c) { if (c.nodeName.toUpperCase()=='UL' || c.nodeName.toUpperCase()=='LI') { this.traversePre(c, sMthd, bLI, iLvl); } c = c.nextSibling; } } ////--- xMenu4.load() Initialize the menu data structure xMenu4.prototype.load = function() { this.traversePre(this.ele, 'loadUL'); this.traversePre(this.ele, 'loadLI', true); } xMenu4.prototype.loadUL = function(ele, iLvl) { ele.xmLvl = iLvl; ele.isBox = true; if (iLvl == 0) { // root ul (bar) ele.xmLbl = null; } else { var li = xParent(ele,1); ele.xmLbl = li; ele.xmLbl.xmBox = ele; ele.xmLbl.isLbl = true; } } xMenu4.prototype.loadLI = function(ele, iLvl) { ele.xmLvl = iLvl; if (ele.nodeName.toUpperCase() == 'LI' && !ele.isLbl) { ele.isItm = true; } } ////--- xMenu4.paint() Apply all css then hide and position all menu boxes xMenu4.prototype.paint = function() { this.applyAllCss(); this.traversePre(this.ele, 'paintV'); } xMenu4.prototype.paintV = function(oUL, iLvl) { if (iLvl > 0) { xHide(oUL); var li = oUL.xmLbl; // xParent(oUL,1); var ori = iLvl == 1 ? this.ori1 : this.ori2; if (this.abs) { // bar UL = absolute, box UL = absolute, LI = static if (ori==1) xMoveTo(oUL, xOffsetLeft(li), xHeight(xParent(li,1)) + this.ofsY); // else if (ori==2) xMoveTo(oUL, xWidth(xParent(li,1)) + this.ofsX, xOffsetTop(li)); else if (ori==2) xMoveTo(oUL, xOffsetLeft(li) + xWidth(li) + this.ofsX, xOffsetTop(li)); } else { // bar UL = static, box UL = absolute, LI = static if (ori==1) xMoveTo(oUL, xPageX(li), xPageY(li /* xParent(li,1) */) + xHeight(li /* xParent(li,1) */) + this.ofsY); else if (ori==2) xMoveTo(oUL, xWidth(xParent(li,1)) + this.ofsX, xOffsetTop(li)); } } else xShow(oUL); } ////--- xMenu4.activate() Activate box oUL xMenu4.prototype.activate = function(oUL) { if (oUL) { if (oUL.xmLvl > 0) { this.applyLICss(oUL.xmLbl, true); xShow(oUL); } this.active = oUL; } } ////--- xMenu4.deactivate() Deactivate box oUL xMenu4.prototype.deactivate = function(oUL) { if (oUL) { if (oUL.xmLvl > 0) { xHide(oUL); this.applyLICss(oUL.xmLbl, false); } this.active = oUL.xmLvl == 1 ? null : xParent(oUL.xmLbl, 1); } } ////--- xMenu4.deactivateAll() Deactivate all boxes xMenu4.prototype.deactivateAll = function() { this.traversePre(this.ele, 'deactivate'); this.active = null; } ////--- xMenu4.applyAllCss() xMenu4.prototype.applyAllCss = function() { this.traversePre(this.ele, 'applyAllCssV', true); } xMenu4.prototype.applyAllCssV = function(ele) { if (ele.isBox) this.applyULCss(ele); else this.applyLICss(ele); } ////--- xMenu4.applyULCss() xMenu4.prototype.applyULCss = function(oUL) { if (oUL && xStr(oUL.className)) { if (oUL.xmLvl == 0) { // bar oUL.className = this.clsBar; } else { // box oUL.className = this.clsBox; } } } ////--- xMenu4.applyLICss() xMenu4.prototype.applyLICss = function(oLI, bActive) { if (oLI && oLI.xmLvl > 0 && xStr(oLI.className)) { if (bActive) { // active state if (oLI.xmLvl == 1) { oLI.className = oLI.isLbl ? this.clsBarLblHvr : this.clsBarItmHvr; } else { oLI.className = oLI.isLbl ? this.clsBoxLblHvr : this.clsBoxItmHvr; } } else { // inactive state if (oLI.xmLvl == 1) { oLI.className = oLI.isLbl ? this.clsBarLbl : this.clsBarItm; } else { oLI.className = oLI.isLbl ? this.clsBoxLbl : this.clsBoxItm; } } // end else inactive state } } ////--- xMenu4.onMousemove() Handle all user interaction xMenu4.prototype.onMousemove = function(oEvent) { var evt = new xEvent(oEvent); var ele = evt.target; while (ele && !ele.isLbl && !ele.isBox && !ele.isItm) { ele = xParent(ele,1); } if (!ele) { // not on lbl nor box nor itm if ( this.active && !xHasPoint(this.active, evt.pageX, evt.pageY, this.boxClp[0], this.boxClp[1], this.boxClp[2], this.boxClp[3]) ) { this.deactivateAll(); } } else if (ele.isLbl) { // on lbl if (ele.xmBox != this.active) { if (this.active && xParent(ele,1) != this.active) { this.deactivate(this.active); } else { this.activate(ele.xmBox); } } } else if (ele.isBox || ele.isItm) { // on box or itm var box = ele; if (ele.isItm) box = xParent(ele,1); if (this.active && /* box.xmLvl > 0 && */ box != this.active) { if ( // if not going from lbl to box !xHasPoint(this.active.xmLbl, evt.pageX, evt.pageY, this.lblClp[0], this.lblClp[1], this.lblClp[2], this.lblClp[3]) // The following line shouldn't be needed, but in Opera it seems that sometimes // when you move the mouse fast the target and coord properties are out of sync... ? && !xHasPoint(this.active, evt.pageX, evt.pageY, 0, null, null, null) ) { this.deactivate(this.active); } } } if (ele && ele.isItm) { // on itm if (ele != this.item) { if (this.item) { this.applyLICss(this.item, false); } this.applyLICss(ele, true); this.item = ele; } } else if (this.item) { // not ele or not on itm this.applyLICss(this.item, false); this.item = null; } /* window.status = 'Menu[ele: ' + xName(ele) + ', aLbl: ' + (this.active ? xName(this.active.xmLbl):'null') + '(' + (this.active ? (xPageX(this.active.xmLbl)+','+xPageY(this.active.xmLbl)):'') + '), aBox: ' + xName(this.active) + '(' + (this.active ? (xPageX(this.active)+','+xPageY(this.active)):'') + ')' + (ele && ele.isItm ? ' isItm' : (ele && ele.isLbl ? ' isLbl' : (ele && ele.isBox ? ' isBox' : ''))) + (ele && xNum(ele.xmLvl) ? ', ' + ele.xmLvl:'') + ']' + ' Mouse[xy: ' + evt.pageX + ':' + evt.pageY + ', ele: ' + xName(evt.target) + '(' + xPageX(evt.target) + ',' + xPageY(evt.target) + ')]'; */ } // end xMenu4.onMousemove() ////--- dbgMsg() var firstDbgMsg = true; function dbgMsg(msg) { if (firstDbgMsg) { firstDbgMsg = false; xGetElementById('dbg').innerHTML = '<p>' + msg + '</p>'; } else { xGetElementById('dbg').innerHTML += '<p>' + msg + '</p>'; } } // end xMenu4.js |
Update of /cvsroot/easystruts/easystruts-website/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/x/examples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/x/examples Added Files: popup.html floater.html tooltips3.html layout1.html bookmarklets.html layout1x.css x_3col_fm.css layout1.js x_3col_fm.html slideouts.html tooltips.html arrowkeys.html layout1d.css popup2.html popup1.html walktree.html bargraph.html drag1.html Log Message: Added new web site sources and data --- NEW FILE: layout1.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>X Layout Example 1</title> <meta name='description' content='A DHTML Layout example from Cross-Browser.com'> <link rel='stylesheet' type='text/css' href='layout1d.css'> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> xInclude('layout1x.css', '../x_core.js', '../x_event.js', 'layout1.js'); </script> </head> <body> <div id='header'> <h4>X Layout Example 1</h4> </div> <div id='menu'> <h4>Menu</h4> <p><a href=''>item</a></p> <p><a href=''>item</a></p> <p><a href=''>item</a></p> <p><a href=''>item</a></p> </div> <div id='what'> <h3>What</h3> <p>This is an example of a dynamic, downgradable DHTML layout.</p> <p>Disable javascript and reload this page to see it in its 'downgrade mode'. You can also downgrade based on the absence of certain browser objects.</p> <p>I'm having problems with this in IE4... but I'll have to deal with that later ;-)</p> <p>Lorem ipsum dolor sit amet, consectetaur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div id='endOfWhat' class='marker'>.</div> </div> <div id='how'> <h3>How</h3> <p>Six files are required by this page:</p> <ol> <li><a href='layout1.html'>layout1.html</a> - the HTML for the page.</li> <li><a href='layout1.js'>layout1.js</a> - the javascript that sizes and positions all major container elements on the page.</li> <li><a href='layout1d.css'>layout1d.css</a> - the default styles for the page, which are also the 'downgrade mode' styles. </li> <li><a href='layout1x.css'>layout1x.css</a> - styles which over-ride the default styles (non-downgrade). This file only gets included if javascript is enabled.</li> <li>'x_core.js' and 'x_event.js' - the DHTML library files used by the code in <i>layout.js</i>. These files only get included if javascript is enabled.</li> </ol> <p>Lorem ipsum dolor sit amet, consectetaur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui do<a href="http://lipsum.com/" title="Read about Lorem Ipsum at lipsum.com">lorem ipsum</a> quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p> </div> <div id='footer'> <a href='http://cross-browser.com/'>Cross-Browser.com</a> </div> </body> </html> --- NEW FILE: popup.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>DHTML Popup/Timer Demo</title> <meta name='author' content='Mike Foster (Cross-Browser.com)' /> <link rel='stylesheet' type='text/css' href='../../css/s6.css' /> <style type='text/css'> h3 { margin:20px 0 20px 0; } .popupStyle { width:150px; height:150px; border:1px solid #330; border-top:4px solid #330; margin:0; padding:0; } </style> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> xInclude('../x_core.js', '../x_slide.js', '../x_popup.js', '../x_timer.js'); var pop1, pop2; window.onload = function() { pop1 = new xPopup( 'timeout', // timer type 10000, // timeout in ms 'cen', // position 'popupStyle', // style class name 'popup1', // id 'popup1.html'); // popup url pop2 = new xPopup( 'interval', 5000, 'se', 'popupStyle', 'popup2', 'popup2.html'); } // end onload </script> </head> <body> <div id='header'> <h1>Cross-Browser.com</h1> <div class='subtitle'>DHTML Popup/Timer Demo</div> </div> <!-- end header --> <div id='rightColumn' class='column'> <div class='rightContent'> <h2>Intro</h2> <p><b>xPopup</b> is a simple alternative to pop-up windows. It uses dynamically created iFrames.</p> <p>The implementation of xPopup demonstrates the use of the <b>xTimer</b> object.</p> </div> <!-- end rightContent --> </div> <!-- end rightColumn --> <div id='leftColumn' class='column'> <div class='leftContent'> <h3>Application</h3> <p>xPopup is a simple alternative to pop-up windows. It uses dynamically created iFrames. Here's how to use it.</p> <p> </p> <pre> <style type='text/css'> .popupStyle { width:150px; height:150px; border:1px solid #330; border-top:4px solid #330; margin:0; padding:0; } </style> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> xInclude('../x_core.js', '../x_slide.js', '../x_popup.js', '../x_timer.js'); var pop1, pop2; window.onload = function() { pop1 = new xPopup( 'timeout', // timer type 10000, // timeout in ms 'cen', // position 'popupStyle', // style class name 'popup1', // id 'popup1.html'); // popup url pop2 = new xPopup( 'interval', 5000, 'se', 'popupStyle', 'popup2', 'popup2.html'); } // end onload </script> </pre> <h3>xPopup Implementation</h3> <p>The implementation of xPopup demonstrates the use of the xTimer object.</p> <p> </p> <pre> // sTmrType: 'timeout' or 'interval' function xPopup(sTmrType, uTimeout, sPosition, sStyle, sId, sUrl) { if (document.getElementById && document.createElement && document.body && document.body.appendChild) { // create popup element var e = document.createElement('IFRAME'); this.ele = e; e.id = sId; e.style.position = 'absolute'; e.className = sStyle; e.src = sUrl document.body.appendChild(e); xShow(e); this.tmr = xTimer.set(sTmrType, this, sTmrType, uTimeout); // timer event listeners this.timeout = function() // hide popup { var e = this.ele; xSlideTo(e, -xWidth(e), -xHeight(e), this.slideTime); } this.interval = function() // size, position and show popup { var x=0, y=0, e = this.ele; var ew = xWidth(e), eh = xHeight(e); var cw = xClientWidth(), ch = xClientHeight(); switch (this.pos) { case 'e': x = cw - ew - this.margin; y = (ch - eh)/2; break; case 'se': x = cw - ew - this.margin; y = ch - eh - this.margin; break; case 'w': x = this.margin; y = (ch - eh)/2; break; case 'cen': default: x = (cw - ew)/2; y = (ch - eh)/2; break; } // end switch xSlideTo(e, xScrollLeft() + x, xScrollTop() + y, this.slideTime); } // init this.margin = 10; this.pos = sPosition; this.slideTime = 500; // slide time in ms this.interval(); } } // end xPopup </pre> </div> <!-- end leftContent --> <div class='leftContent'> For more <b>DHTML Toys</b> visit <a href='http://cross-browser.com/'>Cross-Browser.com</a>. </div> <!-- end leftContent --> </div> <!-- end leftColumn --> </body> </html> --- NEW FILE: layout1d.css --- /* layout1d.css mfoster, cross-browser.com */ html { margin:0; padding:0; } body { color:#000; background:#FED953; margin:0; padding:0; font-family:verdana,arial,sans-serif; font-size:12px; } h4 { margin:0; padding:0; } a { color:#666; font-family:verdana,arial,helvetica,sans-serif; font-size:12px; } a:hover { color:#fff; background:#333; font-family:verdana,arial,helvetica,sans-serif; font-size:12px; text-decoration:none; } .marker { position:relative; visibility:hidden; } #header { color:#000; background:#FFBA1E; margin:10px; padding:10px; } #menu { color:#000; background:#FED953; margin:10px; padding:10px; } #what { color:#000; background:#f90; margin:10px; padding:10px; } #how { color:#000; background:#fff; margin:10px; padding:10px; } #footer { color:#000; background:#2F3863; margin:10px; padding:10px; } --- NEW FILE: tooltips3.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>X Tooltips 3 Demo</title> <meta name='author' content='Mike Foster (Cross-Browser.com)' /> <meta name='description' content='Cross-Browser DHTML Libraries and Applications' /> <meta name='keywords' content='menu,dhtml,crossbrowser,layout,css,dom,api,library,demo,javascript,code' /> <link rel='stylesheet' type='text/css' href='../../css/s1.css' /> <style type='text/css'> /* Tooltip Groups - for elements which trigger tooltips */ .tipGrp1 { color:#666; border-bottom:1px dashed #000; cursor:default; } .tipGrp2 { color:#686; border-bottom:1px dashed #080; cursor:default; } .tipGrp3 { color:#866; border-bottom:1px dashed #800; } .tipGrp4 { color:#668; border-bottom:1px dashed #008; cursor:default; } /* Tooltip styles for each group */ .tipGrp1s { position:absolute; visibility:hidden; overflow:hidden; color:#000; background:#ccc; border:1px solid #000; font-size:10px; margin:0; padding:1px; width:180px; height:14px; } .tipGrp2s { position:absolute; visibility:hidden; overflow:hidden; color:#080; background:#ccc; border:1px solid #080; font-size:10px; margin:0; padding:1px; width:180px; height:14px; } .tipGrp3s { position:absolute; visibility:hidden; overflow:hidden; color:#800; background:#fcc; border:1px solid #800; font-size:10px; margin:0; padding:1px; width:180px; height:14px; } .tipGrp4s { position:absolute; visibility:hidden; overflow:hidden; color:#008; background:#ccf; border:1px solid #008; margin:0; padding:2px; width:180px; height:auto; } </style> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> xInclude('../x_core.js', '../x_event.js', '../x_dom.js', '../x_tip.js'); window.onload = function() { new xTooltipGroup('tipGrp1', 'tipGrp1s', 'right', 4, 0); new xTooltipGroup('tipGrp2', 'tipGrp2s', 'top', 0, -2); new xTooltipGroup('tipGrp3', 'tipGrp3s', 'mouse', 20, -10); new xTooltipGroup(['p0','p1','p2','p3', 'p4','p5'], 'tipGrp4s', 'right', 4, 0, ["<p align='center'><b>X Tooltips</b></p><p align='center'>Demo 3</p>", "<p><b>grpClassOrIdList</b></p><p>The css class name which you add to any element you want to trigger a tooltip - Or - an array of id strings.</p>", "<p><b>tipClass</b></p><p>The css class name applied to the tooltip triggered by elements with the grpClass class name (or elements whose id is in the IdList)</p>", "<p><b>origin</b></p><p>One of 'right', 'top', or 'mouse'. For 'right' or 'top', the tooltip is positioned to the right (or top) of the trigger element. For 'mouse' the tooltip will follow the mouse. In all three cases the offsets are applied.</p>", "<p><b>xOffset, yOffset</b></p><p>The tooltip is positioned relative to the above origin, offset by these amounts</p>", "<p><b>textList</b></p><p>If grpClassOrIdList is an array of IDs, then textList provides the tooltip text for the corresponding array index. If grpClassOrIdList is a class name then textList is not needed (tooltip text is taken from the element's TITLE attribute).</p>"]); } </script> </head> <body> <h1>X Tooltips 3 Demo</h1> <h2>Intro</h2> <p>Tested on Win2K with Opera 7.23, Mozilla 1.5, and IE 4, 5 & 6.</p> <p><span class='tipGrp2' title='An X Toy From Cross-Browser.com'>xTooltipGroup</span> provides for multiple groups of tooltips. For each group you create two style classes. One is applied to all elements which will trigger the tooltip. The other specifies the tooltip style for the group. The tooltip takes its text from the element's TITLE attribute - or you provide an array of strings.</p> <p>There are four different tooltip groups on this demo page: <span class='tipGrp1' title="class='tipGrp1'">Group 1</span>, <span class='tipGrp2' title="class='tipGrp2'">Group 2</span>, <span class='tipGrp3' title="class='tipGrp3'">Group 3</span>, and <span id='p0' class='tipGrp4'>Group 4</span>. Tooltip size and styling is controlled by the <i>tipClass</i> argument. Tooltip positioning is controlled by the origin and offset arguments.</p> <h2>The xTooltipGroup Object</h2> <h3>Syntax</h3> <pre>new xTooltipGroup(grpClassOrIdList, tipClass, origin, xOffset, yOffset, textList)</pre> <h3>Parameters</h3> <p><i id='p1' class='tipGrp4'>grpClassOrIdList</i> - The css class name which you add to any element you want to trigger a tooltip - Or - an array of id strings.</p> <p><i id='p2' class='tipGrp4'>tipClass</i> - The css class name applied to the tooltip triggered by elements with the grpClass class name (or elements whose id is in the IdList).</p> <p><i id='p3' class='tipGrp4'>origin</i> - One of 'right', 'top', or 'mouse'. For 'right' or 'top', the tooltip is positioned to the right (or top) of the trigger element. For 'mouse' the tooltip will follow the mouse. In all three cases the following offsets are applied. <p><i id='p4' class='tipGrp4'>xOffset, yOffset</i> - The tooltip is positioned relative to the above origin, offset by these amounts.</p> <p><i id='p5' class='tipGrp4'>textList</i> - If grpClassOrIdList is an array of IDs, then textList provides the tooltip text for the corresponding array index. If grpClassOrIdList is a class name then textList is not needed (tooltip text is taken from the element's TITLE attribute).</p> <h3>Usage</h3> <p>The following shows how the four tooltip groups on this page are initialized.</p> <pre> window.onload = function() { new xTooltipGroup('tipGrp1', 'tipGrp1s', 'right', 4, 0); new xTooltipGroup('tipGrp2', 'tipGrp2s', 'top', 0, -2); new xTooltipGroup('tipGrp3', 'tipGrp3s', 'mouse', 20, -10); new xTooltipGroup(['p0','p1','p2','p3', 'p4','p5'], 'tipGrp4s', 'right', 4, 0, ["<p><b>heading</b></p><p>text</p>", "<p><b>heading</b></p><p>text</p>", "<p><b>heading</b></p><p>text</p>", "<p><b>heading</b></p><p>text</p>", "<p><b>heading</b></p><p>text</p>", "<p><b>heading</b></p><p>text</p>"]); } </pre> <h2>Sed ut perspiciatis...</h2> <p><span class='tipGrp1' title='But I must explain'>Sed ut perspiciatis</span> unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui do<a class='tipGrp3' href="http://lipsum.com/" title="Read about Lorem Ipsum at lipsum.com">lorem ipsum</a> quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p> <h2>But I must explain...</h2> <p><span class='tipGrp2' title='Sed ut perspiciatis'>But I must explain</span> to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?</p> <h2>At vero eos et...</h2> <p><span class='tipGrp1' title='On the other hand'>At vero eos et</span> accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.</p> <h2>On the other hand...</h2> <p><span class='tipGrp2' title='At vero eos et'>On the other hand</span>, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.</p> <h2>Home...</h2> <p><a class='tipGrp3' href="http://cross-browser.com/" title="Cross-Browser DHTML Libraries">Cross-Browser.com</a></p> </body> </html> --- NEW FILE: floater.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>X Floater Demo</title> <meta name='author' content='Mike Foster (Cross-Browser.com)' /> <meta name='description' content='Cross-Browser DHTML Libraries and Applications' /> <meta name='keywords' content='menu,dhtml,crossbrowser,layout,css,dom,api,library,demo,javascript,code' /> <link rel='stylesheet' type='text/css' href='../../css/s1.css' /> <style type='text/css'> a.m { color:#008; background:transparent; text-decoration:none; margin:3px 0; padding:1px; display:block; width:100%; border:none; } a.m:hover { color:#fff; background:#008; text-decoration:none; margin:3px 0; padding:1px; display:block; width:100%; border:none; } .hidden { visibility:hidden; margin:0; padding:0; } .content { color:#000; background:#ccc; margin:20px 140px 20px 20px; padding:10px; } #content1 { border-top:3px solid #008; } #content2 { border-bottom:3px solid #008; } #floater { position:absolute; visibility:hidden; width:110px; height:auto; color:#000; background:#ccc; margin:0; padding:4px; border-top:3px solid #008; } </style> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> xInclude('../x_core.js', '../x_event.js', '../x_slide.js', '../x_debug.js'); var slideTime = 700; var topMargin = 20; var myVar = null; window.onload = function() { topMargin = xPageY('content1'); winOnResize(); // set initial position xAddEventListener(window, 'resize', winOnResize, false); xAddEventListener(window, 'scroll', winOnScroll, false); return; /* alert(typeof(myVar)); return; var ele = xGetElementById('idBody'); alert( 'this: ' + xName(ele) + '\n' + 'offsetParent: ' + xName(ele.offsetParent) + '\n' + 'parentNode: ' + xName(ele.parentNode) + '\n' + 'parentElement: ' + xName(ele.parentElement) + '\n' + '' ); ele = ele.parentNode; alert( 'this: ' + xName(ele) + '\n' + 'offsetParent: ' + xName(ele.offsetParent) + '\n' + 'parentNode: ' + xName(ele.parentNode) + '\n' + 'parentElement: ' + xName(ele.parentElement) + '\n' + '' ); ele = ele.parentNode; alert( 'this: ' + xName(ele) + '\n' + 'offsetParent: ' + xName(ele.offsetParent) + '\n' + 'parentNode: ' + xName(ele.parentNode) + '\n' + 'parentElement: ' + xName(ele.parentElement) + '\n' + '' ); alert(xParentChain('floater')); return; */ test('floater'); xWidth('floater', 120); test('floater'); xHeight('floater', 200); test('floater'); } function test(sId) { var ele = xGetElementById(sId); alert( 'xClientWidth: ' + xClientWidth() + '\n' + 'xClientHeight: ' + xClientHeight() + '\n' + 'style.width('+sId+'): ' + ele.style.width + '\n' + 'xWidth('+sId+'): ' + xWidth(sId) + '\n' + 'style.height('+sId+'): ' + ele.style.height + '\n' + 'xHeight('+sId+'): ' + xHeight(sId) + '\n' + 'xScrollLeft: ' + xScrollLeft() + '\n' + 'xScrollTop: ' + xScrollTop() + '\n' + 'xPageX('+sId+'): ' + xPageX(sId) + '\n' + 'xPageY('+sId+'): ' + xPageY(sId) + '\n' + 'xLeft('+sId+'): ' + xLeft(sId) + '\n' + 'xTop('+sId+'): ' + xTop(sId) + '\n' ); } function winOnResize() { xMoveTo('floater', xClientWidth()-130, topMargin); xShow('floater'); winOnScroll(); // initial slide } function winOnScroll() { xSlideTo('floater', xLeft('floater'), xScrollTop() + topMargin, slideTime); } function setSlideTime(st) { st = parseInt(st); if (!isNaN(st)) slideTime = st; return false; } </script> </head> <body id='idBody'> <div id='content1' class='content'><!-- begin content1 --> <h1>X Floater Demo</h1> <p>Experiment with the floater's slide-time - the duration of the slide in milliseconds. The menu's movement on the page has a very psychological effect on the user. See for yourself by trying these values: <a href='javascript:void(setSlideTime(0))'>0</a>, <a href='javascript:void(setSlideTime(100))'>100</a>, <a href='javascript:void(setSlideTime(700))'>700</a>, <a href='javascript:void(setSlideTime(1000))'>1000</a>. Try your own values...</p> <form id='f1' onsubmit='return setSlideTime(this.st.value)' action=''> <input type='text' id='st' value='700' /> <input type='submit' value='Set' /> </form> <a name='std' class='hidden'>.</a> <h2>Standard Lorem Ipsum</h2> <p>Lorem ipsum dolor sit amet, consectetaur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <a name='bime' class='hidden'>.</a> <h2>But I must explain...</h2> <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui do<a href="http://lipsum.com/" title="Read about Lorem Ipsum at lipsum.com">lorem ipsum</a> quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p> <p>But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?</p> <a name='otoh' class='hidden'>.</a> <h2>On the other hand...</h2> <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.</p> <p>On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.</p> </div><!-- end content1 --> <div id='content2' class='content'><!-- begin content2 --> <p><b>X</b> is a cross-browser dhtml javascript library from <a href='http://cross-browser.com/'>Cross-Browser.com</a>.</p> <p>This demo was tested on Win98 with Opera 7.02, Mozilla 1.2.1, IE 6.0, and NN 4.75. It doesn't look too hot on NN4 but it works ;-)</p> </div><!-- end content2 --> <!-- begin absolutely positioned elements --> <div id='floater'><!-- begin floater --> <h3>Menu</h3> <a href='#std' class='m'>Lorem Ipsum</a> <a href='#bime' class='m'>Sed Ut Perspi</a> <a href='#otoh' class='m'>At Vero Eos</a> <a href='#idBody' class='m'>Top</a> </div><!-- end floater --> </body> </html> --- NEW FILE: bookmarklets.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Bookmarklets / Favelets</title> <meta name='author' content='Mike Foster (Cross-Browser.com)' /> <meta name='description' content='Experiments with bookmarklets/favelets.' /> <meta name='keywords' content='bookmarklets,favelets,menu,dhtml,crossbrowser,layout,css,dom,api,library,demo,javascript,code' /> <link rel='stylesheet' type='text/css' href='../../css/s5.css' /> <style type='text/css'> </style> <script type='text/javascript'> window.onload = function() { } </script> </head> <body> <h1>Experiments with Bookmarklets / Favelets</h1> <h2>Intro</h2> <p><span class='fw'>There's</span> nothing new here, this is just my first time to play around with bookmarklets, also called <em>favelets</em>. The focus of these bookmarklets is javascript debugging.</p> <p>I've tested this (quickly) on Win2K with the latest versions of Opera, Firebird, and IE. (21Nov03)</p> <h2>Bookmarklets</h2> <p><span class='fw'>Click</span> on a link to run it on this page. Save it as a bookmark to run it on other pages.</p> <p><a title='EvalTextArea' href="javascript:function xEvalTA_load(){var f=document.createElement('FORM');f.onsubmit='return false';var t=document.createElement('TEXTAREA');t.id='xDebugTA';t.name='xDebugTA';t.rows='20';t.cols='60';var b=document.createElement('INPUT');b.type='button';b.value='Evaluate';b.onclick=function(){eval(this.form.xDebugTA.value);};f.appendChild(t);f.appendChild(b);document.body.appendChild(f);}xEvalTA_load();void(0)">EvalTextArea</a> (410 bytes) - adds a form with a textarea and a button to the end of the document. Type expressions into the text area and click the button to evaluate them in the context of the current page.</p> <p><a title='xWalkTree' href="javascript:function xWalkTree(n,v){if(n){if(n.nodeType==1){v(n);}for(var c=n.firstChild;c;c=c.nextSibling){xWalkTree(c,v);}}}void(0)">xWalkTree</a> (132 bytes) - defines the function xWalkTree(), which can then be called from the EvalTextArea.</p> <p><a title='xLoadScript' href="javascript:function xLoadScript(url){var s=document.createElement('script');s.src=url;document.getElementsByTagName('head')[0].appendChild(s);}void(0)">xLoadScript</a> (150 bytes) - defines the function xLoadScript(), which can then be called from the EvalTextArea.</p> <h2 title='A few examples'>Usage</h2> <p><span class='fw'>You</span> can type any Javascript in the textarea and click the button to evaluate it within the context of the current page. Here's a few examples using xWalkTree. Click the EvalTextArea link. Click the xWalkTree link. Now copy one of the following, paste it into the textarea, and click 'Evaluate'.</p> <h3>Example 1</h3> <pre> function myVF(n) { if (n.tagName == 'P') n.style.border = '1px dotted red'; else if (n.tagName == 'DIV') n.style.border = '1px dotted blue'; else if (n.tagName == 'PRE') { n.style.color = '#369'; n.style.background = '#ccc'; } } xWalkTree(document.body, myVF); </pre> <h3>Example 2</h3> <pre> function myVF(n) { var t = n.getAttribute('title'); if (t && t.length) n.style.border = '2px solid #000'; } xWalkTree(document.body, myVF); </pre> <h3>Example 3</h3> <pre> function myVF(n) { if (n.tagName == 'H1') n.style.fontSize = '3em'; else if (n.tagName == 'H2') n.style.fontSize = '2em'; else if (n.tagName == 'H3') n.style.fontSize = '1em'; } xWalkTree(document.body, myVF); </pre> <h2>Bookmarklets' Source Code</h2> <h3>EvalTextArea</h3> <pre> function xEvalTA_load() { var f = document.createElement('FORM'); f.onsubmit = 'return false'; var t = document.createElement('TEXTAREA'); t.id='xDebugTA'; t.name='xDebugTA'; t.rows='20'; t.cols='60'; var b = document.createElement('INPUT'); b.type = 'button'; b.value = 'Evaluate'; b.onclick = function() {eval(this.form.xDebugTA.value);}; f.appendChild(t); f.appendChild(b); document.body.appendChild(f); } xEvalTA_load(); </pre> <h3>xWalkTree</h3> <pre> /* xWalkTree() Perform a preorder traversal on the subtree starting at node 'n' and pass each Element node to function 'v'. */ function xWalkTree(n, v) { if (n) { if (n.nodeType == 1) {v(n);} for (var c = n.firstChild; c; c = c.nextSibling) { xWalkTree(c, v); } } } </pre> <h3>xLoadScript</h3> <pre> function xLoadScript(url) { var s = document.createElement('script'); s.src = url; document.getElementsByTagName('head')[0].appendChild(s); } </pre> <hr /> <p><span class='fw'>For</span> more DHTML toys visit <a href='http://cross-browser.com/'>Cross-Browser.com</a></p> </body> </html> --- NEW FILE: popup1.html --- <html> <head> <title>popup 1</title> <style type='text/css'> body { color:#000; background:#cc9; margin:0; padding:2px; font-family:verdana,arial,sans-serif; font-size:14px; } a { color:#000; background:transparent; } </style> </head> <body> <p>This is a 'timeout popup'. It appears one time.</p> <p><a href='javascript:void(top.pop1.timeout())'>Close</a></p> </body> </html> --- NEW FILE: walktree.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>xWalkTree: Node Traversal Demo</title> <meta name='author' content='Mike Foster (Cross-Browser.com)' /> <meta name='description' content='Cross-Browser DHTML Libraries and Applications' /> <meta name='keywords' content='menu,dhtml,crossbrowser,layout,css,dom,api,library,demo,javascript,code' /> <link rel='stylesheet' type='text/css' href='../../css/s5.css' /> <style type='text/css'> #vfta { width:90%; } #leftColumn { width:30%; float:left; padding-right:1em; } #rightColumn { width:65%; float:left; padding-left:1em; border-left:1px dotted #999; } </style> <script type='text/javascript'> var node = null; window.onload = function() { /* First we see if the browser supports the methods and properties we will use. Then we walk the tree starting at document.body and visit each element with the visit function. */ var b = document.body; if (b.getAttribute && b.nodeType && b.firstChild) { xWalkTree(document.body, visit); } } // Apply js from textarea to node. function visit(node) { node = node; eval(document.getElementById('vfta').value); } /* xWalkTree() Perform a preorder traversal on the subtree starting at oNode and pass each Element node to fnVisit. */ function xWalkTree(oNode, fnVisit) { if (oNode) { if (oNode.nodeType == 1) {fnVisit(oNode);} for (var c = oNode.firstChild; c; c = c.nextSibling) { xWalkTree(c, fnVisit); } } } </script> </head> <body> <h1>Node Traversal Demo</h1> <div id='leftColumn'> <h2>Intro</h2> <p><span class='fw'>This</span> demonstrates how to traverse the nodes of a subtree of the document.</p> <p><span class='fw'>The</span> function <em>xWalkTree(oNode, fnVisit)</em> walks the subtree starting at oNode. It applies the fnVisit function to each Element node.</p> <p><span class='fw'>IE4</span> doesn't have 'firstChild' nor 'nextSibling'. Are there alternatives?</p> <p>For more dhtml toys visit<br /><a href='http://cross-browser.com/'>Cross-Browser.com</a>.</p> <hr /> <p><span class='fw'>Lorem ipsum</span> dolor sit amet, consectetaur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p><span class='fw'>Ut enim</span> ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <p><span class='fw' title='class=fw'>Duis aute irure</span> dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <p><span class='fw' title=''>Excepteur</span> sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div id='rightColumn'> <h2>Visit Function</h2> <p>The following code is applied to every Element node in the document. Use the variable <em>node</em> as a reference to the current node in the traversal.</p> <form onsubmit='xWalkTree(document.body, visit); return false;'> <textarea id='vfta' rows='14'> var t = node.getAttribute('title'); if (t && t.length) { node.style.border = '1px dotted red'; node.parentNode.style.border = '1px dotted blue'; } </textarea> <input type='submit' value='Apply' /> </form> <h2>xWalkTree()</h2> <pre> /* xWalkTree() Perform a preorder traversal on the subtree starting at oNode and pass each Element node to fnVisit. */ function xWalkTree(oNode, fnVisit) { if (oNode) { if (oNode.nodeType == 1) {fnVisit(oNode);} for (var c = oNode.firstChild; c; c = c.nextSibling) { xWalkTree(c, fnVisit); } } } </pre> <h2>Sed ut perspiciatis...</h2> <p><span class='fw'>Sed ut perspiciatis</span> unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui do<a href="http://lipsum.com/" title="Read about Lorem Ipsum at lipsum.com">lorem ipsum</a> quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p> <h2>But I must explain...</h2> <p><span class='fw' title='class=fw'>But I must explain</span> to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?</p> <h2>At vero eos et...</h2> <p><span class='fw'>At vero eos et</span> accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.</p> <h2>On the other hand...</h2> <p><span class='fw'>On the other hand</span>, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, <em>every pleasure is to be welcomed and <strong title='oh yes, avoid pain'>every pain</strong> avoided</em>. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.</p> </div> </body> </html> --- NEW FILE: slideouts.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>X Slideouts</title> <meta name='author' content='Mike Foster (Cross-Browser.com)' /> <meta name='description' content='Cross-Browser DHTML Libraries and Applications' /> <meta name='keywords' content='menu,dhtml,crossbrowser,layout,css,dom,api,library,demo,javascript,code' /> <link rel='stylesheet' type='text/css' href='../../css/s3.css' /> <style type='text/css'><!-- #header { margin:2px; padding:0; color:#000; font-family:verdana,arial,sans-serif,helvetica; font-size:14px; font-weight:normal; text-align:right; } #main { color:#000; background:#fff; margin:30px 100px 0 100px; padding:10px; font-family:verdana,arial,sans-serif,helvetica; font-size:12px; border:1px solid #666; } .term { color:#ccc; background:#639; padding:10px; font-family:verdana,arial,sans-serif,helvetica; font-size:12px; font-weight:bold; border:1px solid #ccc; } .definition { color:#000; background:#ccc; margin:2px; padding:2px; font-family:verdana,arial,sans-serif,helvetica; font-size:10px; border:1px solid #000; } #t1 { margin:0 0 40px 0px; } #t2 { margin:0 0 40px 70px; } #t3 { margin:0 0 40px 140px; } #t4 { margin:0 0 40px 210px; } #t5 { margin:0 0 40px 280px; } /* dhtml style over-rides */ /* should be dynamically included for down-gradeability */ .term { position:relative; left:0; top:0; width:150px; /* height:60px; */ } .definition { position:absolute; visibility:hidden; margin:0; width:200px; } --></style> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'><!-- xInclude('../x_core.js', '../x_event.js', '../x_slide.js'); var defOffset = 2; var defSlideTime = 200; var tnActive = 0; window.onload = function() { var i=1, t, d; t = xGetElementById('t1'); while (t) { t.termNumber = i; xZIndex(t, 2); d = 'd' + i; xHide(d); xZIndex(d, 1); xMoveTo(d, xPageX(t), xPageY(t)); t = xGetElementById('t' + ++i); } xAddEventListener(document, 'mousemove', docOnMousemove, false); } function docOnMousemove(evt) { var e = new xEvent(evt); var t = getTermEle(e.target); if (!tnActive) { // no def is active if (t) { // mouse is over a term, activate its def xShow('d'+t.termNumber); xSlideTo('d'+t.termNumber, xPageX(t)+xWidth(t)+defOffset, xPageY(t), defSlideTime); tnActive = t.termNumber; } } else { // a def is active if (!t) { // mouse is not over a term, deactivate active def xSlideTo('d'+tnActive, xPageX('t'+tnActive), xPageY('t'+tnActive), defSlideTime); setTimeout("xHide('d"+tnActive+"')", defSlideTime); tnActive = 0; } } } function getTermEle(ele) { //window.status = ele; while(ele && !ele.termNumber) { if (ele == document) return null; ele = xParent(ele); } return ele; } //--></script> </head> <body> <div id='header'> <a href='http://cross-browser.com/'>Cross-Browser.com</a><br> X Slideouts Demo </div> <div id='main'> <div id='t1' class='term'>Introduction</a></div> <div id='d1' class='definition'><b>X & CBE</b><br>Introduction to the <i>X Library</i> and the <i>CBE API</i></div> <div id='t2' class='term'>Menus</div> <div id='d2' class='definition'><b>Menus</b><br>horizontal, vertical, mouseover, floating, etc.</div> <div id='t3' class='term'>Interfaces</div> <div id='d3' class='definition'><b>Dynamic Interfaces</b><br>Page <i>templates</i> with pure DHTML layout that adjusts to the screen size</div> <div id='t4' class='term'>Examples</div> <div id='d4' class='definition'><b>Examples</b><br>learn how to use X and/or CBE with documented examples</div> <div id='t5' class='term'>Documentation</div> <div id='d5' class='definition'><b>Documentation</b><br>Extensive documentation for X and CBE including complete reference manuals</div> </div> <!-- end main --> </body> </html> --- NEW FILE: layout1.js --- // layout1.js // mfoster, cross-browser.com var pg = { hh:45, // header height mw:100, // menu width bm:45, // bottom margin rm:100, // right margin irm:100, // inner right margin fh:45 // footer height }; window.onload = function() { winOnResize(); // initial positioning xAddEventListener(window, 'resize', winOnResize, false); } function winOnResize() { var cw = xClientWidth(), ch = xClientHeight(); xResizeTo('header', cw, pg.hh); xMoveTo('header', 0, 0); xWidth('menu', pg.mw); xMoveTo('menu', 0, pg.hh); // set width to let text reflow xWidth('what', cw-pg.mw-pg.rm); xMoveTo('what', pg.mw, pg.hh); // set width to let text reflow xWidth('how', xWidth('what')-pg.irm); // marker's Y is end of text xMoveTo('how', pg.mw, xPageY('endOfWhat')); // after text reflows we can determine heights xHeight('what', xPageY('how')+xHeight('how')-xPageY('what')); xResizeTo('footer', cw, pg.fh); xMoveTo('footer', 0, xPageY('how')+xHeight('how')+pg.bm); // now show everything xShow('header'); xShow('menu'); xShow('what'); xShow('how'); xShow('footer'); } --- NEW FILE: arrowkeys.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>X ArrowKeys Demo</title> <meta name='author' content='Mike Foster (Cross-Browser.com)' /> <meta name='description' content='Cross-Browser DHTML Libraries and Applications' /> <meta name='keywords' content='menu,dhtml,crossbrowser,layout,css,dom,api,library,demo,javascript,code' /> <link rel='stylesheet' type='text/css' href='../../css/s1.css' /> <style type='text/css'><!-- a:link { color:#009; background:#ccc; text-decoration:none; padding:1px; } a:visited { color:#009; background:#ccc; text-decoration:none; padding:1px; } a:hover { color:#ccc; background:#009; text-decoration:none; padding:0; border-left:1px solid #ccc; border-top:1px solid #ccc; border-right:1px solid #333; border-bottom:1px solid #333; } a:active { color:#009; background:#ccc; text-decoration:none; } input { border:1px solid #333; color:#000; background:#eee; width:60px; } .clsX { position:absolute; margin:0; padding:0; } --></style> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'><!-- xInclude('../x_core.js', '../x_event.js'); var delta = 10; window.onload = function() { xResizeTo('id1', 200, 50); xMoveTo('id1', (xClientWidth()-200)/2, (xClientHeight()-50)/2); xShow('id1'); xAddEventListener(document, 'keypress', onKeypress, false); xAddEventListener(document, 'keyup', onKeyup, false); xAddEventListener(document, 'keydown', onKeydown, false); } function onKeypress(evt) { var e = new xEvent(evt); xGetElementById('kp').value = e.keyCode; } function onKeyup(evt) { var e = new xEvent(evt); xGetElementById('ku').value = e.keyCode; } function onKeydown(evt) { var e = new xEvent(evt); xGetElementById('kd').value = e.keyCode; /* var dbgMsg = 'type: ' + e.type + ', keyCode: ' + e.keyCode; if (xOp7) { window.opera.postError(dbgMsg); } else { window.status = dbgMsg; } */ switch (e.keyCode) { case 37: // IE and Moz case 57387: // Opera 7 xLeft('id1', xLeft('id1')-delta); // Left break; case 38: case 57385: xTop('id1', xTop('id1')-delta); // Up break; case 39: case 57388: xLeft('id1', xLeft('id1')+delta); // Right break; case 40: case 57386: xTop('id1', xTop('id1')+delta); // Down break; } } //--></script> </head> <body> <h1>X ArrowKeys Demo</h1> <p>Use the Arrow Keys to move the element</p> <p>Tested with Opera 7.11, IE 6.0, Mozilla 1.4, and Firebird 0.6.1. Does not work with NN4. All tests on Win98.</p> <form id='form1' onsubmit='return false'> <h2>Event keyCodes:</h2> <p>The following will show the keyCode for events <i>keypress</i>, <i>keydown</i>, and <i>keyup</i>.</p> <p><div>keypress</div><input type='text' id='kp'></p> <p><div>keydown</div><input type='text' id='kd'></p> <p><div>keyup</div><input type='text' id='ku'></p> </form> <div id='id1' class='clsX'> <a href='http://cross-browser.com/'>Cross-Browser.com</a> </div> </body> </html> --- NEW FILE: popup2.html --- <html> <head> <title>popup 2</title> <style type='text/css'> body { color:#000; background:#fff; margin:0; padding:2px; font-family:verdana,arial,sans-serif; font-size:14px; } a { color:#000; background:transparent; } </style> </head> <body> <p>This is an 'interval popup'. It appears at regular intervals.</p> <p><a href='javascript:void(top.pop2.timeout())'>Close</a></p> </body> </html> --- NEW FILE: x_3col_fm.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Collapsible 3-Column Layout</title> <link rel='stylesheet' type='text/css' href='x_3col_fm.css'/> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> /* javascript by Mike Foster css and html structure by BlueRobot.com */ if (xInclude('../x_core.js', '../x_dom.js', '../x_debug.js')) { window.onload = xWinOnLoad; } var enabled = false; var alphaVisible = true; var betaVisible = true; function xWinOnLoad() { e = xGetElementById('navAlpha'); // if (e && typeof(e.style) != 'undefined' && document.getElementById && document.getElementsByTagName) { enabled = true; // } } function toggleAlpha() { if (!enabled) return; var d, m, e, a, i; if (alphaVisible) { d = 'none'; m = '0px'; } else { d = 'block'; m = '170px'; } e = xGetElementById('navAlpha'); e.style.display = d; a = xGetElementsByClassName('content'); for (i = 0; i < a.length; ++i) { a[i].style.marginLeft = m; } alphaVisible = !alphaVisible; } function toggleBeta() { if (!enabled) return; var d, m, e, a, i; if (betaVisible) { d = 'none'; m = '0px'; } else { d = 'block'; m = '210px'; } e = xGetElementById('navBeta'); e.style.display = d; a = xGetElementsByClassName('content'); for (i = 0; i < a.length; ++i) { a[i].style.marginRight = m; } betaVisible = !betaVisible; } </script> </head> <body> <div class="content"> <h1>Collapsible 3-Column Layout</h1> <p>This is an example of taking one of the popular three-column CSS layouts from <a href='http://bluerobot.com/'>BlueRobot.com</a> and adding a little javascript to enable collapsible left and right columns.</p> <p>The purpose of this exercise is to utilize a proven CSS layout without modifying the original CSS or original html structure.</p> <p>I'm sure I have not chosen the most efficient implementation. But I was able to implement this very quickly because I already had the function xGetElementsByClassName written.</p> <p>Enjoy,<br />Mike Foster</p> <button onclick='toggleAlpha()'>Toggle Alpha Column</button> <button onclick='toggleBeta()' style='margin-left:20px'>Toggle Beta Column</button> </div> <div class="content"> <h2>But I must explain...</h2> <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui do<a href="http://lipsum.com/" title="Read about Lorem Ipsum at lipsum.com">lorem ipsum</a> quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p> </div> <div class="content"> <h2>On the other hand...</h2> <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.</p> </div> <div class="content"> Visit <a href='http://cross-browser.com/'>Cross-Browser.com</a> and <a href='http://bluerobot.com/'>BlueRobot.com</a> </div> <div id="navAlpha"> <h2>Links</h2> <p></p> <p><a href="http://cross-browser.com/">Cross-Browser.com</a></p> <p><a href="http://bluerobot.com/">BlueRobot.com</a></p> <p><a href="http://lipsum.com/">Lipsum.com</a></p> <hr /> <p><a href="http://sitepoint.com/forums/">SitePoint Forums</a></p> <p><a href="http://hftonline.com/">HFT Forums</a></p> <hr /> <p><a href='http://devedge.netscape.com/'>Netscape DevEdge</a></p> <p><a href='http://www.w3.org/'>World Wide Web Consortium</a></p> <p><a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_webdev.asp?frame=true'>MSDN Web Dev</a></p> </div> <div id="navBeta"> <h2>Sed ut perspiciatis...</h2> <p>But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?</p> </div> </body> </html> --- NEW FILE: tooltips.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>X Tooltips Demo</title> <meta name='author' content='Mike Foster (Cross-Browser.com)' /> <meta name='description' content='Cross-Browser DHTML Libraries and Applications' /> <meta name='keywords' content='menu,dhtml,crossbrowser,layout,css,dom,api,library,demo,javascript,code' /> <link rel='stylesheet' type='text/css' href='../../css/s1.css' /> <style type='text/css'> #xTooltip { position:absolute; visibility:hidden; } .tip1 { color:#666; border-bottom:1px dashed #ccc; } .tip2 { color:#66f; border-bottom:1px dashed #ccf; } .tip3 { } .xtip1 { position:absolute; visibility:hidden; overflow:hidden; color:#000; background:#ccc; border:1px solid #666; font-size:10px; margin:0; padding:1px; width:180px; height:14px; } .xtip2 { position:absolute; visibility:hidden; overflow:hidden; color:#008; background:#ccf; border:1px solid #008; font-size:10px; margin:0; padding:1px; width:180px; height:14px; } .xtip3 { position:absolute; visibility:hidden; overflow:hidden; color:#800; background:#fcc; border:1px solid #800; font-size:10px; margin:0; padding:1px; width:180px; height:14px; } </style> <script type='text/javascript' src='../x_load.js'></script> <script type='text/javascript'> xInclude('../x_core.js', '../x_event.js', '../x_dom.js', '../x_slide.js'); window.onload = function() { xInitTooltips(3); } function xInitTooltips(n) { var i, j, tips; for (i = 1; i <= n; ++i) { tips = xGetElementsByClassName('tip' + i); for (j = 0; j < tips.length; ++j) { tips[j].isTip = true; tips[j].onmouseover = xttOnMouseover; } } xAddEventListener(document, 'mousemove', xttOnMousemove, false); } function xttOnMouseover(e) { var tt = xGetElementById('xTooltip'); tt.className = ... [truncated message content] |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:17
|
Update of /cvsroot/easystruts/easystruts-website/web-edit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web-edit Added Files: Search.jsp Comment.jsp PageModified.jsp Wiki.jsp Upload.jsp Vote.jsp rss.jsp Error.jsp Login.jsp UserPreferences.jsp index.jsp Diff.jsp .htaccess Edit.jsp Preview.jsp NewBlogEntry.jsp favicon.ico necho.jsp Delete.jsp PageInfo.jsp Log Message: Added new web site sources and data --- NEW FILE: Comment.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="java.util.*" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.WikiProvider" %> <%@ page import="com.ecyrd.jspwiki.auth.AuthorizationManager" %> <%@ page import="com.ecyrd.jspwiki.auth.UserProfile" %> <%@ page import="com.ecyrd.jspwiki.auth.permissions.CommentPermission" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Logger log = Logger.getLogger("JSPWiki"); WikiEngine wiki; %> <% String action = request.getParameter("action"); String ok = request.getParameter("ok"); String preview = request.getParameter("preview"); String cancel = request.getParameter("cancel"); String author = wiki.safeGetParameter( request, "author" ); String remember = request.getParameter("remember"); WikiContext wikiContext = wiki.createContext( request, WikiContext.COMMENT ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); WikiPage wikipage = wikiContext.getPage(); WikiPage latestversion = wiki.getPage( pagereq ); if( latestversion == null ) { latestversion = wikiContext.getPage(); } AuthorizationManager mgr = wiki.getAuthorizationManager(); UserProfile currentUser = wikiContext.getCurrentUser(); if( !mgr.checkPermission( wikiContext.getPage(), currentUser, new CommentPermission() ) ) { log.info("User "+currentUser.getName()+" has no access - redirecting to login page."); String pageurl = wiki.encodeName( pagereq ); response.sendRedirect( wiki.getBaseURL()+"Login.jsp?page="+pageurl ); return; } pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); // // Set the response type before we branch. // response.setContentType("text/html; charset="+wiki.getContentEncoding() ); response.setHeader( "Cache-control", "max-age=0" ); response.setDateHeader( "Expires", new Date().getTime() ); response.setDateHeader( "Last-Modified", new Date().getTime() ); log.debug("preview="+preview+", ok="+ok); if( ok != null ) { log.info("Saving page "+pagereq+". User="+request.getRemoteUser()+", host="+request.getRemoteHost() ); // FIXME: I am not entirely sure if the JSP page is the // best place to check for concurrent changes. It certainly // is the best place to show errors, though. long pagedate = Long.parseLong(request.getParameter("edittime")); Date change = latestversion.getLastModified(); if( change != null && change.getTime() != pagedate ) { // // Someone changed the page while we were editing it! // log.info("Page changed, warning user."); pageContext.forward( "PageModified.jsp" ); return; } // // We expire ALL locks at this moment, simply because someone has // already broken it. // PageLock lock = wiki.getPageManager().getCurrentLock( wikipage ); wiki.getPageManager().unlockPage( lock ); session.removeAttribute( "lock-"+pagereq ); // // Set author information // wikipage.setAuthor( currentUser.getName() ); StringBuffer pageText = new StringBuffer(wiki.getPureText( wikipage )); log.debug("Page initial contents are "+pageText.length()+" chars"); // // Add a line on top only if we need to separate it from the content. // if( pageText.length() > 0 ) { pageText.append( "\n\n----\n\n" ); } pageText.append( wiki.safeGetParameter( request, "text" ) ); log.debug("Author name ="+author); if( author != null && author.length() > 0 ) { Calendar cal = Calendar.getInstance(); SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy"); pageText.append("\n\n--"+author+", "+fmt.format(cal.getTime())); } wiki.saveText( wikiContext, pageText.toString() ); if( remember != null ) { wiki.getUserManager().setUserCookie( response, author ); } response.sendRedirect(wiki.getViewURL(pagereq)); return; } else if( preview != null ) { log.debug("Previewing "+pagereq); pageContext.forward( "Preview.jsp" ); } else if( cancel != null ) { log.debug("Cancelled editing "+pagereq); PageLock lock = (PageLock) session.getAttribute( "lock-"+pagereq ); if( lock != null ) { wiki.getPageManager().unlockPage( lock ); session.removeAttribute( "lock-"+pagereq ); } response.sendRedirect( wiki.getViewURL(pagereq) ); return; } log.info("Commenting page "+pagereq+". User="+request.getRemoteUser()+", host="+request.getRemoteHost() ); // // Determine and store the date the latest version was changed. Since // the newest version is the one that is changed, we need to track // that instead of the edited version. // long lastchange = 0; Date d = latestversion.getLastModified(); if( d != null ) lastchange = d.getTime(); pageContext.setAttribute( "lastchange", Long.toString( lastchange ), PageContext.REQUEST_SCOPE ); // // Attempt to lock the page. // PageLock lock = wiki.getPageManager().lockPage( wikipage, currentUser.getName() ); if( lock != null ) { session.setAttribute( "lock-"+pagereq, lock ); } String contentPage = "templates/"+wikiContext.getTemplate()+"/EditTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: PageModified.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="java.util.Calendar,java.util.Date" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.CONFLICT ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); String usertext = wiki.safeGetParameter( request, "text" ); pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); response.setContentType("text/html; charset="+wiki.getContentEncoding() ); usertext = TextUtil.replaceString( usertext, "<", "<" ); usertext = TextUtil.replaceString( usertext, ">", ">" ); usertext = TextUtil.replaceString( usertext, "\n", "<BR />" ); pageContext.setAttribute( "usertext", usertext, PageContext.REQUEST_SCOPE ); String conflicttext = wiki.getText(pagereq); conflicttext = TextUtil.replaceString( conflicttext, "<", "<" ); conflicttext = TextUtil.replaceString( conflicttext, ">", ">" ); conflicttext = TextUtil.replaceString( conflicttext, "\n", "<BR />" ); pageContext.setAttribute( "conflicttext", conflicttext, PageContext.REQUEST_SCOPE ); log.info("Page concurrently modified "+pagereq); String contentPage = "templates/"+wikiContext.getTemplate()+"/ViewTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: favicon.ico --- (This appears to be a binary file; contents omitted.) --- NEW FILE: Error.jsp --- <%@ page isErrorPage="true" %> <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.ERROR ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName() + ":" + pagereq ); pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); response.setContentType("text/html; charset="+wiki.getContentEncoding() ); String msg = "An unknown error was caught by Error.jsp"; if( exception != null ) { msg = exception.getMessage(); if( msg == null || msg.length() == 0 ) { msg = "An unknown exception "+exception.getClass().getName()+" was caught by Error.jsp."; } } log.debug("Error.jsp exception is: ",exception); // // This allows us to get the actual cause of the exception. // Note the cast; at least Tomcat has two classes called "JspException" // imported in JSP pages. // Throwable realcause = null; if( exception instanceof javax.servlet.jsp.JspException ) { log.debug("IS JSPEXCEPTION"); realcause = ((javax.servlet.jsp.JspException)exception).getRootCause(); log.debug("REALCAUSE="+realcause); } if( realcause == null ) realcause = exception; pageContext.setAttribute( "message", msg, PageContext.REQUEST_SCOPE ); %> <h3>JSPWiki has detected an error</h3> <dl> <dt><b>Error Message</b></dt> <dd> <%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE)%> </dd> <dt><b>Exception</b></dt> <dd><%=realcause.getClass().getName()%></dd> <dt><b>Place where detected</b></dt> <dd><%=FileUtil.getThrowingMethod(realcause)%></dd> </dl> <p> If you have changed the templates, please do check them. This error message may show up because of that. If you have not changed them, and you are either installing JSPWiki for the first time or have changed configuration, then you might want to check your configuration files. If you are absolutely sure that JSPWiki was running quite okay or you can't figure out what is going on, then by all means, come over to <a href="http://www.jspwiki.org/">jspwiki.org</a> and tell us. There is more information in the log file (like the full stack trace, which you should add to any error report). </p> <p> And don't worry - it's just a computer program. Nothing really serious is probably going on: at worst you can lose a few nights sleep. It's not like it's the end of the world. </p> <br clear="all" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: Vote.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.plugin.VotePlugin" %> <%@ page import="com.ecyrd.jspwiki.auth.*" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %><% WikiContext wikiContext = wiki.createContext( request, WikiContext.VIEW ); String pagereq = wikiContext.getPage().getName(); String vote = request.getParameter("vote"); NDC.push( wiki.getApplicationName()+":"+pagereq ); log.info("Vote '"+pagereq+"' from "+request.getRemoteHost()+" by "+request.getRemoteUser() ); pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); VotePlugin plugin = new VotePlugin(); plugin.vote( wikiContext, TextUtil.isPositive( vote ) ? 1 : -1 ); response.sendRedirect( wiki.getBaseURL()+"Wiki.jsp?page=VoteOk" ); NDC.pop(); NDC.remove(); %> --- NEW FILE: Preview.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="java.util.Date" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.PREVIEW ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); response.setContentType("text/html; charset="+wiki.getContentEncoding() ); pageContext.setAttribute( "usertext", wiki.safeGetParameter( request, "text" ), PageContext.REQUEST_SCOPE ); long lastchange = 0; Date d = wikiContext.getPage().getLastModified(); if( d != null ) lastchange = d.getTime(); pageContext.setAttribute( "lastchange", Long.toString( lastchange ), PageContext.REQUEST_SCOPE ); String contentPage = "templates/"+wikiContext.getTemplate()+"/ViewTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: Login.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="com.ecyrd.jspwiki.attachment.*" %> <%@ page import="java.util.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.auth.*" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <!-- This is a sample login page, in case you prefer a clear front page instead of the default sign-in type login box at the side of the normal entry page. Set this page in the welcome-file-list tag in web.xml to default here when entering the site. --> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.LOGIN ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName() + ":Login.jsp" ); pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); String action = request.getParameter("action"); String uid = request.getParameter("uid"); String passwd = request.getParameter("passwd"); String msg = (String)wikiContext.getVariable("msg"); if( msg == null ) wikiContext.setVariable( "msg", "" ); UserManager mgr = wiki.getUserManager(); if( "login".equals(action) ) { if( mgr.login( uid, passwd, session ) ) { response.sendRedirect( wiki.getViewURL(pagereq) ); return; } } else if( "logout".equals(action) ) { mgr.logout( session ); response.sendRedirect( wiki.getViewURL(pagereq) ); return; } response.setContentType("text/html; charset="+wiki.getContentEncoding() ); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title><wiki:Variable var="applicationname"/> login</title> <%@ include file="templates/default/cssinclude.js" %> <META NAME="ROBOTS" CONTENT="NOINDEX"> </head> <body class="login" bgcolor="#FFFFFF"> <br /> <br /> <form action="<wiki:Variable var="baseURL"/>Login.jsp" accept-charset="UTF-8" method="POST" /> <input type="hidden" name="page" value="<wiki:Variable var="pagename" />" /> <div align="center"> <table border="0" cellspacing="3" cellpadding="5" width="35%" bgcolor="#efefef" /> <tr> <td colspan="2" bgcolor="#bfbfff"> <div align="center"> <h3>Welcome to <wiki:Variable var="applicationname"/></h3> <p><wiki:Variable var="msg" /></p> </div> </td> </tr> <tr> <td>Login:</td> <td><input type="text" name="uid" /></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="passwd" /></td> </tr> <tr> <td colspan="2"> <div align="center"> <input type="submit" name="action" value="login" /> </div> </td> </tr> </table> </div> </body> </html> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: Upload.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="com.ecyrd.jspwiki.attachment.*" %> <%@ page import="java.util.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.UPLOAD ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName() + ":" + pagereq ); pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); response.setContentType("text/html; charset="+wiki.getContentEncoding() ); String contentPage = "templates/"+wikiContext.getTemplate()+"/UploadTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: .htaccess --- Options -Indexes --- NEW FILE: rss.jsp --- <?xml version="1.0" encoding="UTF-8"?> <%@ page import="java.util.*,com.ecyrd.jspwiki.*" %> <%@ page import="org.apache.log4j.*" %> <%@ page import="java.text.*" %> <%@ page import="com.ecyrd.jspwiki.rss.*" %> <%@ taglib uri="/WEB-INF/oscache.tld" prefix="oscache" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; static int MAX_CHARACTERS = 4000; %> <% WikiContext wikiContext = wiki.createContext( request, "rss" ); WikiPage wikipage = wikiContext.getPage(); NDC.push( wiki.getApplicationName()+":"+wikipage.getName() ); response.setContentType("text/xml; charset=UTF-8" ); StringBuffer result = new StringBuffer(); SimpleDateFormat iso8601fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); Properties properties = wiki.getWikiProperties(); String channelDescription = wiki.getRequiredProperty( properties, RSSGenerator.PROP_CHANNEL_DESCRIPTION ); String channelLanguage = wiki.getRequiredProperty( properties, RSSGenerator.PROP_CHANNEL_LANGUAGE ); %> <oscache:cache time="300"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wiki="http://purl.org/rss/1.0/modules/wiki/"> <channel rdf:about="<%=wiki.getBaseURL()%>"> <title><%=wiki.getApplicationName()%></title> <link><%=wiki.getBaseURL()%></link> <description> <%=RSSGenerator.format(channelDescription)%> </description> <language><%=channelLanguage%></language> <% // // Now, list items. // com.ecyrd.jspwiki.plugin.WeblogPlugin plug = new com.ecyrd.jspwiki.plugin.WeblogPlugin(); List changed = plug.findBlogEntries(wiki.getPageManager(), wikipage.getName(), new Date(0L), new Date()); Collections.sort( changed, new PageTimeComparator() ); // We need two lists, which is why we gotta make a separate list if // we want to do just a single pass. StringBuffer itemBuffer = new StringBuffer(); %> <items> <rdf:Seq> <% int items = 0; for( Iterator i = changed.iterator(); i.hasNext() && items < 15; items++ ) { WikiPage p = (WikiPage) i.next(); String encodedName = wiki.encodeName(p.getName()); String url = wiki.getViewURL(p.getName()); %> <rdf:li rdf:resource="<%=url%>"/> <% itemBuffer.append(" <item rdf:about=\""+url+"\">\n"); itemBuffer.append(" <title>"); String pageText = wiki.getText(p.getName()); String title = ""; int firstLine = pageText.indexOf('\n'); if( firstLine > 0 ) { title = pageText.substring( 0, firstLine ); } if( title.trim().length() == 0 ) title = p.getName(); // Remove wiki formatting while( title.startsWith("!") ) title = title.substring(1); itemBuffer.append( RSSGenerator.format(title) ); itemBuffer.append("</title>\n"); itemBuffer.append(" <link>"); itemBuffer.append( url ); itemBuffer.append("</link>\n"); itemBuffer.append(" <description>"); if( firstLine > 0 ) { int maxlen = pageText.length(); if( maxlen > MAX_CHARACTERS ) maxlen = MAX_CHARACTERS; if( maxlen > 0 ) { pageText = wiki.textToHTML( wikiContext, pageText.substring( firstLine+1, maxlen ).trim() ); itemBuffer.append( RSSGenerator.format(pageText) ); if( maxlen == MAX_CHARACTERS ) itemBuffer.append( "..." ); } else { itemBuffer.append( RSSGenerator.format(title) ); } } else { itemBuffer.append( RSSGenerator.format(title) ); } itemBuffer.append("</description>\n"); if( p.getVersion() != -1 ) { itemBuffer.append(" <wiki:version>"+p.getVersion()+"</wiki:version>\n"); } if( p.getVersion() > 1 ) { itemBuffer.append(" <wiki:diff>"+ wiki.getBaseURL()+"Diff.jsp?page="+ encodedName+ "&r1=-1"+ "</wiki:diff>\n"); } // // Modification date. // itemBuffer.append(" <dc:date>"); Calendar cal = Calendar.getInstance(); cal.setTime( p.getLastModified() ); cal.add( Calendar.MILLISECOND, - (cal.get( Calendar.ZONE_OFFSET ) + (cal.getTimeZone().inDaylightTime( p.getLastModified() ) ? cal.get( Calendar.DST_OFFSET ) : 0 )) ); itemBuffer.append( iso8601fmt.format( cal.getTime() ) ); itemBuffer.append("</dc:date>\n"); String author = p.getAuthor(); if( author == null ) author = "unknown"; // // Author. // itemBuffer.append(" <dc:contributor>\n"); itemBuffer.append(" <rdf:Description"); if( wiki.pageExists(author) ) { itemBuffer.append(" link=\""+wiki.getViewURL(author)+"\""); } itemBuffer.append(">\n"); itemBuffer.append(" <rdf:value>"+author+"</rdf:value>\n"); itemBuffer.append(" </rdf:Description>\n"); itemBuffer.append(" </dc:contributor>\n"); // PageHistory itemBuffer.append(" <wiki:history>"); itemBuffer.append( wiki.getBaseURL()+"PageInfo.jsp?page="+ encodedName ); itemBuffer.append("</wiki:history>\n"); // Close up. itemBuffer.append(" </item>\n"); } %> </rdf:Seq> </items> </channel> <%=itemBuffer%> <% String searchURL = wiki.getBaseURL()+"Search.jsp"; %> <textinput rdf:about="<%=searchURL%>"> <title>Search</title> <description>Search <%=wiki.getApplicationName()%></description> <name>query</name> <link><%=searchURL%></link> </textinput> </rdf:RDF> </oscache:cache> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: UserPreferences.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.auth.UserProfile" %> <%@ page import="com.ecyrd.jspwiki.auth.UserManager" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.PREFS ); String pagereq = wikiContext.getPage().getName(); UserManager mgr = wiki.getUserManager(); NDC.push( wiki.getApplicationName()+":"+pagereq ); pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); String ok = request.getParameter("ok"); String clear = request.getParameter("clear"); if( ok != null || "save".equals(request.getParameter("action")) ) { mgr.logout( session ); String name = wiki.safeGetParameter( request, "username" ); mgr.setUserCookie( response, name ); response.sendRedirect( wiki.getBaseURL()+"UserPreferences.jsp" ); } else if( clear != null ) { mgr.logout( session ); Cookie prefs = new Cookie( WikiEngine.PREFS_COOKIE_NAME, "" ); prefs.setMaxAge( 0 ); response.addCookie( prefs ); response.sendRedirect( wiki.getBaseURL()+"UserPreferences.jsp" ); } else { response.setContentType("text/html; charset="+wiki.getContentEncoding() ); String contentPage = "templates/"+wikiContext.getTemplate()+"/ViewTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% } // Else NDC.pop(); NDC.remove(); %> --- NEW FILE: Delete.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="java.util.*" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.WikiProvider" %> <%@ page import="com.ecyrd.jspwiki.auth.AuthorizationManager" %> <%@ page import="com.ecyrd.jspwiki.auth.UserProfile" %> <%@ page import="com.ecyrd.jspwiki.auth.permissions.EditPermission" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.DELETE ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); WikiPage wikipage = wikiContext.getPage(); WikiPage latestversion = wiki.getPage( pagereq ); if( latestversion == null ) { latestversion = wikiContext.getPage(); } AuthorizationManager mgr = wiki.getAuthorizationManager(); UserProfile currentUser = wikiContext.getCurrentUser(); if( !mgr.checkPermission( wikiContext.getPage(), currentUser, WikiPermission.newInstance("delete") ) ) { log.info("User "+currentUser.getName()+" has no access - redirecting to login page."); String pageurl = wiki.encodeName( pagereq ); response.sendRedirect( wiki.getBaseURL()+"Login.jsp?page="+pageurl ); return; } pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); // // Set the response type before we branch. // response.setContentType("text/html; charset="+wiki.getContentEncoding() ); if( delete != null ) { log.info("Deleting page "+pagereq+". User="+request.getRemoteUser()+", host="+request.getRemoteHost() ); response.sendRedirect(wiki.getViewURL(pagereq)); return; } // FIXME: not so. String contentPage = "templates/"+wikiContext.getTemplate()+"/EditTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: Wiki.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.auth.permissions.ViewPermission" %> <%@ page import="com.ecyrd.jspwiki.auth.*" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %><% WikiContext wikiContext = wiki.createContext( request, WikiContext.VIEW ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); log.info("Request for page '"+pagereq+"' from "+request.getRemoteHost()+" by "+request.getRemoteUser() ); String redirect = wiki.getRedirectURL( wikiContext ); if( redirect != null ) { response.sendRedirect( redirect ); return; } AuthorizationManager mgr = wiki.getAuthorizationManager(); UserProfile currentUser = wiki.getUserManager().getUserProfile( request ); if( !mgr.checkPermission( wikiContext.getPage(), currentUser, new ViewPermission() ) ) { if( mgr.strictLogins() ) { log.info("User "+currentUser.getName()+" has no access - redirecting to login page."); String msg = "Unknown user or password.<br>Please try again."; wikiContext.setVariable( "msg", msg ); String pageurl = wiki.encodeName( pagereq ); response.sendRedirect( wiki.getBaseURL()+"Login.jsp?page="+pageurl ); return; } else { // // Do a bit of sanity check here. FIXME: Should this be somewhere else? // if( pagereq.equals("LoginError") ) { throw new WikiSecurityException("Looped config detected - you must not prevent view access to page LoginError AND have strictLogins set to true!"); } log.info("User "+currentUser.getName()+" has no access - displaying message."); response.sendRedirect( wiki.getBaseURL()+"Wiki.jsp?page=LoginError" ); } } pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); // // Alright, then start responding. // response.setContentType("text/html; charset="+wiki.getContentEncoding() ); String contentPage = "templates/"+wikiContext.getTemplate()+"/ViewTemplate.jsp"; %><wiki:Include page="<%=contentPage%>" /><% NDC.pop(); NDC.remove(); %> --- NEW FILE: Diff.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.tags.InsertDiffTag" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.DIFF ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); String pageurl = wiki.encodeName( pagereq ); // If "r1" is null, then assume current version (= -1) // If "r2" is null, then assume the previous version (=current version-1) // FIXME: There is a set of unnecessary conversions here: InsertDiffTag // does the String->int conversion anyway. WikiPage wikipage = wikiContext.getPage(); String srev1 = request.getParameter("r1"); String srev2 = request.getParameter("r2"); int ver1 = -1, ver2 = -1; if( srev1 != null ) { ver1 = Integer.parseInt( srev1 ); } if( srev2 != null ) { ver2 = Integer.parseInt( srev2 ); } else { int lastver = wikipage.getVersion(); if( lastver > 1 ) { ver2 = lastver-1; } } pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); pageContext.setAttribute( InsertDiffTag.ATTR_OLDVERSION, new Integer(ver1), pageContext.REQUEST_SCOPE ); pageContext.setAttribute( InsertDiffTag.ATTR_NEWVERSION, new Integer(ver2), pageContext.REQUEST_SCOPE ); // log.debug("Request for page diff for '"+pagereq+"' from "+request.getRemoteHost()+" by "+request.getRemoteUser()+". R1="+ver1+", R2="+ver2 ); response.setContentType("text/html; charset="+wiki.getContentEncoding() ); String contentPage = "templates/"+wikiContext.getTemplate()+"/ViewTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: PageInfo.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="java.util.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.auth.*" %> <%@ page import="com.ecyrd.jspwiki.auth.permissions.WikiPermission" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.INFO ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); AuthorizationManager mgr = wiki.getAuthorizationManager(); UserProfile currentUser = wiki.getUserManager().getUserProfile( request ); if( !mgr.checkPermission( wikiContext.getPage(), currentUser, WikiPermission.newInstance("view") ) ) { if( mgr.strictLogins() ) { log.info("User "+currentUser.getName()+" has no access - redirecting to login page."); String pageurl = wiki.encodeName( pagereq ); response.sendRedirect( wiki.getBaseURL()+"Login.jsp?page="+pageurl ); return; } else { log.info("User "+currentUser.getName()+" has no access - displaying message."); response.sendRedirect( wiki.getBaseURL()+"Wiki.jsp?page=LoginError" ); } } pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); log.debug("Page info request for page '"+pagereq+"' from "+request.getRemoteHost()+" by "+request.getRemoteUser() ); response.setContentType("text/html; charset="+wiki.getContentEncoding() ); String contentPage = "templates/"+wikiContext.getTemplate()+"/ViewTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: Edit.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="java.util.*" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page import="com.ecyrd.jspwiki.WikiProvider" %> <%@ page import="com.ecyrd.jspwiki.auth.AuthorizationManager" %> <%@ page import="com.ecyrd.jspwiki.auth.UserProfile" %> <%@ page import="com.ecyrd.jspwiki.auth.permissions.WikiPermission" %> <%@ page import="com.ecyrd.jspwiki.auth.permissions.EditPermission" %> <%@ page import="com.ecyrd.jspwiki.auth.permissions.CreatePermission" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% String action = request.getParameter("action"); String ok = request.getParameter("ok"); String preview = request.getParameter("preview"); String cancel = request.getParameter("cancel"); String append = request.getParameter("append"); String author = wiki.safeGetParameter( request, "author" ); String text = wiki.safeGetParameter( request, "text" ); WikiContext wikiContext = wiki.createContext( request, WikiContext.EDIT ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); WikiPage wikipage = wikiContext.getPage(); WikiPermission requiredPermission = null; WikiPage latestversion = wiki.getPage( pagereq ); if( latestversion == null ) { latestversion = wikiContext.getPage(); } if( wiki.pageExists( wikipage ) ) { requiredPermission = new EditPermission(); } else { requiredPermission = new CreatePermission(); } AuthorizationManager mgr = wiki.getAuthorizationManager(); UserProfile currentUser = wikiContext.getCurrentUser(); if( !mgr.checkPermission( wikiContext.getPage(), currentUser, requiredPermission ) ) { log.info("User "+currentUser.getName()+" has no access - redirecting to login page."); String msg = "You do not seem to have the permissions for this operation. Would you like to login as another user?"; wikiContext.setVariable( "msg", msg ); String pageurl = wiki.encodeName( pagereq ); response.sendRedirect( wiki.getBaseURL()+"Login.jsp?page="+pageurl ); return; } pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); // // Set the response type before we branch. // response.setContentType("text/html; charset="+wiki.getContentEncoding() ); response.setHeader( "Cache-control", "max-age=0" ); response.setDateHeader( "Expires", new Date().getTime() ); response.setDateHeader( "Last-Modified", new Date().getTime() ); //log.debug("Request character encoding="+request.getCharacterEncoding()); //log.debug("Request content type+"+request.getContentType()); log.debug("preview="+preview+", ok="+ok); if( ok != null ) { log.info("Saving page "+pagereq+". User="+request.getRemoteUser()+", host="+request.getRemoteHost() ); // FIXME: I am not entirely sure if the JSP page is the // best place to check for concurrent changes. It certainly // is the best place to show errors, though. long pagedate = Long.parseLong(request.getParameter("edittime")); Date change = latestversion.getLastModified(); if( change != null && change.getTime() != pagedate ) { // // Someone changed the page while we were editing it! // log.info("Page changed, warning user."); pageContext.forward( "PageModified.jsp" ); return; } // // We expire ALL locks at this moment, simply because someone has // already broken it. // PageLock lock = wiki.getPageManager().getCurrentLock( wikipage ); wiki.getPageManager().unlockPage( lock ); session.removeAttribute( "lock-"+pagereq ); // // Set author information // wikiContext.getPage().setAuthor( currentUser.getName() ); // // Figure out the actual page text // if( text == null ) { throw new ServletException( "No parameter text set!" ); } // // If this is an append, then we just append it to the page. // If it is a full edit, then we will replace the previous contents. // if( append != null ) { StringBuffer pageText = new StringBuffer(wiki.getText( pagereq )); pageText.append( text ); wiki.saveText( wikiContext, pageText.toString() ); } else { wiki.saveText( wikiContext, text ); } response.sendRedirect(wiki.getViewURL(pagereq)); return; } else if( preview != null ) { log.debug("Previewing "+pagereq); pageContext.forward( "Preview.jsp" ); } else if( cancel != null ) { log.debug("Cancelled editing "+pagereq); PageLock lock = (PageLock) session.getAttribute( "lock-"+pagereq ); if( lock != null ) { wiki.getPageManager().unlockPage( lock ); session.removeAttribute( "lock-"+pagereq ); } response.sendRedirect( wiki.getViewURL(pagereq) ); return; } log.info("Editing page "+pagereq+". User="+request.getRemoteUser()+", host="+request.getRemoteHost() ); // // Determine and store the date the latest version was changed. Since // the newest version is the one that is changed, we need to track // that instead of the edited version. // long lastchange = 0; Date d = latestversion.getLastModified(); if( d != null ) lastchange = d.getTime(); pageContext.setAttribute( "lastchange", Long.toString( lastchange ), PageContext.REQUEST_SCOPE ); // // Attempt to lock the page. // PageLock lock = wiki.getPageManager().lockPage( wikipage, currentUser.getName() ); if( lock != null ) { session.setAttribute( "lock-"+pagereq, lock ); } String contentPage = "templates/"+wikiContext.getTemplate()+"/EditTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: NewBlogEntry.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="com.ecyrd.jspwiki.plugin.*" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %><% WikiContext wikiContext = wiki.createContext( request, WikiContext.EDIT ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); String specialpage = wiki.getSpecialPageReference( pagereq ); if( specialpage != null ) { // FIXME: Do Something Else response.sendRedirect( specialpage ); return; } WeblogEntryPlugin p = new WeblogEntryPlugin(); String newEntry = p.getNewEntryPage( wiki, pagereq ); NDC.pop(); NDC.remove(); response.sendRedirect( wiki.getEditURL(newEntry) ); %> --- NEW FILE: index.jsp --- <jsp:forward page="Wiki.jsp"/> --- NEW FILE: necho.jsp --- <?xml version="1.0" encoding="UTF-8"?> <!-- THIS FEED IS ENTIRELY EXPERIMENTAL. DO NOT USE FOR ANYTHING REAL YET! This feed is based on the 01-Jul-2003 snapshot of the (n)echo development, which is probably badly outdated. See http://intertwingly.net/stories/2003/07/01/example.necho --> <%@ page import="java.util.*,com.ecyrd.jspwiki.*" %> <%@ page import="org.apache.log4j.*" %> <%@ page import="java.text.*" %> <%@ page import="com.ecyrd.jspwiki.rss.*" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWiki"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, "rss" ); WikiPage wikipage = wikiContext.getPage(); NDC.push( wiki.getApplicationName()+":"+wikipage.getName() ); response.setContentType("text/xml; charset=UTF-8" ); StringBuffer result = new StringBuffer(); SimpleDateFormat iso8601fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); Properties properties = wiki.getWikiProperties(); String channelDescription = wiki.getRequiredProperty( properties, RSSGenerator.PROP_CHANNEL_DESCRIPTION ); String channelLanguage = wiki.getRequiredProperty( properties, RSSGenerator.PROP_CHANNEL_LANGUAGE ); %> <feed xmlns="http://example.com/newformat#" version="0.1" xml:lang="<%=channelLanguage%>" xml:base="http://example.com"> <title><%=wiki.getApplicationName()%></title> <subtitle>FIXME: We support no subtitles here</subtitle> <link><%=wiki.getBaseURL()%></link> <% // // Now, list items. // com.ecyrd.jspwiki.plugin.WeblogPlugin plug = new com.ecyrd.jspwiki.plugin.WeblogPlugin(); List changed = plug.findBlogEntries(wiki.getPageManager(), wikipage.getName(), new Date(0L), new Date()); Collections.sort( changed, new PageTimeComparator() ); %> <% int items = 0; for( Iterator i = changed.iterator(); i.hasNext() && items < 15; items++ ) { WikiPage p = (WikiPage) i.next(); String encodedName = wiki.encodeName(p.getName()); String url = wiki.getViewURL(p.getName()); out.println(" <entry>"); out.println(" <title>"); String pageText = wiki.getText(p.getName()); String title = ""; int firstLine = pageText.indexOf('\n'); if( firstLine > 0 ) { title = pageText.substring( 0, firstLine ); } if( title.trim().length() == 0 ) title = p.getName(); // Remove wiki formatting while( title.startsWith("!") ) title = title.substring(1); out.println( RSSGenerator.format(title) ); out.println("</title>"); out.println("<link>"); out.println( url ); out.println("</link>"); out.println("<content type=\"text/html\" mode=\"xml\">"); out.print("<![CDATA["); if( firstLine > 0 ) { int maxlen = pageText.length(); if( maxlen > 1000 ) maxlen = 1000; // Assume 112 bytes of growth. if( maxlen > 0 ) { pageText = wiki.textToHTML( wikiContext, pageText.substring( firstLine+1, maxlen ).trim() ); out.print( pageText ); if( maxlen == 1000 ) out.print( "..." ); } else { out.print( RSSGenerator.format(title) ); } } else { out.print( RSSGenerator.format(title) ); } out.print("]]>"); out.println("</content>"); // // Modification date. // out.println("<created>"); Calendar cal = Calendar.getInstance(); cal.setTime( p.getLastModified() ); cal.add( Calendar.MILLISECOND, - (cal.get( Calendar.ZONE_OFFSET ) + (cal.getTimeZone().inDaylightTime( p.getLastModified() ) ? cal.get( Calendar.DST_OFFSET ) : 0 )) ); out.println( iso8601fmt.format( cal.getTime() ) ); out.println("</created>\n"); String author = p.getAuthor(); if( author == null ) author = "unknown"; // // Author. // out.println(" <author>"); out.println(" <name>"+author+"</name>"); if( wiki.pageExists(author) ) { out.println("<homepage>"+wiki.getViewURL(author)+"</homepage>"); } out.println(" </author>\n"); // // Unique id. FIXME: is not really a GUID. // out.println("<id>"+url+"</id>"); out.println(" </entry>\n"); } %> </feed> <% NDC.pop(); NDC.remove(); %> --- NEW FILE: Search.jsp --- <%@ page import="org.apache.log4j.*" %> <%@ page import="com.ecyrd.jspwiki.*" %> <%@ page import="java.util.*" %> <%@ page import="com.ecyrd.jspwiki.tags.WikiTagBase" %> <%@ page errorPage="/Error.jsp" %> <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> <%! public void jspInit() { wiki = WikiEngine.getInstance( getServletConfig() ); } Category log = Category.getInstance("JSPWikiSearch"); WikiEngine wiki; %> <% WikiContext wikiContext = wiki.createContext( request, WikiContext.FIND ); String pagereq = wikiContext.getPage().getName(); NDC.push( wiki.getApplicationName()+":"+pagereq ); String query = wiki.safeGetParameter( request, "query"); Collection list = null; pageContext.setAttribute( WikiTagBase.ATTR_CONTEXT, wikiContext, PageContext.REQUEST_SCOPE ); response.setContentType("text/html; charset="+wiki.getContentEncoding() ); if( query != null ) { log.info("Searching for string "+query); list = wiki.findPages( query ); pageContext.setAttribute( "searchresults", list, PageContext.REQUEST_SCOPE ); pageContext.setAttribute( "query", query, PageContext.REQUEST_SCOPE ); log.info("Found "+list.size()+" pages"); } String contentPage = "templates/"+wikiContext.getTemplate()+"/ViewTemplate.jsp"; %> <wiki:Include page="<%=contentPage%>" /> <% NDC.pop(); NDC.remove(); %> |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:16
|
Update of /cvsroot/easystruts/easystruts-website In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435 Added Files: build-editable.xml jspwiki.properties.local colors.txt jspwiki.properties.edit.local Color palette.jpg jspwiki.properties.edit.remote .cvsignore build.xml .project jspwiki.properties.remote Log Message: Added new web site sources and data --- NEW FILE: .cvsignore --- .build .clover .dist-edit .build-edit .dist conf data --- NEW FILE: jspwiki.properties.edit.local --- ########################################################################### # # This is the JSPWiki configuration file. You'll need to edit this # a bit. The first few lines are the most important ones. # # Wherever it is said that an option can be "true" or "false", you can # also use "yes"/"no", or "on/off". Just for some convenience. # # # You can use this to override the default application name. It affects # the HTML titles and logging, for example. It can be different from # the actual web name (http://my.com/mywiki) of the application, but usually # it is the same. # jspwiki.applicationName = EasyStruts # # Which page provider class to use. Possibilities are: # # RCSFileProvider - for simple RCS-based file storage # FileSystemProvider - for simple pure file storage with no version information # VersioningFileProvider - for simple, non-RCS based versioning storage. # # Note that if you're upgrading from JSPWiki 1.x, then you need to remove the # "com.ecyrd.jspwiki." part from the beginning of the path. # jspwiki.pageProvider = VersioningFileProvider # # Set to true, if you want to cache page data into memory. This is # in general a good idea. # # Default is false (no cache). # # NB: This replaces the JSPWiki 1.x "CachingProvider" setting, since it # probably was too confusing. # jspwiki.usePageCache = true # # Determines where wiki files are kept for FileSystemProvider # and RCSFileProvider # # If you're using Windows, then you must duplicate the backslashes. # For example, use: # # jspwiki.fileSystemProvider.pageDir = C:\\Data\\jspwiki # jspwiki.fileSystemProvider.pageDir = C:\\dev\\workspace\\easystruts-website\\data # # ATTACHMENTS: # # Use the following property to define which attachment provider # you want to use. You have basically two choices: # * Set the value to BasicAttachmentProvider # a simple, flat file versioning provider # * Leave the value empty (or just comment the line out) # the attachment functionality is disabled # jspwiki.attachmentProvider = BasicAttachmentProvider # # The BasicAttachmentProvider needs to know where to store the files # the user has uploaded. It's okay to put these in the same directory # as you put your text files (i.e. the pageDir setting above). # # If you're using Windows, then you must duplicate the backslashes. # For example, use: # # jspwiki.basicAttachmentProvider.storageDir = C:\\Data\\jspwiki # jspwiki.basicAttachmentProvider.storageDir = C:\\dev\\workspace\\easystruts-website\\data # # BaseURL can be used to rewrite all of JSPWiki's internal references. # Sometimes, especially if you're behind a address-rewriting firewall, # relative URLs don't work since the servlet container has no idea # where it's actually located. # # Leave undefined if you want to rely on what your servlet container # thinks of where your application lives. # # You MUST, however, define this one if you want to enable RSS (see below). In # general, this is a good idea to define it anyway. Do not forget the # trailing slash. # # Example: # jspwiki.baseURL = http://www.jspwiki.org/ # #jspwiki.baseURL=http://localhost:8080/ # # Determines which character encoding JSPWiki should use. If you want # to support all languages in your Wiki, you probably want to enable # this. If you're upgrading, or are planning just to use the ISO-Latin1 # character set (like most western people would), you can just leave # it at the default. If you enable it, remember that most people won't # be able to type in special characters anyway. # # Note that you can't switch these in the mean time, since the way the # files are encoded on disk is incompatible between ISO-Latin1 and UTF-8. # Don't try. You'll get all sorts of interesting problems, if you do. # # Possible values are 'ISO-8859-1' (default) and 'UTF-8'. jspwiki.encoding = UTF-8 # # Determines whether raw HTML is allowed as Wiki input. # # THIS IS A DANGEROUS OPTION! # # If you decide to allow raw HTML, understand that ANY person who has # access to your Wiki site can embed ANY sort of malicious JavaScript, # or plugin, or ActiveX, or whatever on your site. They can even mess it # up so royally it is impossible for you to replace the situation without # the need of direct access to the repository. So think twice before # allowing raw HTML on your own site. # # Most probably you want to use this on Intranets, or personal servers, # where only a handful of people can access the wiki. # # Text between {{{ and }}} -options is not affected by this setting, so # it's always safe to quote HTML code with those. # # The default for this option is "false". # jspwiki.translatorReader.allowHTML = false ############################################################################ # # Usability niceties. # # # If this property is set to "true", then page titles are rendered # using an extra space between every capital letter. It may make # page titles readable on some occasions, but it does have the # drawback of making the titles look a bit funny at times. # jspwiki.breakTitleWithSpaces = true # # If set to true, this property means that "WikiName" and "WikiNames" # are considered equal when linking between them. Setting this to # true does not prevent you from having both kinds of pages - we just # fall back to the other one if the primary name does not exist. # # For any other language, you'll probably want to turn this off. # jspwiki.translatorReader.matchEnglishPlurals = false # # If you set this to true, the Wiki translator will then also consider # "traditional" WikiNames (that is, names of pages JustSmashedTogether # without square brackets) as hyperlinks. This technique is also # known as "CamelCase", or "BumpyCase", or "InterCapping". I personally # like CamelCase as a word, which is why this property is named as it is :-). # # By default this is false, since traditional WikiLinks may confuse newbies. # # This option can be overridden on a per-page basis using the SET directive. # jspwiki.translatorReader.camelCaseLinks = false # # This sets the default template used by the Wiki engine. The templates # live in templates/<template name>. JSPWiki will attempt to find two # basic templates from that directory: "ViewTemplate" and "EditTemplate". # # By default this is called "default". # # This option can be overridden on a per-page basis using the SET directive. # jspwiki.templateDir = easystruts-edit # # The name of the front page. This is the page that gets loaded if no # other page is loaded. Up until JSPWiki 1.9.28, it was always called # "Main", but now you can easily change the default front page here. If not # defined, uses "Main". # jspwiki.frontPage = Home # # If set to true, all outward links have a small icon attached. The icon # can be found from images/out.png. Default is true. # jspwiki.translatorReader.useOutlinkImage = false # # Set this to the number of minutes a person can "lock" a page # for while he is editing it. # jspwiki.lockExpiryTime = 60 ############################################################################ # # Special page references. # # The URL is relative to Wiki.jsp. However, if you use # a full, absolute URL, you can also do that. # # Example to redirect all requests to a page called 'OriginalWiki' # to the original wikiwiki at http://c2.com/cgi/wiki # # jspwiki.specialPage.OriginalWiki = http://c2.com/cgi/wiki # # Note that it is entirely possible to override any Wiki page, even # an existing one by redefining it here. # jspwiki.specialPage.Search = Search.jsp jspwiki.specialPage.UserPreferences = UserPreferences.jsp ############################################################################# # # Plugin search paths. # # Define here the packages you want to use for searching plugins, # separated with commas. # For example, use the following command to add "org.myorganisation.jspwiki.myplugins" # and "com.foobar.myplugins" to the search path. # # The default path is "com.ecyrd.jspwiki.plugins", and it will be always # the last item on the path. This allows you to override JSPWiki default # plugins. Note that you are only adding to the path, not replacing it (ie. # the default path is never removed.) # # jspwiki.plugin.searchPath = org.myorganisation.jspwiki.myplugins,com.foobar.myplugins # jspwiki.plugin.searchPath = ############################################################################# # # Page filters # # The format is "jspwiki.pageFilter.XXX = classname", where XXX is a priority. # Those filters with higher priority will be executed first. # # Example: #jspwiki.pageFilter.100 = ProfanityFilter ############################################################################# # # Authentication and authorization # # JSPWiki supports a plugin-based interface for talking to different # kinds of authentication systems. In JSPWiki talk, the term # "Authenticator" means a module that basically checks if the # username and password match. An "Authorizer" is a module that # is able to provide the user's permissions in the wiki. # # Define here the WikiAuthorizer and WikiAuthenticator implementations # you want to use. Specify the full classname, or the short names of # implementations provided in the JSPWiki codebase # (com.ecyrd.jspwiki.auth.modules). # # PageAuthorizer is a simple default implementation that reads defaults # from a WikiPage called 'DefaultPermissions'. # PageAuthorizer is used by default. # # jspwiki.authorizer = PageAuthorizer # # FileAuthenticator is a simple authorizer that basically reads the # passwords from a file. # # jspwiki.authenticator = FileAuthenticator # # FileAuthenticator supports the following options: # # Define where the password file lives. The password file is simply in # a format "username = password", one entry per line. This is a required # attribute. # # jspwiki.fileAuthenticator.fileName = /tmp/mypasswordfile.txt # # Users are mapped to groups by a UserDatabase. The default UDB is # the WikiDatabase, which looks for group members in page meta-data: # the page name determines the group name, and a [{SET members=...}] # adds members to that group. # WikiDatabase is used by default. # # Override with your own UserDatabase implementation with this property: # # jspwiki.userdatabase = WikiDatabase # # By default, at least the LoginError page is readable by anyone, and # a failed login displays the usual JSPWiki view of that page. If you # want to have a completely closed site, with Login.jsp as a kind of # cover page, specify strict logins. # #jspwiki.policy.strictLogins = true ############################################################################# # # InterWiki links # # The %s is replaced with the page reference (specify # multiple times to get multiple references). Page references should # appear in format : [wiki:wikipage]. # # This is the JSPWiki home. In future, JSPWiki will probably rely on this # for error messages, so I don't recommend that you change it. jspwiki.interWikiRef.JSPWiki = http://www.jspwiki.org/Wiki.jsp?page=%s # Here's how you can have directly links to the JSPWiki editor. # Now you can put a hyperlink for editing "MainPage" by making # a link [Edit:MainPage]. jspwiki.interWikiRef.Edit = Edit.jsp?page=%s # This is the original WikiWikiWeb jspwiki.interWikiRef.WikiWikiWeb = http://c2.com/cgi/wiki?%s # TWiki, a very nice WikiClone. jspwiki.interWikiRef.TWiki = http://twiki.org/cgi-bin/view/TWiki/%s # MeatballWiki, which seems to be quite popular. jspwiki.interWikiRef.MeatballWiki = http://usemod.com/cgi-bin/mb.pl?%s # Wikipedia, a Wiki encyclopedia! jspwiki.interWikiRef.Wikipedia = http://www.wikipedia.com/wiki/%s # Google, the ubiquitous search engine. jspwiki.interWikiRef.Google = http://www.google.com/search?q=%s ############################################################################ # # Define which image types are inlined. # These are your standard glob expressions (just like in your # Windows or UNIX shells). Default pattern is to include all PNG # images. If you specify something here, you will override the default. # # Don't forget to increase the number after the dot - duplicate entries # cause problems! # # For example: # Inline all JPG files, PNG files and all files from images.com: # jspwiki.translatorReader.inlinePattern.1 = *.jpg jspwiki.translatorReader.inlinePattern.2 = *.png jspwiki.translatorReader.inlinePattern.3 = *.gif # jspwiki.translatorReader.inlinePattern.3 = http://images.com/* ########################################################################### # # Determine how the RSS (Rich Site Summary) file generation should work. # RSS is a standard pioneered by Netscape, which allows you to join your # Wiki with a huge number of different news services around the world. # Try a Google search on RSS and see what you can do with it. # # All of these settings were added in JSPWiki 1.7.6. # # Note that jspwiki.baseURL MUST BE DEFINED if you want to enable RSS! # # Determine if the RSS file should be generated at all. Allowed values # are "true" and "false". Default is "false". # jspwiki.rss.generate = false # # Determine the name of the RSS file. This path is relative to your # Wiki root. Default is "rss.rdf" # jspwiki.rss.fileName = rss.rdf # # Determine the refresh interval (ie. how often the RSS file is regenerated. # It is not recommended to make this too often, or you'll choke your server. # Anything above five minutes is probably okay. The default value is one hour. # The value should be in seconds. # jspwiki.rss.interval = 3600 # # The text you want to be shown as your "channel description" when someone # subscribes to it. You can be quite verbose here, up to 500 characters or # so. You can continue to a new line by adding a backslash to the end of the # line. Default is to have no description. # jspwiki.rss.channelDescription = nexb. Open by Design. Open Business Solutions. # # The language of your Wiki. This is a standard, two-letter language # code, or in case of some languages, two letters for the country, # a dash, and two letters for the dialect. # jspwiki.rss.channelLanguage = en-us ########################################################################### # # Determine how certain file commands are run. They have been # commented out, since most likely you want to use the defaults. # Be warned, making mistakes with these may well ruin your entire # Wiki collection! # # The command to run diff: # NOTE! If you do not specify this, an internal "diff" routine is used. # In most cases, you really should not touch this. # #jspwiki.diffCommand = diff -u %s1 %s2 # The command for RCS checkin #jspwiki.rcsFileProvider.checkinCommand = ci -q -mx -l -t-none %s # The command for RCS checkout of the newest version #jspwiki.rcsFileProvider.checkoutCommand = co -l %s # The command for checking out a specific version (%v = version number) #jspwiki.rcsFileProvider.checkoutVersionCommand = co -p -r1.%v %s # The command for RCS log headers # If you have a version of RCS that does not support the "-z" flag, then # you can try this one out without it. It should work. #jspwiki.rcsFileProvider.logCommand = rlog -zLT -h %s # The command for getting the entire modification history #jspwiki.rcsFileProvider.fullLogCommand = rlog -zLT %s ########################################################################### # # Configure logs. See log4j documentation for more information # on how you can configure the logs. # # Log4j is available at http://jakarta.apache.org/log4j # # Send mail to root on all problems containing warnings. # #log4j.appender.mail = org.apache.log4j.net.SMTPAppender #log4j.appender.mail.Threshold = WARN #log4j.appender.mail.To = root@localhost #log4j.appender.mail.From = JSPWiki@localhost #log4j.appender.mail.Subject = [nexb]Problem with nexb Public Web site! #log4j.appender.mail.SMTPHost = mail #log4j.appender.mail.layout = org.apache.log4j.PatternLayout #log4j.appender.mail.layout.ConversionPattern =%d [%t] %p %c %x - %m%n # # Log everything into a file, roll it over every 10 MB, keep # only 14 latest ones. # log4j.appender.FileLog = org.apache.log4j.RollingFileAppender log4j.appender.FileLog.MaxFileSize = 10MB log4j.appender.FileLog.MaxBackupIndex = 30 log4j.appender.FileLog.File = C:\\temp\\jspwiki-easystruts-editable.log log4j.appender.FileLog.layout = org.apache.log4j.PatternLayout log4j.appender.FileLog.layout.ConversionPattern=%d [%t] %p %c %x - %m%n # # If you want to use some other logging system (such as JBoss, which uses # log4j already, comment this line out. If you just don't want any logs # at all, you can set it to be empty. However, I suggest that you do # at least to a level of WARN. # log4j.rootCategory=INFO,FileLog # Enable if you're using mailing, above. #log4j.rootCategory=INFO,FileLog,mail ### End of configuration file. --- NEW FILE: build-editable.xml --- <project name="EasyStruts Public Editable Web Site" default="dist" basedir="."> <property file="build.properties"/> <property file="${user.home}/easystruts/build.properties"/> <!--PROPERTIES--> <property name="app.name" value="easystruts-edit"/> <property name="app.version" value="test"/> <property name="app.path" value="/${app.name}"/> <property name="build.home" value="${basedir}/.build-edit"/> <property name="build.war.home" value="${build.home}/war"/> <property name="build.war.webinf" value="${build.war.home}/WEB-INF"/> <property name="build.war.lib" value="${build.war.webinf}/lib"/> <property name="build.jsp.home" value="${build.home}/jsp"/> <property name="dist.home" value="${basedir}/.dist"/> <property name="web.home" value="${basedir}/web-edit"/> <property name="webinf.home" value="${basedir}/web-edit/WEB-INF"/> <property name="lib.home" value="${basedir}/../lib"/> <property name="dist.path" value="${dist.home}/${app.name}.war"/> <property name="releases.home" value="${basedir}/releases" /> <!--override those value with your personal build.properties. --> <property name="host.url.local" value="http://localhost:8080"/> <property name="manager.url.local" value="${host.url.local}/manager"/> <property name="manager.username.local" value="admin"/> <property name="manager.password.local" value="admin"/> <property name="jspwiki.properties.local" value="${basedir}/jspwiki.properties.edit.local" /> <!-- override those value with your personal build.properties. --> <property name="host.url.remote" value=""/> <property name="manager.url.remote" value="${host.url.remote}/manager"/> <property name="manager.username.remote" value=""/> <property name="manager.password.remote" value=""/> <property name="jspwiki.properties.remote" value="${basedir}/jspwiki.properties.edit.remote" /> <property name="compile.debug" value="true"/> <property name="compile.deprecation" value="true"/> <property name="compile.optimize" value="true"/> <property environment="env"/> <!--override those value with your personal build.properties. --> <property name="java.home" value="${env.JAVA_HOME}"/> <property name="catalina.home" value="${env.CATALINA_HOME}"/> <property name="target.system" value="local" /> <target name="setup-target-system" depends="test-target-system, setup-target-system-local, setup-target-system-remote"> <echo>Target system: ${target.system} (host url: ${host.url})</echo> </target> <target name="test-target-system"> <condition property="target.system.is.local"> <equals arg1="${target.system}" arg2="local" casesensitive="false"/> </condition> </target> <target name="setup-target-system-local" if="target.system.is.local"> <property name="host.url" value="${host.url.local}" /> <property name="manager.url" value="${manager.url.local}" /> <property name="manager.username" value="${manager.username.local}" /> <property name="manager.password" value="${manager.password.local}" /> <property name="jspwiki.properties" value="${jspwiki.properties.local}" /> </target> <target name="setup-target-system-remote" unless="target.system.is.local"> <property name="host.url" value="${host.url.remote}" /> <property name="manager.url" value="${manager.url.remote}" /> <property name="manager.username" value="${manager.username.remote}" /> <property name="manager.password" value="${manager.password.remote}" /> <property name="jspwiki.properties" value="${jspwiki.properties.remote}" /> </target> <!--PATH--> <path id="ant.jarpath"> <pathelement location="${lib.home}/nexb-ant/nexb-tasks-0.1.jar"/> <pathelement location="${lib.home}/catalina-ant/catalina-ant-tomcat-4.x.jar"/> </path> <path id="compile.jsp.classpath"> <pathelement location="${lib.home}/java/java-tools-j2sdk1.4.2_03.jar"/> <fileset dir="${catalina.home}/bin"> <include name="*.jar"/> </fileset> <fileset dir="${catalina.home}/common/lib"> <include name="*.jar"/> <exclude name="ant.jar"/> <exclude name="tools.jar"/> </fileset> </path> <!--TASKDEF--> <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="ant.jarpath"/> <taskdef name="list" classname="org.apache.catalina.ant.ListTask" classpathref="ant.jarpath"/> <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask" classpathref="ant.jarpath"/> <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="ant.jarpath"/> <taskdef name="start" classname="org.apache.catalina.ant.StartTask" classpathref="ant.jarpath"/> <taskdef name="stop" classname="org.apache.catalina.ant.StopTask" classpathref="ant.jarpath"/> <taskdef name="starttomcat" classname="com.oreilly.javaxp.tomcat.tasks.StartTomcatTask" classpathref="ant.jarpath"/> <taskdef name="stoptomcat" classname="com.oreilly.javaxp.tomcat.tasks.StopTomcatTask" classpathref="ant.jarpath"/> <taskdef classname="org.apache.jasper.JspC" name="jspc20" classpathref="compile.jsp.classpath"/> <!--EXTERNAL TARGETS--> <target name="all" depends="dist, deploy" description="Assemble war and deploy"/> <target name="clean" description="Delete old build directories"> <delete dir="${build.home}"/> <delete dir="${dist.home}"/> </target> <target name="prepare"> <mkdir dir="${build.home}"/> <mkdir dir="${build.war.home}"/> <mkdir dir="${build.jsp.home}"/> <mkdir dir="${build.jsp.home}/src"/> <mkdir dir="${build.jsp.home}/obj"/> <mkdir dir="${build.war.webinf}"/> <mkdir dir="${build.war.lib}"/> <mkdir dir="${dist.home}"/> </target> <target name="build" depends="prepare, setup-target-system" description="Copies web files and set-up properties"> <copy todir="${build.war.home}"> <fileset dir="${web.home}"/> </copy> <!-- <copy todir="${build.war.lib}" flatten="true"> <fileset dir="${lib.home}"> <include name="jstl/jstl-1.0.5.jar"/> <include name="jstl/standard-1.0.5.jar"/> </fileset> </copy> --> <copy file="${jspwiki.properties}" tofile="${build.war.webinf}/jspwiki.properties" overwrite="true"/> </target> <target name="dist" depends="build" description="Creates a distributable web application archive."> <jar jarfile="${dist.path}" basedir="${build.war.home}"/> </target> <target name="compile-jsp" depends="prepare, build"> <jspc20 validateXml="false" uriroot="${build.war.home}" webXmlFragment="${build.jsp.home}" outputDir="${build.jsp.home}/src"/> <javac srcdir="${build.jsp.home}/src" destdir="${build.jsp.home}/obj" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}"> <classpath refid="compile.classpath"/> <classpath refid="compile.jsp.classpath"/> <classpath> <pathelement location="${build.war.home}/WEB-INF/classes"/> </classpath> </javac> </target> <!-- Tomcat start/stop targets (work only locally) --> <target name="restart-tomcat" depends="stop-tomcat, start-tomcat" description="Restarts the local Tomcat server."/> <target name="start-tomcat" depends="setup-target-system" description="Starts the local Tomcat server." if="target.system.is.local"> <starttomcat testURL="${host.url.local}" catalinaHome="${catalina.home}" timeout="20000"/> </target> <target name="stop-tomcat" depends="setup-target-system" description="Stops the local Tomcat server." if="target.system.is.local"> <stoptomcat testURL="${host.url.local}" catalinaHome="${catalina.home}"/> </target> <!-- Tomcat management targets (work locally and remotely) --> <target name="list" depends="start-tomcat, setup-target-system" description="Lists the deployed applications on the Tomcat server."> <list url="${manager.url}" username="${manager.username}" password="${manager.password}"/> </target> <target name="deploy" depends="undeploy, deploy-application" description="Deploys the application to the Tomcat server, removing it first if already deployed."/> <target name="deploy-application" depends="dist, start-tomcat, setup-target-system"> <deploy url="${manager.url}" username="${manager.username}" password="${manager.password}" path="${app.path}" war="file:${dist.path}"/> </target> <target name="undeploy" depends="start-tomcat, check-deployment, setup-target-system" if="is.webapp.deployed" description="Undeploys the application from the Tomcat server."> <undeploy url="${manager.url}" username="${manager.username}" password="${manager.password}" path="${app.path}"/> </target> <target name="reload" depends="start-tomcat, setup-target-system" description="Reloads the application on the Tomcat server."> <reload url="${manager.url}" username="${manager.username}" password="${manager.password}" path="${app.path}"/> </target> <target name="check-deployment" depends="setup-target-system"> <condition property="is.webapp.deployed"> <http url="${host.url}${app.path}/Wiki.jsp"/> </condition> </target> </project> --- NEW FILE: colors.txt --- dark gray for borders = #515D65 -81-93-101 dark orange for xman head = #FF8800 -255-136-00 light orange for selected menu items = #FFC039 - 255-192-57 blue for nexb logo = #4B70AA -75-112-170 --- NEW FILE: Color palette.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: .project --- <?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>easystruts-website</name> <comment></comment> <projects> </projects> <buildSpec> </buildSpec> <natures> </natures> </projectDescription> --- NEW FILE: jspwiki.properties.edit.remote --- ########################################################################### # # This is the JSPWiki configuration file. You'll need to edit this # a bit. The first few lines are the most important ones. # # Wherever it is said that an option can be "true" or "false", you can # also use "yes"/"no", or "on/off". Just for some convenience. # # # You can use this to override the default application name. It affects # the HTML titles and logging, for example. It can be different from # the actual web name (http://my.com/mywiki) of the application, but usually # it is the same. # jspwiki.applicationName = EasyStruts # # Which page provider class to use. Possibilities are: # # RCSFileProvider - for simple RCS-based file storage # FileSystemProvider - for simple pure file storage with no version information # VersioningFileProvider - for simple, non-RCS based versioning storage. # # Note that if you're upgrading from JSPWiki 1.x, then you need to remove the # "com.ecyrd.jspwiki." part from the beginning of the path. # jspwiki.pageProvider = VersioningFileProvider # # Set to true, if you want to cache page data into memory. This is # in general a good idea. # # Default is false (no cache). # # NB: This replaces the JSPWiki 1.x "CachingProvider" setting, since it # probably was too confusing. # jspwiki.usePageCache = true # # Determines where wiki files are kept for FileSystemProvider # and RCSFileProvider # # If you're using Windows, then you must duplicate the backslashes. # For example, use: # # jspwiki.fileSystemProvider.pageDir = C:\\Data\\jspwiki # jspwiki.fileSystemProvider.pageDir = /home/nexborg/data-easystruts # # ATTACHMENTS: # # Use the following property to define which attachment provider # you want to use. You have basically two choices: # * Set the value to BasicAttachmentProvider # a simple, flat file versioning provider # * Leave the value empty (or just comment the line out) # the attachment functionality is disabled # jspwiki.attachmentProvider = BasicAttachmentProvider # # The BasicAttachmentProvider needs to know where to store the files # the user has uploaded. It's okay to put these in the same directory # as you put your text files (i.e. the pageDir setting above). # # If you're using Windows, then you must duplicate the backslashes. # For example, use: # # jspwiki.basicAttachmentProvider.storageDir = C:\\Data\\jspwiki # jspwiki.basicAttachmentProvider.storageDir = /home/nexborg/data-easystruts # # BaseURL can be used to rewrite all of JSPWiki's internal references. # Sometimes, especially if you're behind a address-rewriting firewall, # relative URLs don't work since the servlet container has no idea # where it's actually located. # # Leave undefined if you want to rely on what your servlet container # thinks of where your application lives. # # You MUST, however, define this one if you want to enable RSS (see below). In # general, this is a good idea to define it anyway. Do not forget the # trailing slash. # # Example: # jspwiki.baseURL = http://www.jspwiki.org/ # #jspwiki.baseURL=http://www.nexb.org/ # # Determines which character encoding JSPWiki should use. If you want # to support all languages in your Wiki, you probably want to enable # this. If you're upgrading, or are planning just to use the ISO-Latin1 # character set (like most western people would), you can just leave # it at the default. If you enable it, remember that most people won't # be able to type in special characters anyway. # # Note that you can't switch these in the mean time, since the way the # files are encoded on disk is incompatible between ISO-Latin1 and UTF-8. # Don't try. You'll get all sorts of interesting problems, if you do. # # Possible values are 'ISO-8859-1' (default) and 'UTF-8'. jspwiki.encoding = UTF-8 # # Determines whether raw HTML is allowed as Wiki input. # # THIS IS A DANGEROUS OPTION! # # If you decide to allow raw HTML, understand that ANY person who has # access to your Wiki site can embed ANY sort of malicious JavaScript, # or plugin, or ActiveX, or whatever on your site. They can even mess it # up so royally it is impossible for you to replace the situation without # the need of direct access to the repository. So think twice before # allowing raw HTML on your own site. # # Most probably you want to use this on Intranets, or personal servers, # where only a handful of people can access the wiki. # # Text between {{{ and }}} -options is not affected by this setting, so # it's always safe to quote HTML code with those. # # The default for this option is "false". # jspwiki.translatorReader.allowHTML = false ############################################################################ # # Usability niceties. # # # If this property is set to "true", then page titles are rendered # using an extra space between every capital letter. It may make # page titles readable on some occasions, but it does have the # drawback of making the titles look a bit funny at times. # jspwiki.breakTitleWithSpaces = true # # If set to true, this property means that "WikiName" and "WikiNames" # are considered equal when linking between them. Setting this to # true does not prevent you from having both kinds of pages - we just # fall back to the other one if the primary name does not exist. # # For any other language, you'll probably want to turn this off. # jspwiki.translatorReader.matchEnglishPlurals = false # # If you set this to true, the Wiki translator will then also consider # "traditional" WikiNames (that is, names of pages JustSmashedTogether # without square brackets) as hyperlinks. This technique is also # known as "CamelCase", or "BumpyCase", or "InterCapping". I personally # like CamelCase as a word, which is why this property is named as it is :-). # # By default this is false, since traditional WikiLinks may confuse newbies. # # This option can be overridden on a per-page basis using the SET directive. # jspwiki.translatorReader.camelCaseLinks = false # # This sets the default template used by the Wiki engine. The templates # live in templates/<template name>. JSPWiki will attempt to find two # basic templates from that directory: "ViewTemplate" and "EditTemplate". # # By default this is called "default". # # This option can be overridden on a per-page basis using the SET directive. # jspwiki.templateDir = easystruts-edit # # The name of the front page. This is the page that gets loaded if no # other page is loaded. Up until JSPWiki 1.9.28, it was always called # "Main", but now you can easily change the default front page here. If not # defined, uses "Main". # jspwiki.frontPage = Home # # If set to true, all outward links have a small icon attached. The icon # can be found from images/out.png. Default is true. # jspwiki.translatorReader.useOutlinkImage = false # # Set this to the number of minutes a person can "lock" a page # for while he is editing it. # jspwiki.lockExpiryTime = 60 ############################################################################ # # Special page references. # # The URL is relative to Wiki.jsp. However, if you use # a full, absolute URL, you can also do that. # # Example to redirect all requests to a page called 'OriginalWiki' # to the original wikiwiki at http://c2.com/cgi/wiki # # jspwiki.specialPage.OriginalWiki = http://c2.com/cgi/wiki # # Note that it is entirely possible to override any Wiki page, even # an existing one by redefining it here. # jspwiki.specialPage.Search = Search.jsp jspwiki.specialPage.UserPreferences = UserPreferences.jsp ############################################################################# # # Plugin search paths. # # Define here the packages you want to use for searching plugins, # separated with commas. # For example, use the following command to add "org.myorganisation.jspwiki.myplugins" # and "com.foobar.myplugins" to the search path. # # The default path is "com.ecyrd.jspwiki.plugins", and it will be always # the last item on the path. This allows you to override JSPWiki default # plugins. Note that you are only adding to the path, not replacing it (ie. # the default path is never removed.) # # jspwiki.plugin.searchPath = org.myorganisation.jspwiki.myplugins,com.foobar.myplugins # jspwiki.plugin.searchPath = ############################################################################# # # Page filters # # The format is "jspwiki.pageFilter.XXX = classname", where XXX is a priority. # Those filters with higher priority will be executed first. # # Example: #jspwiki.pageFilter.100 = ProfanityFilter ############################################################################# # # Authentication and authorization # # JSPWiki supports a plugin-based interface for talking to different # kinds of authentication systems. In JSPWiki talk, the term # "Authenticator" means a module that basically checks if the # username and password match. An "Authorizer" is a module that # is able to provide the user's permissions in the wiki. # # Define here the WikiAuthorizer and WikiAuthenticator implementations # you want to use. Specify the full classname, or the short names of # implementations provided in the JSPWiki codebase # (com.ecyrd.jspwiki.auth.modules). # # PageAuthorizer is a simple default implementation that reads defaults # from a WikiPage called 'DefaultPermissions'. # PageAuthorizer is used by default. # # jspwiki.authorizer = PageAuthorizer # # FileAuthenticator is a simple authorizer that basically reads the # passwords from a file. # # jspwiki.authenticator = FileAuthenticator # # FileAuthenticator supports the following options: # # Define where the password file lives. The password file is simply in # a format "username = password", one entry per line. This is a required # attribute. # # jspwiki.fileAuthenticator.fileName = /tmp/mypasswordfile.txt # # Users are mapped to groups by a UserDatabase. The default UDB is # the WikiDatabase, which looks for group members in page meta-data: # the page name determines the group name, and a [{SET members=...}] # adds members to that group. # WikiDatabase is used by default. # # Override with your own UserDatabase implementation with this property: # # jspwiki.userdatabase = WikiDatabase # # By default, at least the LoginError page is readable by anyone, and # a failed login displays the usual JSPWiki view of that page. If you # want to have a completely closed site, with Login.jsp as a kind of # cover page, specify strict logins. # #jspwiki.policy.strictLogins = true ############################################################################# # # InterWiki links # # The %s is replaced with the page reference (specify # multiple times to get multiple references). Page references should # appear in format : [wiki:wikipage]. # # This is the JSPWiki home. In future, JSPWiki will probably rely on this # for error messages, so I don't recommend that you change it. jspwiki.interWikiRef.JSPWiki = http://www.jspwiki.org/Wiki.jsp?page=%s # Here's how you can have directly links to the JSPWiki editor. # Now you can put a hyperlink for editing "MainPage" by making # a link [Edit:MainPage]. jspwiki.interWikiRef.Edit = Edit.jsp?page=%s # This is the original WikiWikiWeb jspwiki.interWikiRef.WikiWikiWeb = http://c2.com/cgi/wiki?%s # TWiki, a very nice WikiClone. jspwiki.interWikiRef.TWiki = http://twiki.org/cgi-bin/view/TWiki/%s # MeatballWiki, which seems to be quite popular. jspwiki.interWikiRef.MeatballWiki = http://usemod.com/cgi-bin/mb.pl?%s # Wikipedia, a Wiki encyclopedia! jspwiki.interWikiRef.Wikipedia = http://www.wikipedia.com/wiki/%s # Google, the ubiquitous search engine. jspwiki.interWikiRef.Google = http://www.google.com/search?q=%s ############################################################################ # # Define which image types are inlined. # These are your standard glob expressions (just like in your # Windows or UNIX shells). Default pattern is to include all PNG # images. If you specify something here, you will override the default. # # Don't forget to increase the number after the dot - duplicate entries # cause problems! # # For example: # Inline all JPG files, PNG files and all files from images.com: # jspwiki.translatorReader.inlinePattern.1 = *.jpg jspwiki.translatorReader.inlinePattern.2 = *.png jspwiki.translatorReader.inlinePattern.3 = *.gif # jspwiki.translatorReader.inlinePattern.3 = http://images.com/* ########################################################################### # # Determine how the RSS (Rich Site Summary) file generation should work. # RSS is a standard pioneered by Netscape, which allows you to join your # Wiki with a huge number of different news services around the world. # Try a Google search on RSS and see what you can do with it. # # All of these settings were added in JSPWiki 1.7.6. # # Note that jspwiki.baseURL MUST BE DEFINED if you want to enable RSS! # # Determine if the RSS file should be generated at all. Allowed values # are "true" and "false". Default is "false". # jspwiki.rss.generate = false # # Determine the name of the RSS file. This path is relative to your # Wiki root. Default is "rss.rdf" # jspwiki.rss.fileName = rss.rdf # # Determine the refresh interval (ie. how often the RSS file is regenerated. # It is not recommended to make this too often, or you'll choke your server. # Anything above five minutes is probably okay. The default value is one hour. # The value should be in seconds. # jspwiki.rss.interval = 3600 # # The text you want to be shown as your "channel description" when someone # subscribes to it. You can be quite verbose here, up to 500 characters or # so. You can continue to a new line by adding a backslash to the end of the # line. Default is to have no description. # jspwiki.rss.channelDescription = nexb. Open by Design. Open Business Solutions. # # The language of your Wiki. This is a standard, two-letter language # code, or in case of some languages, two letters for the country, # a dash, and two letters for the dialect. # jspwiki.rss.channelLanguage = en-us ########################################################################### # # Determine how certain file commands are run. They have been # commented out, since most likely you want to use the defaults. # Be warned, making mistakes with these may well ruin your entire # Wiki collection! # # The command to run diff: # NOTE! If you do not specify this, an internal "diff" routine is used. # In most cases, you really should not touch this. # #jspwiki.diffCommand = diff -u %s1 %s2 # The command for RCS checkin #jspwiki.rcsFileProvider.checkinCommand = ci -q -mx -l -t-none %s # The command for RCS checkout of the newest version #jspwiki.rcsFileProvider.checkoutCommand = co -l %s # The command for checking out a specific version (%v = version number) #jspwiki.rcsFileProvider.checkoutVersionCommand = co -p -r1.%v %s # The command for RCS log headers # If you have a version of RCS that does not support the "-z" flag, then # you can try this one out without it. It should work. #jspwiki.rcsFileProvider.logCommand = rlog -zLT -h %s # The command for getting the entire modification history #jspwiki.rcsFileProvider.fullLogCommand = rlog -zLT %s ########################################################################### # # Configure logs. See log4j documentation for more information # on how you can configure the logs. # # Log4j is available at http://jakarta.apache.org/log4j # # Send mail to root on all problems containing warnings. # #log4j.appender.mail = org.apache.log4j.net.SMTPAppender #log4j.appender.mail.Threshold = WARN #log4j.appender.mail.To = root@localhost #log4j.appender.mail.From = JSPWiki@localhost #log4j.appender.mail.Subject = [nexb]Problem with nexb Public Web site! #log4j.appender.mail.SMTPHost = mail #log4j.appender.mail.layout = org.apache.log4j.PatternLayout #log4j.appender.mail.layout.ConversionPattern =%d [%t] %p %c %x - %m%n # # Log everything into a file, roll it over every 10 MB, keep # only 14 latest ones. # log4j.appender.FileLog = org.apache.log4j.RollingFileAppender log4j.appender.FileLog.MaxFileSize = 10MB log4j.appender.FileLog.MaxBackupIndex = 30 log4j.appender.FileLog.File = /home/nexborg/tmp/jspwiki-easystruts-editable.log log4j.appender.FileLog.layout = org.apache.log4j.PatternLayout log4j.appender.FileLog.layout.ConversionPattern=%d [%t] %p %c %x - %m%n # # If you want to use some other logging system (such as JBoss, which uses # log4j already, comment this line out. If you just don't want any logs # at all, you can set it to be empty. However, I suggest that you do # at least to a level of WARN. # log4j.rootCategory=INFO,FileLog # Enable if you're using mailing, above. #log4j.rootCategory=INFO,FileLog,mail ### End of configuration file. --- NEW FILE: build.xml --- <project name="EasyStruts Public Web Site" default="dist" basedir="."> <property file="build.properties"/> <property file="${user.home}/easystruts/build.properties"/> <!--PROPERTIES--> <property name="app.name" value="easystruts"/> <property name="app.version" value=""/> <property name="app.path" value="/${app.name}"/> <property name="build.home" value="${basedir}/.build"/> <property name="build.war.home" value="${build.home}/war"/> <property name="build.war.webinf" value="${build.war.home}/WEB-INF"/> <property name="build.war.lib" value="${build.war.webinf}/lib"/> <property name="build.jsp.home" value="${build.home}/jsp"/> <property name="dist.home" value="${basedir}/.dist"/> <property name="web.home" value="${basedir}/web"/> <property name="webinf.home" value="${basedir}/web/WEB-INF"/> <property name="lib.home" value="${basedir}/lib"/> <property name="dist.path" value="${dist.home}/${app.name}.war"/> <property name="releases.home" value="${basedir}/releases" /> <!--override those value with your personal build.properties. --> <property name="host.url.local" value="http://localhost:8080"/> <property name="manager.url.local" value="${host.url.local}/manager"/> <property name="manager.username.local" value="admin"/> <property name="manager.password.local" value="admin"/> <property name="jspwiki.properties.local" value="${basedir}/jspwiki.properties.local" /> <!-- override those value with your personal build.properties. --> <property name="host.url.remote" value=""/> <property name="manager.url.remote" value="${host.url.remote}/manager"/> <property name="manager.username.remote" value=""/> <property name="manager.password.remote" value=""/> <property name="jspwiki.properties.remote" value="${basedir}/jspwiki.properties.remote" /> <property name="compile.debug" value="true"/> <property name="compile.deprecation" value="true"/> <property name="compile.optimize" value="true"/> <property environment="env"/> <!--override those value with your personal build.properties. --> <property name="java.home" value="${env.JAVA_HOME}"/> <property name="catalina.home" value="${env.CATALINA_HOME}"/> <property name="target.system" value="local" /> <target name="setup-target-system" depends="test-target-system, setup-target-system-local, setup-target-system-remote"> <echo>Target system: ${target.system} (host url: ${host.url})</echo> </target> <target name="test-target-system"> <condition property="target.system.is.local"> <equals arg1="${target.system}" arg2="local" casesensitive="false"/> </condition> </target> <target name="setup-target-system-local" if="target.system.is.local"> <property name="host.url" value="${host.url.local}" /> <property name="manager.url" value="${manager.url.local}" /> <property name="manager.username" value="${manager.username.local}" /> <property name="manager.password" value="${manager.password.local}" /> <property name="jspwiki.properties" value="${jspwiki.properties.local}" /> </target> <target name="setup-target-system-remote" unless="target.system.is.local"> <property name="host.url" value="${host.url.remote}" /> <property name="manager.url" value="${manager.url.remote}" /> <property name="manager.username" value="${manager.username.remote}" /> <property name="manager.password" value="${manager.password.remote}" /> <property name="jspwiki.properties" value="${jspwiki.properties.remote}" /> </target> <!--PATH--> <path id="ant.jarpath"> <pathelement location="${lib.home}/nexb-ant/nexb-tasks-0.1.jar"/> <pathelement location="${lib.home}/catalina-ant/catalina-ant-tomcat-4.x.jar"/> </path> <path id="compile.jsp.classpath"> <pathelement location="${lib.home}/java/java-tools-j2sdk1.4.2_03.jar"/> <fileset dir="${catalina.home}/bin"> <include name="*.jar"/> </fileset> <fileset dir="${catalina.home}/common/lib"> <include name="*.jar"/> <exclude name="ant.jar"/> <exclude name="tools.jar"/> </fileset> </path> <!--TASKDEF--> <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="ant.jarpath"/> <taskdef name="list" classname="org.apache.catalina.ant.ListTask" classpathref="ant.jarpath"/> <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask" classpathref="ant.jarpath"/> <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="ant.jarpath"/> <taskdef name="start" classname="org.apache.catalina.ant.StartTask" classpathref="ant.jarpath"/> <taskdef name="stop" classname="org.apache.catalina.ant.StopTask" classpathref="ant.jarpath"/> <taskdef name="starttomcat" classname="com.oreilly.javaxp.tomcat.tasks.StartTomcatTask" classpathref="ant.jarpath"/> <taskdef name="stoptomcat" classname="com.oreilly.javaxp.tomcat.tasks.StopTomcatTask" classpathref="ant.jarpath"/> <taskdef classname="org.apache.jasper.JspC" name="jspc20" classpathref="compile.jsp.classpath"/> <!--EXTERNAL TARGETS--> <target name="all" depends="dist, deploy" description="Assemble war and deploy"/> <target name="clean" description="Delete old build directories"> <delete dir="${build.home}"/> <delete dir="${dist.home}"/> </target> <target name="prepare"> <mkdir dir="${build.home}"/> <mkdir dir="${build.war.home}"/> <mkdir dir="${build.jsp.home}"/> <mkdir dir="${build.jsp.home}/src"/> <mkdir dir="${build.jsp.home}/obj"/> <mkdir dir="${build.war.webinf}"/> <mkdir dir="${build.war.lib}"/> <mkdir dir="${dist.home}"/> </target> <target name="build" depends="prepare, setup-target-system" description="Copies web files and set-up properties"> <copy todir="${build.war.home}"> <fileset dir="${web.home}"/> </copy> <!-- <copy todir="${build.war.lib}" flatten="true"> <fileset dir="${lib.home}"> <include name="jstl/jstl-1.0.5.jar"/> <include name="jstl/standard-1.0.5.jar"/> </fileset> </copy> --> <copy file="${jspwiki.properties}" tofile="${build.war.webinf}/jspwiki.properties" overwrite="true"/> </target> <target name="dist" depends="build" description="Creates a distributable web application archive."> <jar jarfile="${dist.path}" basedir="${build.war.home}"/> </target> <target name="compile-jsp" depends="prepare, build"> <jspc20 validateXml="false" uriroot="${build.war.home}" webXmlFragment="${build.jsp.home}" outputDir="${build.jsp.home}/src"/> <javac srcdir="${build.jsp.home}/src" destdir="${build.jsp.home}/obj" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}"> <classpath refid="compile.classpath"/> <classpath refid="compile.jsp.classpath"/> <classpath> <pathelement location="${build.war.home}/WEB-INF/classes"/> </classpath> </javac> </target> <!-- Tomcat start/stop targets (work only locally) --> <target name="restart-tomcat" depends="stop-tomcat, start-tomcat" description="Restarts the local Tomcat server."/> <target name="start-tomcat" depends="setup-target-system" description="Starts the local Tomcat server." if="target.system.is.local"> <starttomcat testURL="${host.url.local}" catalinaHome="${catalina.home}" timeout="20000"/> </target> <target name="stop-tomcat" depends="setup-target-system" description="Stops the local Tomcat server." if="target.system.is.local"> <stoptomcat testURL="${host.url.local}" catalinaHome="${catalina.home}"/> </target> <!-- Tomcat management targets (work locally and remotely) --> <target name="list" depends="start-tomcat, setup-target-system" description="Lists the deployed applications on the Tomcat server."> <list url="${manager.url}" username="${manager.username}" password="${manager.password}"/> </target> <target name="deploy" depends="undeploy, deploy-application" description="Deploys the application to the Tomcat server, removing it first if already deployed."/> <target name="deploy-application" depends="dist, start-tomcat, setup-target-system"> <deploy url="${manager.url}" username="${manager.username}" password="${manager.password}" path="${app.path}" war="file:${dist.path}"/> </target> <target name="undeploy" depends="start-tomcat, check-deployment, setup-target-system" if="is.webapp.deployed" description="Undeploys the application from the Tomcat server."> <undeploy url="${manager.url}" username="${manager.username}" password="${manager.password}" path="${app.path}"/> </target> <target name="reload" depends="start-tomcat, setup-target-system" description="Reloads the application on the Tomcat server."> <reload url="${manager.url}" username="${manager.username}" password="${manager.password}" path="${app.path}"/> </target> <target name="check-deployment" depends="setup-target-system"> <condition property="is.webapp.deployed"> <http url="${host.url}${app.path}/Wiki.jsp"/> </condition> </target> </project> --- NEW FILE: jspwiki.properties.remote --- ########################################################################### # # This is the JSPWiki configuration file. You'll need to edit this # a bit. The first few lines are the most important ones. # # Wherever it is said that an option can be "true" or "false", you can # also use "yes"/"no", or "on/off". Just for some convenience. # # # You can use this to override the default application name. It affects # the HTML titles and logging, for example. It can be different from # the actual web name (http://my.com/mywiki) of the application, but usually # it is the same. # jspwiki.applicationName = EasyStruts # # Which page provider class to use. Possibilities are: # # RCSFileProvider - for simple RCS-based file storage # FileSystemProvider - for simple pure file storage with no version information # VersioningFileProvider - for simple, non-RCS based versioning storage. # # Note that if you're upgrading from JSPWiki 1.x, then you need to remove the # "com.ecyrd.jspwiki." part from the beginning of the path. # jspwiki.pageProvider = VersioningFileProvider # # Set to true, if you want to cache page data into memory. This is # in general a good idea. # # Default is false (no cache). # # NB: This replaces the JSPWiki 1.x "CachingProvider" setting, since it # probably was too confusing. # jspwiki.usePageCache = true # # Determines where wiki files are kept for FileSystemProvider # and RCSFileProvider # # If you're using Windows, then you must duplicate the backslashes. # For example, use: # # jspwiki.fileSystemProvider.pageDir = C:\\Data\\jspwiki # jspwiki.fileSystemProvider.pageDir = /home/nexborg/data-easystruts # # ATTACHMENTS: # # Use the following property to define which attachment provider # you want to use. You have basically two choices: # * Set the value to BasicAttachmentProvider # a simple, flat file versioning provider # * Leave the value empty (or just comment the line out) # the attachment functionality is disabled # jspwiki.attachmentProvider = BasicAttachmentProvider # # The BasicAttachmentProvider needs to know where to store the files # the user has uploaded. It's okay to put these in the same directory # as you put your text files (i.e. the pageDir setting above). # # If you're using Windows, then you must duplicate the backslashes. # For example, use: # # jspwiki.basicAttachmentProvider.storageDir = C:\\Data\\jspwiki # jspwiki.basicAttachmentProvider.storageDir = /home/nexborg/data-easystruts # # BaseURL can be used to rewrite all of JSPWiki's internal references. # Sometimes, especially if you're behind a address-rewriting firewall, # relative URLs don't work since the servlet container has no idea # where it's actually located. # # Leave undefined if you want to rely on what your servlet container # thinks of where your application lives. # # You MUST, however, define this one if you want to enable RSS (see below). In # general, this is a good idea to define it anyway. Do not forget the # trailing slash. # # Example: # jspwiki.baseURL = http://www.jspwiki.org/ # #jspwiki.baseURL=http://www.nexb.org/ # # Determines which character encoding JSPWiki should use. If you want # to support all languages in your Wiki, you probably want to enable # this. If you're upgrading, or are planning just to use the ISO-Latin1 # character set (like most western people would), you can just leave # it at the default. If you enable it, remember that most people won't # be able to type in special characters anyway. # # Note that you can't switch these in the mean time, since the way the # files are encoded on disk is incompatible between ISO-Latin1 and UTF-8. # Don't try. You'll get all sorts of interesting problems, if you do. # # Possible values are 'ISO-8859-1' (default) and 'UTF-8'. jspwiki.encoding = UTF-8 # # Determines whether raw HTML is allowed as Wiki input. # # THIS IS A DANGEROUS OPTION! # # If you decide to allow raw HTML, understand that ANY person who has # access to your Wiki site can embed ANY sort of malicious JavaScript, # or plugin, or ActiveX, or whatever on your site. They can even mess it # up so royally it is impossible for you to replace the situation without # the need of direct access to the repository. So think twice before # allowing raw HTML on your own site. # # Most probably you want to use this on Intranets, or personal servers, # where only a handful of people can access the wiki. # # Text between {{{ and }}} -options is not affected by this setting, so # it's always safe to quote HTML code with those. # # The default for this option is "false". # jspwiki.translatorReader.allowHTML = false ############################################################################ # # Usability niceties. # # # If this property is set to "true", then page titles are rendered # using an extra space between every capital letter. It may make # page titles readable on some occasions, but it does have the # drawback of making the titles look a bit funny at times. # jspwiki.breakTitleWithSpaces = true # # If set to true, this property means that "WikiName" and "WikiNames" # are considered equal when linking between them. Setting this to # true does not prevent you from having both kinds of pages - we just # fall back to the other one if the primary name does not exist. # # For any other language, you'll probably want to turn this off. # jspwiki.translatorReader.matchEnglishPlurals = false # # If you set this to true, the Wiki translator will then also consider # "traditional" WikiNames (that is, names of pages JustSmashedTogether # without square brackets) as hyperlinks. This technique is also # known as "CamelCase", or "BumpyCase", or "InterCapping". I personally # like CamelCase as a word, which is why this property is named as it is :-). # # By default this is false, since traditional WikiLinks may confuse newbies. # # This option can be overridden on a per-page basis using the SET directive. # jspwiki.translatorReader.camelCaseLinks = false # # This sets the default template used by the Wiki engine. The templates # live in templates/<template name>. JSPWiki will attempt to find two ... [truncated message content] |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:16
|
Update of /cvsroot/easystruts/easystruts-website/web/WEB-INF In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web/WEB-INF Added Files: c-rt.tld jspwiki.tld web.xml .htaccess oscache.tld Log Message: Added new web site sources and data --- NEW FILE: c-rt.tld --- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>c_rt</short-name> <uri>http://java.sun.com/jstl/core_rt</uri> <display-name>JSTL core RT</display-name> <description>JSTL 1.0 core library</description> <validator> <validator-class> org.apache.taglibs.standard.tlv.JstlCoreTLV </validator-class> <description> Provides core validation features for JSTL tags. </description> </validator> <tag> <name>catch</name> <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class> <body-content>JSP</body-content> <description> Catches any Throwable that occurs in its body and optionally exposes it. </description> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>choose</name> <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class> <body-content>JSP</body-content> <description> Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <when> and <otherwise> </description> </tag> <tag> <name>if</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class> <body-content>JSP</body-content> <description> Simple conditional tag, which evalutes its body if the supplied condition is true and optionally exposes a Boolean scripting variable representing the evaluation of this condition </description> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>import</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.ImportTag</tag-class> <tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class> <body-content>JSP</body-content> <description> Retrieves an absolute or relative URL and exposes its contents to either the page, a String in 'var', or a Reader in 'varReader'. </description> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>varReader</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>context</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>charEncoding</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>forEach</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class> <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class> <body-content>JSP</body-content> <description> The basic iteration tag, accepting many different collection types and supporting subsetting and other functionality </description> <attribute> <name>items</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.Object</type> </attribute> <attribute> <name>begin</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>end</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>step</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>varStatus</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>forTokens</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.ForTokensTag</tag-class> <body-content>JSP</body-content> <description> Iterates over tokens, separated by the supplied delimeters </description> <attribute> <name>items</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> </attribute> <attribute> <name>delims</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> </attribute> <attribute> <name>begin</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>end</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>step</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>varStatus</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>out</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.OutTag</tag-class> <body-content>JSP</body-content> <description> Like <%= ... >, but for expressions. </description> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>default</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>escapeXml</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>otherwise</name> <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class> <body-content>JSP</body-content> <description> Subtag of <choose> that follows <when> tags and runs only if all of the prior conditions evaluated to 'false' </description> </tag> <tag> <name>param</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.ParamTag</tag-class> <body-content>JSP</body-content> <description> Adds a parameter to a containing 'import' tag's URL. </description> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>redirect</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.RedirectTag</tag-class> <body-content>JSP</body-content> <description> Redirects to a new URL. </description> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>url</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>context</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>remove</name> <tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class> <body-content>empty</body-content> <description> Removes a scoped variable (from a particular scope, if specified). </description> <attribute> <name>var</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>set</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.SetTag</tag-class> <body-content>JSP</body-content> <description> Sets the result of an expression evaluation in a 'scope' </description> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>target</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>property</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>url</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.UrlTag</tag-class> <body-content>JSP</body-content> <description> Creates a URL with optional query parameters. </description> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>context</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>when</name> <tag-class>org.apache.taglibs.standard.tag.rt.core.WhenTag</tag-class> <body-content>JSP</body-content> <description> Subtag of <choose> that includes its body if its condition evalutes to 'true' </description> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> </tag> </taglib> --- NEW FILE: .htaccess --- Options -Indexes --- NEW FILE: jspwiki.tld --- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_1.dtd"> <!-- JSPWiki tag libraries are defined here. Note that we support only the 1.1 spec for now, simply because there is no reason to break compatibility. --> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>jspwiki</shortname> <tag> <name>AttachmentsIterator</name> <tagclass>com.ecyrd.jspwiki.tags.AttachmentsIteratorTag</tagclass> <teiclass>com.ecyrd.jspwiki.tags.AttachmentsIteratorInfo</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>id</name> </attribute> </tag> <tag> <name>Author</name> <tagclass>com.ecyrd.jspwiki.tags.AuthorTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>Breadcrumbs</name> <tagclass>com.ecyrd.jspwiki.tags.BreadcrumbsTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>maxpages</name> <required>false</required><!-- the default value is 10 --> </attribute> <attribute> <name>separator</name> <required>false</required><!-- the default value is " | " --> </attribute> </tag> <tag> <name>Calendar</name> <tagclass>com.ecyrd.jspwiki.tags.CalendarTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>pageformat</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>urlformat</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>monthurlformat</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>CheckLock</name> <tagclass>com.ecyrd.jspwiki.tags.CheckLockTag</tagclass> <teiclass>com.ecyrd.jspwiki.tags.CheckLockInfo</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>mode</name> </attribute> <attribute> <name>id</name> </attribute> </tag> <tag> <name>CheckRequestContext</name> <tagclass>com.ecyrd.jspwiki.tags.CheckRequestContextTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>context</name> </attribute> </tag> <tag> <name>CheckVersion</name> <tagclass>com.ecyrd.jspwiki.tags.CheckVersionTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>mode</name> </attribute> </tag> <tag> <name>CommentLink</name> <tagclass>com.ecyrd.jspwiki.tags.CommentLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> </tag> <tag> <name>ContentEncoding</name> <tagclass>com.ecyrd.jspwiki.tags.ContentEncodingTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>DiffLink</name> <tagclass>com.ecyrd.jspwiki.tags.DiffLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> <attribute> <name>version</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>newVersion</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>EditLink</name> <tagclass>com.ecyrd.jspwiki.tags.EditLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> <attribute> <name>version</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>HasAttachments</name> <tagclass>com.ecyrd.jspwiki.tags.HasAttachmentsTag</tagclass> <bodycontent>JSP</bodycontent> </tag> <tag> <name>HistoryIterator</name> <tagclass>com.ecyrd.jspwiki.tags.HistoryIteratorTag</tagclass> <teiclass>com.ecyrd.jspwiki.tags.HistoryIteratorInfo</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> </attribute> <attribute> <name>id</name> </attribute> </tag> <tag> <name>Include</name> <tagclass>com.ecyrd.jspwiki.tags.IncludeTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>InsertDiff</name> <tagclass>com.ecyrd.jspwiki.tags.InsertDiffTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>InsertPage</name> <tagclass>com.ecyrd.jspwiki.tags.InsertPageTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>mode</name> </attribute> </tag> <tag> <name>LinkTo</name> <tagclass>com.ecyrd.jspwiki.tags.LinkToTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> <attribute> <name>version</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>template</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>LinkToParent</name> <tagclass>com.ecyrd.jspwiki.tags.LinkToParentTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> <attribute> <name>version</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>NoSuchPage</name> <tagclass>com.ecyrd.jspwiki.tags.NoSuchPageTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> </attribute> </tag> <tag> <name>PageExists</name> <tagclass>com.ecyrd.jspwiki.tags.PageExistsTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>PageInfoLink</name> <tagclass>com.ecyrd.jspwiki.tags.PageInfoLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> </tag> <tag> <name>PageDate</name> <tagclass>com.ecyrd.jspwiki.tags.PageDateTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>PageName</name> <tagclass>com.ecyrd.jspwiki.tags.PageNameTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>PageSize</name> <tagclass>com.ecyrd.jspwiki.tags.PageSizeTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>PageType</name> <tagclass>com.ecyrd.jspwiki.tags.PageTypeTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>type</name> </attribute> </tag> <tag> <name>PageVersion</name> <tagclass>com.ecyrd.jspwiki.tags.PageVersionTag</tagclass> <bodycontent>JSP</bodycontent> </tag> <tag> <name>ParentPageName</name> <tagclass>com.ecyrd.jspwiki.tags.ParentPageNameTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>Permission</name> <tagclass>com.ecyrd.jspwiki.tags.PermissionTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>permission</name> </attribute> </tag> <tag> <name>Plugin</name> <tagclass>com.ecyrd.jspwiki.tags.PluginTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>plugin</name> <required>true</required> </attribute> <attribute> <name>args</name> <required>true</required> </attribute> </tag> <tag> <name>RSSLink</name> <tagclass>com.ecyrd.jspwiki.tags.RSSLinkTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>RSSImageLink</name> <tagclass>com.ecyrd.jspwiki.tags.RSSImageLinkTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>title</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>RSSUserlandLink</name> <tagclass>com.ecyrd.jspwiki.tags.RSSCoffeeCupLinkTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>title</name> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>SearchResultIterator</name> <tagclass>com.ecyrd.jspwiki.tags.SearchResultIteratorTag</tagclass> <teiclass>com.ecyrd.jspwiki.tags.SearchResultIteratorInfo</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>id</name> </attribute> <attribute> <name>maxItems</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>list</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>TemplateDir</name> <tagclass>com.ecyrd.jspwiki.tags.TemplateDirTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>Translate</name> <tagclass>com.ecyrd.jspwiki.tags.TranslateTag</tagclass> <bodycontent>JSP</bodycontent> </tag> <tag> <name>UploadLink</name> <tagclass>com.ecyrd.jspwiki.tags.UploadLinkTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>page</name> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>format</name> </attribute> </tag> <tag> <name>UserName</name> <tagclass>com.ecyrd.jspwiki.tags.UserNameTag</tagclass> <bodycontent>empty</bodycontent> </tag> <tag> <name>UserCheck</name> <tagclass>com.ecyrd.jspwiki.tags.UserCheckTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>status</name> </attribute> <attribute> <name>exists</name> </attribute> </tag> <tag> <name>Variable</name> <tagclass>com.ecyrd.jspwiki.tags.VariableTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>var</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>default</name> </attribute> </tag> </taglib> --- NEW FILE: web.xml --- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>nexB</display-name> <description>nexB web site</description> <servlet> <servlet-name>AttachmentServlet</servlet-name> <servlet-class>com.ecyrd.jspwiki.attachment.AttachmentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AttachmentServlet</servlet-name> <url-pattern>/attach</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>Wiki.jsp</welcome-file> </welcome-file-list> </web-app> --- NEW FILE: oscache.tld --- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.5</tlibversion> <jspversion>1.1</jspversion> <shortname>oscache</shortname> <info>OSCache - see http://www.opensymphony.com/oscache</info> <tag> <name>cache</name> <tagclass>com.opensymphony.module.oscache.web.tag.CacheTag</tagclass> <bodycontent>JSP</bodycontent> <info>A tag to cache post-processed JSP contents</info> <attribute> <name>time</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>duration</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>refreshpolicyclass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>refreshpolicyparam</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>refresh</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>key</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>language</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>encoding</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>usecached</name> <tagclass>com.opensymphony.module.oscache.web.tag.UseCachedTag</tagclass> <info>A tag to tell the cache to use the cached version</info> <attribute> <name>use</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>flush</name> <tagclass>com.opensymphony.module.oscache.web.tag.FlushTag</tagclass> <info>A tag to flush the cache</info> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>key</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>language</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>pattern</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:16
|
Update of /cvsroot/easystruts/easystruts-website/web/WEB-INF/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web/WEB-INF/lib Added Files: multipartrequest.jar log4j.jar oro.jar oscache.jar standard-1.0.5.jar .htaccess jstl-1.0.5.jar JSPWiki-2.1.86-alpha.jar xmlrpc.jar Log Message: Added new web site sources and data --- NEW FILE: oro.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: log4j.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: oscache.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: JSPWiki-2.1.86-alpha.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: standard-1.0.5.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: jstl-1.0.5.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: xmlrpc.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: multipartrequest.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: .htaccess --- Options -Indexes |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:16
|
Update of /cvsroot/easystruts/easystruts-website/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/css In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/css Added Files: s2.css s6.css s3.css s1.css s4.css Log Message: Added new web site sources and data --- NEW FILE: s6.css --- /* s6.css cross-browser.com */ body, body div, body p, body th, body td, body li, body dd, body pre { font-size:x-small; /* trick WinIE4/5 */ voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body, html>body div, html>body p, html>body th, html>body td, html>body li, html>body dd, html>body pre { font-size:small; /* be nice to Opera */ } html { color:#000; background:#cc9; margin:0; padding:0; } body { color:#000; background:#cc9; margin:0; padding:0; font-family:verdana,arial,sans-serif; } /* Anchor Elements */ a:link { color:#000; background:transparent; text-decoration:underline; padding:1px; } a:visited { color:#330; background:transparent; text-decoration:underline; padding:1px; } a:active { color:#330; background:transparent; text-decoration:underline; padding:1px; } a:hover { color:#fff; background:#996; text-decoration:none; padding:0; border:1px solid #660; } /* Heading Elements */ h1 { color:#cc9; /* #330; */ background-color:#fff; font-style:normal; margin:0; padding:4px 8px; text-align:right; height:22px; background-image:url(../images/grn_bnr1.jpg); /* */ font-size:medium; voice-family: "\"}\""; voice-family: inherit; font-size:large; } html>body h1 { font-size:large; } h2 { color:#330; background:transparent; font-style:normal; margin:.6em 0 .5em 0; padding:4px 0px; border-bottom:1px dotted #330; /* */ font-size:small; voice-family: "\"}\""; voice-family: inherit; font-size:medium; } html>body h2 { font-size:medium; } h3 { color:#000; margin:1em 0; padding:0 0 0 .8em; font-weight:bold; border-left:2px solid #663; /* */ font-size:x-small; voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body h3 { font-size:small; } h4 { color:#663; /* 996; */ margin:0; padding:0; font-weight:bold; /* */ font-size:x-small; voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body h4 { font-size:small; } h5 { color:#996; background:transparent; margin:0; padding:2px; font-weight:bold; border-bottom:1px dotted #996; /* */ font-size:xx-small; voice-family: "\"}\""; voice-family: inherit; font-size:x-small; } html>body h5 { font-size:x-small; } /* Misc. Elements */ b { font-weight:bold; color:#996; background:transparent; } p { color:#000; background:transparent; margin:.3em 0 .5em 0; padding:0; line-height:1.5em; } li { margin-bottom:.5em; } pre { font-family:'courier new',monospace; color:#330; background:transparent; border:1px dotted #cc9; margin:0; padding:10px; overflow:hidden; } /* Misc. Classes */ .smaller { font-size:smaller; } .textInput { font-family:'courier new',monospace; color:#000; background:#fff; width:140px; } .noDisp { display:none; } .collapsible { margin:0; padding:0; } /* Sidebar Menu */ .mnuContainer { margin:0; padding:0; } .mnuBox { margin:0 0 4px 0; padding:4px 2px 4px 2px; } .mnuBox a:link, .mnuBox a:visited, .mnuBox a:active, .mnuBox a:hover { display:block; text-decoration:none; font-size:smaller; } .mnuBox p { margin:0; padding:0; line-height:1.2em; } /* Layout Rules */ #header { height:50px; background:transparent; /* position:relative; */ overflow:hidden; margin:10px 2% 0 2%; padding:0; } .subtitle { color:#330; background:transparent; padding:2px 0px; margin:0; height:16px; font-weight:bold; /* */ font-size:x-small; voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body.subtitle { font-size:small; } .column { top:70px; position:absolute; overflow:hidden; background:transparent; margin:0; padding:0; } #leftColumn { left:2%; width:70%; } #rightColumn { left:72%; width:27%; } .leftContent { background:#fff; overflow:hidden; margin:0 0 10px 0; padding:10px 20px 20px 20px; } .rightContent { background:transparent; overflow:hidden; margin:0 0 10px 0; padding:10px 20px 20px 20px; } /* min/max buttons (not being used) */ .ColMMBtn { position:absolute; overflow:hidden; width:7px; height:10px; /* border:1px solid #330; */ top:46px; right:20px; margin:0; padding:0; font-size:2px; cursor:pointer; color:#330; background:#996; } --- NEW FILE: s3.css --- /* cross-browser.com/css/s3.css */ body, body div, body p, body th, body td, body li, body dd, body pre { font-size:x-small; /* trick WinIE4/5 */ voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body, html>body div, html>body p, html>body th, html>body td, html>body li, html>body dd, html>body pre { font-size:small; /* be nice to Opera */ } html { margin:0; padding:0; } body { color:#000; background:#ccc; margin:0; padding:10px; font-family:verdana,arial,sans-serif; font-size:small; } a:link { color:#000; background:transparent; text-decoration:underline; } a:visited { color:#333; background:transparent; text-decoration:underline; } a:hover { color:#000; background:#9cc; text-decoration:none; } a:active { color:#000; background:transparent; text-decoration:underline; } h1 { margin:0; padding:2px; color:#333; background:#9cc; font-weight:normal; border-bottom:1px dotted #333; width:400px; height:auto; /* */ font-size:medium; voice-family: "\"}\""; voice-family: inherit; font-size:large; } html>body h1 { font-size:large; } h2 { margin:0; padding:2px; color:#333; background:#9cc; font-weight:normal; text-align:right; border-bottom:1px solid #333; width:400px; height:auto; /* */ font-size:small; voice-family: "\"}\""; voice-family: inherit; font-size:medium; } html>body h2 { font-size:medium; } h3 { margin:0; padding:2px; color:#333; background:transparent; font-weight:bold; text-align:left; width:400px; height:auto; /* */ font-size:x-small; voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body h3 { font-size:small; } p { width:400px; height:auto; } --- NEW FILE: s4.css --- /* s4.css cross-browser.com */ body, body div, body p, body th, body td, body li, body dd, body pre { font-size:x-small; /* trick WinIE4/5 */ voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body, html>body div, html>body p, html>body th, html>body td, html>body li, html>body dd, html>body pre { font-size:small; /* be nice to Opera */ } html { color:#000; background:#fff; margin:0; padding:0; } body { color:#000; background:#fff; margin:0; padding:0; font-family:verdana,arial,sans-serif; } a:link { color:#000; background:transparent; text-decoration:underline; } a:visited { color:#333; background:transparent; text-decoration:underline; } a:hover { color:#000; background:#cc9; text-decoration:none; } a:active { color:#000; background:transparent; text-decoration:underline; } b { font-weight:bold; color:#996; background:transparent; } p { color:#000; background:#fff; margin:.3em 0 .5em 0; padding:0; line-height:1.5em; } .smaller { font-size:smaller; } .textInput { font-family:'courier new',monospace; color:#000; background:#fff; width:140px; } pre { font-family:'courier new',monospace; color:#000; background:#f0f0f0; margin:0; padding:0; } h1 { color:#330; background:transparent; font-style:normal; margin:0; padding:4px 8px; text-align:right; /* */ font-size:small; voice-family: "\"}\""; voice-family: inherit; font-size:medium; } html>body h1 { font-size:medium; } h2 { color:#330; background:#cc9; font-style:normal; margin:0 0 .25em 0; padding:4px 8px; /* */ font-size:small; voice-family: "\"}\""; voice-family: inherit; font-size:medium; } html>body h2 { font-size:medium; } h3 { color:#000; margin:1em 0; padding:0 0 0 .8em; font-weight:bold; border-left:2px solid #663; /* */ font-size:x-small; voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body h3 { font-size:small; } h4 { color:#663; /* 996; */ margin:0; padding:0; font-weight:bold; /* */ font-size:x-small; voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body h4 { font-size:small; } h5 { color:#996; background:transparent; margin:0; padding:2px; font-weight:bold; border-bottom:1px dotted #996; /* */ font-size:xx-small; voice-family: "\"}\""; voice-family: inherit; font-size:x-small; } html>body h5 { font-size:x-small; } --- NEW FILE: s1.css --- /* cross-browser.com/css/s1.css */ body, body div, body p, body th, body td, body li, body dd, body pre { font-size:x-small; /* trick WinIE4/5 */ voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body, html>body div, html>body p, html>body th, html>body td, html>body li, html>body dd, html>body pre { font-size:small; /* be nice to Opera */ } html { color:#000; background:#fff; margin:0; padding:0; } body { color:#000; background:#fff; margin:0; padding:10px 20px; font-family:'trebuchet ms',verdana,arial,sans-serif; } a:link { color:#009; background:transparent; text-decoration:underline; padding:1px; } a:visited { color:#333; background:transparent; text-decoration:underline; padding:1px; } a:active { color:#333; background:transparent; text-decoration:underline; } a:hover { color:#000; background:#ccc; text-decoration:none; padding:0; border:1px solid #009; } h1 { color:#009; background:transparent; margin:.25em 0 1em 0; padding:0x; font-weight:normal; /* border-top:1px solid #333; */ /* */ font-size:large; voice-family: "\"}\""; voice-family: inherit; font-size:x-large; } html>body h1 { font-size:x-large; } h2 { color:#009; background:transparent; margin:1.5em 0 1em 0; font-weight:normal; border-top:1px dotted #333; /* */ font-size:small; voice-family: "\"}\""; voice-family: inherit; font-size:medium; } html>body h2 { font-size:medium; } h3 { color:#900; background:transparent; font-weight:normal; /* */ font-size:x-small; voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body h3 { font-size:small; } pre { overflow:hidden; color:#009; background:#eee; padding:10px; font-family:'courier new',monospace; } --- NEW FILE: s2.css --- /* cross-browser.com/css/s2.css */ body, body div, body p, body th, body td, body li, body dd, body pre { font-size:x-small; /* trick WinIE4/5 */ voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body, html>body div, html>body p, html>body th, html>body td, html>body li, html>body dd, html>body pre { font-size:small; /* be nice to Opera */ } html { color:#000; background:#fff; margin:0; padding:0; } body { color:#000; background:#fff; margin:0; padding:0; font-family:verdana,arial,sans-serif; } a:link { color:#000; background:transparent; text-decoration:underline; padding:1px; } a:visited { color:#333; background:transparent; text-decoration:underline; padding:1px; } a:hover { color:#000; background:#ccc; text-decoration:none; padding:0; border:1px solid #008; } a:active { color:#000; background:transparent; text-decoration:underline; } h1 { color:#008; background:#eee; font-weight:normal; margin:10px 20px 0 20px; padding:8px; border-left:3px solid #ccc; border-top:1px solid #ccc; /* */ font-size:medium; voice-family: "\"}\""; voice-family: inherit; font-size:large; } html>body h1 { font-size:large; } h2 { color:#008; background:transparent; font-weight:normal; margin:1% 0 0 0; padding:2px 4px; border-left:3px solid #ccc; border-top:1px solid #ccc; /* */ font-size:small; voice-family: "\"}\""; voice-family: inherit; font-size:medium; } html>body h2 { font-size:medium; } h3 { color:#008; background:transparent; font-weight:bold; /* */ font-size:x-small; voice-family: "\"}\""; voice-family: inherit; font-size:small; } html>body h3 { font-size:small; } pre { font-family:'courier new',monospace; color:#000; background:#eee; border:1px dotted #ccc; padding:10px; overflow:hidden; } |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:16
|
Update of /cvsroot/easystruts/easystruts-website/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/x In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/x Added Files: x_alt.js x_event.js x_img.js x_misc.js x_dom.js x_drag.js x_timer.js x_event_nn4.js x_debug.js x_slide.js x_tip.js x_win.js x_bar.js x_core.js s6.js x_cook.js x_popup.js x_load.js x_core_nn4.js Log Message: Added new web site sources and data --- NEW FILE: x_debug.js --- // x_debug.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xName(e) { if (!e) return e; else if (e.id && e.id != "") return e.id; else if (e.nodeName && e.nodeName != "") return e.nodeName; else if (e.tagName && e.tagName != "") return e.tagName; else return e; } function xParentChain(e,delim,bNode) { if (!(e=xGetElementById(e))) return; var lim=100, s = "", d = delim || "\n"; while(e) { s += xName(e) + ', ofsL:'+e.offsetLeft + ', ofsT:'+e.offsetTop + d; e = xParent(e,bNode); if (!lim--) break; } return s; } function xLoadScript(url) { if (document.createElement && document.getElementsByTagName) { var s = document.createElement('script'); var h = document.getElementsByTagName('head'); if (s && h.length) { s.src = url; h[0].appendChild(s); } } } function xEvalTextarea() { var f = document.createElement('FORM'); f.onsubmit = 'return false'; var t = document.createElement('TEXTAREA'); t.id='xDebugTA'; t.name='xDebugTA'; t.rows='20'; t.cols='60'; var b = document.createElement('INPUT'); b.type = 'button'; b.value = 'Evaluate'; b.onclick = function() {eval(this.form.xDebugTA.value);}; f.appendChild(t); f.appendChild(b); document.body.appendChild(f); } // keepieapart.js from PPK if (document.all) { var detect = navigator.userAgent.toLowerCase(); var browser,thestring; var version = 0; if (checkIt('msie')) { browser = "IE " browser += detect.substr(place + thestring.length,3); document.title = browser + ' - ' + document.title; } } function checkIt(string) { place = detect.indexOf(string) + 1; thestring = string; return place; } // end x_debug.js --- NEW FILE: x_event.js --- // x_event.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xAddEventListener(e,eventType,eventListener,useCapture) { if(!(e=xGetElementById(e))) return; eventType=eventType.toLowerCase(); if((!xIE4Up && !xOp7) && e==window) { if(eventType=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eventListener; xResizeEvent(); return; } if(eventType=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eventListener; xScrollEvent(); return; } } var eh='e.on'+eventType+'=eventListener'; if(e.addEventListener) e.addEventListener(eventType,eventListener,useCapture); else if(e.attachEvent) e.attachEvent('on'+eventType,eventListener); else if(e.captureEvents) { if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.captureEvents(eval('Event.'+eventType.toUpperCase())); } eval(eh); } else eval(eh); } function xRemoveEventListener(e,eventType,eventListener,useCapture) { if(!(e=xGetElementById(e))) return; eventType=eventType.toLowerCase(); if((!xIE4Up && !xOp7) && e==window) { if(eventType=='resize') { window.xREL=null; return; } if(eventType=='scroll') { window.xSEL=null; return; } } var eh='e.on'+eventType+'=null'; if(e.removeEventListener) e.removeEventListener(eventType,eventListener,useCapture); else if(e.detachEvent) e.detachEvent('on'+eventType,eventListener); else if(e.releaseEvents) { if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.releaseEvents(eval('Event.'+eventType.toUpperCase())); } eval(eh); } else eval(eh); } function xEvent(evt) { // cross-browser event object prototype this.type = ''; this.target = null; this.pageX = 0; this.pageY = 0; this.offsetX = 0; this.offsetY = 0; this.keyCode = 0; var e = evt ? evt : window.event; if(!e) return; if(e.type) this.type = e.type; if(e.target) this.target = e.target; else if(e.srcElement) this.target = e.srcElement; if(xOp5or6) { this.pageX = e.clientX; this.pageY = e.clientY; } else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); } if(xDef(e.offsetX,e.offsetY)) { this.offsetX = e.offsetX; this.offsetY = e.offsetY; } else { this.offsetX = this.pageX - xPageX(this.target); this.offsetY = this.pageY - xPageY(this.target); } if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which else if (xDef(e.which)) { this.keyCode = e.which; } } function xResizeEvent() { // window resize event simulation if (window.xREL) setTimeout('xResizeEvent()', 250); var cw = xClientWidth(), ch = xClientHeight(); if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); } } function xScrollEvent() { // window scroll event simulation if (window.xSEL) setTimeout('xScrollEvent()', 250); var sl = xScrollLeft(), st = xScrollTop(); if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); } } // end x_event.js --- NEW FILE: x_core_nn4.js --- // x_core_nn4.js // For NN4 use this file instead of x_core.js. xInclude() will do this for you automatically. // X v3.15.1, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) // Variables: var xVersion='3.15.1',xNN4=false,xOp7=false,xOp5or6=false,xIE4Up=false,xIE4=false,xIE5=false,xUA=navigator.userAgent.toLowerCase(); if(window.opera){ xOp7=(xUA.indexOf('opera 7')!=-1 || xUA.indexOf('opera/7')!=-1); if (!xOp7) xOp5or6=(xUA.indexOf('opera 5')!=-1 || xUA.indexOf('opera/5')!=-1 || xUA.indexOf('opera 6')!=-1 || xUA.indexOf('opera/6')!=-1); } else if (document.layers) {xNN4=true;} else if (document.all) { xIE4Up=xUA.indexOf('msie')!=-1 && parseInt(navigator.appVersion)>=4; xIE4=xUA.indexOf('msie 4')!=-1; xIE5=xUA.indexOf('msie 5')!=-1; } // Object: function xGetElementById(e) { if(typeof(e)!='string') return e; if(document.getElementById) e=document.getElementById(e); else if(document.all) e=document.all[e]; else if(document.layers) e=xLayer(e); else e=null; return e; } function xLayer(id,root) { // only for nn4 var i,layer,found=null; if (!root) root=window; for(i=0; i<root.document.layers.length; i++) { layer=root.document.layers[i]; if(layer.id==id) return layer; if(layer.document.layers.length) found=xLayer(id,layer); if(found) return found; } return null; } function xParent(e,bNode){ if (!(e=xGetElementById(e))) return null; var p=null; if (!bNode && xDef(e.offsetParent)) p=e.offsetParent; else if (xDef(e.parentNode)) p=e.parentNode; else if (xDef(e.parentElement)) p=e.parentElement; else if (xDef(e.parentLayer)){if (e.parentLayer!=window) p=e.parentLayer;} return p; } function xDef() { for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;} return true; } function xStr(s) { return typeof(s)=='string'; } function xNum(n) { return typeof(n)=='number'; } // Appearance: function xShow(e) { if(!(e=xGetElementById(e))) return; if(e.style && xDef(e.style.visibility)) e.style.visibility='visible'; else if(xDef(e.visibility)) e.visibility='show'; } function xHide(e) { if(!(e=xGetElementById(e))) return; if(e.style && xDef(e.style.visibility)) e.style.visibility='hidden'; else if(xDef(e.visibility)) e.visibility='hide'; } function xZIndex(e,uZ) { if(!(e=xGetElementById(e))) return 0; if(e.style && xDef(e.style.zIndex)) { if(xNum(uZ)) e.style.zIndex=uZ; uZ=parseInt(e.style.zIndex); } else if(xDef(e.zIndex)) { if(xNum(uZ)) e.zIndex=uZ; uZ=e.zIndex; } return uZ; } function xColor(e,sColor) { if(!(e=xGetElementById(e))) return ''; var c=''; if(e.style && xDef(e.style.color)) { if(xStr(sColor)) e.style.color=sColor; c=e.style.color; } return c; } function xBackground(e,sColor,sImage) { if(!(e=xGetElementById(e))) return ''; var bg=''; if(e.style) { if(xStr(sColor)) { if(!xOp5or6) e.style.backgroundColor=sColor; else e.style.background=sColor; } if(xStr(sImage)) e.style.backgroundImage=(sImage!='')? 'url('+sImage+')' : null; if(!xOp5or6) bg=e.style.backgroundColor; else bg=e.style.background; } else if(xDef(e.bgColor)) { if(xStr(sColor)) e.bgColor=sColor; bg=e.bgColor; if(xStr(sImage)) e.background.src=sImage; } return bg; } // Position: function xMoveTo(e,iX,iY) { xLeft(e,iX); xTop(e,iY); } function xLeft(e,iX) { if(!(e=xGetElementById(e))) return 0; var css=xDef(e.style); if (css && xStr(e.style.left)) { if(xNum(iX)) e.style.left=iX+'px'; else { iX=parseInt(e.style.left); if(isNaN(iX)) iX=0; } } else if(css && xDef(e.style.pixelLeft)) { if(xNum(iX)) e.style.pixelLeft=iX; else iX=e.style.pixelLeft; } else if(xDef(e.left)) { if(xNum(iX)) e.left=iX; else iX=e.left; } return iX; } function xTop(e,iY) { if(!(e=xGetElementById(e))) return 0; var css=xDef(e.style); if(css && xStr(e.style.top)) { if(xNum(iY)) e.style.top=iY+'px'; else { iY=parseInt(e.style.top); if(isNaN(iY)) iY=0; } } else if(css && xDef(e.style.pixelTop)) { if(xNum(iY)) e.style.pixelTop=iY; else iY=e.style.pixelTop; } else if(xDef(e.top)) { if(xNum(iY)) e.top=iY; else iY=e.top; } return iY; } function xPageX(e) { if (!(e=xGetElementById(e))) return 0; if (xDef(e.pageX)) return e.pageX; var x = 0; while (e) { if (xDef(e.offsetLeft)) x += e.offsetLeft; e = xDef(e.offsetParent) ? e.offsetParent : null; } return x; } function xPageY(e) { if (!(e=xGetElementById(e))) return 0; if (xDef(e.pageY)) return e.pageY; var y = 0; while (e) { if (xDef(e.offsetTop)) y += e.offsetTop; e = xDef(e.offsetParent) ? e.offsetParent : null; } // if (xOp7) return y - document.body.offsetTop; // v3.14, temporary hack for opera bug 130324 return y; } function xOffsetLeft(e) { if (!(e=xGetElementById(e))) return 0; if (xDef(e.offsetLeft)) return e.offsetLeft; else return xPageX(e) - xPageX(xParent(e)); } function xOffsetTop(e) { if (!(e=xGetElementById(e))) return 0; if (xDef(e.offsetTop)) return e.offsetTop; else return xPageY(e) - xPageY(xParent(e)); } function xScrollLeft(e) { var offset=0; if (!(e=xGetElementById(e))) { if(xDef(window.pageXOffset)) offset=window.pageXOffset; else if(document.documentElement && document.documentElement.scrollLeft) offset=document.documentElement.scrollLeft; else if(document.body && xDef(document.body.scrollLeft)) offset=document.body.scrollLeft; } else { if (xNum(e.scrollLeft)) offset = e.scrollLeft; } return offset; } function xScrollTop(e) { var offset=0; if (!(e=xGetElementById(e))) { if(xDef(window.pageYOffset)) offset=window.pageYOffset; else if(document.documentElement && document.documentElement.scrollTop) offset=document.documentElement.scrollTop; else if(document.body && xDef(document.body.scrollTop)) offset=document.body.scrollTop; } else { if (xNum(e.scrollTop)) offset = e.scrollTop; } return offset; } function xHasPoint(ele, iLeft, iTop, iClpT, iClpR, iClpB, iClpL) { if (!xNum(iClpT)){iClpT=iClpR=iClpB=iClpL=0;} else if (!xNum(iClpR)){iClpR=iClpB=iClpL=iClpT;} else if (!xNum(iClpB)){iClpL=iClpR; iClpB=iClpT;} var thisX = xPageX(ele), thisY = xPageY(ele); return (iLeft >= thisX + iClpL && iLeft <= thisX + xWidth(ele) - iClpR && iTop >=thisY + iClpT && iTop <= thisY + xHeight(ele) - iClpB ); } // Size: function xResizeTo(e,uW,uH) { xWidth(e,uW); xHeight(e,uH); } function xWidth(e,uW) { if(!(e=xGetElementById(e))) return 0; if (xNum(uW)) { // v3.13.1 if (uW<0) uW = 0; else uW=Math.round(uW); } else uW=0; var css=xDef(e.style); if(css && xDef(e.offsetWidth) && xStr(e.style.width)) { if(uW) xSetCW(e, uW); uW=e.offsetWidth; } else if(css && xDef(e.style.pixelWidth)) { if(uW) e.style.pixelWidth=uW; uW=e.style.pixelWidth; } else if(xDef(e.clip) && xDef(e.clip.right)) { if(uW) e.clip.right=uW; uW=e.clip.right; } return uW; } function xHeight(e,uH) { if(!(e=xGetElementById(e))) return 0; if (xNum(uH)) { // v3.13.1 if (uH<0) uH = 0; else uH=Math.round(uH); } else uH=0; var css=xDef(e.style); if(css && xDef(e.offsetHeight) && xStr(e.style.height)) { if(uH) xSetCH(e, uH); uH=e.offsetHeight; } else if(css && xDef(e.style.pixelHeight)) { if(uH) e.style.pixelHeight=uH; uH=e.style.pixelHeight; } else if(xDef(e.clip) && xDef(e.clip.bottom)) { if(uH) e.clip.bottom=uH; uH=e.clip.bottom; } return uH; } function xGetCS(ele,sP){return parseInt(document.defaultView.getComputedStyle(ele,'').getPropertyValue(sP));} function xSetCW(ele,uW){ var pl=0,pr=0,bl=0,br=0; if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){ pl=xGetCS(ele,'padding-left'); pr=xGetCS(ele,'padding-right'); bl=xGetCS(ele,'border-left-width'); br=xGetCS(ele,'border-right-width'); } else if(xDef(ele.currentStyle,document.compatMode)){ if(document.compatMode=='CSS1Compat'){ pl=parseInt(ele.currentStyle.paddingLeft); pr=parseInt(ele.currentStyle.paddingRight); bl=parseInt(ele.currentStyle.borderLeftWidth); br=parseInt(ele.currentStyle.borderRightWidth); } } else if(xDef(ele.offsetWidth,ele.style.width)){ // ? ele.style.width=uW+'px'; pl=ele.offsetWidth-uW; } if(isNaN(pl)) pl=0; if(isNaN(pr)) pr=0; if(isNaN(bl)) bl=0; if(isNaN(br)) br=0; var cssW=uW-(pl+pr+bl+br); if(isNaN(cssW)||cssW<0) return; else ele.style.width=cssW+'px'; } function xSetCH(ele,uH){ var pt=0,pb=0,bt=0,bb=0; if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){ pt=xGetCS(ele,'padding-top'); pb=xGetCS(ele,'padding-bottom'); bt=xGetCS(ele,'border-top-width'); bb=xGetCS(ele,'border-bottom-width'); } else if(xDef(ele.currentStyle,document.compatMode)){ if(document.compatMode=='CSS1Compat'){ pt=parseInt(ele.currentStyle.paddingTop); pb=parseInt(ele.currentStyle.paddingBottom); bt=parseInt(ele.currentStyle.borderTopWidth); bb=parseInt(ele.currentStyle.borderBottomWidth); } } else if(xDef(ele.offsetHeight,ele.style.height)){ // ? ele.style.height=uH+'px'; pt=ele.offsetHeight-uH; } if(isNaN(pt)) pt=0; if(isNaN(pb)) pb=0; if(isNaN(bt)) bt=0; if(isNaN(bb)) bb=0; var cssH=uH-(pt+pb+bt+bb); if(isNaN(cssH)||cssH<0) return; else ele.style.height=cssH+'px'; } function xClip(e,iTop,iRight,iBottom,iLeft) { if(!(e=xGetElementById(e))) return; if(e.style) { if (xNum(iLeft)) e.style.clip='rect('+iTop+'px '+iRight+'px '+iBottom+'px '+iLeft+'px)'; else e.style.clip='rect(0 '+parseInt(e.style.width)+'px '+parseInt(e.style.height)+'px 0)'; } else if(e.clip) { if (xNum(iLeft)) { e.clip.top=iTop; e.clip.right=iRight; e.clip.bottom=iBottom; e.clip.left=iLeft; } else { e.clip.top=0; e.clip.right=xWidth(e); e.clip.bottom=xHeight(e); e.clip.left=0; } } } // Window: function xClientWidth() { var w=0; if(xOp5or6) w=window.innerWidth; else if(!window.opera && document.documentElement && document.documentElement.clientWidth) // v3.12 w=document.documentElement.clientWidth; else if(document.body && document.body.clientWidth) w=document.body.clientWidth; else if(xDef(window.innerWidth,window.innerHeight,document.height)) { w=window.innerWidth; if(document.height>window.innerHeight) w-=16; } return w; } function xClientHeight() { var h=0; if(xOp5or6) h=window.innerHeight; else if(!window.opera && document.documentElement && document.documentElement.clientHeight) // v3.12 h=document.documentElement.clientHeight; else if(document.body && document.body.clientHeight) h=document.body.clientHeight; else if(xDef(window.innerWidth,window.innerHeight,document.width)) { h=window.innerHeight; if(document.width>window.innerWidth) h-=16; } return h; } // end x_core_nn4.js --- NEW FILE: x_dom.js --- // x_dom.js // X v3.15.1, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) /* xWalkTree() Perform a preorder traversal on the subtree starting at oNode and pass each Element node to fnVisit. */ function xWalkTree(oNode, fnVisit) { if (oNode) { if (oNode.nodeType == 1) {fnVisit(oNode);} for (var c = oNode.firstChild; c; c = c.nextSibling) { xWalkTree(c, fnVisit); } } } /* xGetComputedStyle For sProp use the css property name, not the object property name. For finding width this works in Moz and Op, but in IE this only works if padding and border use pixel units in the CSS. */ function xGetComputedStyle(oEle, sProp) { var p = 0; if(document.defaultView && document.defaultView.getComputedStyle){ p = document.defaultView.getComputedStyle(oEle,'').getPropertyValue(sProp) } else if(oEle.currentStyle) { // convert css property name to object property name for IE (can this be done with RE?) var a = sProp.split('-'); sProp = a[0]; for (var i=1; i<a.length; ++i) { c = a[i].charAt(0); sProp += a[i].replace(c, c.toUpperCase()); } p = oEle.currentStyle[sProp]; } return parseInt(p) || 0; } /* xGetElementsByClassName() Returns an array of elements which are descendants of parentEle and have tagName and clsName. If parentEle is null or not present, document will be used. if tagName is null or not present, "*" will be used. */ function xGetElementsByClassName(clsName, parentEle, tagName) { var found = new Array(); var re = new RegExp('\\b'+clsName+'\\b', 'i'); var list = xGetElementsByTagName(tagName, parentEle); for (var i = 0; i < list.length; ++i) { if (list[i].className.search(re) != -1) { found[found.length] = list[i]; } } return found; } /* xGetElementsByTagName() Returns an array of elements which are descendants of parentEle and have tagName. If parentEle is null or not present, document will be used. if tagName is null or not present, "*" will be used. */ function xGetElementsByTagName(tagName, parentEle) { var list = null; tagName = tagName || '*'; parentEle = parentEle || document; if (xIE4 || xIE5) { if (tagName == '*') list = parentEle.all; else list = parentEle.all.tags(tagName); } else if (parentEle.getElementsByTagName) list = parentEle.getElementsByTagName(tagName); return list || new Array(); } /* xGetElementsByAttribute Return an array of all sTag elements whose sAtt attribute matches sRE. sAtt can also be a property name but the property must be of type string. */ function xGetElementsByAttribute(sTag, sAtt, sRE) { var a, list, found = new Array(), re = new RegExp(sRE, 'i'); list = xGetElementsByTagName(sTag); for (var i = 0; i < list.length; ++i) { a = list[i].getAttribute(sAtt); if (!a) {a = list[i][sAtt];} if (typeof(a)=='string' && a.search(re) != -1) { found[found.length] = list[i]; } } return found; } // end x_dom.js --- NEW FILE: x_event_nn4.js --- // x_event_nn4.js // For NN4 use this file instead of x_event.js. xInclude() will do this for you automatically. // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xAddEventListener(e,eventType,eventListener,useCapture) { if(!(e=xGetElementById(e))) return; eventType=eventType.toLowerCase(); if((!xIE4Up && !xOp7) && e==window) { if(eventType=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eventListener; xResizeEvent(); return; } if(eventType=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eventListener; xScrollEvent(); return; } } var eh='e.on'+eventType+'=eventListener'; if(e.addEventListener) e.addEventListener(eventType,eventListener,useCapture); else if(e.attachEvent) e.attachEvent('on'+eventType,eventListener); else if(e.captureEvents) { if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.captureEvents(eval('Event.'+eventType.toUpperCase())); } eval(eh); } else eval(eh); } function xRemoveEventListener(e,eventType,eventListener,useCapture) { if(!(e=xGetElementById(e))) return; eventType=eventType.toLowerCase(); if((!xIE4Up && !xOp7) && e==window) { if(eventType=='resize') { window.xREL=null; return; } if(eventType=='scroll') { window.xSEL=null; return; } } var eh='e.on'+eventType+'=null'; if(e.removeEventListener) e.removeEventListener(eventType,eventListener,useCapture); else if(e.detachEvent) e.detachEvent('on'+eventType,eventListener); else if(e.releaseEvents) { if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.releaseEvents(eval('Event.'+eventType.toUpperCase())); } eval(eh); } else eval(eh); } function xEvent(evt) { // cross-browser event object prototype this.type = ''; this.target = null; this.pageX = 0; this.pageY = 0; this.offsetX = 0; this.offsetY = 0; this.keyCode = 0; var e = evt ? evt : window.event; if(!e) return; if(e.type) this.type = e.type; if(e.target) this.target = e.target; else if(e.srcElement) this.target = e.srcElement; else if(xNN4) this.target = xLayerFromPoint(e.pageX, e.pageY); if(xOp5or6) { this.pageX = e.clientX; this.pageY = e.clientY; } else if(xDef(e.pageX,e.pageY)) { this.pageX = e.pageX; this.pageY = e.pageY; } // v3.14 else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); } if(xDef(e.offsetX,e.offsetY)) { this.offsetX = e.offsetX; this.offsetY = e.offsetY; } else if(xDef(e.layerX,e.layerY)) { this.offsetX = e.layerX; this.offsetY = e.layerY; } else { this.offsetX = this.pageX - xPageX(this.target); this.offsetY = this.pageY - xPageY(this.target); } if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which else if (xDef(e.which)) { this.keyCode = e.which; } } function xLayerFromPoint(x,y,root) { // only for nn4 var i, hn=null, hz=-1, cn; if (!root) root = window; for (i=0; i < root.document.layers.length; ++i) { cn = root.document.layers[i]; if (cn.visibility != "hide" && x >= cn.pageX && x <= cn.pageX + cn.clip.right && y >= cn.pageY && y <= cn.pageY + cn.clip.bottom ) { if (cn.zIndex > hz) { hz = cn.zIndex; hn = cn; } } } if (hn) { cn = xLayerFromPoint(x,y,hn); if (cn) hn = cn; } return hn; } function xResizeEvent() { // window resize event simulation if (window.xREL) setTimeout('xResizeEvent()', 250); var cw = xClientWidth(), ch = xClientHeight(); if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); } } function xScrollEvent() { // window scroll event simulation if (window.xSEL) setTimeout('xScrollEvent()', 250); var sl = xScrollLeft(), st = xScrollTop(); if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); } } // end x_event_nn4.js --- NEW FILE: x_misc.js --- // x_misc.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xLinearScale(value, inMin, inMax, outMin, outMax) { var m = (outMax - outMin) / (inMax - inMin); var b = outMin - (inMin * m); return (m * value + b); } function xIntersection(e1, e2, o) { var ix1, iy2, iw, ih, intersect = true; var e1x1 = e1.pageX(); var e1x2 = e1x1 + e1.width(); var e1y1 = e1.pageY(); var e1y2 = e1y1 + e1.height(); var e2x1 = e2.pageX(); var e2x2 = e2x1 + e2.width(); var e2y1 = e2.pageY(); var e2y2 = e2y1 + e2.height(); // horizontal if (e1x1 <= e2x1) { ix1 = e2x1; if (e1x2 < e2x1) intersect = false; else iw = Math.min(e1x2, e2x2) - e2x1; } else { ix1 = e1x1; if (e2x2 < e1x1) intersect = false; else iw = Math.min(e1x2, e2x2) - e1x1; } // vertical if (e1y2 >= e2y2) { iy2 = e2y2; if (e1y1 > e2y2) intersect = false; else ih = e2y2 - Math.max(e1y1, e2y1); } else { iy2 = e1y2; if (e2y1 > e1y2) intersect = false; else ih = e1y2 - Math.max(e1y1, e2y1); } // return intersected rectangle if (intersect && arguments.length == 3) { o.x = ix1; o.y = iy2 - ih; o.w = iw; o.h = ih; } return intersect; } // end x_misc.js --- NEW FILE: x_bar.js --- // x_bar.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xBar(dir, // direction, 'ltr', 'rtl', 'ttb', or 'btt' conStyle, barStyle) // container and bar style class names { //// Public Properties this.value = 0; // current value, read-only //// Public Methods // Update current value this.update = function(v) { if (v < 0) v = 0; else if (v > this.inMax) v = this.inMax; this.con.title = this.bar.title = this.value = v; switch(this.dir) { case 'ltr': // left to right v = this.scale(v, this.w); xLeft(this.bar, v - this.w); break; case 'rtl': // right to left v = this.scale(v, this.w); xLeft(this.bar, this.w - v); break; case 'btt': // bottom to top v = this.scale(v, this.h); xTop(this.bar, this.h - v); break; case 'ttb': // top to bottom v = this.scale(v, this.h); xTop(this.bar, v - this.h); break; } } // Change position and/or size this.paint = function(x, y, // container position w, h) // container size { if (xNum(x)) this.x = x; if (xNum(y)) this.y = y; if (xNum(w)) this.w = w; if (xNum(h)) this.h = h; xResizeTo(this.con, this.w, this.h); xMoveTo(this.con, this.x, this.y); xResizeTo(this.bar, this.w, this.h); xMoveTo(this.bar, 0, 0); } // Change scale and/or start value this.reset = function(max, start) // non-scaled values { if (xNum(max)) this.inMax = max; if (xNum(start)) this.start = start; this.update(this.start); } //// Private Methods this.scale = function(v, outMax) { return Math.round(xLinearScale(v, 0, this.inMax, 0, outMax)); } //// Private Properties this.dir = dir; this.x = 0; this.y = 0; this.w = 100; this.h = 100; this.inMax = 100; this.start = 0; this.conStyle = conStyle; this.barStyle = barStyle; //// Constructor // Create container this.con = document.createElement('DIV'); this.con.className = this.conStyle; // Create bar this.bar = document.createElement('DIV'); this.bar.className = this.barStyle; // Insert in object tree this.con.appendChild(this.bar); document.body.appendChild(this.con); } // end xBar //// Support Functions function xLinearScale(value, inMin, inMax, outMin, outMax) { var m = (outMax - outMin) / (inMax - inMin); var b = outMin - (inMin * m); return (m * value + b); } // end x_bar.js --- NEW FILE: x_load.js --- // x_load.js // X v3.15.1, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) // Global Variables: // now i've got these vars in 2 lib files - crap. i'd like to leave them here... but i'm not sure var xVersion='3.15.1',xNN4=false,xOp7=false,xOp5or6=false,xIE4Up=false,xIE4=false,xIE5=false,xUA=navigator.userAgent.toLowerCase(); if(window.opera){ xOp7=(xUA.indexOf('opera 7')!=-1 || xUA.indexOf('opera/7')!=-1); if (!xOp7) xOp5or6=(xUA.indexOf('opera 5')!=-1 || xUA.indexOf('opera/5')!=-1 || xUA.indexOf('opera 6')!=-1 || xUA.indexOf('opera/6')!=-1); } else if (document.layers) {xNN4=true;} else if (document.all) { xIE4Up=xUA.indexOf('msie')!=-1 && parseInt(navigator.appVersion)>=4; xIE4=xUA.indexOf('msie 4')!=-1; xIE5=xUA.indexOf('msie 5')!=-1; } // xInclude() // Call before the window.onload event. // Only supports files with extensions '.js' and '.css'. // Automatically loads files with NN4 support if browser is NN4. // Returns true if browser has minimal dhtml support, else returns false. function xInclude(url1, url2, etc) { if (document.getElementById || document.all || document.layers) { var h, f; for (var i=0; i<arguments.length; ++i) { h = ''; // html to be written f = arguments[i].toLowerCase(); // lowercase file url // JS if (f.indexOf('.js') != -1) { if (xNN4) { var c='x_core', e='x_event', n='_nn4'; if (f.indexOf(c) != -1) { f = f.replace(c, c+n); } else if (f.indexOf(e) != -1) { f = f.replace(e, e+n); } } h = "<script type='text/javascript' src='" + f + "'></script>"; } // CSS else if (f.indexOf('.css') != -1) { h = "<link rel='stylesheet' type='text/css' href='" + f + "'>"; } // Write the html into the document if (h.length) { document.writeln(h); } } return true; } return false; } // end x_load.js --- NEW FILE: x_cook.js --- // x_cook.js // Cookie functions. // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) // cookie implementations based on code from Netscape Javascript Guide function xSetCookie(name, value, expire, path) { document.cookie = name + "=" + escape(value) + ((!expire) ? "" : ("; expires=" + expire.toGMTString())) + "; path=/"; } function xGetCookie(name) { var value=null, search=name+"="; if (document.cookie.length > 0) { var offset = document.cookie.indexOf(search); if (offset != -1) { offset += search.length; var end = document.cookie.indexOf(";", offset); if (end == -1) end = document.cookie.length; value = unescape(document.cookie.substring(offset, end)); } } return value; } // end x_cook.js --- NEW FILE: x_drag.js --- // x_drag.js // Drag events implementation. // X v3.15.1, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) var xDragMgr = {ele:null, mm:false}; function xEnableDrag(id, fnDragStart, fnDrag, fnDragEnd) { var ele = xGetElementById(id); ele.xDraggable = true; ele.xOnDragStart = fnDragStart; ele.xOnDrag = fnDrag; ele.xOnDragEnd = fnDragEnd; xAddEventListener(ele, 'mousedown', xdOnMousedown, false); if (!xDragMgr.mm) { xDragMgr.mm = true; xAddEventListener(document, 'mousemove', xdOnMousemove, false); } } function xdOnMousedown(e) // drag start { var evt = new xEvent(e); var ele = evt.target; while(ele && !ele.xDraggable) { ele = xParent(ele); } if (ele) { if (e && e.preventDefault) e.preventDefault(); else if (window.event) window.event.returnValue = false; ele.xDragX = evt.pageX; ele.xDragY = evt.pageY; xDragMgr.ele = ele; xAddEventListener(ele, 'mouseup', xdOnMouseup, false); if (ele.xOnDragStart) { ele.xOnDragStart(ele, evt.pageX, evt.pageY); } } } function xdOnMousemove(e) // drag { var evt = new xEvent(e); if (xDragMgr.ele) { if (e && e.preventDefault) e.preventDefault(); else if (window.event) window.event.returnValue = false; var ele = xDragMgr.ele; var dx = evt.pageX - ele.xDragX; var dy = evt.pageY - ele.xDragY; ele.xDragX = evt.pageX; ele.xDragY = evt.pageY; if (ele.xOnDrag) { ele.xOnDrag(ele, dx, dy); } else { xMoveTo(ele, xLeft(ele) + dx, xTop(ele) + dy); } } } function xdOnMouseup(e) // drag end { if (xDragMgr.ele) { if (e && e.preventDefault) e.preventDefault(); else if (window.event) window.event.returnValue = false; xRemoveEventListener(xDragMgr.ele, 'mouseup', xdOnMouseup, false); if (xDragMgr.ele.xOnDragEnd) { var evt = new xEvent(e); xDragMgr.ele.xOnDragEnd(xDragMgr.ele, evt.pageX, evt.pageY); } xDragMgr.ele = null; } } // end x_drag.js --- NEW FILE: x_slide.js --- // x_anim.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xSlideTo(e,x,y,uTime) { if (!(e=xGetElementById(e))) return; if (!e.timeout) e.timeout = 25; e.xTarget = x; e.yTarget = y; e.slideTime = uTime; e.stop = false; e.yA = e.yTarget - xTop(e); e.xA = e.xTarget - xLeft(e); // A = distance e.B = Math.PI / (2 * e.slideTime); // B = period e.yD = xTop(e); e.xD = xLeft(e); // D = initial position var d = new Date(); e.C = d.getTime(); if (!e.moving) xSlide(e); } function xSlide(e) { if (!(e=xGetElementById(e))) return; var now, s, t, newY, newX; now = new Date(); t = now.getTime() - e.C; if (e.stop) { e.moving = false; } else if (t < e.slideTime) { setTimeout("xSlide('"+e.id+"')", e.timeout); s = Math.sin(e.B * t); newX = Math.round(e.xA * s + e.xD); newY = Math.round(e.yA * s + e.yD); xMoveTo(e, newX, newY); e.moving = true; } else { xMoveTo(e, e.xTarget, e.yTarget); e.moving = false; } } // end x_anim.js --- NEW FILE: x_popup.js --- // x_popup.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xPopup(sTmrType, uTimeout, sPosition, sStyle, sId, sUrl) // sTmrType: 'timeout' or 'interval' { if (document.getElementById && document.createElement && document.body && document.body.appendChild) { // create popup element //var e = document.createElement('DIV'); var e = document.createElement('IFRAME'); this.ele = e; e.id = sId; e.style.position = 'absolute'; e.className = sStyle; //e.innerHTML = sHtml; e.src = sUrl document.body.appendChild(e); xShow(e); this.tmr = xTimer.set(sTmrType, this, sTmrType, uTimeout); // timer event listeners this.timeout = function() // hide popup { var e = this.ele; xSlideTo(e, -xWidth(e), -xHeight(e), this.slideTime); } this.interval = function() // size, position and show popup { var x=0, y=0, e = this.ele; var ew = xWidth(e), eh = xHeight(e); var cw = xClientWidth(), ch = xClientHeight(); switch (this.pos) { case 'e': x = cw - ew - this.margin; y = (ch - eh)/2; break; case 'se': x = cw - ew - this.margin; y = ch - eh - this.margin; break; case 'w': x = this.margin; y = (ch - eh)/2; break; case 'cen': default: x = (cw - ew)/2; y = (ch - eh)/2; break; } // end switch xSlideTo(e, xScrollLeft() + x, xScrollTop() + y, this.slideTime); } // init this.margin = 10; this.pos = sPosition; this.slideTime = 500; // slide time in ms this.interval(); } } // end xPopup // end x_popup.js --- NEW FILE: x_timer.js --- // x_timer.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) function xTimerMgr() // object prototype { // Public Methods this.set = function(type, obj, sMethod, uTime, data) // type: 'interval' or 'timeout' { return (this.timers[this.timers.length] = new xTimerObj(type, obj, sMethod, uTime, data)); } // Private Properties this.timers = new Array(); // Private Methods this.run = function() { var i, t, d = new Date(), now = d.getTime(); for (i = 0; i < this.timers.length; ++i) { t = this.timers[i]; if (t && t.running) { t.elapsed = now - t.time0; if (t.elapsed >= t.preset) { // timer event on t t.obj[t.mthd](t); // pass listener this xTimerObj if (t.type.charAt(0) == 'i') { t.time0 = now; } else { t.stop(); } } } } } // Private Object Prototype function xTimerObj(type, obj, mthd, preset, data) { // Public Methods this.stop = function() { this.running = false; } this.start = function() { this.running = true; } // continue after a stop this.reset = function() { var d = new Date(); this.time0 = d.getTime(); this.elapsed = 0; this.running = true; } // Public Properties this.data = data; // Read-only Properties this.type = type; // 'interval' or 'timeout' this.obj = obj; this.mthd = mthd; // string this.preset = preset; this.reset(); } // end xTimerObj } // end xTimerMgr var xTimer = new xTimerMgr(); // applications assume global name is 'xTimer' setInterval('xTimer.run()', 250); // end x_timer.js --- NEW FILE: x_core.js --- // x_core.js // X v3.15.1, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) // Variables: var xVersion='3.15.1',xNN4=false,xOp7=false,xOp5or6=false,xIE4Up=false,xIE4=false,xIE5=false,xUA=navigator.userAgent.toLowerCase(); if(window.opera){ xOp7=(xUA.indexOf('opera 7')!=-1 || xUA.indexOf('opera/7')!=-1); if (!xOp7) xOp5or6=(xUA.indexOf('opera 5')!=-1 || xUA.indexOf('opera/5')!=-1 || xUA.indexOf('opera 6')!=-1 || xUA.indexOf('opera/6')!=-1); } else if (document.all) { xIE4Up=xUA.indexOf('msie')!=-1 && parseInt(navigator.appVersion)>=4; xIE4=xUA.indexOf('msie 4')!=-1; xIE5=xUA.indexOf('msie 5')!=-1; } // Object: function xGetElementById(e) { if(typeof(e)!='string') return e; if(document.getElementById) e=document.getElementById(e); else if(document.all) e=document.all[e]; else e=null; return e; } function xParent(e,bNode){ if (!(e=xGetElementById(e))) return null; var p=null; if (!bNode && xDef(e.offsetParent)) p=e.offsetParent; else if (xDef(e.parentNode)) p=e.parentNode; else if (xDef(e.parentElement)) p=e.parentElement; return p; } function xDef() { for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;} return true; } function xStr(s) { return typeof(s)=='string'; } function xNum(n) { return typeof(n)=='number'; } // Appearance: function xShow(e) { if(!(e=xGetElementById(e))) return; if(e.style && xDef(e.style.visibility)) e.style.visibility='visible'; } function xHide(e) { if(!(e=xGetElementById(e))) return; if(e.style && xDef(e.style.visibility)) e.style.visibility='hidden'; } function xZIndex(e,uZ) { if(!(e=xGetElementById(e))) return 0; if(e.style && xDef(e.style.zIndex)) { if(xNum(uZ)) e.style.zIndex=uZ; uZ=parseInt(e.style.zIndex); } return uZ; } function xColor(e,sColor) { if(!(e=xGetElementById(e))) return ''; var c=''; if(e.style && xDef(e.style.color)) { if(xStr(sColor)) e.style.color=sColor; c=e.style.color; } return c; } function xBackground(e,sColor,sImage) { if(!(e=xGetElementById(e))) return ''; var bg=''; if(e.style) { if(xStr(sColor)) { if(!xOp5or6) e.style.backgroundColor=sColor; else e.style.background=sColor; } if(xStr(sImage)) e.style.backgroundImage=(sImage!='')? 'url('+sImage+')' : null; if(!xOp5or6) bg=e.style.backgroundColor; else bg=e.style.background; } return bg; } // Position: function xMoveTo(e,iX,iY) { xLeft(e,iX); xTop(e,iY); } function xLeft(e,iX) { if(!(e=xGetElementById(e))) return 0; var css=xDef(e.style); if (css && xStr(e.style.left)) { if(xNum(iX)) e.style.left=iX+'px'; else { iX=parseInt(e.style.left); if(isNaN(iX)) iX=0; } } else if(css && xDef(e.style.pixelLeft)) { if(xNum(iX)) e.style.pixelLeft=iX; else iX=e.style.pixelLeft; } return iX; } function xTop(e,iY) { if(!(e=xGetElementById(e))) return 0; var css=xDef(e.style); if(css && xStr(e.style.top)) { if(xNum(iY)) e.style.top=iY+'px'; else { iY=parseInt(e.style.top); if(isNaN(iY)) iY=0; } } else if(css && xDef(e.style.pixelTop)) { if(xNum(iY)) e.style.pixelTop=iY; else iY=e.style.pixelTop; } return iY; } function xPageX(e) { if (!(e=xGetElementById(e))) return 0; var x = 0; while (e) { if (xDef(e.offsetLeft)) x += e.offsetLeft; e = xDef(e.offsetParent) ? e.offsetParent : null; } return x; } function xPageY(e) { if (!(e=xGetElementById(e))) return 0; var y = 0; while (e) { if (xDef(e.offsetTop)) y += e.offsetTop; e = xDef(e.offsetParent) ? e.offsetParent : null; } // if (xOp7) return y - document.body.offsetTop; // v3.14, temporary hack for opera bug 130324 return y; } function xOffsetLeft(e) { if (!(e=xGetElementById(e))) return 0; if (xDef(e.offsetLeft)) return e.offsetLeft; else return 0; } function xOffsetTop(e) { if (!(e=xGetElementById(e))) return 0; if (xDef(e.offsetTop)) return e.offsetTop; else return 0; } function xScrollLeft(e) { var offset=0; if (!(e=xGetElementById(e))) { if(document.documentElement && document.documentElement.scrollLeft) offset=document.documentElement.scrollLeft; else if(document.body && xDef(document.body.scrollLeft)) offset=document.body.scrollLeft; } else { if (xNum(e.scrollLeft)) offset = e.scrollLeft; } return offset; } function xScrollTop(e) { var offset=0; if (!(e=xGetElementById(e))) { if(document.documentElement && document.documentElement.scrollTop) offset=document.documentElement.scrollTop; else if(document.body && xDef(document.body.scrollTop)) offset=document.body.scrollTop; } else { if (xNum(e.scrollTop)) offset = e.scrollTop; } return offset; } function xHasPoint(ele, iLeft, iTop, iClpT, iClpR, iClpB, iClpL) { if (!xNum(iClpT)){iClpT=iClpR=iClpB=iClpL=0;} else if (!xNum(iClpR)){iClpR=iClpB=iClpL=iClpT;} else if (!xNum(iClpB)){iClpL=iClpR; iClpB=iClpT;} var thisX = xPageX(ele), thisY = xPageY(ele); return (iLeft >= thisX + iClpL && iLeft <= thisX + xWidth(ele) - iClpR && iTop >=thisY + iClpT && iTop <= thisY + xHeight(ele) - iClpB ); } // Size: function xResizeTo(e,uW,uH) { xWidth(e,uW); xHeight(e,uH); } function xWidth(e,uW) { if(!(e=xGetElementById(e))) return 0; if (xNum(uW)) { if (uW<0) uW = 0; else uW=Math.round(uW); } else uW=0; var css=xDef(e.style); if(css && xDef(e.offsetWidth) && xStr(e.style.width)) { if(uW) xSetCW(e, uW); uW=e.offsetWidth; } else if(css && xDef(e.style.pixelWidth)) { if(uW) e.style.pixelWidth=uW; uW=e.style.pixelWidth; } return uW; } function xHeight(e,uH) { if(!(e=xGetElementById(e))) return 0; if (xNum(uH)) { if (uH<0) uH = 0; else uH=Math.round(uH); } else uH=0; var css=xDef(e.style); if(css && xDef(e.offsetHeight) && xStr(e.style.height)) { if(uH) xSetCH(e, uH); uH=e.offsetHeight; } else if(css && xDef(e.style.pixelHeight)) { if(uH) e.style.pixelHeight=uH; uH=e.style.pixelHeight; } return uH; } function xGetCS(ele,sP){return parseInt(document.defaultView.getComputedStyle(ele,'').getPropertyValue(sP));} function xSetCW(ele,uW){ var pl=0,pr=0,bl=0,br=0; if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){ pl=xGetCS(ele,'padding-left'); pr=xGetCS(ele,'padding-right'); bl=xGetCS(ele,'border-left-width'); br=xGetCS(ele,'border-right-width'); } else if(xDef(ele.currentStyle,document.compatMode)){ if(document.compatMode=='CSS1Compat'){ pl=parseInt(ele.currentStyle.paddingLeft); pr=parseInt(ele.currentStyle.paddingRight); bl=parseInt(ele.currentStyle.borderLeftWidth); br=parseInt(ele.currentStyle.borderRightWidth); } } else if(xDef(ele.offsetWidth,ele.style.width)){ // ? ele.style.width=uW+'px'; pl=ele.offsetWidth-uW; } if(isNaN(pl)) pl=0; if(isNaN(pr)) pr=0; if(isNaN(bl)) bl=0; if(isNaN(br)) br=0; var cssW=uW-(pl+pr+bl+br); if(isNaN(cssW)||cssW<0) return; else ele.style.width=cssW+'px'; } function xSetCH(ele,uH){ var pt=0,pb=0,bt=0,bb=0; if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){ pt=xGetCS(ele,'padding-top'); pb=xGetCS(ele,'padding-bottom'); bt=xGetCS(ele,'border-top-width'); bb=xGetCS(ele,'border-bottom-width'); } else if(xDef(ele.currentStyle,document.compatMode)){ if(document.compatMode=='CSS1Compat'){ pt=parseInt(ele.currentStyle.paddingTop); pb=parseInt(ele.currentStyle.paddingBottom); bt=parseInt(ele.currentStyle.borderTopWidth); bb=parseInt(ele.currentStyle.borderBottomWidth); } } else if(xDef(ele.offsetHeight,ele.style.height)){ // ? ele.style.height=uH+'px'; pt=ele.offsetHeight-uH; } if(isNaN(pt)) pt=0; if(isNaN(pb)) pb=0; if(isNaN(bt)) bt=0; if(isNaN(bb)) bb=0; var cssH=uH-(pt+pb+bt+bb); if(isNaN(cssH)||cssH<0) return; else ele.style.height=cssH+'px'; } function xClip(e,iTop,iRight,iBottom,iLeft) { if(!(e=xGetElementById(e))) return; if(e.style) { if (xNum(iLeft)) e.style.clip='rect('+iTop+'px '+iRight+'px '+iBottom+'px '+iLeft+'px)'; else e.style.clip='rect(0 '+parseInt(e.style.width)+'px '+parseInt(e.style.height)+'px 0)'; } } // Window: function xClientWidth() { var w=0; if(xOp5or6) w=window.innerWidth; else if(!window.opera && document.documentElement && document.documentElement.clientWidth) // v3.12 w=document.documentElement.clientWidth; else if(document.body && document.body.clientWidth) w=document.body.clientWidth; else if(xDef(window.innerWidth,window.innerHeight,document.height)) { w=window.innerWidth; if(document.height>window.innerHeight) w-=16; } return w; } function xClientHeight() { var h=0; if(xOp5or6) h=window.innerHeight; else if(!window.opera && document.documentElement && document.documentElement.clientHeight) // v3.12 h=document.documentElement.clientHeight; else if(document.body && document.body.clientHeight) h=document.body.clientHeight; else if(xDef(window.innerWidth,window.innerHeight,document.width)) { h=window.innerHeight; if(document.width>window.innerWidth) h-=16; } return h; } // end x_core.js --- NEW FILE: x_win.js --- // x_win.js // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) /* xWindow() Create an xWindow object for each child window the page will need. Pass a zero for width, height, left, and top and the window will have default size and position. Pass a zero or one for the boolean parameters (location field, menubar, etc.). */ function xWindow(name, w, h, x, y, loc, men, res, scr, sta, too) { var f = ''; if (w && h) { if (document.layers) f = 'screenX=' + x + ',screenY=' + y; else f = 'left=' + x + ',top=' + y; f += ',width=' + w + ',height=' + h + ','; } f += ('location='+loc+',menubar='+men+',resizable='+res +',scrollbars='+scr+',status='+sta+',toolbar='+too); this.features = f; this.name = name; this.load = function(sUrl) { if (this.wnd && !this.wnd.closed) this.wnd.location.href = sUrl; else this.wnd = window.open(sUrl, this.name, this.features); this.wnd.focus(); return false; } } // end x_win.js --- NEW FILE: x_img.js --- // x_img.js // Image rollover functions. // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) /* xImgRollSetup Can not be called before the window onload event. Pass image IDs starting with 4th argument. Assumes this image file naming convention: out img = path + imgEleId + fileExt over img = path + imgEleId + ovrSuffix + fileExt */ function xImgRollSetup(path, ovrSuffix, fileExt) { var ele, id; for (var i=3; i<arguments.length; ++i) { id = arguments[i]; if (ele = xGetElementById(id)) { ele.xOutUrl = path + id + fileExt; ele.xOvrObj = new Image(); ele.xOvrObj.src = path + id + ovrSuffix + fileExt; ele.onmouseout = xImgOnMouseout; ele.onmouseover = xImgOnMouseover; } } } function xImgOnMouseout(e) { if (this.xOutUrl) { this.src = this.xOutUrl; } } function xImgOnMouseover(e) { if (this.xOvrObj && this.xOvrObj.complete) { this.src = this.xOvrObj.src; } } // end x_img.js --- NEW FILE: x_tip.js --- // x_tip.js // X v3.15.1, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) // X Tooltip Groups // v2.01, mf, 1Mar04, Now works in IE 4 and 5. Used document.write // instead of document.createElement. // v2.00, mf, 13Dec03, Almost completely rewritten. Now supports html for // tooltip text instead of using the title attribute. // v1.01, mf, 12Dec03, Correction for when the mouse moves // directly from one trigger element to another. // v1.00, mf, 11Dec03, Initial release. document.write("<style type='text/css'>#xTooltipElement{position:absolute;visibility:hidden;}</style>"); document.write("<div id='xTooltipElement'>xTooltipElement</div>"); var xttTrigger = null; // current trigger element function xTooltipGroup(grpClassOrIdList, tipClass, origin, xOffset, yOffset, textList) { //// Public Methods this.show = function(trigEle, mx, my) { if (xttTrigger != trigEle) { // if not active or moved to an adjacent trigger this.t.className = trigEle.xTooltip.c; this.t.innerHTML = trigEle.xTooltipText ? trigEle.xTooltipText : trigEle.title; xttTrigger = trigEle; } var x, y; switch(this.o) { case 'right': x = xPageX(trigEle) + xWidth(trigEle); y = xPageY(trigEle); break; case 'top': x = xPageX(trigEle); y = xPageY(trigEle) - xHeight(trigEle); break; case 'mouse': x = mx; y = my; break; } xMoveTo(this.t, x + this.x, y + this.y); xShow(this.t); } this.hide = function() { xMoveTo(this.t, -1000, -1000); xttTrigger = null; } //// Private Methods this.docOnMousemove = function(oEvent) { // this == document at runtime var o, e = new xEvent(oEvent); if (e.target && (o = e.target.xTooltip)) { o.show(e.target, e.pageX, e.pageY); } else if (xttTrigger) { xttTrigger.xTooltip.hide(); } } //// Private Properties this.c = tipClass; this.o = origin; this.x = xOffset; this.y = yOffset; this.t = null; // tooltip element - all groups use the same element //// Constructor Code var i, tips; if (xStr(grpClassOrIdList)) { tips = xGetElementsByClassName(grpClassOrIdList); for (i = 0; i < tips.length; ++i) { tips[i].xTooltip = this; } } else { tips = new Array(); for (i = 0; i < grpClassOrIdList.length; ++i) { tips[i] = xGetElementById(grpClassOrIdList[i]); if (!tips[i]) { alert('Element not found for id = ' + grpClassOrIdList[i]); } else { tips[i].xTooltip = this; tips[i].xTooltipText = textList[i]; } } } if (!this.t) { // only execute once this.t = xGetElementById('xTooltipElement'); xAddEventListener(document, 'mousemove', this.docOnMousemove, false); } } // end xTooltipGroup // end x_tip.js --- NEW FILE: x_alt.js --- // x_alt.js // Alternatives to existing X functions. // X v3.15, Cross-Browser DHTML Library from Cross-Browser.com // Copyright (c) 2002,2003,2004 Michael Foster (mi...@cr...) // This library is distributed under the terms of the LGPL (gnu.org) /* xWinOpen() A simple alternative to xWindow. */ var xChildWindow = null; function xWinOpen(sUrl) { if (xChildWindow && !xChildWindow.closed) {xChildWindow.location.href = sUrl;} else {xChildWindow = window.open(sUrl, "myWinName");} xChildWindow.focus(); return false; } // Alternatives to xSlideTo() function xSlideX(e,iX,fInc,iterating) { // experimental if (!(e=xGetElementById(e))) return; if (!e.slideXActive) e.slideXTarget = iX; else if (!iterating) {e.slideXTarget = iX; return;} var dX, X=xLeft(e); e.slideXActive = true; if (fInc < 1) { dX = fInc * Math.abs(Math.abs(X) - Math.abs(e.slideXTarget)); if (dX < 1) dX = 1; } else dX = fInc; if (X < e.slideXTarget) { if (X + dX <= e.slideXTarget) X += dX; else X = e.slideXTarget; } else if (X > e.slideXTarget) { if (X - dX >= e.slideXTarget) X -= dX; else X = e.slideXTarget; } else {e.slideXActive = false; return;} xLeft(e, X); setTimeout("xSlideX('"+e.id+"',"+e.slideXTarget+","+fInc+","+true+")",25); } function xSlideY(e,iY,fInc,iterating) { // experimental if (!(e=xGetElementById(e))) return; if (!e.slideYActive) e.slideYTarget = iY; else if (!iterating) {e.slideYTarget = iY; return;} var dY, Y=xTop(e); e.slideYActive = true; if (fInc < 1) { dY = fInc * Math.abs(Math.abs(Y) - Math.abs(e.slideYTarget)); if (dY < 1) dY = 1; } else dY = fInc; if (Y < e.slideYTarget) { if (Y + dY <= e.slideYTarget) Y += dY; else Y = e.slideYTarget; } else if (Y > e.slideYTarget) { if (Y - dY >= e.slideYTarget) Y -= dY; else Y = e.slideYTarget; } else {e.slideYActive = false; return;} xTop(e, Y); setTimeout("xSlideY('"+e.id+"',"+e.slideYTarget+","+fInc+","+true+")",25); } // alternative to xHasPoint() function xHasPoint(ele, iLeft, iTop, iClpT, iClpR, iClpB, iClpL) { if (arguments.length==3){iClpT=iClpR=iClpB=iClpL=0;} else if (arguments.length==4){iClpR=iClpB=iClpL=iClpT;} else if (arguments.length==5){iClpL=iClpR; iClpB=iClpT;} var thisX = xPageX(ele), thisY = xPageY(ele); return (iLeft >= thisX + iClpL && iLeft <= thisX + xWidth(ele) - iClpR && iTop >=thisY + iClpT && iTop <= thisY + xHeight(ele) - iClpB ); } // xScrollXxxx functions without element support function xScrollLeft() { var offset=0; if(xDef(window.pageXOffset)) offset=window.pageXOffset; else if(document.documentElement && document.documentElement.scrollLeft) offset=document.documentElement.scrollLeft; else if(document.body && xDef(document.body.scrollLeft)) offset=document.body.scrollLeft; return offset; } function xScrollTop() { var offset=0; if(xDef(window.pageYOffset)) offset=window.pageYOffset; else if(document.documentElement && document.documentElement.scrollTop) offset=document.documentElement.scrollTop; else if(document.body && xDef(document.body.scrollTop)) offset=document.body.scrollTop; return offset; } // end x_alt.js --- NEW FILE: s6.js --- // Collapsible Element Support // Mike Foster, Cross-Browser.com document.write("<style type='text/css'>#header h1, #leftColumn h3{cursor:pointer;}</style>"); function setupCollapsibleH3s(bMin) { setupCollapsibleHs('H3', H3_OnClick, bMin); } function setupCollapsibleColumn() { var h, i, c, list, lc; h = xGetElementById('header'); h.collapsed = true; h.onclick = H1_OnClick; h.onclick(); return; } function setupCollapsibleHs(sTag, fnOnClick, bMin) { var h, i, c, list, lc; lc = xGetElementById('leftColumn'); aH = xGetElementsByTagName(sTag, lc); // from leftColumn only aC = xGetElementsByClassName('collapsible', lc); for (i = 0; i < aH.length; ++i) { h = aH[i]; // sTag element (trigger) c = aC[i]; // collapsible element (target) if (h && c) { h.collapsibleEle = c; h.collapsed = !bMin; h.onclick = fnOnClick; h.onclick(); } } } function H3_OnClick() { var d, t; if (this.collapsed) { d = 'block'; t = 'Hide'; } else { d = 'none'; t = 'Show'; } this.collapsibleEle.style.display = d; this.setAttribute('title', 'Click to ' + t + ' Section'); this.collapsed = !this.collapsed; } function H1_OnClick() { var d, t, w; var lc = xGetElementById('leftColumn'); var rc = xGetElementById('rightColumn'); if (this.collapsed) { d = 'block'; t = 'Hide'; w = '70'; } else { d = 'none'; t = 'Show'; w = '96'; } rc.style.display = d; lc.style.width = w + '%'; this.setAttribute('title', 'Click to ' + t + ' Side Panel'); this.collapsed = !this.collapsed; } |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:15
|
Update of /cvsroot/easystruts/easystruts-website/web-edit/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web-edit/images Added Files: .htaccess attachment_small.png xmlCoffeeCup.png out.png attachment_big.png xml.png Log Message: Added new web site sources and data --- NEW FILE: xml.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: attachment_small.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: .htaccess --- Options -Indexes --- NEW FILE: xmlCoffeeCup.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: out.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: attachment_big.png --- (This appears to be a binary file; contents omitted.) |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:15
|
Update of /cvsroot/easystruts/easystruts-website/web-edit/templates/easystruts-edit/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/web-edit/templates/easystruts-edit/images Added Files: easystruts-small-195x44r.png spacer.gif contentTopshadow.gif .htaccess headerBackground-blue620x1.gif leftMenuTopshadow-blue.gif favicon.ico Log Message: Added new web site sources and data --- NEW FILE: contentTopshadow.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: spacer.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: easystruts-small-195x44r.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: .htaccess --- Options -Indexes --- NEW FILE: leftMenuTopshadow-blue.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: favicon.ico --- (This appears to be a binary file; contents omitted.) --- NEW FILE: headerBackground-blue620x1.gif --- (This appears to be a binary file; contents omitted.) |
From: Philippe O. <pom...@us...> - 2005-05-15 23:44:15
|
Update of /cvsroot/easystruts/easystruts-website/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv435/lib/x-cbe/x3151_cbe4191_z4/cross-browser.com/images Added Files: grn_bnr1.jpg Log Message: Added new web site sources and data --- NEW FILE: grn_bnr1.jpg --- (This appears to be a binary file; contents omitted.) |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:59
|
Update of /cvsroot/easystruts/easystruts-website/web/WEB-INF/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web/WEB-INF/lib Log Message: Directory /cvsroot/easystruts/easystruts-website/web/WEB-INF/lib added to the repository |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:59
|
Update of /cvsroot/easystruts/easystruts-website/web/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web/images Log Message: Directory /cvsroot/easystruts/easystruts-website/web/images added to the repository |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:59
|
Update of /cvsroot/easystruts/easystruts-website/web/WEB-INF In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web/WEB-INF Log Message: Directory /cvsroot/easystruts/easystruts-website/web/WEB-INF added to the repository |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:57
|
Update of /cvsroot/easystruts/easystruts-website/web-edit/templates/easystruts-edit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web-edit/templates/easystruts-edit Log Message: Directory /cvsroot/easystruts/easystruts-website/web-edit/templates/easystruts-edit added to the repository |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:57
|
Update of /cvsroot/easystruts/easystruts-website/web-edit/templates/easystruts-edit/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web-edit/templates/easystruts-edit/images Log Message: Directory /cvsroot/easystruts/easystruts-website/web-edit/templates/easystruts-edit/images added to the repository |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:56
|
Update of /cvsroot/easystruts/easystruts-website/web-edit/templates In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web-edit/templates Log Message: Directory /cvsroot/easystruts/easystruts-website/web-edit/templates added to the repository |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:55
|
Update of /cvsroot/easystruts/easystruts-website/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web Log Message: Directory /cvsroot/easystruts/easystruts-website/web added to the repository |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:29
|
Update of /cvsroot/easystruts/easystruts-website/web/templates/easystruts/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web/templates/easystruts/images Log Message: Directory /cvsroot/easystruts/easystruts-website/web/templates/easystruts/images added to the repository |
From: Philippe O. <pom...@us...> - 2005-05-15 23:42:28
|
Update of /cvsroot/easystruts/easystruts-website/web/templates/easystruts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/web/templates/easystruts Log Message: Directory /cvsroot/easystruts/easystruts-website/web/templates/easystruts added to the repository |