mirror of
https://github.com/yacy/yacy_search_server.git
synced 2024-09-19 00:01:41 +02:00
Generate HTML relative (to each peer) links from hosted WikiCode.
When WikiCode inserted in a peer hosted Blog, Wiki, Messages or Profile contains relative links (images or any content, hosted in DATA/HTDOCS), it is more reliable to keep these links relative, especially when the peer is behind any kind of reverse Proxy.
This commit is contained in:
parent
3444d947ac
commit
54d879a9b3
|
@ -44,6 +44,7 @@ import net.yacy.cora.protocol.HeaderFramework;
|
||||||
import net.yacy.cora.protocol.RequestHeader;
|
import net.yacy.cora.protocol.RequestHeader;
|
||||||
import net.yacy.data.BlogBoard;
|
import net.yacy.data.BlogBoard;
|
||||||
import net.yacy.data.UserDB;
|
import net.yacy.data.UserDB;
|
||||||
|
import net.yacy.http.servlets.YaCyDefaultServlet;
|
||||||
import net.yacy.peers.NewsPool;
|
import net.yacy.peers.NewsPool;
|
||||||
import net.yacy.peers.Seed;
|
import net.yacy.peers.Seed;
|
||||||
import net.yacy.search.Switchboard;
|
import net.yacy.search.Switchboard;
|
||||||
|
@ -78,14 +79,15 @@ public class Blog {
|
||||||
|
|
||||||
|
|
||||||
final boolean xml = (header.get(HeaderFramework.CONNECTION_PROP_PATH)).endsWith(".xml");
|
final boolean xml = (header.get(HeaderFramework.CONNECTION_PROP_PATH)).endsWith(".xml");
|
||||||
final String address = sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP());
|
/* Peer URL base : used to generate absolute URLs in Blog.rss */
|
||||||
|
final String context = YaCyDefaultServlet.getContext(header, sb);
|
||||||
|
|
||||||
prop.put("mode_admin", hasRights ? "1" : "0");
|
prop.put("mode_admin", hasRights ? "1" : "0");
|
||||||
|
|
||||||
if (post == null) {
|
if (post == null) {
|
||||||
prop.putHTML("peername", sb.peers.mySeed().getName());
|
prop.putHTML("peername", sb.peers.mySeed().getName());
|
||||||
prop.put("address", address);
|
prop.put("context", context);
|
||||||
return putBlogDefault(prop, sb, address, 0, 10, hasRights, xml);
|
return putBlogDefault(prop, sb, context, 0, 10, hasRights, xml);
|
||||||
}
|
}
|
||||||
|
|
||||||
final int start = post.getInt("start",0); //indicates from where entries should be shown
|
final int start = post.getInt("start",0); //indicates from where entries should be shown
|
||||||
|
@ -192,7 +194,7 @@ public class Blog {
|
||||||
prop.putHTML("mode_author", UTF8.String(author));
|
prop.putHTML("mode_author", UTF8.String(author));
|
||||||
prop.putHTML("mode_subject", post.get("subject",""));
|
prop.putHTML("mode_subject", post.get("subject",""));
|
||||||
prop.put("mode_date", dateString(new Date()));
|
prop.put("mode_date", dateString(new Date()));
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()), "mode_page", post.get("content", ""));
|
prop.putWiki("mode_page", post.get("content", ""));
|
||||||
prop.putHTML("mode_page-code", post.get("content", ""));
|
prop.putHTML("mode_page-code", post.get("content", ""));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -228,14 +230,14 @@ public class Blog {
|
||||||
// XXX: where are "peername" and "address" used in the template?
|
// XXX: where are "peername" and "address" used in the template?
|
||||||
// XXX: "clientname" is already set to the peername, no need for a new setting
|
// XXX: "clientname" is already set to the peername, no need for a new setting
|
||||||
prop.putHTML("peername", sb.peers.mySeed().getName());
|
prop.putHTML("peername", sb.peers.mySeed().getName());
|
||||||
prop.put("address", address);
|
prop.put("context", context);
|
||||||
//index all entries
|
//index all entries
|
||||||
putBlogDefault(prop, sb, address, start, num, hasRights, xml);
|
putBlogDefault(prop, sb, context, start, num, hasRights, xml);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//only show 1 entry
|
//only show 1 entry
|
||||||
prop.put("mode_entries", "1");
|
prop.put("mode_entries", "1");
|
||||||
putBlogEntry(sb, prop, page, address, 0, hasRights, xml);
|
putBlogEntry(prop, page, context, 0, hasRights, xml);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,7 +248,7 @@ public class Blog {
|
||||||
private static serverObjects putBlogDefault(
|
private static serverObjects putBlogDefault(
|
||||||
final serverObjects prop,
|
final serverObjects prop,
|
||||||
final Switchboard switchboard,
|
final Switchboard switchboard,
|
||||||
final String address,
|
final String context,
|
||||||
int start,
|
int start,
|
||||||
int num,
|
int num,
|
||||||
final boolean hasRights,
|
final boolean hasRights,
|
||||||
|
@ -264,10 +266,9 @@ public class Blog {
|
||||||
while (i.hasNext() && (num == 0 || num > count)) {
|
while (i.hasNext() && (num == 0 || num > count)) {
|
||||||
if(0 < start--) continue;
|
if(0 < start--) continue;
|
||||||
putBlogEntry(
|
putBlogEntry(
|
||||||
switchboard,
|
|
||||||
prop,
|
prop,
|
||||||
switchboard.blogDB.readBlogEntry(i.next()),
|
switchboard.blogDB.readBlogEntry(i.next()),
|
||||||
address,
|
context,
|
||||||
count++,
|
count++,
|
||||||
hasRights,
|
hasRights,
|
||||||
xml);
|
xml);
|
||||||
|
@ -295,10 +296,9 @@ public class Blog {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static serverObjects putBlogEntry(
|
private static serverObjects putBlogEntry(
|
||||||
final Switchboard sb,
|
|
||||||
final serverObjects prop,
|
final serverObjects prop,
|
||||||
final BlogBoard.BlogEntry entry,
|
final BlogBoard.BlogEntry entry,
|
||||||
final String address,
|
final String context,
|
||||||
final int number,
|
final int number,
|
||||||
final boolean hasRights,
|
final boolean hasRights,
|
||||||
final boolean xml)
|
final boolean xml)
|
||||||
|
@ -313,21 +313,21 @@ public class Blog {
|
||||||
} else {
|
} else {
|
||||||
prop.put("mode_entries_" + number + "_commentsactive", "1");
|
prop.put("mode_entries_" + number + "_commentsactive", "1");
|
||||||
prop.put("mode_entries_" + number + "_commentsactive_pageid", entry.getKey());
|
prop.put("mode_entries_" + number + "_commentsactive_pageid", entry.getKey());
|
||||||
prop.put("mode_entries_" + number + "_commentsactive_address", address);
|
prop.put("mode_entries_" + number + "_commentsactive_context", context);
|
||||||
prop.put("mode_entries_" + number + "_commentsactive_comments", entry.getCommentsSize());
|
prop.put("mode_entries_" + number + "_commentsactive_comments", entry.getCommentsSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
prop.put("mode_entries_" + number + "_date", dateString(entry.getDate()));
|
prop.put("mode_entries_" + number + "_date", dateString(entry.getDate()));
|
||||||
prop.put("mode_entries_" + number + "_rfc822date", HeaderFramework.formatRFC1123(entry.getDate()));
|
prop.put("mode_entries_" + number + "_rfc822date", HeaderFramework.formatRFC1123(entry.getDate()));
|
||||||
prop.put("mode_entries_" + number + "_pageid", entry.getKey());
|
prop.put("mode_entries_" + number + "_pageid", entry.getKey());
|
||||||
prop.put("mode_entries_" + number + "_address", address);
|
prop.put("mode_entries_" + number + "_context", context);
|
||||||
prop.put("mode_entries_" + number + "_ip", entry.getIp());
|
prop.put("mode_entries_" + number + "_ip", entry.getIp());
|
||||||
|
|
||||||
if (xml) {
|
if (xml) {
|
||||||
prop.put("mode_entries_" + number + "_page", entry.getPage());
|
prop.put("mode_entries_" + number + "_page", entry.getPage());
|
||||||
prop.put("mode_entries_" + number + "_timestamp", entry.getTimestamp());
|
prop.put("mode_entries_" + number + "_timestamp", entry.getTimestamp());
|
||||||
} else {
|
} else {
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()), "mode_entries_" + number + "_page", entry.getPage());
|
prop.putWiki("mode_entries_" + number + "_page", entry.getPage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasRights) {
|
if (hasRights) {
|
||||||
|
|
|
@ -2,22 +2,22 @@
|
||||||
<rss version="2.0">
|
<rss version="2.0">
|
||||||
<channel>
|
<channel>
|
||||||
<title><![CDATA[YaCy '#[clientname]#': Blog]]></title>
|
<title><![CDATA[YaCy '#[clientname]#': Blog]]></title>
|
||||||
<link>http://#[address]#/Blog.html</link>
|
<link>#[context]#/Blog.html</link>
|
||||||
<image>
|
<image>
|
||||||
<url>http://#[address]#/env/grafics/YaCyLogo_60ppi.png</url>
|
<url>#[context]#/env/grafics/YaCyLogo_60ppi.png</url>
|
||||||
<title>YaCy</title>
|
<title>YaCy</title>
|
||||||
<link>http://#[address]#/</link>
|
<link>#[context]#/</link>
|
||||||
</image>
|
</image>
|
||||||
|
|
||||||
#(mode)# #{entries}#<item>
|
#(mode)# #{entries}#<item>
|
||||||
<author><![CDATA[#[author]#]]></author>
|
<author><![CDATA[#[author]#]]></author>
|
||||||
<title><![CDATA[#[subject]#]]></title>
|
<title><![CDATA[#[subject]#]]></title>
|
||||||
<link>http://#[address]#/Blog.html?page=#[pageid]#</link>
|
<link>#[context]#/Blog.html?page=#[pageid]#</link>
|
||||||
<pubDate>#[rfc822date]#</pubDate>
|
<pubDate>#[rfc822date]#</pubDate>
|
||||||
<guid>#[pageid]#</guid>
|
<guid>#[pageid]#</guid>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
#[page]#]]></description>
|
#[page]#]]></description>
|
||||||
#(commentsactive)#::<comments>http://#[address]#/BlogComments.html?page=#[pageid]#</comments>#(/commentsactive)#
|
#(commentsactive)#::<comments>#[context]#/BlogComments.html?page=#[pageid]#</comments>#(/commentsactive)#
|
||||||
</item>#{/entries}# #(/mode)#
|
</item>#{/entries}# #(/mode)#
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
|
@ -176,7 +176,7 @@ public class BlogComments {
|
||||||
prop.putHTML("mode_allow_author", UTF8.String(author));
|
prop.putHTML("mode_allow_author", UTF8.String(author));
|
||||||
prop.putHTML("mode_subject", post.get("subject",""));
|
prop.putHTML("mode_subject", post.get("subject",""));
|
||||||
prop.put("mode_date", dateString(new Date()));
|
prop.put("mode_date", dateString(new Date()));
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()), "mode_page", post.get("content", ""));
|
prop.putWiki("mode_page", post.get("content", ""));
|
||||||
prop.put("mode_page-code", post.get("content", ""));
|
prop.put("mode_page-code", post.get("content", ""));
|
||||||
} else {
|
} else {
|
||||||
// show blog-entry/entries
|
// show blog-entry/entries
|
||||||
|
@ -192,7 +192,7 @@ public class BlogComments {
|
||||||
prop.putHTML("mode_allow_author", UTF8.String(author));
|
prop.putHTML("mode_allow_author", UTF8.String(author));
|
||||||
prop.put("mode_comments", page.getCommentsSize());
|
prop.put("mode_comments", page.getCommentsSize());
|
||||||
prop.put("mode_date", dateString(page.getDate()));
|
prop.put("mode_date", dateString(page.getDate()));
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()), "mode_page", page.getPage());
|
prop.putWiki("mode_page", page.getPage());
|
||||||
if (hasRights) {
|
if (hasRights) {
|
||||||
prop.put("mode_admin", "1");
|
prop.put("mode_admin", "1");
|
||||||
prop.put("mode_admin_pageid", page.getKey());
|
prop.put("mode_admin_pageid", page.getKey());
|
||||||
|
@ -235,7 +235,7 @@ public class BlogComments {
|
||||||
if (!xml) {
|
if (!xml) {
|
||||||
prop.putHTML("mode_entries_"+count+"_subject", UTF8.String(entry.getSubject()));
|
prop.putHTML("mode_entries_"+count+"_subject", UTF8.String(entry.getSubject()));
|
||||||
prop.putHTML("mode_entries_"+count+"_author", UTF8.String(entry.getAuthor()));
|
prop.putHTML("mode_entries_"+count+"_author", UTF8.String(entry.getAuthor()));
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()), "mode_entries_"+count+"_page", entry.getPage());
|
prop.putWiki("mode_entries_"+count+"_page", entry.getPage());
|
||||||
} else {
|
} else {
|
||||||
prop.putHTML("mode_entries_"+count+"_subject", UTF8.String(entry.getSubject()));
|
prop.putHTML("mode_entries_"+count+"_subject", UTF8.String(entry.getSubject()));
|
||||||
prop.putHTML("mode_entries_"+count+"_author", UTF8.String(entry.getAuthor()));
|
prop.putHTML("mode_entries_"+count+"_author", UTF8.String(entry.getAuthor()));
|
||||||
|
|
|
@ -118,7 +118,7 @@ public class MessageSend_p {
|
||||||
prop.putXML("mode_permission_message", message);
|
prop.putXML("mode_permission_message", message);
|
||||||
prop.putHTML("mode_permission_hash", hash);
|
prop.putHTML("mode_permission_hash", hash);
|
||||||
if (post.containsKey("preview")) {
|
if (post.containsKey("preview")) {
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(ip), "mode_permission_previewmessage", message);
|
prop.putWiki("mode_permission_previewmessage", message);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (final NumberFormatException e) {
|
} catch (final NumberFormatException e) {
|
||||||
|
|
|
@ -36,6 +36,7 @@ import net.yacy.cora.document.encoding.UTF8;
|
||||||
import net.yacy.cora.protocol.HeaderFramework;
|
import net.yacy.cora.protocol.HeaderFramework;
|
||||||
import net.yacy.cora.protocol.RequestHeader;
|
import net.yacy.cora.protocol.RequestHeader;
|
||||||
import net.yacy.data.MessageBoard;
|
import net.yacy.data.MessageBoard;
|
||||||
|
import net.yacy.http.servlets.YaCyDefaultServlet;
|
||||||
import net.yacy.peers.Seed;
|
import net.yacy.peers.Seed;
|
||||||
import net.yacy.search.Switchboard;
|
import net.yacy.search.Switchboard;
|
||||||
import net.yacy.search.SwitchboardConstants;
|
import net.yacy.search.SwitchboardConstants;
|
||||||
|
@ -58,10 +59,10 @@ public class Messages_p {
|
||||||
final Switchboard sb = (Switchboard) env;
|
final Switchboard sb = (Switchboard) env;
|
||||||
final serverObjects prop = new serverObjects();
|
final serverObjects prop = new serverObjects();
|
||||||
|
|
||||||
// set peer address / name
|
/* Peer URL base : used by Messages_p.rss to render absolute URL links to this peer */
|
||||||
final String peerAddress = sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP());
|
final String context = YaCyDefaultServlet.getContext(header, sb);
|
||||||
final String peerName = sb.peers.mySeed().getName();
|
final String peerName = sb.peers.mySeed().getName();
|
||||||
prop.put("peerAddress", peerAddress);
|
prop.put("context", context);
|
||||||
prop.putXML("peerName", peerName);
|
prop.putXML("peerName", peerName);
|
||||||
|
|
||||||
// List known hosts for message sending (from Blacklist_p.java)
|
// List known hosts for message sending (from Blacklist_p.java)
|
||||||
|
@ -132,7 +133,7 @@ public class Messages_p {
|
||||||
|
|
||||||
if ((header.get(HeaderFramework.CONNECTION_PROP_PATH)).endsWith(".rss")) {
|
if ((header.get(HeaderFramework.CONNECTION_PROP_PATH)).endsWith(".rss")) {
|
||||||
// set the peer address
|
// set the peer address
|
||||||
prop.put("mode_messages_"+count+"_peerAddress", peerAddress);
|
prop.put("mode_messages_"+count+"_context", context);
|
||||||
|
|
||||||
// set the rfc822 date
|
// set the rfc822 date
|
||||||
prop.put("mode_messages_"+count+"_rfc822Date", HeaderFramework.formatRFC1123(message.date()));
|
prop.put("mode_messages_"+count+"_rfc822Date", HeaderFramework.formatRFC1123(message.date()));
|
||||||
|
@ -162,7 +163,7 @@ public class Messages_p {
|
||||||
prop.putXML("mode_subject", message.subject());
|
prop.putXML("mode_subject", message.subject());
|
||||||
String theMessage = null;
|
String theMessage = null;
|
||||||
theMessage = UTF8.String(message.message());
|
theMessage = UTF8.String(message.message());
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()), "mode_message", theMessage);
|
prop.putWiki("mode_message", theMessage);
|
||||||
prop.put("mode_hash", message.authorHash());
|
prop.put("mode_hash", message.authorHash());
|
||||||
prop.putXML("mode_key", key);
|
prop.putXML("mode_key", key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
<rss version="2.0">
|
<rss version="2.0">
|
||||||
<channel>
|
<channel>
|
||||||
<title><![CDATA[YaCy '#[clientname]#': Messages]]></title>
|
<title><![CDATA[YaCy '#[clientname]#': Messages]]></title>
|
||||||
<link>http://#[peerAddress]#/Messages_p.html</link>
|
<link>#[context]#/Messages_p.html</link>
|
||||||
<image>
|
<image>
|
||||||
<url>http://#[peerAddress]#/env/grafics/YaCyLogo_60ppi.png</url>
|
<url>#[context]#/env/grafics/YaCyLogo_60ppi.png</url>
|
||||||
<title>YaCy</title>
|
<title>YaCy</title>
|
||||||
<link>http://#[peerAddress]#/</link>
|
<link>#[context]#/</link>
|
||||||
</image>
|
</image>
|
||||||
#(mode)#
|
#(mode)#
|
||||||
#{messages}#
|
#{messages}#
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
<author><![CDATA[#[from]#]]></author>
|
<author><![CDATA[#[from]#]]></author>
|
||||||
<title><![CDATA[#[subject]#]]></title>
|
<title><![CDATA[#[subject]#]]></title>
|
||||||
<category>#[category]#</category>
|
<category>#[category]#</category>
|
||||||
<link>http://#[peerAddress]#/Messages_p.html?action=view&object=#[key]#</link>
|
<link>#[context]#/Messages_p.html?action=view&object=#[key]#</link>
|
||||||
<pubDate>#[rfc822Date]#</pubDate>
|
<pubDate>#[rfc822Date]#</pubDate>
|
||||||
<guid>#[key]#</guid>
|
<guid>#[key]#</guid>
|
||||||
<description><![CDATA[#[body]#]]></description>
|
<description><![CDATA[#[body]#]]></description>
|
||||||
|
|
|
@ -169,8 +169,7 @@ public class ViewProfile {
|
||||||
prop.put("success_" + key, "1");
|
prop.put("success_" + key, "1");
|
||||||
// only comments get "wikified"
|
// only comments get "wikified"
|
||||||
if(key.equals("comment")){
|
if(key.equals("comment")){
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()),
|
prop.putWiki("success_" + key + "_value",
|
||||||
"success_" + key + "_value",
|
|
||||||
entry.getValue().replaceAll("\r", "").replaceAll("\\\\n", "\n"));
|
entry.getValue().replaceAll("\r", "").replaceAll("\\\\n", "\n"));
|
||||||
prop.put("success_" + key + "_b64value", Base64Order.standardCoder.encodeString(entry.getValue()));
|
prop.put("success_" + key + "_b64value", Base64Order.standardCoder.encodeString(entry.getValue()));
|
||||||
}else{
|
}else{
|
||||||
|
|
|
@ -37,7 +37,6 @@ import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.yacy.cora.document.encoding.UTF8;
|
import net.yacy.cora.document.encoding.UTF8;
|
||||||
import net.yacy.cora.protocol.Domains;
|
import net.yacy.cora.protocol.Domains;
|
||||||
|
@ -129,18 +128,6 @@ public class Wiki {
|
||||||
prop.put(serverObjects.ACTION_LOCATION, prop.get(serverObjects.ACTION_LOCATION));
|
prop.put(serverObjects.ACTION_LOCATION, prop.get(serverObjects.ACTION_LOCATION));
|
||||||
}
|
}
|
||||||
|
|
||||||
String hostAndPort = null;
|
|
||||||
Set<String> ips = null;
|
|
||||||
if(sb.peers.mySeed() != null) {
|
|
||||||
ips = sb.peers.mySeed().getIPs();
|
|
||||||
}
|
|
||||||
if(ips != null && !ips.isEmpty()) {
|
|
||||||
hostAndPort = sb.peers.mySeed().getPublicAddress(ips.iterator().next());
|
|
||||||
}
|
|
||||||
if (hostAndPort == null) {
|
|
||||||
hostAndPort = Domains.LOCALHOST + ":" + sb.getLocalPort();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (post != null && post.containsKey("edit")) {
|
if (post != null && post.containsKey("edit")) {
|
||||||
if ((access.equals("admin") && (!sb.verifyAuthentication(header)))) {
|
if ((access.equals("admin") && (!sb.verifyAuthentication(header)))) {
|
||||||
// check access right for admin
|
// check access right for admin
|
||||||
|
@ -160,8 +147,9 @@ public class Wiki {
|
||||||
prop.putHTML("mode_pagename", pagename);
|
prop.putHTML("mode_pagename", pagename);
|
||||||
prop.putHTML("mode_author", author);
|
prop.putHTML("mode_author", author);
|
||||||
prop.put("mode_date", dateString(new Date()));
|
prop.put("mode_date", dateString(new Date()));
|
||||||
// Note : it would be better to not only pass the peer host and port but also the protocol (http or https)
|
/* We do not fill hostport parameter : relative links should stay relative as it is more reliable
|
||||||
prop.putWiki(hostAndPort, "mode_page", post.get("content", ""));
|
* when the peer is behind any kind of reverse Proxy */
|
||||||
|
prop.putWiki("mode_page", post.get("content", ""));
|
||||||
prop.putHTML("mode_page-code", post.get("content", ""));
|
prop.putHTML("mode_page-code", post.get("content", ""));
|
||||||
}
|
}
|
||||||
//end contrib of [MN]
|
//end contrib of [MN]
|
||||||
|
@ -251,7 +239,9 @@ public class Wiki {
|
||||||
prop.putHTML("mode_versioning_pagename", pagename);
|
prop.putHTML("mode_versioning_pagename", pagename);
|
||||||
prop.putHTML("mode_versioning_author", oentry.author());
|
prop.putHTML("mode_versioning_author", oentry.author());
|
||||||
prop.put("mode_versioning_date", dateString(oentry.date()));
|
prop.put("mode_versioning_date", dateString(oentry.date()));
|
||||||
prop.putWiki(hostAndPort, "mode_versioning_page", oentry.page());
|
/* We do not fill hostport parameter : relative links should stay relative as it is more reliable
|
||||||
|
* when the peer is behind any kind of reverse Proxy */
|
||||||
|
prop.putWiki("mode_versioning_page", oentry.page());
|
||||||
prop.putHTML("mode_versioning_page-code", UTF8.String(oentry.page()));
|
prop.putHTML("mode_versioning_page-code", UTF8.String(oentry.page()));
|
||||||
}
|
}
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
|
@ -266,7 +256,9 @@ public class Wiki {
|
||||||
prop.putHTML("mode_pagename", pagename);
|
prop.putHTML("mode_pagename", pagename);
|
||||||
prop.putHTML("mode_author", page.author());
|
prop.putHTML("mode_author", page.author());
|
||||||
prop.put("mode_date", dateString(page.date()));
|
prop.put("mode_date", dateString(page.date()));
|
||||||
prop.putWiki(hostAndPort, "mode_page", page.page());
|
/* We do not fill hostport parameter : relative links should stay relative as it is more reliable
|
||||||
|
* when the peer is behind any kind of reverse Proxy */
|
||||||
|
prop.putWiki("mode_page", page.page());
|
||||||
|
|
||||||
prop.put("controls", "0");
|
prop.put("controls", "0");
|
||||||
prop.putHTML("controls_pagename", pagename);
|
prop.putHTML("controls_pagename", pagename);
|
||||||
|
|
|
@ -70,7 +70,7 @@ public class mediawiki_p {
|
||||||
page = page.substring(p, q);
|
page = page.substring(p, q);
|
||||||
|
|
||||||
prop.putHTML("title", title);
|
prop.putHTML("title", title);
|
||||||
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()), "page", page);
|
prop.putWiki("page", page);
|
||||||
|
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
|
|
@ -578,7 +578,7 @@ public class WikiCode extends AbstractWikiParser implements WikiParser {
|
||||||
/**
|
/**
|
||||||
* Processes tags which are connected to links and images.
|
* Processes tags which are connected to links and images.
|
||||||
* @author [AS], [MN]
|
* @author [AS], [MN]
|
||||||
* @param hostport
|
* @param hostport (optional) host and port, added when not empty as the base of relative Wiki link URLs.
|
||||||
* @param line line of text to be transformed from wiki code to HTML
|
* @param line line of text to be transformed from wiki code to HTML
|
||||||
* @return HTML fragment
|
* @return HTML fragment
|
||||||
*/
|
*/
|
||||||
|
@ -630,12 +630,12 @@ public class WikiCode extends AbstractWikiParser implements WikiParser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// replace incomplete URLs and make them point to http://peerip:port/...
|
// eventually replace incomplete URLs and make them point to http://peerip:port/...
|
||||||
// with this feature you can access an image in DATA/HTDOCS/share/yacy.gif
|
// with this feature you can access an image in DATA/HTDOCS/share/yacy.gif
|
||||||
// using the wikicode [[Image:share/yacy.gif]]
|
// using the wikicode [[Image:share/yacy.gif]]
|
||||||
// or an image DATA/HTDOCS/grafics/kaskelix.jpg with [[Image:grafics/kaskelix.jpg]]
|
// or an image DATA/HTDOCS/grafics/kaskelix.jpg with [[Image:grafics/kaskelix.jpg]]
|
||||||
// you are free to use other sub-paths of DATA/HTDOCS
|
// you are free to use other sub-paths of DATA/HTDOCS
|
||||||
if (kl.indexOf("://",0) < 1) {
|
if (kl.indexOf("://",0) < 1 && hostport != null && !hostport.isEmpty()) {
|
||||||
kl = "http://" + hostport + "/" + kl;
|
kl = "http://" + hostport + "/" + kl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -677,12 +677,12 @@ public class WikiCode extends AbstractWikiParser implements WikiParser {
|
||||||
else {
|
else {
|
||||||
kv = kl;
|
kv = kl;
|
||||||
}
|
}
|
||||||
// replace incomplete URLs and make them point to http://peerip:port/...
|
// eventually replace incomplete URLs and make them point to http://peerip:port/...
|
||||||
// with this feature you can access a file at DATA/HTDOCS/share/page.html
|
// with this feature you can access a file at DATA/HTDOCS/share/page.html
|
||||||
// using the wikicode [share/page.html]
|
// using the wikicode [share/page.html]
|
||||||
// or a file DATA/HTDOCS/www/page.html with [www/page.html]
|
// or a file DATA/HTDOCS/www/page.html with [www/page.html]
|
||||||
// you are free to use other sub-paths of DATA/HTDOCS
|
// you are free to use other sub-paths of DATA/HTDOCS
|
||||||
if (kl.indexOf("://",0) < 1) {
|
if (kl.indexOf("://",0) < 1 && hostport != null && !hostport.isEmpty()) {
|
||||||
kl = "http://" + hostport + "/" + kl;
|
kl = "http://" + hostport + "/" + kl;
|
||||||
}
|
}
|
||||||
line = line.substring(0, positionOfOpeningTag) + "<a class=\"extern\" href=\"" + kl + "\">" + kv + "</a>" + line.substring(positionOfClosingTag + LEN_WIKI_CLOSE_EXTERNAL_LINK);
|
line = line.substring(0, positionOfOpeningTag) + "<a class=\"extern\" href=\"" + kl + "\">" + kv + "</a>" + line.substring(positionOfClosingTag + LEN_WIKI_CLOSE_EXTERNAL_LINK);
|
||||||
|
|
|
@ -352,10 +352,31 @@ public class serverObjects implements Serializable, Cloneable {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a String to the map. The content of the String is first parsed and interpreted as Wiki code.
|
||||||
|
* @param hostport (optional) peer host and port, added when not empty as the base of relative Wiki link URLs.
|
||||||
|
* @param key key name as String.
|
||||||
|
* @param wikiCode wiki code content as String.
|
||||||
|
*/
|
||||||
public void putWiki(final String hostport, final String key, final String wikiCode){
|
public void putWiki(final String hostport, final String key, final String wikiCode){
|
||||||
this.put(key, Switchboard.wikiParser.transform(hostport, wikiCode));
|
this.put(key, Switchboard.wikiParser.transform(hostport, wikiCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a String to the map. The content of the String is first parsed and interpreted as Wiki code.
|
||||||
|
* @param key key name as String.
|
||||||
|
* @param wikiCode wiki code content as String.
|
||||||
|
*/
|
||||||
|
public void putWiki(final String key, final String wikiCode){
|
||||||
|
this.putWiki(null, key, wikiCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a byte array to the map. The content of the array is first parsed and interpreted as Wiki code.
|
||||||
|
* @param hostport (optional) peer host and port, added when not empty as the base of relative Wiki link URLs.
|
||||||
|
* @param key key name as String.
|
||||||
|
* @param wikiCode wiki code content as byte array.
|
||||||
|
*/
|
||||||
public void putWiki(final String hostport, final String key, final byte[] wikiCode) {
|
public void putWiki(final String hostport, final String key, final byte[] wikiCode) {
|
||||||
try {
|
try {
|
||||||
this.put(key, Switchboard.wikiParser.transform(hostport, wikiCode));
|
this.put(key, Switchboard.wikiParser.transform(hostport, wikiCode));
|
||||||
|
@ -364,6 +385,15 @@ public class serverObjects implements Serializable, Cloneable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a byte array to the map. The content of the array is first parsed and interpreted as Wiki code.
|
||||||
|
* @param key key name as String.
|
||||||
|
* @param wikiCode wiki code content as byte array.
|
||||||
|
*/
|
||||||
|
public void putWiki(final String key, final byte[] wikiCode) {
|
||||||
|
this.putWiki(null, key, wikiCode);
|
||||||
|
}
|
||||||
|
|
||||||
// inc variant: for counters
|
// inc variant: for counters
|
||||||
public long inc(final String key) {
|
public long inc(final String key) {
|
||||||
String c = get(key);
|
String c = get(key);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user