summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org/madore/damlengine/TodoDamlElement.java9
-rw-r--r--org/madore/damlengine/TodoElement.java1
-rw-r--r--org/madore/damlengine/TodoEmailAtOrDotElement.java14
-rw-r--r--org/madore/damlengine/TodoEmailDespammedElement.java24
-rw-r--r--org/madore/damlengine/TodoFooter.java31
-rw-r--r--org/madore/damlengine/TodoWXrefAttr.java4
-rw-r--r--org/madore/damlengine/TodoWeblogSelectionElement.java6
-rw-r--r--org/madore/damlengine/WeblogDatabaseConnection.java5
-rw-r--r--org/madore/damlengine/WeblogSelect.java2
-rw-r--r--org/madore/damlengine/WeblogServlet.java9
10 files changed, 80 insertions, 25 deletions
diff --git a/org/madore/damlengine/TodoDamlElement.java b/org/madore/damlengine/TodoDamlElement.java
index 50c39bb..7cd94e3 100644
--- a/org/madore/damlengine/TodoDamlElement.java
+++ b/org/madore/damlengine/TodoDamlElement.java
@@ -58,7 +58,12 @@ public final class TodoDamlElement extends TodoDefaultElement {
Element bodyNode = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "body");
htmlNode.appendChild(bodyNode);
htmlNode.appendChild(ctx.doc.createTextNode("\n"));
- bodyNode.setAttributeNS(null, "onload", "onLoad()");
+ bodyNode.setAttributeNS(null, "onload", "if (onLoad) { onLoad(); }");
+ Element earlyScript = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "script");
+ earlyScript.setAttributeNS(null, "type", "text/javascript");
+ earlyScript.appendChild(ctx.doc.createTextNode("if (onEarly) { onEarly(); }"));
+ bodyNode.appendChild(ctx.doc.createTextNode("\n"));
+ bodyNode.appendChild(earlyScript);
ctx.gc.styleContent = new StringBuffer();
try {
@@ -113,7 +118,7 @@ public final class TodoDamlElement extends TodoDefaultElement {
final WeblogSummary wsum = WeblogSummary.getSummary(ctx.dc);
if ( wsum != null ) {
final WeblogSummary.EntrySummary esum
- = wsum.entries.get(new Integer(((Context.WeblogSingleSelectionContext)(ctx.wsc)).number));
+ = wsum.entries.get(Integer.valueOf(((Context.WeblogSingleSelectionContext)(ctx.wsc)).number));
if ( esum != null && esum.title != null ) {
meta = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "meta");
meta.setAttributeNS(null, "name", "twitter:title");
diff --git a/org/madore/damlengine/TodoElement.java b/org/madore/damlengine/TodoElement.java
index 0cc7880..818fe2b 100644
--- a/org/madore/damlengine/TodoElement.java
+++ b/org/madore/damlengine/TodoElement.java
@@ -46,6 +46,7 @@ public abstract class TodoElement extends TodoItem {
damlFactories.put("email-despammed", new TodoEmailDespammedElement.Factory());
damlFactories.put("email-at", new TodoEmailAtOrDotElement.Factory(TodoEmailAtOrDotElement.Type.AT));
damlFactories.put("email-dot", new TodoEmailAtOrDotElement.Factory(TodoEmailAtOrDotElement.Type.DOT));
+ damlFactories.put("email-plus", new TodoEmailAtOrDotElement.Factory(TodoEmailAtOrDotElement.Type.PLUS));
damlFactories.put("extra-style", new TodoExtraStyleOrScriptElement.Factory(TodoStyleOrScript.Type.STYLE));
damlFactories.put("extra-script", new TodoExtraStyleOrScriptElement.Factory(TodoStyleOrScript.Type.SCRIPT));
damlFactories.put("smiley-smile", new TodoSmileyElement.Factory(TodoSmileyElement.Type.SMILE));
diff --git a/org/madore/damlengine/TodoEmailAtOrDotElement.java b/org/madore/damlengine/TodoEmailAtOrDotElement.java
index 6597291..e970264 100644
--- a/org/madore/damlengine/TodoEmailAtOrDotElement.java
+++ b/org/madore/damlengine/TodoEmailAtOrDotElement.java
@@ -6,7 +6,12 @@ public final class TodoEmailAtOrDotElement extends TodoDefaultElement {
public enum Type {
AT("commercial-at", "commercial_at.png", "at sign", "arobase"),
- DOT("full-stop", "full_stop.png", "dot", "point");
+ DOT("full-stop", "full_stop.png", "dot", "point"),
+ PLUS("plus-sign", "plus_sign.png", "plus", "plus");
+ // Images generated with:
+ // convert -size 16x20 'xc:transparent' -font 'Source-Code-Pro' -pointsize 20 -gravity South -annotate 0 '@' ~/public_html/images/commercial_at.png
+ // convert -size 16x20 'xc:transparent' -font 'Source-Code-Pro' -pointsize 20 -gravity South -annotate 0 '.' ~/public_html/images/full_stop.png
+ // convert -size 16x20 'xc:transparent' -font 'Source-Code-Pro' -pointsize 20 -gravity South -annotate 0 '+' ~/public_html/images/plus_sign.png
final String charName;
final String imgName;
final String enName;
@@ -59,16 +64,13 @@ public final class TodoEmailAtOrDotElement extends TodoDefaultElement {
LangHelper.setLangNorec(span0, expLang);
span0.setAttributeNS(null, "class", "replace-"+t.charName);
node.getParentNode().replaceChild(span0, node);
- Element span1 = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "span");
- span1.setAttributeNS(null, "class", "subreplace-"+t.charName);
- span0.appendChild(span1);
Element img = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "img");
img.setAttributeNS(null, "src",
(ctx.gc.uriToTop==null?"":ctx.gc.uriToTop)+"images/"+t.imgName);
img.setAttributeNS(null, "alt", "["+(lang.equals("fr")?t.frName:t.enName)+"]");
- img.setAttributeNS(null, "height", "15");
+ img.setAttributeNS(null, "height", "20");
img.setAttributeNS(null, "width", "16");
- span1.appendChild(img);
+ span0.appendChild(img);
}
}
diff --git a/org/madore/damlengine/TodoEmailDespammedElement.java b/org/madore/damlengine/TodoEmailDespammedElement.java
index 9d393ed..13dce54 100644
--- a/org/madore/damlengine/TodoEmailDespammedElement.java
+++ b/org/madore/damlengine/TodoEmailDespammedElement.java
@@ -23,24 +23,36 @@ public final class TodoEmailDespammedElement extends TodoDefaultElement {
@Override
public void handleNodeOnly() {
Element out0 = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "code");
+ Element out;
+ if ( node.getAttributeNS(null, "nolink").equals("") ) {
+ out = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "a");
+ out.appendChild(out0);
+ out.setAttributeNS(null, "class", "despammed-address");
+ } else
+ out = out0;
String lang = LangHelper.getLangNorec(node);
if ( lang != null )
- LangHelper.setLangNorec(out0, lang);
- Element out1 = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "a");
- out0.appendChild(out1);
- out1.setAttributeNS(null, "class", "despammed-address");
+ LangHelper.setLangNorec(out, lang);
+ {
+ String classAtt = node.getAttributeNS(null, "class");
+ if ( ! classAtt.equals("") )
+ out0.setAttributeNS(null, "class",
+ "despammed-email "+classAtt);
+ else
+ out0.setAttributeNS(null, "class", "despammed-email");
+ }
ArrayList<Node> childList = getChildList(node);
ArrayList<TodoElement> toProcess
= new ArrayList<TodoElement>(childList.size()+8);
for ( Node child : childList ) {
- out1.appendChild(child);
+ out0.appendChild(child);
if ( child.getNodeType() == Node.ELEMENT_NODE ) {
TodoElement it
= TodoElement.getTodoElement((Element)child, this.ctx, this);
toProcess.add(it);
}
}
- node.getParentNode().replaceChild(out0, node);
+ node.getParentNode().replaceChild(out, node);
this.ownerDeque.registerAtStart(toProcess);
}
diff --git a/org/madore/damlengine/TodoFooter.java b/org/madore/damlengine/TodoFooter.java
index ca46a83..cace28c 100644
--- a/org/madore/damlengine/TodoFooter.java
+++ b/org/madore/damlengine/TodoFooter.java
@@ -22,6 +22,11 @@ public final class TodoFooter extends TodoElement {
Element hr = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "hr");
footer.appendChild(hr);
footer.appendChild(ctx.doc.createTextNode("\n"));
+ Element jsFootSpace = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "div");
+ footer.appendChild(jsFootSpace);
+ footer.appendChild(ctx.doc.createTextNode("\n"));
+ jsFootSpace.setAttributeNS(null, "id", "js-foot-space");
+ jsFootSpace.appendChild(ctx.doc.createComment(" To be filled by JavaScript "));
Element addr = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "address");
footer.appendChild(addr);
footer.appendChild(ctx.doc.createTextNode("\n"));
@@ -38,11 +43,14 @@ public final class TodoFooter extends TodoElement {
addr.appendChild(ctx.doc.createTextNode(" ("));
Element email = ctx.doc.createElementNS(DamlEngine.DAML_NS, "d:email-despammed");
addr.appendChild(email);
- email.appendChild(ctx.doc.createTextNode("david+www"));
+ email.appendChild(ctx.doc.createTextNode("david"));
+ email.appendChild(ctx.doc.createElementNS(DamlEngine.DAML_NS, "d:email-plus"));
+ email.appendChild(ctx.doc.createTextNode("www"));
email.appendChild(ctx.doc.createElementNS(DamlEngine.DAML_NS, "d:email-at"));
email.appendChild(ctx.doc.createTextNode("madore"));
email.appendChild(ctx.doc.createElementNS(DamlEngine.DAML_NS, "d:email-dot"));
email.appendChild(ctx.doc.createTextNode("org"));
+ addr.appendChild(ctx.doc.createElementNS(DamlEngine.XHTML_NS, "wbr"));
addr.appendChild(ctx.doc.createTextNode("|"));
a = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "a");
a.setAttributeNS(null, "href",
@@ -51,22 +59,39 @@ public final class TodoFooter extends TodoElement {
a.setAttributeNS(null, "rel", "author");
addr.appendChild(a);
a.appendChild(ctx.doc.createTextNode("\u2042"));
+ // addr.appendChild(ctx.doc.createElementNS(DamlEngine.XHTML_NS, "wbr"));
// addr.appendChild(ctx.doc.createTextNode("|"));
// a = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "a");
// a.setAttributeNS(null, "href", "https://plus.google.com/+davidamadore");
// a.setAttributeNS(null, "rel", "author");
// addr.appendChild(a);
// a.appendChild(ctx.doc.createTextNode("Google+"));
+ addr.appendChild(ctx.doc.createElementNS(DamlEngine.XHTML_NS, "wbr"));
addr.appendChild(ctx.doc.createTextNode("|"));
a = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "a");
a.setAttributeNS(null, "href", "https://twitter.com/gro_tsen");
- a.setAttributeNS(null, "rel", "author");
+ a.setAttributeNS(null, "rel", "me");
addr.appendChild(a);
a.appendChild(ctx.doc.createTextNode("Twitter"));
+ addr.appendChild(ctx.doc.createElementNS(DamlEngine.XHTML_NS, "wbr"));
+ addr.appendChild(ctx.doc.createTextNode("|"));
+ a = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "a");
+ a.setAttributeNS(null, "href", "https://bsky.app/profile/gro-tsen.bsky.social");
+ a.setAttributeNS(null, "rel", "me");
+ addr.appendChild(a);
+ a.appendChild(ctx.doc.createTextNode("Bluesky"));
+ addr.appendChild(ctx.doc.createElementNS(DamlEngine.XHTML_NS, "wbr"));
+ addr.appendChild(ctx.doc.createTextNode("|"));
+ a = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "a");
+ a.setAttributeNS(null, "href", "https://mastodon.sdf.org/@gro_tsen_test");
+ a.setAttributeNS(null, "rel", "me");
+ addr.appendChild(a);
+ a.appendChild(ctx.doc.createTextNode("Mastodon (test)"));
+ addr.appendChild(ctx.doc.createElementNS(DamlEngine.XHTML_NS, "wbr"));
addr.appendChild(ctx.doc.createTextNode("|"));
a = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "a");
a.setAttributeNS(null, "href", "http://www.facebook.com/grotsen");
- a.setAttributeNS(null, "rel", "author");
+ a.setAttributeNS(null, "rel", "me");
addr.appendChild(a);
a.appendChild(ctx.doc.createTextNode("Facebook"));
addr.appendChild(ctx.doc.createTextNode(")"));
diff --git a/org/madore/damlengine/TodoWXrefAttr.java b/org/madore/damlengine/TodoWXrefAttr.java
index 2f0ca3c..68e5c54 100644
--- a/org/madore/damlengine/TodoWXrefAttr.java
+++ b/org/madore/damlengine/TodoWXrefAttr.java
@@ -30,9 +30,9 @@ public class TodoWXrefAttr extends TodoAttr {
+ (wxrefStr.equals("##weblog-selection-older") ? -1 : 1);
WeblogSummary sum = WeblogSummary.getSummary(ctx.dc);
if ( sum != null && sum.entries != null
- && sum.entries.containsKey(new Integer(trgt)) ) {
+ && sum.entries.containsKey(Integer.valueOf(trgt)) ) {
WeblogSummary.EntrySummary ent
- = sum.entries.get(new Integer(trgt));
+ = sum.entries.get(Integer.valueOf(trgt));
String target = "#d." + ent.date + "."
+ String.format("%04d", ent.id);
this.owner.removeAttributeNode(this.attr);
diff --git a/org/madore/damlengine/TodoWeblogSelectionElement.java b/org/madore/damlengine/TodoWeblogSelectionElement.java
index c6864f1..3029f9f 100644
--- a/org/madore/damlengine/TodoWeblogSelectionElement.java
+++ b/org/madore/damlengine/TodoWeblogSelectionElement.java
@@ -79,6 +79,8 @@ public final class TodoWeblogSelectionElement extends TodoDefaultElement {
categoryNames.get("en").put("lang", "Languages & Linguistics");
categoryNames.get("fr").put("lang", "Langues & Linguistique");
categoryNames.get("ia").put("lang", "Liguas & Linguistica");
+ categoryNames.get("en").put("meteo", "Meteorology");
+ categoryNames.get("fr").put("meteo", "M\u00e9t\u00e9orologie");
categoryNames.get("en").put("unicode", "Unicode");
categoryNames.get("fr").put("unicode", "Unicode");
categoryNames.get("en").put("cinema", "Films & Movies");
@@ -94,6 +96,8 @@ public final class TodoWeblogSelectionElement extends TodoDefaultElement {
categoryNames.get("fr").put("auto-moto", "Auto-Moto");
categoryNames.get("en").put("gardinia", "Parks & Gardens");
categoryNames.get("fr").put("gardinia", "Parcs & Jardins");
+ categoryNames.get("en").put("covid-19", "Covid-19");
+ categoryNames.get("fr").put("covid-19", "Covid-19");
categoryNames.get("en").put("meta", "Meta");
categoryNames.get("fr").put("meta", "M\u00e9ta");
}
@@ -171,7 +175,7 @@ public final class TodoWeblogSelectionElement extends TodoDefaultElement {
if ( wsum == null || wsum.entries == null )
throw new IllegalStateException("failed to obtain weblog summary for weblog-selection-single-title");
WeblogSummary.EntrySummary esum
- = wsum.entries.get(new Integer(((Context.WeblogSingleSelectionContext)(ctx.wsc)).number));
+ = wsum.entries.get(Integer.valueOf(((Context.WeblogSingleSelectionContext)(ctx.wsc)).number));
if ( esum == null )
throw new IllegalStateException("tried weblog-selection-single-title on inexistent entry");
{
diff --git a/org/madore/damlengine/WeblogDatabaseConnection.java b/org/madore/damlengine/WeblogDatabaseConnection.java
index 1a1828d..5d3c8a2 100644
--- a/org/madore/damlengine/WeblogDatabaseConnection.java
+++ b/org/madore/damlengine/WeblogDatabaseConnection.java
@@ -102,11 +102,14 @@ public final class WeblogDatabaseConnection {
final String dbUrl
= "jdbc:postgresql://"+dbHost+":"+dbPort+"/"+dbName;
final Properties dbProps = new Properties();
+ final Driver drv = new Driver();
dbProps.setProperty("user", dbUser);
dbProps.setProperty("password", dbPass);
dbProps.setProperty("ssl", "true");
+ if ( drv.getMajorVersion() >= 42 )
+ dbProps.setProperty("sslmode", "prefer");
dbProps.setProperty("sslfactory", "org.postgresql.ssl.NonValidatingFactory");
- conn = (new Driver()).connect(dbUrl, dbProps);
+ conn = drv.connect(dbUrl, dbProps);
conn.createStatement().execute("SET TIME ZONE 0");
pconn.set(conn);
}
diff --git a/org/madore/damlengine/WeblogSelect.java b/org/madore/damlengine/WeblogSelect.java
index 4e759cc..d6ede8b 100644
--- a/org/madore/damlengine/WeblogSelect.java
+++ b/org/madore/damlengine/WeblogSelect.java
@@ -48,7 +48,7 @@ public final class WeblogSelect {
while ( selRes.next() ) {
int id = selRes.getInt(1);
String content = selRes.getString(2);
- wsc.sel.add(new Integer(id));
+ wsc.sel.add(Integer.valueOf(id));
wsc.xmlData.add(content);
}
diff --git a/org/madore/damlengine/WeblogServlet.java b/org/madore/damlengine/WeblogServlet.java
index 0f7341c..86f231a 100644
--- a/org/madore/damlengine/WeblogServlet.java
+++ b/org/madore/damlengine/WeblogServlet.java
@@ -89,8 +89,10 @@ public class WeblogServlet extends HttpServlet {
String specialName = selRes.getString(3);
if ( id != number )
throw new ServletException("this cannot happen");
- if ( extra != null && ! extra.equals(specialName) )
- return new NoSuchPath();
+ if ( ! ( ( extra == null && specialName == null )
+ || ( extra != null && specialName != null
+ && extra.equals(specialName) ) ) )
+ return new SingleBlogEntryRedirectPath(date, id, specialName);
long lastModified = (long)(mdate*1000);
long thisLastModified;
try {
@@ -108,6 +110,7 @@ public class WeblogServlet extends HttpServlet {
throw new ServletException(e);
}
}
+ // Legacy support for an old permalink format:
if ( inGet && (matcher=Pattern.compile("/d\\.(\\d{4}-\\d{2}-\\d{2})\\.([\\p{Alpha}][\\p{Alnum}\\-]*)\\.html").matcher(pathInfo)).matches() ) {
final String date;
final String extra;
@@ -151,7 +154,7 @@ public class WeblogServlet extends HttpServlet {
static final class SingleBlogEntryRedirectPath extends RequestPath {
public String date;
public int number;
- public String extra;
+ public String extra; // May be null (passed to WeblogLink class)
public SingleBlogEntryRedirectPath(String date, int number, String extra) {
this.date = date;
this.number = number;