From: <al...@us...> - 2008-02-16 01:09:42
|
Revision: 2201 http://archive-access.svn.sourceforge.net/archive-access/?rev=2201&view=rev Author: alexoz Date: 2008-02-15 17:09:41 -0800 (Fri, 15 Feb 2008) Log Message: ----------- Added in-progress access control administration UI. * NewSurtTokenizer.java, NewSurtTokenizerTest.java Added an iterator-based SURT tokenizer that breaks a SURT into pieces and returns each piece one by one. It also leaves commas at the end of hostname components. * jscalendar-1.0 Added javascript calendar library (LGPL). Modified Paths: -------------- trunk/archive-access/projects/access-control/oracle/pom.xml trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/exclusions-oracle-servlet.xml trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/urlrewrite.xml trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/web.xml trunk/archive-access/projects/access-control/pom.xml Added Paths: ----------- trunk/archive-access/projects/access-control/access-control/src/main/java/org/archive/surt/NewSurtTokenizer.java trunk/archive-access/projects/access-control/access-control/src/test/java/org/archive/surt/NewSurtTokenizerTest.java trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/ trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/AdminController.java trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/DisplayRule.java trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/SurtNode.java trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/footer.inc trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/header.inc trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/index.jsp trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/list_rules.jsp trunk/archive-access/projects/access-control/oracle/src/main/webapp/css/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/css/admin.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/js/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/js/calendar.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/ChangeLog trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/README trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/bugtest-hidden-selects.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-blue.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-blue2.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-brown.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-green.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-setup.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-setup_stripped.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-system.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-tas.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-win2k-1.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-win2k-2.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-win2k-cold-1.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar-win2k-cold-2.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar.php trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/calendar_stripped.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/dayinfo.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/doc/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/doc/html/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/doc/html/field-button.jpg trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/doc/html/reference-Z-S.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/doc/html/reference.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/doc/html/reference.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/doc/reference.pdf trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/img.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/index.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-af.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-al.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-bg.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-big5-utf8.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-big5.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-br.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-ca.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-cs-utf8.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-cs-win.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-da.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-de.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-du.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-el.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-en.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-es.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-fi.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-fr.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-he-utf8.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-hr-utf8.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-hr.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-hu.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-it.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-jp.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-ko-utf8.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-ko.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-lt-utf8.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-lt.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-lv.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-nl.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-no.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-pl-utf8.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-pl.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-pt.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-ro.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-ru.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-ru_win_.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-si.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-sk.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-sp.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-sv.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-tr.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/calendar-zh.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/lang/cn_utf8.js trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/menuarrow.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/menuarrow2.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/multiple-dates.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/release-notes.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/simple-1.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/simple-2.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/simple-3.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/ trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/active-bg.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/dark-bg.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/hover-bg.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/menuarrow.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/normal-bg.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/rowhover-bg.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/status-bg.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/theme.css trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/title-bg.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/skins/aqua/today-bg.gif trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/test-position.html trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/test.php trunk/archive-access/projects/access-control/oracle/src/test/java/org/archive/accesscontrol/webui/ trunk/archive-access/projects/access-control/oracle/src/test/java/org/archive/accesscontrol/webui/SurtNodeTest.java Added: trunk/archive-access/projects/access-control/access-control/src/main/java/org/archive/surt/NewSurtTokenizer.java =================================================================== --- trunk/archive-access/projects/access-control/access-control/src/main/java/org/archive/surt/NewSurtTokenizer.java (rev 0) +++ trunk/archive-access/projects/access-control/access-control/src/main/java/org/archive/surt/NewSurtTokenizer.java 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,138 @@ +package org.archive.surt; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.regex.Pattern; + +/** + * The new SURT tokenizer breaks a SURT up into tokens. + * + * For example "(org,archive,www,)/path/file.html?query#anchor" is broken up into: + * + * ["(" + * "org," + * "archive," + * "www," + * ")/" + * "path/" + * "file.html" + * "?query" + * "#anchor"] + * + * @author aosborne + * + */ +public class NewSurtTokenizer implements Iterable<String> { + private String surt; + private int endOfAuthority; + private int endOfPath; + private int surtLength; + + public NewSurtTokenizer(String surt) { + super(); + this.surt = surt; + surtLength = surt.length(); + endOfAuthority = surt.indexOf(')'); + if (endOfAuthority == -1) { + endOfAuthority = surtLength; + } + + int hash = surt.indexOf('#'); + int question = surt.indexOf('?'); + if (hash == -1) { + endOfPath = question; + } else if (question == -1) { + endOfPath = hash; + } else { + endOfPath = hash < question ? hash : question; + } + if (endOfPath == -1) { + endOfPath = surtLength; + } + + } + + private class NewSurtTokenizerIterator implements Iterator<String> { + int pos = 0; + + public boolean hasNext() { + return pos < surtLength; + } + + private int nextPieceEnd() { + // ROOT: "(..." + if (pos == 0) { + return 1; // "(" + } + // Host components: "foo,..." + if (pos < endOfAuthority || endOfAuthority == -1) { + int endOfHostComponent = surt.indexOf(',', pos); + if (endOfHostComponent == -1) { + return surtLength; + } else { + return endOfHostComponent + 1; + } + } + + // Host index: ")/..." + if (pos == endOfAuthority) { + return pos + 2; + } + + // Path segments: "directory/" + if (pos < endOfPath || endOfPath == -1) { + int endOfPathSegment = surt.indexOf('/', pos); + if (endOfPathSegment < endOfPath && endOfPathSegment != -1) { + return endOfPathSegment + 1; + } else if (endOfPath != -1) { // file: "hello.html" + return endOfPath; + } else { + return surtLength; + } + } + + // Query string + if (surt.charAt(pos) == '?') { + int endOfQuery = surt.indexOf('#'); + if (endOfQuery != -1) { + return endOfQuery; + } else { + return surtLength; + } + } + + // Anchor "#boo" + return surtLength; + } + + public String next() { + int pieceEnd = nextPieceEnd(); + String piece = surt.substring(pos, pieceEnd); + pos = pieceEnd; + return piece; + } + + public void remove() { + // TODO Auto-generated method stub + + } + + } + + public Iterator<String> iterator() { + return new NewSurtTokenizerIterator(); + } + + public List<String> toList() { + List<String> list = new ArrayList<String>(); + for (String piece: this) { + list.add(piece); + } + return list; + } + public String[] toArray() { + return (String[]) toList().toArray(); + } + +} Added: trunk/archive-access/projects/access-control/access-control/src/test/java/org/archive/surt/NewSurtTokenizerTest.java =================================================================== --- trunk/archive-access/projects/access-control/access-control/src/test/java/org/archive/surt/NewSurtTokenizerTest.java (rev 0) +++ trunk/archive-access/projects/access-control/access-control/src/test/java/org/archive/surt/NewSurtTokenizerTest.java 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,165 @@ +package org.archive.surt; + +import java.util.Iterator; + +import junit.framework.TestCase; + +public class NewSurtTokenizerTest extends TestCase { + + public void testRoot() { + NewSurtTokenizer tok = new NewSurtTokenizer("("); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertFalse(it.hasNext()); + + } + + public void testOneSeg() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org", it.next()); + assertFalse(it.hasNext()); + } + + public void testOneSegComma() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertFalse(it.hasNext()); + } + + public void testFewSegs() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www", it.next()); + assertFalse(it.hasNext()); + } + + public void testFewSegsComma() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www,"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www,", it.next()); + assertFalse(it.hasNext()); + } + + public void testIndex() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www,)/"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www,", it.next()); + assertEquals(")/", it.next()); + assertFalse(it.hasNext()); + } + + public void testPage() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www,)/about.html"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www,", it.next()); + assertEquals(")/", it.next()); + assertEquals("about.html", it.next()); + assertFalse(it.hasNext()); + } + + public void testPath() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www,)/one/two/"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www,", it.next()); + assertEquals(")/", it.next()); + assertEquals("one/", it.next()); + assertEquals("two/", it.next()); + assertFalse(it.hasNext()); + } + + + public void testPathPage() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www,)/one/two/about.html"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www,", it.next()); + assertEquals(")/", it.next()); + assertEquals("one/", it.next()); + assertEquals("two/", it.next()); + assertEquals("about.html", it.next()); + assertFalse(it.hasNext()); + } + + + public void testQuery() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www,)/one/two/about.html?yo=hey&hi"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www,", it.next()); + assertEquals(")/", it.next()); + assertEquals("one/", it.next()); + assertEquals("two/", it.next()); + assertEquals("about.html", it.next()); + assertEquals("?yo=hey&hi", it.next()); + assertFalse(it.hasNext()); + } + + + public void testAnchor() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www,)/one/two/about.html#fishing/,)fish(?moo"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www,", it.next()); + assertEquals(")/", it.next()); + assertEquals("one/", it.next()); + assertEquals("two/", it.next()); + assertEquals("about.html", it.next()); + assertEquals("#fishing/,)fish(?moo", it.next()); + assertFalse(it.hasNext()); + } + + public void testQueryAnchor() { + NewSurtTokenizer tok = new NewSurtTokenizer("(org,archive,www,)/fishes/pinky.html?moo=yes&bar=12#423"); + Iterator<String> it = tok.iterator(); + + assertEquals("(", it.next()); + assertEquals("org,", it.next()); + assertEquals("archive,", it.next()); + assertEquals("www,", it.next()); + assertEquals(")/", it.next()); + assertEquals("fishes/", it.next()); + assertEquals("pinky.html", it.next()); + assertEquals("?moo=yes&bar=12", it.next()); + assertEquals("#423", it.next()); + assertFalse(it.hasNext()); + + } + + +} Modified: trunk/archive-access/projects/access-control/oracle/pom.xml =================================================================== --- trunk/archive-access/projects/access-control/oracle/pom.xml 2008-02-13 00:50:02 UTC (rev 2200) +++ trunk/archive-access/projects/access-control/oracle/pom.xml 2008-02-16 01:09:41 UTC (rev 2201) @@ -1,18 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?><project> + <parent> + <artifactId>access-control</artifactId> + <groupId>org.archive</groupId> + <version>0.0.1-SNAPSHOT</version> + </parent> <modelVersion>4.0.0</modelVersion> <groupId>org.archive.access-control</groupId> <artifactId>oracle</artifactId> <packaging>war</packaging> + <name>Access-Control: Oracle Webapp</name> <version>0.0.1-SNAPSHOT</version> <description></description> - <name>Access-Control: Oracle Webapp</name> - - <parent> - <groupId>org.archive</groupId> - <artifactId>access-control</artifactId> - <version>0.0.1-SNAPSHOT</version> - </parent> - <build> <extensions> <extension> @@ -73,15 +71,20 @@ <dependencies> <dependency> <groupId>javax.servlet</groupId> + <artifactId>jstl</artifactId> + <version>1.1.2</version> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> </dependency> - <dependency> - <groupId>org.archive.access-control</groupId> - <artifactId>access-control</artifactId> - <version>0.0.1-SNAPSHOT</version> - </dependency> <dependency> + <groupId>org.archive.access-control</groupId> + <artifactId>access-control</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>2.5.1</version> @@ -112,10 +115,10 @@ <version>8.2-504.jdbc3</version> </dependency> <dependency> - <groupId>hsqldb</groupId> - <artifactId>hsqldb</artifactId> - <version>1.8.0.7</version> - </dependency> + <groupId>hsqldb</groupId> + <artifactId>hsqldb</artifactId> + <version>1.8.0.7</version> + </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> @@ -146,5 +149,15 @@ <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> + <dependency> + <groupId>org.apache.velocity</groupId> + <artifactId>velocity</artifactId> + <version>1.5</version> + </dependency> + <dependency> + <groupId>taglibs</groupId> + <artifactId>standard</artifactId> + <version>1.1.2</version> + </dependency> </dependencies> -</project> +</project> \ No newline at end of file Added: trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/AdminController.java =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/AdminController.java (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/AdminController.java 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,134 @@ +package org.archive.accesscontrol.webui; + +import java.net.URLEncoder; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.httpclient.URIException; +import org.archive.accesscontrol.model.HibernateRuleDao; +import org.archive.accesscontrol.model.Rule; +import org.archive.accesscontrol.model.RuleSet; +import org.archive.surt.SURTTokenizer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.AbstractController; + +public class AdminController extends AbstractController { + private HibernateRuleDao ruleDao; + private static final DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + static { + dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT")); + } + + @Autowired + public AdminController(HibernateRuleDao ruleDao) { + this.ruleDao = ruleDao; + } + + protected ModelAndView ruleList(String surt, HttpServletRequest request, + HttpServletResponse response) throws Exception { + Long editingRuleId = null; + if (request.getParameter("edit") != null) { + try { + editingRuleId = Long.decode(request.getParameter("edit")); + } catch (NumberFormatException e) { + } + } + return ruleList(surt, editingRuleId, request, response); + } + + protected ModelAndView ruleList(String surt, Long editingRuleId, HttpServletRequest request, + HttpServletResponse response) throws Exception { + Map<String, Object> model = new HashMap<String, Object>(); + RuleSet rules = ruleDao.getRuleTree(surt); + ArrayList<DisplayRule> ruleList = new ArrayList<DisplayRule>(); + + for (Rule rule: rules) { + int comparison = rule.getSurt().compareTo(surt); + if (comparison <= 0) { + DisplayRule displayRule = new DisplayRule(rule, comparison != 0); + displayRule.setEditing(rule.getId().equals(editingRuleId)); + ruleList.add(displayRule); + } else { + // lowerRules.add(rule); + } + } + Collections.sort(ruleList); + + model.put("rules", ruleList); + model.put("surt", surt); + model.put("encodedSurt", URLEncoder.encode(surt, "utf-8")); + model.put("breadcrumbs", SurtNode.nodesFromSurt(surt)); + model.put("editingRuleId", request.getParameter("edit")); + return new ModelAndView("list_rules", model); + } + + @Override + protected ModelAndView handleRequestInternal(HttpServletRequest request, + HttpServletResponse response) throws Exception { + if (request.getParameter("saveRule") != null) { + return saveRule(request, response); + } + + + String surt = (String) request.getAttribute("id"); + if (surt == null) { + surt = request.getParameter("surt"); + } + + if (surt != null) { + return ruleList(surt, request, response); + } + + return new ModelAndView("index"); + } + + private ModelAndView saveRule(HttpServletRequest request, + HttpServletResponse response) throws Exception { + String surt = request.getParameter("surt"); + Long ruleId = Long.decode(request.getParameter("edit")); + Rule rule = ruleDao.getRule(ruleId); + rule.setSurt(surt); + rule.setPolicy(request.getParameter("policy")); + rule.setWho(request.getParameter("who")); + rule.setCaptureStart(parseDate(request.getParameter("captureStart"))); + rule.setCaptureEnd(parseDate(request.getParameter("captureEnd"))); + rule.setRetrievalStart(parseDate(request.getParameter("retrievalStart"))); + rule.setRetrievalEnd(parseDate(request.getParameter("retrievalEnd"))); + rule.setSecondsSinceCapture(parseInteger(request.getParameter("secondsSinceCapture"))); + ruleDao.saveRule(rule); + + response.setHeader("Location", request.getContextPath() + "/admin?surt=" + URLEncoder.encode(surt, "UTF-8")); + response.setStatus(302); + return null; + } + + private Date parseDate(String s) { + try { + return dateFormatter.parse(s); + } catch (ParseException e) { + return null; + } + } + + private Integer parseInteger(String s) { + try { + return Integer.decode(s); + } catch (NumberFormatException e) { + return null; + } + } + +} Added: trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/DisplayRule.java =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/DisplayRule.java (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/DisplayRule.java 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,56 @@ +package org.archive.accesscontrol.webui; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +import org.archive.accesscontrol.model.Rule; + +/** + * Wrapper for Rule that holds extra fields and methods useful for rendering a rule. + * @author ato + * + */ +public class DisplayRule implements Comparable<DisplayRule> { + private Rule rule; + private boolean inherited; + private boolean editing; + + public DisplayRule(Rule rule, boolean inherited) { + super(); + this.rule = rule; + this.inherited = inherited; + } + + public Rule getRule() { + return rule; + } + + public void setRule(Rule rule) { + this.rule = rule; + } + + public int compareTo(DisplayRule o) { + return getRule().compareTo(o.getRule()); + } + + public boolean isInherited() { + return inherited; + } + + public void setInherited(boolean inherited) { + this.inherited = inherited; + } + + public boolean isEditing() { + return editing; + } + + public void setEditing(boolean editing) { + this.editing = editing; + } + + public String getEncodedSurt() throws UnsupportedEncodingException { + return URLEncoder.encode(rule.getSurt(), "utf-8"); + } + +} Added: trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/SurtNode.java =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/SurtNode.java (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/java/org/archive/accesscontrol/webui/SurtNode.java 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,51 @@ +package org.archive.accesscontrol.webui; + +import java.util.ArrayList; +import java.util.List; + +import org.archive.surt.NewSurtTokenizer; + +/** + * A node in the SURT tree. + * + * @author aosborne + * + */ +public class SurtNode { + private String name; + private String surt; + + public SurtNode(String name, String surt) { + super(); + this.name = name; + this.surt = surt; + } + public String getName() { + return name; + } + public String getSurt() { + return surt; + } + + /** + * Return a list of the elements in a given SURT. + * + * For example for "(org,archive," we return: + * + * [new SurtNode("(", "("), + * new SurtNode("org,", "(org"), + * new SurtNode("archive,", "archive,")] + * + * @param surt + * @return + */ + public static List<SurtNode> nodesFromSurt(String surt) { + List<SurtNode> list = new ArrayList<SurtNode>(); + String running = ""; + for (String token: new NewSurtTokenizer(surt)) { + running += token; + list.add(new SurtNode(token, running)); + } + return list; + } +} Modified: trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/exclusions-oracle-servlet.xml =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/exclusions-oracle-servlet.xml 2008-02-13 00:50:02 UTC (rev 2200) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/exclusions-oracle-servlet.xml 2008-02-16 01:09:41 UTC (rev 2201) @@ -16,10 +16,13 @@ class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <bean name="/rules" - class="org.archive.accesscontrol.oracle.RulesController"> - + class="org.archive.accesscontrol.oracle.RulesController"> </bean> + <bean name="/admin" + class="org.archive.accesscontrol.webui.AdminController"> + </bean> + <!-- MultipartResolver for parsing file uploads, implementation for Commons FileUpload --> <!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> @@ -59,6 +62,7 @@ <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> + <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> Modified: trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/urlrewrite.xml =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/urlrewrite.xml 2008-02-13 00:50:02 UTC (rev 2200) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/urlrewrite.xml 2008-02-16 01:09:41 UTC (rev 2201) @@ -12,7 +12,7 @@ attribute. This allows AutoFormatView to render the appropriate type of output. </note> - <from>^/(.*)\.(\w+)$</from> + <from>^/(rules.*)\.(\w+)$</from> <set name="format">$2</set> <to last="false">/$1</to> </rule> @@ -28,4 +28,11 @@ <set name="id">$1</set> <to>/rules</to> </rule> + + <rule> + <from>^/admin/(.*)$</from> + <set name="id">$1</set> + <to>/admin</to> + </rule> + </urlrewrite> Added: trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/footer.inc =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/footer.inc (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/footer.inc 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,2 @@ +</body> +</html> \ No newline at end of file Added: trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/header.inc =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/header.inc (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/header.inc 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<%@ page contentType="text/html" %> +<%@ page pageEncoding="utf-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<!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" xml:lang="en" lang="en"> +<head> + <title>Archive Access Control Admin</title> + <link rel="stylesheet" type="text/css" href="<c:url value="/css/admin.css"/>" /> + + <style type="text/css">@import url(<c:url value="/jscalendar-1.0/calendar-win2k-1.css"/>);</style> + <script type="text/javascript" src="<c:url value="/jscalendar-1.0/calendar.js"/>"></script> + <script type="text/javascript" src="<c:url value="/jscalendar-1.0/lang/calendar-en.js"/>"></script> + <script type="text/javascript" src="<c:url value="/jscalendar-1.0/calendar-setup.js"/>"></script> + <script type="text/javascript" src="<c:url value="/js/calendar.js"/>"></script> + +</head> +<body> + <h1>Archive Access Control</h1> \ No newline at end of file Added: trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/index.jsp =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/index.jsp (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/index.jsp 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,17 @@ +<%@ include file="header.inc"%> + +<form action="<c:url value="/admin"/>" method="GET"><input size="50" name="surt" + value="(org,archive,www,)/foo" /> <input type="submit" value="Go!" /> +</form> + +<h2 class="breadcrumb"><a href="admin?surt=(org">(org</a>,<a + href="admin?surt=(org,archive">archive</a></h2> + +<ul> + <li><a href="admin?surt=(org,archive,audio">audio</a></li> + <li>web</li> + <li>webteam</li> + <li>www</li> +</ul> + +<%@ include file="footer.inc"%> Added: trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/list_rules.jsp =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/list_rules.jsp (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/views/list_rules.jsp 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,103 @@ +<%@ include file="header.inc"%> + +<form action="<c:url value="/admin"/>" method="GET" id="navForm"> +<label for="surtNavBox">SURT or URL:</label> <input size="50" + name="surt" value="<c:out value="${surt}"/>" id="surtNavBox" /> <input + type="submit" value="Go!" /></form> + +<div id="breadcrumbsContainer"> +<ul id="breadcrumbs"> + <c:forEach var="node" items="${breadcrumbs}"> + <li><a href="<c:url value="/admin?surt=${node.surt}" />" + title="<c:out value="${node.surt}" />"><c:out value="${node.name}" /></a></li> + </c:forEach> +</ul> +</div> + +<table> + <thead> + <tr> + <th>SURT</th> + <th>Capture date</th> + <th>Retrieval date</th> + <th>Group</th> + <th>Policy</th> + <th></th> + </tr> + </thead> + <tbody> + <c:forEach var="rule" items="${rules }"> + <c:choose> + <c:when test="${rule.editing }"> + <tr class="rule editing"> + <td colspan="6"> + <form action="<c:url value="/admin"/>" method="post"><input + type="hidden" name="edit" + value="<c:out value="${rule.rule.id}"/>" /> + <fieldset> + <p><label for="surt">SURT:</label> <input name="surt" + id="surt" value="<c:out value="${rule.rule.surt}"/>" /></p> + + <p><label for="who">Group:</label> <input name="who" id="who" + value="<c:out value="${rule.rule.who }"/>" /></p> + + <p><label for="captureStart">Captured from</label> <input + name="captureStart" id="captureStart" + value="<fmt:formatDate value="${rule.rule.captureStart }" type="both" pattern="yyyy-MM-dd HH:mm:ss" />" /> + to <input name="captureEnd" id="captureEnd" + value="<fmt:formatDate value="${rule.rule.captureEnd }" type="both" pattern="yyyy-MM-dd HH:mm:ss" />" /></p> + + <p><label for="captureStart">Retrieved from</label> <input + name="retrievalStart" id="retrievalStart" + value="<fmt:formatDate value="${rule.rule.retrievalStart }" type="both" pattern="yyyy-MM-dd HH:mm:ss"/>" /> + to <input name="retrievalEnd" id="retrievalEnd" + value="<fmt:formatDate value="${rule.rule.retrievalEnd }" type="both" pattern="yyyy-MM-dd HH:mm:ss"/>" /></p> + + <p><label for="secondsSinceCapture">Seconds since + capture (embargo):</label> <input name="secondsSinceCapture" + id="secondsSinceCapture" + value="<c:out value="${rule.rule.secondsSinceCapture }"/>" /></p> + + <p><label for="policy">Policy:</label> <input name="policy" + id="policy" value="<c:out value="${rule.rule.policy}"/>" /></p> + <input type="submit" value="Save" name="saveRule" /></fieldset> + </form> + <script type="text/javascript"> + setupDateRangeCalendars("captureStart", "captureEnd"); + setupDateRangeCalendars("retrievalStart", "retrievalEnd"); + </script></td> + </tr> + </c:when> + <c:otherwise> + <tr class="rule<c:if test="${rule.inherited }"> inherited</c:if>" + id="rule_<c:out value="${rule.rule.id}"/>"> + <td><c:out value="${rule.rule.surt}" /></td> + <td><span class="date" + title="<fmt:formatDate value="${rule.rule.captureStart }" type="both" pattern="yyyy-MM-dd HH:mm:ss" />"><fmt:formatDate + value="${rule.rule.captureStart }" type="both" + pattern="yyyy-MM-dd" /></span> to <span class="date" + title="<fmt:formatDate value="${rule.rule.captureEnd }" type="both" pattern="yyyy-MM-dd HH:mm:ss" />"><fmt:formatDate + value="${rule.rule.captureEnd }" type="both" pattern="yyyy-MM-dd" /></span></td> + <td><span class="date" + title="<fmt:formatDate value="${rule.rule.retrievalStart }" type="both" pattern="yyyy-MM-dd HH:mm:ss" />"><fmt:formatDate + value="${rule.rule.retrievalStart }" type="both" + pattern="yyyy-MM-dd" /></span> to <span class="date" + title="<fmt:formatDate value="${rule.rule.retrievalEnd }" type="both" pattern="yyyy-MM-dd HH:mm:ss" />"><fmt:formatDate + value="${rule.rule.retrievalEnd }" type="both" + pattern="yyyy-MM-dd" /></span></td> + <td><c:out value="${rule.rule.who}" /></td> + <td><c:out value="${rule.rule.policy}" /></td> + <td><a + href="<c:url value="/admin?surt=${rule.encodedSurt}&edit=${rule.rule.id}"/>">Edit</a></td> + </tr> + </c:otherwise> + </c:choose> + </c:forEach> + <tr> + <td colspan="6" class="newrule"><a + href="<c:url value="/admin?surt=${encodedSurt}&edit=new"/>">Add + new rule</a></td> + </tr> + </tbody> +</table> +<%@ include file="footer.inc"%> \ No newline at end of file Modified: trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/web.xml 2008-02-13 00:50:02 UTC (rev 2200) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/WEB-INF/web.xml 2008-02-16 01:09:41 UTC (rev 2201) @@ -61,10 +61,13 @@ <servlet-mapping> <servlet-name>exclusions-oracle</servlet-name> - <url-pattern>/</url-pattern> + <url-pattern>/rules</url-pattern> </servlet-mapping> + <servlet-mapping> + <servlet-name>exclusions-oracle</servlet-name> + <url-pattern>/admin</url-pattern> + </servlet-mapping> - <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> Added: trunk/archive-access/projects/access-control/oracle/src/main/webapp/css/admin.css =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/css/admin.css (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/css/admin.css 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,65 @@ +.inherited { + color: #999; +} + +td { + background: #eee; + padding: 4px; +} + +span.date { + color: #006; + font-weight: bold; +} + +th { + text-align: left; +} + +td.newrule { + text-align: right; +} + +h1 { + padding-left: 40px; + background-image: url(../images/greylock.gif); + background-repeat: no-repeat; +} + +ul#breadcrumbs { + margin: 1px; + padding: 0; + font-family: Monaco, Courier, monospace; + white-space: nowrap; +} + +div#breadcrumbsContainer { + border-bottom: solid 1px #999; + margin-bottom: 2em; + padding-top: 2em; + padding-left: 1em; + +} + +ul#breadcrumbs li { + display: inline; + list-style-type: none; +} + +ul#breadcrumbs a { + background: #eef; + text-decoration: none; + padding: 2px 2px; + border-left: 1px solid #999; + border-right: 1px solid #999; + border-top: 1px solid #999; + border-bottom: 1px solid #eef; + +} + +ul#breadcrumbs a:hover { + background: #ccf; +} +table { + clear: both; +} \ No newline at end of file Added: trunk/archive-access/projects/access-control/oracle/src/main/webapp/js/calendar.js =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/js/calendar.js (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/js/calendar.js 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,33 @@ +function ensureSmaller(smaller,larger,change) { + if(smaller.value != "" && larger.value != "") { + if(smaller.value > larger.value) { + if(smaller == change) { + smaller.value = larger.value; + } else { + larger.value = smaller.value; + } + } + } +} +function mySetupCal(id,fn) { + var dateFormatString = "%Y-%m-%d %H:%M:%S"; + Calendar.setup( + { + inputField : id, + ifFormat : dateFormatString, + showsTime : true, + timeFormat : "24", + onUpdate : fn, + }); +} + +function setupDateRangeCalendars(startField, endField) { + var capStart = document.getElementById(startField); + var capEnd = document.getElementById(endField); + + function ensureCapStart(cal) { ensureSmaller(capStart,capEnd,capEnd) } + function ensureCapEnd(cal) { ensureSmaller(capStart,capEnd,capStart) } + + mySetupCal(startField,ensureCapStart); + mySetupCal(endField,ensureCapEnd); +} \ No newline at end of file Added: trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/ChangeLog =================================================================== --- trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/ChangeLog (rev 0) +++ trunk/archive-access/projects/access-control/oracle/src/main/webapp/jscalendar-1.0/ChangeLog 2008-02-16 01:09:41 UTC (rev 2201) @@ -0,0 +1,761 @@ +2005-03-07 Mihai Bazon <mih...@ya...> + + * skins/aqua/theme.css: *** empty log message *** + + * release-notes.html: updated release notes + + * calendar-setup.js: + use a better approach to initialize the calendar--don't call _init twice, + it's the most time consuming function in the calendar. Instead, determine + the date beforehand if possible and pass it to the calendar at constructor. + + * calendar.js: + avoid keyboard operation when 'multiple dates' is set (very buggy for now) + + * calendar.js: + fixed keyboard handling problems: now it works fine when "showsOtherMonths" + is passed; it also seems to be fine with disabled dates (won't normally + allow selection)--however this area is still likely to be buggy, i.e. in a + month that has all the dates disabled. + + * calendar.js: + some trivial performance improvements in the _init function + Added Date.parseDate (old Calendar.prototype.parseDate now calls this one) + +2005-03-05 Mihai Bazon <mih...@ya...> + + * release-notes.html: updated release notes + + * dayinfo.html: *** empty log message *** + + * calendar-setup.js: + bugfix--update an inputField even if flat calendar is selected + + * calendar.js: + fixed bugs in parseDate function (if for some reason the input string is + totally broken, then check numbers for NaN and use values from the current + date instead) + + * make-release.pl: copy the skins subdirectory and all skins + + * index.html: added Aqua skin + + * skins/aqua/active-bg.gif, skins/aqua/dark-bg.gif, skins/aqua/hover-bg.gif, skins/aqua/menuarrow.gif, skins/aqua/normal-bg.gif, skins/aqua/rowhover-bg.gif, skins/aqua/status-bg.gif, skins/aqua/theme.css, skins/aqua/title-bg.gif, skins/aqua/today-bg.gif: + in the future, skins will go to this directory, each in a separate subdir; for now there's only Aqua, an excellent new skin + + * calendar.js: workaround IE bug, needed in the Aqua theme + don't hide select elements unless browser is IE or Opera + + * lang/calendar-bg.js, lang/calendar-big5-utf8.js, lang/calendar-big5.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-utf8.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-de.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fi.js, lang/calendar-fr.js, lang/calendar-he-utf8.js, lang/calendar-hu.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-lt-utf8.js, lang/calendar-lt.js, lang/calendar-lv.js, lang/calendar-nl.js, lang/calendar-no.js, lang/calendar-pl-utf8.js, lang/calendar-pl.js, lang/calendar-pt.js, lang/calendar-ro.js, lang/calendar-ru.js, lang/calendar-ru_win_.js, lang/calendar-si.js, lang/calendar-sk.js, lang/calendar-sp.js, lang/calendar-sv.js, lang/calendar-zh.js, lang/cn_utf8.js: + updated urls, copyright notices + + * doc/reference.tex: updated documentation + + * calendar.js, index.html: + renamed the global variable to _dynarch_popupCalendar to avoid name clashes + + * multiple-dates.html: start with an empty array + + * calendar.js: + fixed bugs in the time selector (12:XX pm was wrongfully understood as 12:XX am) + + * calendar.js: + using innerHTML instead of text nodes; works better in Safari and also makes + a smaller, cleaner code + +2005-03-04 Mihai Bazon <mih...@ya...> + + * calendar.js: + fixed a performance regression that occurred after adding support for multiple dates + fixed the time selection bug (now it keeps time correctly) + clicking today will close the calendar if "today" is already selected + + * lang/cn_utf8.js: new translation + +2005-02-17 Mihai Bazon <mih...@ya...> + + * lang/calendar-ar-utf8.zip: Added arabic translation + +2004-10-19 Mihai Bazon <mih...@ya...> + + * lang/calendar-zh.js: updated + +2004-09-20 Mihai Bazon <mih...@ya...> + + * lang/calendar-no.js: updated (Daniel Holmen) + +2004-09-20 Mihai Bazon <mih...@ya...> + + * lang/calendar-no.js: updated (Daniel Holmen) + +2004-08-11 Mihai Bazon <mih...@ya...> + + * lang/calendar-nl.js: updated language file (thanks to Arjen Duursma) + + * lang/calendar-sp.js: updated (thanks to Rafael Velasco) + +2004-07-21 Mihai Bazon <mih...@ya...> + + * lang/calendar-br.js: updated + + * calendar-setup.js: fixed bug (dateText) + +2004-07-21 Mihai Bazon <mih...@ya...> + + * lang/calendar-br.js: updated + + * calendar-setup.js: fixed bug (dateText) + +2004-07-04 Mihai Bazon <mih...@ya...> + + * lang/calendar-lv.js: + added LV translation (thanks to Juris Valdovskis) + +2004-06-25 Mihai Bazon <mih...@ya...> + + * calendar.js: + fixed bug in IE (el.calendar.tooltips is null or not an object) + +2004-06-24 Mihai Bazon <mih...@ya...> + + * doc/reference.tex: fixed latex compilation + + * index.html: linking other sample files + + * calendar-setup.js, calendar.js, dayinfo.html: + ability to display day info (dateText parameter) + sample file + +2004-06-23 Mihai Bazon <mih...@ya...> + + * doc/reference.tex, lang/calendar-bg.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-nl.js, lang/calendar-sv.js, README, calendar.js, index.html: + email address changed + +2004-06-14 Mihai Bazon <mih...@ya...> + + * lang/calendar-cs-utf8.js, lang/calendar-cs-win.js: + updated translations + + * calendar-system.css: added z-index to drop downs + + * lang/calendar-en.js: + first day of week can now be part of the language file + + * lang/calendar-es.js: + updated language file (thanks to Servilio Afre Puentes) + + * calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar-blue.css: + added z-index property to drop downs (fixes bug) + +2004-06-13 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: fixed bug (apply showOthers to flat calendars too) + +2004-06-06 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: + firstDay defaults to "null", in which case the value in the language file + will be used + + * calendar.js: + firstDayOfWeek can now default to a value specified in the language definition file + + * index.html: first day of week is now numeric + +2004-06-02 Mihai Bazon <mih...@ya...> + + * calendar.js: added date tooltip function + +2004-05-28 Mihai Bazon <mih...@ya...> + + * lang/calendar-br.js: updated (thanks to Marcos Pont) + + * calendar-setup.js: fixed small bug + +2004-05-01 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: returns the calendar object + +2004-04-28 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: + patch to read the date value from the inputField, according to ifFormat (if + both are passed), for flat calendars. (thanks Colin T. Hill) + +2004-04-20 Mihai Bazon <mih...@ya...> + + * calendar-setup.js, calendar.js, multiple-dates.html: + added support for multiple dates selection + + * lang/calendar-nl.js: + updated Dutch translation, thanks to Jeroen Wolsink + + * lang/calendar-big5-utf8.js, lang/calendar-big5.js: + Traditional Chinese language (thanks GaryFu) + +2004-03-26 Mihai Bazon <mih...@ya...> + + * lang/calendar-fr.js, lang/calendar-pt.js: updated + + * lang/calendar-ru_win_.js, lang/calendar-ru.js: + updated, thanks to Sly Golovanov + +2004-03-25 Mihai Bazon <mih...@ya...> + + * lang/calendar-fr.js: updated (thanks to David Duret) + +2004-03-24 Mihai Bazon <mih...@ya...> + + * lang/calendar-da.js: updated (thanks to Michael Thingmand Henriksen) + +2004-03-21 Mihai Bazon <mih...@ya...> + + * lang/calendar-ca.js: updated (thanks to David Valls) + +2004-03-17 Mihai Bazon <mih...@ya...> + + * lang/calendar-de.js: updated to UTF8 (thanks to Jack (tR)) + +2004-03-09 Mihai Bazon <mih...@ya...> + + * lang/calendar-bg.js: Bulgarian translation + +2004-03-08 Mihai Bazon <mih...@ya...> + + * lang/calendar-he-utf8.js: Hebrew translation (thanks to Idan Sofer) + + * lang/calendar-hu.js: updated (thanks to Istvan Karaszi) + +2004-02-27 Mihai Bazon <mih...@ya...> + + * lang/calendar-it.js: updated (thanks to Fabio Di Bernardini) + +2004-02-25 Mihai Bazon <mih...@ya...> + + * calendar.js: fix for Safari (thanks to Olivier Chirouze / XPWeb) + +2004-02-22 Mihai Bazon <mih...@ya...> + + * lang/calendar-al.js: Albanian language file + +2004-02-17 Mihai Bazon <mih...@ya...> + + * lang/calendar-fr.js: fixed + + * lang/calendar-fr.js: + FR translation updated (thanks to SIMON Alexandre) + + * lang/calendar-es.js: ES translation updated, thanks to David Gonzales + +2004-02-10 Mihai Bazon <mih...@ya...> + + * lang/calendar-pt.js: + updated Portugese translation, thanks to Elcio Ferreira + +2004-02-09 Mihai Bazon <mih...@ya...> + + * TODO: updated + +2004-02-06 Mihai Bazon <mih...@ya...> + + * README: describe the PHP files + + * make-release.pl: includes php files + + * make-release.pl: ChangeLog included in the distribution (if found) + + * calendar.js, doc/reference.tex, index.html: switched to version 0.9.6 + + * doc/Calendar.setup.tex, doc/reference.tex: updated documentation + + * release-notes.html: updated release notes + + * calendar.js: Fixed bug: Feb/29 and year change now keeps Feb in view + + * calendar.js: fixed the "ESC" problem (call the close handler) + + * calendar.js: fixed day of year range (1 to 366 instead of 0 to 365) + + * calendar.js: fixed week number calculations + + * doc/reference.tex: fixed (date input format) + + * calendar.php: removed comment + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js: + workaround for IE bug (you can't normally specify through CSS the style for + an element having two classes or more; we had to change a classname) + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + smaller fonts on days that are in neighbor months + +2004-02-04 Mihai Bazon <mih...@ya...> + + * index.html: first demo shows the "showOtherMonths" capability + + * calendar-setup.js: support new parameters in the calendar. + added: firstDay, showOthers, cache. + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, lang/calendar-en.js, lang/calendar-ro.js: + new parameters: firstDayOfWeek, showsOtherMonths; removed mondayFirst. + This adds support for setting any day to be the first day of week (by just + clicking the day name in the display); also, if showsOtherMonths is enabled + then dates belonging to adjacent months that are in the current view will be + displayed and the calendar will have a fixed height. + + all themes updated. + + * test.ph... [truncated message content] |