- 3 more templates XHTML valid (had to remove all disabled <input>s if no blacklist was selected)

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@3135 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
karlchenofhell 19 years ago
parent d6eb699e8e
commit 89a270757f

@ -14,19 +14,19 @@
You may also provide your blacklist to other peers by sharing them; in return you may You may also provide your blacklist to other peers by sharing them; in return you may
collect blacklist entries from other peers. collect blacklist entries from other peers.
</p> </p>
<h3>Active list: <em>#[currentBlacklist]#</em> #(disabled)#::<span class="error">No blacklist selected</span>#(/disabled)#</h3> <h3>Active list: #(disabled)#<em>#[currentBlacklist]#</em>::<span class="error">No blacklist selected</span>#(/disabled)#</h3>
<!-- blacklist selection --> <!-- blacklist selection -->
<fieldset class="selectList"> <fieldset class="selectList">
<legend>Select list:</legend> <legend>Select list:</legend>
<form action="Blacklist_p.html" method="post" enctype="multipart/form-data"> <form action="Blacklist_p.html" method="post" enctype="multipart/form-data">#(disabled)#
<div style="display:inline;"> <div style="display:inline;">
<select name="selectedListName" size="1"> <select name="selectedListName" size="1">
#{blackLists}# #{blackLists}#
<option value="#[name]#" #(selected)#::selected="selected"#(/selected)#>#[name]# [#(shared)#not shared::shared#(/shared)#] #{active}# #[blTypeName]##{/active}#</option> <option value="#[name]#" #(selected)#::selected="selected"#(/selected)#>#[name]# [#(shared)#not shared::shared#(/shared)#] #{active}# #[blTypeName]##{/active}#</option>
#{/blackLists}# #{/blackLists}#
</select> </select>
<input type="submit" name="selectList" value="select" #(disabled)#::disabled="disabled"#(/disabled)# /> <input type="submit" name="selectList" value="select" />
</div> </div>::#(/disabled)#
<div style="display:inline;"> <div style="display:inline;">
New list: New list:
<input type="text" name="newListName" /> <input type="text" name="newListName" />
@ -34,14 +34,14 @@
</div> </div>
</form> </form>
</fieldset> </fieldset>
#(disabled)#
<fieldset class="listSettings"> <fieldset class="listSettings">
<legend>Settings for this list</legend> <legend>Settings for this list</legend>
<form action="Blacklist_p.html" method="post" enctype="multipart/form-data"> <form action="Blacklist_p.html" method="post" enctype="multipart/form-data">
<div> <div>
<input type="hidden" name="selectedListName" value="#[currentBlacklist]#" /> <input type="hidden" name="selectedListName" value="#[currentBlacklist]#" />
<input type="submit" name="shareList" value="Share/don't share this list" #(disabled)#::disabled="disabled"#(/disabled)# /> <input type="submit" name="shareList" value="Share/don't share this list" />
<input type="submit" name="deleteList" value="Delete this list" #(disabled)#::disabled="disabled"#(/disabled)# /> <input type="submit" name="deleteList" value="Delete this list" />
</div> </div>
</form> </form>
<form action="Blacklist_p.html" method="post" enctype="multipart/form-data"> <form action="Blacklist_p.html" method="post" enctype="multipart/form-data">
@ -56,7 +56,7 @@
#{/currentActiveFor}# #{/currentActiveFor}#
</dl> </dl>
<input type="hidden" name="selectedListName" value="#[currentBlacklist]#" /> <input type="hidden" name="selectedListName" value="#[currentBlacklist]#" />
<input type="submit" name="activateList" value="Save" #(disabled)#::disabled="disabled"#(/disabled)# /> <input type="submit" name="activateList" value="Save" />
</fieldset> </fieldset>
</form> </form>
</fieldset> </fieldset>
@ -78,7 +78,7 @@
#{/Itemlist}# #{/Itemlist}#
</select> </select>
<br /> <br />
<input type="submit" name="deleteBlacklistEntry" value="Delete URL pattern" #(disabled)#::disabled="disabled"#(/disabled)# /> <input type="submit" name="deleteBlacklistEntry" value="Delete URL pattern" />
</div> </div>
</form> </form>
<form action="Blacklist_p.html" method="post" enctype="multipart/form-data"> <form action="Blacklist_p.html" method="post" enctype="multipart/form-data">
@ -93,8 +93,12 @@
<div> <div>
<input type="hidden" name="currentBlacklist" value="#[currentBlacklist]#" /> <input type="hidden" name="currentBlacklist" value="#[currentBlacklist]#" />
<input type="text" name="newEntry" size="50" /> <input type="text" name="newEntry" size="50" />
<input type="submit" name="addBlacklistEntry" value="Add URL pattern" <input type="submit" name="addBlacklistEntry" value="Add URL pattern" />
#(disabled)#::disabled="disabled"#(/disabled)# /> </div>
</form>
</fieldset>
::#(/disabled)#
<div>
<p> <p>
#(status)# <!-- 0: --> #(status)# <!-- 0: -->
:: ::
@ -104,9 +108,7 @@
#(/status)# #(/status)#
</p> </p>
</div> </div>
</form> #(disabled)#
</fieldset>
<fieldset class="importListItems"> <fieldset class="importListItems">
<legend>Import blacklist items from...</legend> <legend>Import blacklist items from...</legend>
<!-- Blacklist import from other peer --> <!-- Blacklist import from other peer -->
@ -119,7 +121,7 @@
<option value="#[hash]#">#[name]#</option> <option value="#[hash]#">#[name]#</option>
#{/otherHosts}# #{/otherHosts}#
</select> </select>
<input type="submit" value="Load new blacklist items" #(disabled)#::disabled="disabled"#(/disabled)# /> <input type="submit" value="Load new blacklist items" />
</fieldset> </fieldset>
</form> </form>
@ -129,7 +131,7 @@
<legend>URL:</legend> <legend>URL:</legend>
<input type="hidden" name="currentBlacklist" value="#[currentBlacklist]#" /> <input type="hidden" name="currentBlacklist" value="#[currentBlacklist]#" />
<input type="text" name="url" /> <input type="text" name="url" />
<input type="submit" value="Load new blacklist items" #(disabled)#::disabled="disabled"#(/disabled)# /> <input type="submit" value="Load new blacklist items" />
</fieldset> </fieldset>
</form> </form>
@ -139,10 +141,10 @@
<legend>file:</legend> <legend>file:</legend>
<input type="hidden" name="currentBlacklist" value="#[currentBlacklist]#" /> <input type="hidden" name="currentBlacklist" value="#[currentBlacklist]#" />
<input type="text" name="file" /> <input type="text" name="file" />
<input type="submit" value="Load new blacklist items" #(disabled)#::disabled="disabled"#(/disabled)# /> <input type="submit" value="Load new blacklist items" />
</fieldset> </fieldset>
</form> </form>
</fieldset> </fieldset>::#(/disabled)#
#%env/templates/footer.template%# #%env/templates/footer.template%#
</body> </body>
</html> </html>

@ -66,6 +66,7 @@ import de.anomic.yacy.yacyCore;
import de.anomic.yacy.yacySeed; import de.anomic.yacy.yacySeed;
public class Blacklist_p { public class Blacklist_p {
private final static String DISABLED = "disabled_";
private final static String BLACKLIST = "blackLists_"; private final static String BLACKLIST = "blackLists_";
private final static String BLACKLIST_SHARED = "BlackLists.Shared"; private final static String BLACKLIST_SHARED = "BlackLists.Shared";
@ -291,8 +292,8 @@ public class Blacklist_p {
// Read the blacklist items from file // Read the blacklist items from file
int entryCount = 0;
if (blacklistToUse != null) { if (blacklistToUse != null) {
int entryCount = 0;
final ArrayList list = listManager.getListArray(new File(listManager.listsPath, blacklistToUse)); final ArrayList list = listManager.getListArray(new File(listManager.listsPath, blacklistToUse));
// sort them // sort them
@ -306,11 +307,10 @@ public class Blacklist_p {
if (nextEntry.length() == 0) continue; if (nextEntry.length() == 0) continue;
if (nextEntry.startsWith("#")) continue; if (nextEntry.startsWith("#")) continue;
prop.put("Itemlist_" + entryCount + "_item", nextEntry); prop.put(DISABLED + "Itemlist_" + entryCount + "_item", de.anomic.data.wikiCode.replaceHTMLonly(nextEntry));
entryCount++; entryCount++;
} }
} prop.put(DISABLED + "Itemlist", entryCount);
prop.put("Itemlist", entryCount);
// List known hosts for BlackList retrieval // List known hosts for BlackList retrieval
@ -327,55 +327,55 @@ public class Blacklist_p {
String peername; String peername;
while ((peername = (String) hostList.firstKey()) != null) { while ((peername = (String) hostList.firstKey()) != null) {
final String Hash = (String) hostList.get(peername); final String Hash = (String) hostList.get(peername);
prop.put("otherHosts_" + peerCount + "_hash", Hash); prop.put(DISABLED + "otherHosts_" + peerCount + "_hash", Hash);
prop.put("otherHosts_" + peerCount + "_name", peername); prop.put(DISABLED + "otherHosts_" + peerCount + "_name", peername);
hostList.remove(peername); hostList.remove(peername);
peerCount++; peerCount++;
} }
} catch (Exception e) {/* */} } catch (Exception e) {/* */}
prop.put("otherHosts", peerCount); prop.put(DISABLED + "otherHosts", peerCount);
}
} }
// List BlackLists // List BlackLists
int blacklistCount = 0; int blacklistCount = 0;
if (dirlist != null) { if (dirlist != null) {
for (int i = 0; i <= dirlist.length - 1; i++) { for (int i = 0; i <= dirlist.length - 1; i++) {
prop.put(BLACKLIST + blacklistCount + "_name", dirlist[i]); prop.put(DISABLED + BLACKLIST + blacklistCount + "_name", de.anomic.data.wikiCode.replaceHTMLonly(dirlist[i]));
prop.put(BLACKLIST + blacklistCount + "_selected", 0); prop.put(DISABLED + BLACKLIST + blacklistCount + "_selected", 0);
if (dirlist[i].equals(blacklistToUse)) { //current List if (dirlist[i].equals(blacklistToUse)) { //current List
prop.put(BLACKLIST + blacklistCount + "_selected", 1); prop.put(DISABLED + BLACKLIST + blacklistCount + "_selected", 1);
for (int blTypes=0; blTypes < supportedBlacklistTypes.length; blTypes++) { for (int blTypes=0; blTypes < supportedBlacklistTypes.length; blTypes++) {
prop.put("currentActiveFor_" + blTypes + "_blTypeName",supportedBlacklistTypes[blTypes]); prop.put(DISABLED + "currentActiveFor_" + blTypes + "_blTypeName",supportedBlacklistTypes[blTypes]);
prop.put("currentActiveFor_" + blTypes + "_checked", prop.put(DISABLED + "currentActiveFor_" + blTypes + "_checked",
listManager.ListInListslist(supportedBlacklistTypes[blTypes] + ".BlackLists",dirlist[i])?0:1); listManager.ListInListslist(supportedBlacklistTypes[blTypes] + ".BlackLists",dirlist[i])?0:1);
} }
prop.put("currentActiveFor",supportedBlacklistTypes.length); prop.put(DISABLED + "currentActiveFor",supportedBlacklistTypes.length);
} }
if (listManager.ListInListslist(BLACKLIST_SHARED, dirlist[i])) { if (listManager.ListInListslist(BLACKLIST_SHARED, dirlist[i])) {
prop.put(BLACKLIST + blacklistCount + "_shared", 1); prop.put(DISABLED + BLACKLIST + blacklistCount + "_shared", 1);
} else { } else {
prop.put(BLACKLIST + blacklistCount + "_shared", 0); prop.put(DISABLED + BLACKLIST + blacklistCount + "_shared", 0);
} }
int activeCount = 0; int activeCount = 0;
for (int blTypes=0; blTypes < supportedBlacklistTypes.length; blTypes++) { for (int blTypes=0; blTypes < supportedBlacklistTypes.length; blTypes++) {
if (listManager.ListInListslist(supportedBlacklistTypes[blTypes] + ".BlackLists",dirlist[i])) { if (listManager.ListInListslist(supportedBlacklistTypes[blTypes] + ".BlackLists",dirlist[i])) {
prop.put(BLACKLIST + blacklistCount + "_active_" + activeCount + "_blTypeName",supportedBlacklistTypes[blTypes]); prop.put(DISABLED + BLACKLIST + blacklistCount + "_active_" + activeCount + "_blTypeName",supportedBlacklistTypes[blTypes]);
activeCount++; activeCount++;
} }
} }
prop.put(BLACKLIST + blacklistCount + "_active",activeCount); prop.put(DISABLED + BLACKLIST + blacklistCount + "_active",activeCount);
blacklistCount++; blacklistCount++;
} }
} }
prop.put("blackLists", blacklistCount); prop.put(DISABLED + "blackLists", blacklistCount);
prop.put("currentBlacklist", (blacklistToUse==null)?"":blacklistToUse); prop.put(DISABLED + "currentBlacklist", (blacklistToUse==null)?"":blacklistToUse);
prop.put("disabled", (blacklistToUse == null) ? 1 : 0); prop.put("disabled", (blacklistToUse == null) ? 1 : 0);
return prop; return prop;
} }

@ -106,7 +106,7 @@
<a href="#[link]#" class="bookmarkTitle">#[title]#</a> <a href="#[link]#" class="bookmarkTitle">#[title]#</a>
</h4> </h4>
<p class="bookmarkDescription">#[description]#</p> <p class="bookmarkDescription">#[description]#</p>
<p class="tags">Tagged with |&nbsp;#{tags}#<a href="Bookmarks.html?tag=#[tag]#" class="bookmarkTags">#[tag]#</a> | #{/tags}#</p> <p class="tags">Tagged with | #{tags}#<a href="Bookmarks.html?tag=#[tag]#" class="bookmarkTags">#[tag]#</a> | #{/tags}#</p>
<p class="bookmarkActions"> <p class="bookmarkActions">
<a href="Bookmarks.html?edit=#[hash]#" class="bookmarkAction">Edit</a> / <a href="Bookmarks.html?edit=#[hash]#" class="bookmarkAction">Edit</a> /
<a href="Bookmarks.html?delete=#[hash]#" class="bookmarkAction">Delete</a> <a href="Bookmarks.html?delete=#[hash]#" class="bookmarkAction">Delete</a>

@ -242,7 +242,7 @@ public class Bookmarks {
while(count<max_count && it.hasNext()){ while(count<max_count && it.hasNext()){
bookmark=switchboard.bookmarksDB.getBookmark((String)it.next()); bookmark=switchboard.bookmarksDB.getBookmark((String)it.next());
if(bookmark!=null){ if(bookmark!=null){
prop.put("bookmarks_"+count+"_link", bookmark.getUrl()); prop.put("bookmarks_"+count+"_link", de.anomic.data.wikiCode.replaceHTMLonly(bookmark.getUrl()));
prop.put("bookmarks_"+count+"_title", bookmark.getTitle()); prop.put("bookmarks_"+count+"_title", bookmark.getTitle());
prop.put("bookmarks_"+count+"_description", bookmark.getDescription()); prop.put("bookmarks_"+count+"_description", bookmark.getDescription());
prop.put("bookmarks_"+count+"_public", (bookmark.getPublic()? 1:0)); prop.put("bookmarks_"+count+"_public", (bookmark.getPublic()? 1:0));

@ -17,7 +17,7 @@
<a href="#[url]#" class="tt">#[url]#</a> <a href="#[url]#" class="tt">#[url]#</a>
<div class="CacheAdminInfo"> <div class="CacheAdminInfo">
#[info]# #[info]#
<strong>HTTP Header</strong><!-- TO-DO: CSS/XHTMLize begin --> <p><strong>HTTP Header</strong></p><!-- TO-DO: CSS/XHTMLize begin -->
#(header)#<span class="info">- no header in header cache -</span>::<table border="0" cellspacing="0" cellpadding="0">#{line}# #(header)#<span class="info">- no header in header cache -</span>::<table border="0" cellspacing="0" cellpadding="0">#{line}#
<tr valign="top"> <tr valign="top">
<td class="tt">#[property]#</td> <td class="tt">#[property]#</td>
@ -28,70 +28,70 @@
#(type)# #(type)#
<strong>TITLE:</strong><br /> <p>
#[title]#<br /> <strong>TITLE:</strong> #[title]#
<br /> </p>
<strong>SECTION HEADLINES:</strong><br /> <p><strong>SECTION HEADLINES:</strong></p>
<ul>#{headlines}# <ul>#{headlines}#
<li>#[headline]#</li>#{/headlines}# <li>#[headline]#</li>#{/headlines}#
</ul> </ul>
<br /> <br />
<strong>HREF:</strong><br /> #(use.links)#::<p><strong>HREF:</strong></p>
<table border="0" cellspacing="0" cellpadding="0">#{links}# <table border="0" cellspacing="0" cellpadding="0">#{links}#
<tr valign="top"> <tr valign="top">
<td><span class="small">#[name]#</span></td> <td><span class="small">#[name]#</span></td>
<td class="tt">#[link]#</td> <td class="tt">#[link]#</td>
</tr>#{/links}# </tr>#{/links}#
</table> </table>#(/use.links)#
<strong>IMAGE:</strong><br /> #(use.images)#::<p><strong>IMAGE:</strong></p>
<table border="0" cellspacing="0" cellpadding="0">#{images}# <table border="0" cellspacing="0" cellpadding="0">#{images}#
<tr valign="top"> <tr valign="top">
<td><span class="small">#[name]#</span></td> <td><span class="small">#[name]#</span></td>
<td class="tt">#[link]#</td> <td class="tt">#[link]#</td>
</tr>#{/images}# </tr>#{/images}#
</table> </table>#(/use.images)#
<strong>AUDIO:</strong><br /> #(use.audio)#::<p><strong>AUDIO:</strong></p>
<table border="0" cellspacing="0" cellpadding="0">#{audio}# <table border="0" cellspacing="0" cellpadding="0">#{audio}#
<tr valign="top"> <tr valign="top">
<td><span class="small">#[name]#</span></td> <td><span class="small">#[name]#</span></td>
<td class="tt">#[link]#</td> <td class="tt">#[link]#</td>
</tr>#{/audio}# </tr>#{/audio}#
</table> </table>#(/use.audio)#
<strong>VIDEO:</strong><br /> #(use.video)#::<p><strong>VIDEO:</strong></p>
<table border="0" cellspacing="0" cellpadding="0">#{video}# <table border="0" cellspacing="0" cellpadding="0">#{video}#
<tr valign="top"> <tr valign="top">
<td><span class="small">#[name]#</span></td> <td><span class="small">#[name]#</span></td>
<td class="tt">#[link]#</td> <td class="tt">#[link]#</td>
</tr>#{/video}# </tr>#{/video}#
</table> </table>#(/use.video)#
<strong>APPS:</strong><br /> #(use.apps)#::<p><strong>APPS:</strong></p>
<table border="0" cellspacing="0" cellpadding="0">#{apps}# <table border="0" cellspacing="0" cellpadding="0">#{apps}#
<tr valign="top"> <tr valign="top">
<td><span class="small">#[name]#</span></td> <td><span class="small">#[name]#</span></td>
<td class="tt">#[link]#</td> <td class="tt">#[link]#</td>
</tr>#{/apps}# </tr>#{/apps}#
</table> </table>#(/use.apps)#
<strong>EMAIL:</strong><br /> #(use.email)#::<p><strong>EMAIL:</strong></p>
<table border="0" cellspacing="0" cellpadding="0">#{email}# <table border="0" cellspacing="0" cellpadding="0">#{email}#
<tr valign="top"> <tr valign="top">
<td><span class="small">#[name]#</span></td> <td><span class="small">#[name]#</span></td>
<td class="tt">#[link]#</td> <td class="tt">#[link]#</td>
</tr>#{/email}# </tr>#{/email}#
</table> </table>#(/use.email)#
<strong>TEXT:</strong><br /> <p><strong>TEXT:</strong></p>
<span class="small"> <span class="small">
#[text]# #[text]#
</span> </span>
<strong>LINES:</strong><br /> <p><strong>LINES:</strong></p>
<span class="small">#{lines}# <span class="small">#{lines}#
<span style="display: block;">#[line]#</span>#{/lines}# <span style="display: block;">#[line]#</span>#{/lines}#
</span> </span>

@ -148,7 +148,8 @@ public class CacheAdmin_p {
String[] t = document.getSectionTitles(); String[] t = document.getSectionTitles();
prop.put("info_type_headlines", t.length); prop.put("info_type_headlines", t.length);
for (i = 0; i < t.length; i++) for (i = 0; i < t.length; i++)
prop.put("info_type_headlines_" + i + "_headline", t[i].replaceAll("\n", "").trim()); prop.put("info_type_headlines_" + i + "_headline",
de.anomic.data.wikiCode.replaceHTMLonly(t[i].replaceAll("\n", "").trim()));
formatAnchor(prop, document.getHyperlinks(), "links"); formatAnchor(prop, document.getHyperlinks(), "links");
formatImageAnchor(prop, document.getImages()); formatImageAnchor(prop, document.getImages());
@ -157,13 +158,15 @@ public class CacheAdmin_p {
formatAnchor(prop, document.getApplinks(), "apps"); formatAnchor(prop, document.getApplinks(), "apps");
formatAnchor(prop, document.getEmaillinks(), "email"); formatAnchor(prop, document.getEmaillinks(), "email");
prop.put("info_type_text", new String(scraper.getText())); prop.put("info_type_text",
de.anomic.data.wikiCode.replaceHTMLonly(new String(scraper.getText())));
i = 0; i = 0;
final Iterator sentences = document.getSentences(false); final Iterator sentences = document.getSentences(false);
if (sentences != null) if (sentences != null)
while (sentences.hasNext()) { while (sentences.hasNext()) {
prop.put("info_type_lines_" + i + "_line", sentences.next().toString().replaceAll("\n", "").trim()); prop.put("info_type_lines_" + i + "_line",
de.anomic.data.wikiCode.replaceHTMLonly(sentences.next().toString().replaceAll("\n", "").trim()));
i++; i++;
} }
prop.put("info_type_lines", i); prop.put("info_type_lines", i);
@ -257,29 +260,34 @@ public class CacheAdmin_p {
final Iterator iter = anchor.entrySet().iterator(); final Iterator iter = anchor.entrySet().iterator();
String descr; String descr;
Map.Entry entry; Map.Entry entry;
prop.put("info_type_" + extension, anchor.size()); prop.put("info_type_use." + extension + "_" + extension, anchor.size());
int i = 0; int i = 0;
while (iter.hasNext()) { while (iter.hasNext()) {
entry = (Map.Entry) iter.next(); entry = (Map.Entry) iter.next();
descr = ((String) entry.getValue()).trim(); descr = ((String) entry.getValue()).trim();
if (descr.length() == 0) { descr = "-"; } if (descr.length() == 0) { descr = "-"; }
prop.put("info_type_" + extension + "_" + i + "_name", descr.replaceAll("\n", "").trim()); prop.put("info_type_use." + extension + "_" + extension + "_" + i + "_name",
prop.put("info_type_" + extension + "_" + i + "_link", entry.getKey()); de.anomic.data.wikiCode.replaceHTMLonly(descr.replaceAll("\n", "").trim()));
prop.put("info_type_use." + extension + "_" + extension + "_" + i + "_link",
de.anomic.data.wikiCode.replaceHTMLonly(entry.getKey().toString()));
i++; i++;
} }
prop.put("info_type_use." + extension, (i == 0) ? 0 : 1);
} }
private static void formatImageAnchor(serverObjects prop, TreeSet anchor) { private static void formatImageAnchor(serverObjects prop, TreeSet anchor) {
final Iterator iter = anchor.iterator(); final Iterator iter = anchor.iterator();
htmlFilterImageEntry ie; htmlFilterImageEntry ie;
prop.put("info_type_images", anchor.size()); prop.put("info_type_use.images_images", anchor.size());
int i = 0; int i = 0;
while (iter.hasNext()) { while (iter.hasNext()) {
ie = (htmlFilterImageEntry) iter.next(); ie = (htmlFilterImageEntry) iter.next();
prop.put("info_type_images_" + i + "_name", ie.alt().replaceAll("\n", "").trim()); prop.put("info_type_use.images_images_" + i + "_name", ie.alt().replaceAll("\n", "").trim());
prop.put("info_type_images_" + i + "_link", ie.url().toNormalform()); prop.put("info_type_use.images_images_" + i + "_link",
de.anomic.data.wikiCode.replaceHTMLonly(ie.url().toNormalform()));
i++; i++;
} }
prop.put("info_type_use.images", (i == 0) ? 0 : 1);
} }
private static void linkPathString(serverObjects prop, String path, boolean dir) { private static void linkPathString(serverObjects prop, String path, boolean dir) {

Loading…
Cancel
Save