added options to configure the 'corporate identity'-icons, the home page link and the greeting line from

the skin menue. Additionally an example is given there how to integrate a search page with an iframe.
Please see the skin menu.

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4967 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 17 years ago
parent 474659a71f
commit 474e29ce4a

@ -243,9 +243,13 @@ parseableExt=html,htm,txt,php,shtml,asp,aspx,jsp
# These strings appear in the Web Mask of the YACY search client
# Set these Strings to cusomize your peer and give any message to
# other peer users
promoteSearchPageGreeting =
promoteSearchPageGreeting = P2P Web Search
# if the following property is set to true, the network name is used as greeting
promoteSearchPageGreeting.useNetworkName = false
# the following attributes can be used to define a custom image and home page on the search page
promoteSearchPageGreeting.homepage = http://yacy.net
promoteSearchPageGreeting.largeImage = /env/grafics/YaCyLogo_120ppi.png
promoteSearchPageGreeting.smallImage = /env/grafics/YaCyLogo_60ppi.png
# the path to the PLASMA database of the web spider
dbPath=DATA/PLASMADB

@ -26,7 +26,7 @@
</dd>
<dd>
<input type="submit" name="use_button" value="Use" />
<input type="submit" name="delete" value="Delete" />
<input type="submit" name="delete_button" value="Delete" />
</dd>
</dl>
</fieldset>
@ -40,14 +40,63 @@
<dt><label for="use_url">Use this skin</label></dt>
<dd><input type="checkbox" name="use_skin" id="use_url" value="on" checked="checked" /></dd>
<dd><input type="submit" value="install" /></dd>
<dd><input type="submit" name="install_button" value="Install" /></dd>
</dl>
</fieldset>
</form>
#(status)#
::<p><strong>Unable to get URL: #[url]#</strong></p>
::<p><strong>Error saving the skin.</strong></p>
#(/status)#
<p>
The search page may be customized. You can change the 'corporate identity'-images, the greeting line
and a link to a home page that is reached when the 'corporate identity'-images are clicked.
</p>
<form action="ConfigSkins_p.html">
<fieldset>
<dl>
<dt>Greeting Line</dt>
<dd><input type="text" name="promoteSearchPageGreeting" value="#[promoteSearchPageGreeting]#" size="60" /></dd>
<dt>URL of Home Page</dt>
<dd><input type="text" name="promoteSearchPageGreeting.homepage" value="#[promoteSearchPageGreeting.homepage]#" size="60" /></dd>
<dt>URL of a Small Corporate Image</dt>
<dd><input type="text" name="promoteSearchPageGreeting.smallImage" value="#[promoteSearchPageGreeting.smallImage]#" size="60" /></dd>
<dt>URL of a Large Corporate Image</dt>
<dd><input type="text" name="promoteSearchPageGreeting.largeImage" value="#[promoteSearchPageGreeting.largeImage]#" size="60" /></dd>
<dd><input type="submit" name="searchpage_button" value="Change Search Page" /></dd>
</dl>
</fieldset>
</form>
<p>
The search page can be integrated in your own web pages with an iframe. Simply use the following code:
<p>
<pre>
&lt;iframe name="target"
src="http://#[myaddress]#/index.html?display=2&amp;resource=local"
width="100%"
height="560"
frameborder="0"
scrolling="auto"
id="target"&gt;
&lt;/iframe&gt;
</pre>
This would look like:
<iframe name="target"
src="http://#[myaddress]#/index.html?display=2&amp;resource=local"
width="100%"
height="560"
frameborder="0"
scrolling="auto"
id="target">
</iframe>
#%env/templates/footer.template%#
</body>
</html>

@ -7,7 +7,10 @@
//
// This File is contributed by Alexander Schier
// last change: 29.12.2004
// extended by Michael Christen, 4.7.2008
//
// LICENSE
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
@ -21,29 +24,6 @@
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// Using this software in any meaning (reading, learning, copying, compiling,
// running) means that you agree that the Author(s) is (are) not responsible
// for cost, loss of data or any harm that may be caused directly or indirectly
// by usage of this softare or this documentation. The usage of this software
// is on your own risk. The installation and usage (starting/running) of this
// software may allow other people or application to access your computer and
// any attached devices and is highly dependent on the configuration of the
// software which must be done by the user of the software; the author(s) is
// (are) also not responsible for proper configuration and usage of the
// software, even if provoked by documentation provided together with
// the software.
//
// Any changes to this file according to the GPL as documented in the file
// gpl.txt aside this file in the shipment you received can be done to the
// lines that follows this copyright notice here, but changes must not be
// done inside the copyright notive above. A re-distribution must contain
// the intact and unchanged copyright notice.
// Contributions and changes to the program code must be marked as such.
// You must compile this file with
// javac -classpath .:../Classes Blacklist_p.java
// if the shell's current path is HTROOT
import java.io.BufferedWriter;
import java.io.File;
@ -65,106 +45,116 @@ import de.anomic.yacy.yacyURL;
public class ConfigSkins_p {
private static boolean copyFile(File from, File to){
if(from == null || to == null){
return false;
}
try{
serverFileUtils.copy(from, to);
return true;
}catch(IOException e){
return false;
}
}
public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch<?> env) {
serverObjects prop = new serverObjects();
plasmaSwitchboard sb = (plasmaSwitchboard) env;
String skinPath = new File(env.getRootPath(), env.getConfig("skinPath", "DATA/SKINS")).toString();
private static boolean changeSkin(plasmaSwitchboard sb, String skinPath, String skin){
File htdocsDir = new File(sb.getConfigPath("htDocsPath", "DATA/HTDOCS"), "env");
File styleFile = new File(htdocsDir, "style.css");
File skinFile = new File(skinPath, skin);
// Fallback
prop.put("currentskin", "");
prop.put("status", "0"); // nothing
styleFile.getParentFile().mkdirs();
if(copyFile(skinFile, styleFile)){
sb.setConfig("currentSkin", skin.substring(0,skin.length()-4));
return true;
}
return false;
}
String[] skinFiles = listManager.getDirListing(skinPath);
if (skinFiles == null) {
return prop;
}
public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch<?> env) {
serverObjects prop = new serverObjects();
plasmaSwitchboard switchboard = (plasmaSwitchboard) env;
String skinPath = new File(env.getRootPath(), env.getConfig("skinPath", "DATA/SKINS")).toString();
// if there are no skins, use the current style as default
// normally only invoked at first start of YaCy
if (skinFiles.length == 0) {
try {
serverFileUtils.copy(new File(env.getRootPath(), "htroot/env/style.css"), new File(skinPath, "default.css"));
env.setConfig("currentSkin", "default");
} catch (IOException e) {
e.printStackTrace();
}
}
//Fallback
prop.put("currentskin", "");
prop.put("status", "0"); //nothing
String[] skinFiles = listManager.getDirListing(skinPath);
if(skinFiles == null){
return prop;
}
//if there are no skins, use the current style as default
//normally only invoked at first start of YaCy
if(skinFiles.length == 0){
copyFile(new File(env.getRootPath(), "htroot/env/style.css"), new File(skinPath, "default.css"));
env.setConfig("currentSkin", "default");
}
if (post != null){
//change skin
if(post.containsKey("use_button") && post.get("skin") != null){
changeSkin(switchboard, skinPath, post.get("skin"));
//delete skin
}else if(post.containsKey("delete")){
File skinfile= new File(skinPath, post.get("skin"));
skinfile.delete();
if (post != null) {
if (post.containsKey("use_button") && post.get("skin") != null) {
// change skin
changeSkin(sb, skinPath, post.get("skin"));
//load skin from URL
} else if (post.containsKey("url")){
String url = post.get("url");
ArrayList<String> skinVector;
try {
yacyURL u = new yacyURL(url, null);
skinVector = nxTools.strings(HttpClient.wget(u.toString()), "UTF-8");
} catch(IOException e) {
prop.put("status", "1");//unable to get URL
prop.put("status_url", url);
return prop;
}
try {
Iterator<String> it = skinVector.iterator();
File skinFile = new File(skinPath, url.substring(url.lastIndexOf("/"), url.length()));
BufferedWriter bw = new BufferedWriter(new PrintWriter(new FileWriter(skinFile)));
}
if (post.containsKey("delete_button")) {
// delete skin
File skinfile = new File(skinPath, post.get("skin"));
skinfile.delete();
while(it.hasNext()){
bw.write(it.next() + "\n");
}
bw.close();
} catch(IOException e){
prop.put("status", "2");//error saving the skin
return prop;
}
if (post.containsKey("use_skin") && (post.get("use_skin")).equals("on")){
changeSkin(switchboard, skinPath, url.substring(url.lastIndexOf("/"), url.length()));
}
}
}
}
if (post.containsKey("install_button")) {
// load skin from URL
String url = post.get("url");
ArrayList<String> skinVector;
try {
yacyURL u = new yacyURL(url, null);
skinVector = nxTools.strings(HttpClient.wget(u.toString()), "UTF-8");
} catch (IOException e) {
prop.put("status", "1");// unable to get URL
prop.put("status_url", url);
return prop;
}
try {
Iterator<String> it = skinVector.iterator();
File skinFile = new File(skinPath, url.substring(url.lastIndexOf("/"), url.length()));
BufferedWriter bw = new BufferedWriter(new PrintWriter(new FileWriter(skinFile)));
//reread skins
skinFiles = listManager.getDirListing(skinPath);
int i;
for(i=0;i<= skinFiles.length-1;i++){
if(skinFiles[i].endsWith(".css")){
prop.put("skinlist_"+i+"_file", skinFiles[i]);
prop.put("skinlist_"+i+"_name", skinFiles[i].substring(0, skinFiles[i].length() -4));
}
}
prop.put("skinlist", i);
while (it.hasNext()) {
bw.write(it.next() + "\n");
}
bw.close();
} catch (IOException e) {
prop.put("status", "2");// error saving the skin
return prop;
}
if (post.containsKey("use_skin") && (post.get("use_skin", "")).equals("on")) {
changeSkin(sb, skinPath, url.substring(url.lastIndexOf("/"), url.length()));
}
}
if (post.containsKey("searchpage_button")) {
sb.setConfig("promoteSearchPageGreeting", post.get("promoteSearchPageGreeting", ""));
sb.setConfig("promoteSearchPageGreeting.homepage", post.get("promoteSearchPageGreeting.homepage", ""));
sb.setConfig("promoteSearchPageGreeting.largeImage", post.get("promoteSearchPageGreeting.largeImage", ""));
sb.setConfig("promoteSearchPageGreeting.smallImage", post.get("promoteSearchPageGreeting.smallImage", ""));
}
}
prop.put("currentskin", env.getConfig("currentSkin", "default"));
return prop;
// reread skins
skinFiles = listManager.getDirListing(skinPath);
int i;
for (i = 0; i <= skinFiles.length - 1; i++) {
if (skinFiles[i].endsWith(".css")) {
prop.put("skinlist_" + i + "_file", skinFiles[i]);
prop.put("skinlist_" + i + "_name", skinFiles[i].substring(0, skinFiles[i].length() - 4));
}
}
prop.put("skinlist", i);
prop.put("currentskin", env.getConfig("currentSkin", "default"));
prop.put("promoteSearchPageGreeting", sb.getConfig("promoteSearchPageGreeting", ""));
prop.put("promoteSearchPageGreeting.homepage", sb.getConfig("promoteSearchPageGreeting.homepage", ""));
prop.put("promoteSearchPageGreeting.largeImage", sb.getConfig("promoteSearchPageGreeting.largeImage", ""));
prop.put("promoteSearchPageGreeting.smallImage", sb.getConfig("promoteSearchPageGreeting.smallImage", ""));
String myaddress = sb.webIndex.seedDB.mySeed().getPublicAddress();
if (myaddress == null) myaddress = "localhost:" + sb.getConfig("port", "8080");
prop.put("myaddress", myaddress);
return prop;
}
private static boolean changeSkin(plasmaSwitchboard sb, String skinPath, String skin) {
File htdocsDir = new File(sb.getConfigPath("htDocsPath", "DATA/HTDOCS"), "env");
File styleFile = new File(htdocsDir, "style.css");
File skinFile = new File(skinPath, skin);
styleFile.getParentFile().mkdirs();
try {
serverFileUtils.copy(skinFile, styleFile);
sb.setConfig("currentSkin", skin.substring(0, skin.length() - 4));
return true;
} catch (IOException e) {
return false;
}
}
}

@ -385,10 +385,9 @@ div.head h1 {
h2.yacy { /* The heading in index.html */
margin:10px auto;
text-align:center;
padding-top:130px;
padding-top:20px;
width:256px;
min-width:256px; /*min-width does not exist in IE 5.5, 6 and Safari */
background:url(/env/grafics/YaCyLogo_120ppi.png) top center no-repeat;
}
div.welcome { /* The heading in Status.html */

@ -7,7 +7,7 @@
<link rel="search" type="application/opensearchdescription+xml" title="YaCy Search on '#[clientname]#'" href="opensearchdescription.xml" />
<script type="text/javascript" src="js/html.js"></script>
</head>
<body id="index" onload="document.getElementById('search').focus()">
<body id="index">
#(display)#
#%env/templates/simpleheader.template%#
::
@ -17,6 +17,7 @@
#(/display)#
<h2 class="yacy">
<a href="#[promoteSearchPageGreeting.homepage]#" class="yacylogo"><img src="#[promoteSearchPageGreeting.largeImage]#" alt="yacy" align="center"/></a><br /><br />
#[promoteSearchPageGreeting]#
</h2>
@ -103,7 +104,6 @@
</tr>
</table>
#(/searchoptions)#
<p>This peer holds #[links]# URLs</p>
</form>
#(searchoptions)#::
<form action="index.html" method="get" class="search">

@ -78,14 +78,13 @@ public class index {
if (cds.equals("image")) contentdom = plasmaSearchQuery.CONTENTDOM_IMAGE;
if (cds.equals("app")) contentdom = plasmaSearchQuery.CONTENTDOM_APP;
//long mylinks = 0;
prop.putNum("links", sb.webIndex.seedDB.mySeed().getLinkCount());
// we create empty entries for template strings
String promoteSearchPageGreeting = env.getConfig("promoteSearchPageGreeting", "");
if (env.getConfigBool("promoteSearchPageGreeting.useNetworkName", false)) promoteSearchPageGreeting = env.getConfig("network.unit.description", "");
if (promoteSearchPageGreeting.length() == 0) promoteSearchPageGreeting = "P2P WEB SEARCH";
if (promoteSearchPageGreeting.length() == 0) promoteSearchPageGreeting = "P2P Web Search";
prop.putHTML("promoteSearchPageGreeting", promoteSearchPageGreeting);
prop.put("promoteSearchPageGreeting.homepage", sb.getConfig("promoteSearchPageGreeting.homepage", ""));
prop.put("promoteSearchPageGreeting.largeImage", sb.getConfig("promoteSearchPageGreeting.largeImage", ""));
prop.putHTML("former", former);
prop.put("num-results", "0");
prop.put("excluded", "0");
@ -117,7 +116,6 @@ public class index {
prop.put("contentdomCheckVideo", (contentdom == plasmaSearchQuery.CONTENTDOM_VIDEO) ? "1" : "0");
prop.put("contentdomCheckImage", (contentdom == plasmaSearchQuery.CONTENTDOM_IMAGE) ? "1" : "0");
prop.put("contentdomCheckApp", (contentdom == plasmaSearchQuery.CONTENTDOM_APP) ? "1" : "0");
// online caution timing
sb.localSearchLastAccess = System.currentTimeMillis();

@ -44,7 +44,7 @@
</form>
::
<form class="search small" action="yacysearch.html" method="get" accept-charset="UTF-8">
<p class="yacylogo"><a href="http://yacy.net" class="yacylogo"><img src="/env/grafics/YaCyLogo_60ppi.png" alt="yacy" /></a></p>
<p class="yacylogo"><a href="#[promoteSearchPageGreeting.homepage]#" class="yacylogo"><img src="#[promoteSearchPageGreeting.smallImage]#" alt="yacy" /></a></p>
<h2>#[promoteSearchPageGreeting]#</h2>
<fieldset class="yacys">
<input id="search" name="search" type="text" size="50" maxlength="80" value="#[former]#" onclick="document.getElementById('Enter').value = 'Search'" />

@ -89,7 +89,7 @@ public class yacysearch {
int input = (post == null) ? 2 : post.getInt("input", 2);
String promoteSearchPageGreeting = env.getConfig("promoteSearchPageGreeting", "");
if (env.getConfigBool("promoteSearchPageGreeting.useNetworkName", false)) promoteSearchPageGreeting = env.getConfig("network.unit.description", "");
if (promoteSearchPageGreeting.length() == 0) promoteSearchPageGreeting = "P2P WEB SEARCH";
if (promoteSearchPageGreeting.length() == 0) promoteSearchPageGreeting = "P2P Web Search";
String client = header.get(httpHeader.CONNECTION_PROP_CLIENTIP); // the search client who initiated the search
// get query
@ -98,6 +98,9 @@ public class yacysearch {
final serverObjects prop = new serverObjects();
boolean rss = (post == null) ? false : post.get("rss", "false").equals("true");
prop.put("input_promoteSearchPageGreeting", promoteSearchPageGreeting);
prop.put("input_promoteSearchPageGreeting.homepage", sb.getConfig("promoteSearchPageGreeting.homepage", ""));
prop.put("input_promoteSearchPageGreeting.smallImage", sb.getConfig("promoteSearchPageGreeting.smallImage", ""));
if ((post == null) || (env == null) || (querystring.length() == 0) || (!searchAllowed)) {
// we create empty entries for template strings
prop.put("searchagain", "0");
@ -105,7 +108,6 @@ public class yacysearch {
prop.put("display", display);
prop.put("input_input", input);
prop.put("input_display", display);
prop.put("input_promoteSearchPageGreeting", promoteSearchPageGreeting);
prop.put("input_former", "");
prop.put("former", "");
prop.put("input_count", "10");
@ -414,7 +416,6 @@ public class yacysearch {
prop.put("display", display);
prop.put("input_input", input);
prop.put("input_display", display);
prop.put("input_promoteSearchPageGreeting", promoteSearchPageGreeting);
prop.putHTML("input_former", querystring);
//prop.put("former", post.get("search", ""));
prop.put("input_count", itemsPerPage);

@ -177,9 +177,10 @@ public class Balancer {
public synchronized CrawlEntry get(String urlhash) throws IOException {
assert urlhash != null;
if (urlFileIndex == null) return null; // case occurrs during shutdown
kelondroRow.Entry entry = urlFileIndex.get(urlhash.getBytes());
if (entry == null) return null;
return new CrawlEntry(entry);
if (entry == null) return null;
return new CrawlEntry(entry);
}
public synchronized int removeAllByProfileHandle(String profileHandle, long timeout) throws IOException {

@ -94,6 +94,7 @@ public class IndexingStack {
public synchronized void push(QueueEntry entry) throws IOException {
if (entry == null) return;
if (sbQueueStack == null) return; // may occur during shutdown
sbQueueStack.push(sbQueueStack.row().newEntry(new byte[][]{
entry.url.toString().getBytes(),
(entry.referrerHash == null) ? "".getBytes() : entry.referrerHash.getBytes(),

@ -61,4 +61,8 @@ public class kelondroMicroDate {
public static long reverseMicroDateDays(long microDateDays) {
return Math.min(System.currentTimeMillis(), microDateDays * day);
}
public static void main(String[] args) {
}
}

@ -1,3 +1,29 @@
// kelondroRelations.java
// (C) 2008 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
// first published 3.07.2008 on http://yacy.net
//
// This is a part of YaCy, a peer-to-peer based web search engine
//
// $LastChangedDate: 2008-03-14 01:16:04 +0100 (Fr, 14 Mrz 2008) $
// $LastChangedRevision: 4558 $
// $LastChangedBy: orbiter $
//
// LICENSE
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package de.anomic.kelondro;
import java.io.File;

Loading…
Cancel
Save