* Bring manage app up to date with current Helma.
This commit is contained in:
parent
c632c8f8bd
commit
437dfb94d3
33 changed files with 1185 additions and 1152 deletions
|
@ -1,11 +1,9 @@
|
|||
|
||||
|
||||
/**
|
||||
* scheduler function, runs global.appStat every minute
|
||||
*/
|
||||
* scheduler function, runs global.appStat every minute
|
||||
*/
|
||||
function scheduler() {
|
||||
appStat();
|
||||
return 60000;
|
||||
appStat();
|
||||
return 60000;
|
||||
}
|
||||
|
||||
|
||||
|
@ -14,8 +12,8 @@ function scheduler() {
|
|||
* creates app.data.addressFilter
|
||||
*/
|
||||
function onStart() {
|
||||
app.data.addressFilter = createAddressFilter();
|
||||
app.data.addressString = root.getProperty ("allowadmin");
|
||||
app.data.addressFilter = createAddressFilter();
|
||||
app.data.addressString = root.getProperty("allowadmin");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -23,80 +21,80 @@ function onStart() {
|
|||
* hostnames are converted, wildcards are only allowed in ip-addresses
|
||||
* (so, no network-names, sorry)
|
||||
*/
|
||||
function createAddressFilter() {
|
||||
var filter = new Packages.helma.util.InetAddressFilter();
|
||||
var str = root.getProperty("allowadmin");
|
||||
if ( str!=null && str!="" ) {
|
||||
var arr = str.split(",");
|
||||
for ( var i in arr ) {
|
||||
var str = new java.lang.String(arr[i]);
|
||||
function createAddressFilter() {
|
||||
var filter = new Packages.helma.util.InetAddressFilter();
|
||||
var str = root.getProperty("allowadmin");
|
||||
if (str != null && str != "") {
|
||||
var arr = str.split(",");
|
||||
for (var i in arr) {
|
||||
str = new java.lang.String(arr[i]);
|
||||
try {
|
||||
filter.addAddress(str.trim());
|
||||
} catch (a) {
|
||||
try {
|
||||
var str = java.net.InetAddress.getByName(str.trim()).getHostAddress();
|
||||
filter.addAddress (str);
|
||||
str = java.net.InetAddress.getByName(str.trim()).getHostAddress();
|
||||
filter.addAddress(str);
|
||||
} catch (b) {
|
||||
app.log ("error using address " + arr[i] + ": " + b);
|
||||
app.log("error using address " + arr[i] + ": " + b);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
app.log("no addresses allowed for app manage, all access will be denied");
|
||||
}
|
||||
return filter;
|
||||
}
|
||||
} else {
|
||||
app.log("no addresses allowed for app manage, all access will be denied");
|
||||
}
|
||||
return filter;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* updates the stats in app.data.stat every 5 minutes
|
||||
*/
|
||||
function appStat () {
|
||||
if (app.data.stat==null)
|
||||
app.data.stat = new HopObject ();
|
||||
if ((new Date()-300000) < app.data.stat.lastRun)
|
||||
return;
|
||||
var arr = root.getApplications ();
|
||||
for (var i=0; i<arr.length; i++) {
|
||||
var tmp = app.data.stat.get (arr[i].getName());
|
||||
if (tmp==null) {
|
||||
tmp = new HopObject();
|
||||
tmp.lastTotalRequestCount = 0;
|
||||
tmp.lastTotalErrorCount = 0;
|
||||
}
|
||||
tmp.requestCount = arr[i].getRequestCount () - tmp.lastTotalRequestCount;
|
||||
tmp.lastTotalRequestCount = arr[i].getRequestCount ();
|
||||
tmp.errorCount = arr[i].getErrorCount () - tmp.lastTotalErrorCount;
|
||||
tmp.lastTotalErrorCount = arr[i].getErrorCount ();
|
||||
app.data.stat.set (arr[i].getName(), tmp);
|
||||
}
|
||||
app.data.stat.lastRun = new Date();
|
||||
function appStat() {
|
||||
if (app.data.stat == null)
|
||||
app.data.stat = new HopObject ();
|
||||
if ((new Date() - 300000) < app.data.stat.lastRun)
|
||||
return;
|
||||
var arr = root.getApplications();
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
var tmp = app.data.stat[arr[i].getName()];
|
||||
if (tmp == null) {
|
||||
tmp = new HopObject();
|
||||
tmp.lastTotalRequestCount = 0;
|
||||
tmp.lastTotalErrorCount = 0;
|
||||
}
|
||||
tmp.requestCount = arr[i].getRequestCount() - tmp.lastTotalRequestCount;
|
||||
tmp.lastTotalRequestCount = arr[i].getRequestCount();
|
||||
tmp.errorCount = arr[i].getErrorCount() - tmp.lastTotalErrorCount;
|
||||
tmp.lastTotalErrorCount = arr[i].getErrorCount();
|
||||
app.data.stat[arr[i].getName()] = tmp;
|
||||
}
|
||||
app.data.stat.lastRun = new Date();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* utility function to sort object-arrays by name
|
||||
*/
|
||||
function sortByName(a,b) {
|
||||
if (a.name > b.name)
|
||||
return 1;
|
||||
else if (a.name == b.name)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
function sortByName(a, b) {
|
||||
if (a.name > b.name)
|
||||
return 1;
|
||||
else if (a.name == b.name)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* utility function to sort property-arrays by key
|
||||
*/
|
||||
function sortProps(a,b) {
|
||||
if ( a>b )
|
||||
return 1;
|
||||
else if ( a==b )
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
function sortProps(a, b) {
|
||||
if (a > b)
|
||||
return 1;
|
||||
else if (a == b)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -106,62 +104,62 @@ function sortProps(a,b) {
|
|||
* object for http-auth and return false.
|
||||
* @arg appObj application object to check against (if adminUsername etc are set in app.properties)
|
||||
*/
|
||||
function checkAuth(appObj) {
|
||||
if (res && res.data.noWeb==true) {
|
||||
function checkAuth(appObj) {
|
||||
if (res && res.data.noWeb == true) {
|
||||
return true;
|
||||
}
|
||||
var ok = false;
|
||||
var ok = false;
|
||||
|
||||
// check against root
|
||||
var adminAccess = root.getProperty("adminAccess");
|
||||
// check against root
|
||||
var adminAccess = root.getProperty("adminAccess");
|
||||
|
||||
if (adminAccess==null || adminAccess=="") {
|
||||
res.redirect (root.href ("makekey"));
|
||||
}
|
||||
if (adminAccess == null || adminAccess == "") {
|
||||
res.redirect(root.href("makekey"));
|
||||
}
|
||||
|
||||
var uname = req.username;
|
||||
var pwd = req.password;
|
||||
var uname = req.username;
|
||||
var pwd = req.password;
|
||||
|
||||
if ( uname==null || uname=="" || pwd==null || pwd=="" )
|
||||
return forceAuth();
|
||||
if (uname == null || uname == "" || pwd == null || pwd == "")
|
||||
return forceAuth();
|
||||
|
||||
var md5key = Packages.helma.util.MD5Encoder.encode(uname + "-" + pwd);
|
||||
var md5key = Packages.helma.util.MD5Encoder.encode(uname + "-" + pwd);
|
||||
|
||||
if (md5key==adminAccess)
|
||||
return true;
|
||||
if (md5key == adminAccess)
|
||||
return true;
|
||||
|
||||
if (appObj!=null && appObj.isActive()) {
|
||||
// check against application
|
||||
adminAccess = appObj.getProperty("adminAccess");
|
||||
if (md5key==adminAccess)
|
||||
return true;
|
||||
}
|
||||
return forceAuth();
|
||||
if (appObj != null && appObj.isActive()) {
|
||||
// check against application
|
||||
adminAccess = appObj.getProperty("adminAccess");
|
||||
if (md5key == adminAccess)
|
||||
return true;
|
||||
}
|
||||
return forceAuth();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* check access to the manage-app by ip-addresses
|
||||
*/
|
||||
function checkAddress() {
|
||||
if (res && res.data.noWeb==true) {
|
||||
function checkAddress() {
|
||||
if (res && res.data.noWeb == true) {
|
||||
return true;
|
||||
}
|
||||
// if allowadmin value in server.properties has changed,
|
||||
// re-construct the addressFilter
|
||||
if (app.data.addressString != root.getProperty("allowadmin")) {
|
||||
app.data.addressFilter = createAddressFilter();
|
||||
app.data.addressString = root.getProperty("allowadmin");
|
||||
}
|
||||
if (!app.data.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost))) {
|
||||
app.log("denied request from " + req.data.http_remotehost);
|
||||
// forceStealth seems a bit like overkill here.
|
||||
// display a message that the ip address must be added to server.properties
|
||||
res.write("Access from address " + req.data.http_remotehost + " denied.");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
// if allowadmin value in server.properties has changed,
|
||||
// re-construct the addressFilter
|
||||
if (app.data.addressString != root.getProperty ("allowadmin")){
|
||||
app.data.addressFilter = createAddressFilter();
|
||||
app.data.addressString = root.getProperty ("allowadmin");
|
||||
}
|
||||
if ( !app.data.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost)) ) {
|
||||
app.log("denied request from " + req.data.http_remotehost );
|
||||
// forceStealth seems a bit like overkill here.
|
||||
// display a message that the ip address must be added to server.properties
|
||||
res.write ("Access from address "+req.data.http_remotehost+" denied.");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -169,68 +167,67 @@ function checkAddress() {
|
|||
* response is reset to 401 / authorization required
|
||||
* @arg realm realm for http-auth
|
||||
*/
|
||||
function forceAuth(realm) {
|
||||
res.reset();
|
||||
res.status = 401;
|
||||
res.realm = (realm!=null) ? realm : "helma";
|
||||
res.write ("Authorization Required. The server could not verify that you are authorized to access the requested page.");
|
||||
return false;
|
||||
function forceAuth(realm) {
|
||||
res.reset();
|
||||
res.status = 401;
|
||||
res.realm = (realm != null) ? realm : "helma";
|
||||
res.write("Authorization Required. The server could not verify that you are authorized to access the requested page.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* macro-utility: formatting property lists
|
||||
*/
|
||||
function formatProperties(props,par) {
|
||||
if ( props.size()==0 )
|
||||
return "";
|
||||
var e = props.keys();
|
||||
var arr = new Array();
|
||||
while ( e.hasMoreElements() ) {
|
||||
arr[arr.length] = e.nextElement();
|
||||
}
|
||||
arr.sort(sortProps);
|
||||
for ( var i in arr ) {
|
||||
// don't print the admin-password
|
||||
if ( arr[i].toLowerCase()=="adminusername" || arr[i].toLowerCase()=="adminpassword" ) continue;
|
||||
res.write ( par.itemprefix + arr[i] + par.separator + props.getProperty(arr[i]) + par.itemsuffix );
|
||||
}
|
||||
* macro-utility: formatting property lists
|
||||
*/
|
||||
function formatProperties(props, par) {
|
||||
if (props.size() == 0)
|
||||
return "";
|
||||
var e = props.keys();
|
||||
var arr = new Array();
|
||||
while (e.hasMoreElements()) {
|
||||
arr[arr.length] = e.nextElement();
|
||||
}
|
||||
arr.sort(sortProps);
|
||||
for (var i in arr) {
|
||||
// don't print the admin-password
|
||||
if (arr[i].toLowerCase() == "adminusername" || arr[i].toLowerCase() == "adminpassword") continue;
|
||||
res.write(par.itemprefix + arr[i] + par.separator + props.getProperty(arr[i]) + par.itemsuffix);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* macro-utility: formatting an integer value as human readable bytes
|
||||
*/
|
||||
function formatBytes(bytes) {
|
||||
if ( bytes > Math.pow(2,30) ) {
|
||||
res.write( Math.round( 100*bytes/Math.pow(2,30) ) / 100 + "gb" );
|
||||
} else if ( bytes > Math.pow(2,20) ) {
|
||||
res.write( Math.round( 100*bytes/Math.pow(2,20) ) / 100 + "mb" );
|
||||
} else {
|
||||
res.write( Math.round( 100*bytes/Math.pow(2,10) ) / 100 + "kb" );
|
||||
}
|
||||
function formatBytes(bytes) {
|
||||
if (bytes > Math.pow(2, 30)) {
|
||||
res.write(Math.round(100 * bytes / Math.pow(2, 30)) / 100 + "gb");
|
||||
} else if (bytes > Math.pow(2, 20)) {
|
||||
res.write(Math.round(100 * bytes / Math.pow(2, 20)) / 100 + "mb");
|
||||
} else {
|
||||
res.write(Math.round(100 * bytes / Math.pow(2, 10)) / 100 + "kb");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* macro-utility: formatting time in millis as human readable age
|
||||
*/
|
||||
function formatAge(age) {
|
||||
var str = "";
|
||||
var days = Math.floor(age/86400);
|
||||
var age = age - days * 86400;
|
||||
var hours = Math.floor(age / 3600);
|
||||
var age = age - hours * 3600;
|
||||
var minutes = Math.floor(age / 60);
|
||||
var seconds = Math.floor(age - minutes * 60);
|
||||
if (days > 0)
|
||||
str += (days + " days, ");
|
||||
if (hours>0)
|
||||
str += (hours + "h, ");
|
||||
str += (minutes + "min");
|
||||
if (days == 0) str += (", " + seconds + "sec");
|
||||
return(str);
|
||||
function formatAge(age) {
|
||||
var str = "";
|
||||
var days = Math.floor(age / 86400);
|
||||
age = age - days * 86400;
|
||||
var hours = Math.floor(age / 3600);
|
||||
age = age - hours * 3600;
|
||||
var minutes = Math.floor(age / 60);
|
||||
var seconds = Math.floor(age - minutes * 60);
|
||||
if (days > 0)
|
||||
str += (days + " days, ");
|
||||
if (hours > 0)
|
||||
str += (hours + "h, ");
|
||||
str += (minutes + "min");
|
||||
if (days == 0) str += (", " + seconds + "sec");
|
||||
return(str);
|
||||
}
|
||||
|
||||
|
||||
|
@ -241,23 +238,23 @@ function formatAge(age) {
|
|||
* @param singular string used for value==1
|
||||
* @param plural string used for value!=1
|
||||
*/
|
||||
function formatCount(ct, par) {
|
||||
if ( !par || !par.singular || !par.plural ) {
|
||||
return "";
|
||||
}
|
||||
if ( ct==1 )
|
||||
return par.singular;
|
||||
else
|
||||
return par.plural;
|
||||
function formatCount(ct, par) {
|
||||
if (!par || !par.singular || !par.plural) {
|
||||
return "";
|
||||
}
|
||||
if (ct == 1)
|
||||
return par.singular;
|
||||
else
|
||||
return par.plural;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* tries to make out if this server is running linux from java's system properties
|
||||
*/
|
||||
function isLinux () {
|
||||
var str = java.lang.System.getProperty("os.name");
|
||||
return (str!=null && str.toLowerCase().indexOf("linux")!=-1);
|
||||
function isLinux() {
|
||||
var str = java.lang.System.getProperty("os.name");
|
||||
return (str != null && str.toLowerCase().indexOf("linux") != -1);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
* macro rendering a skin
|
||||
* @param name name of skin
|
||||
*/
|
||||
function skin_macro(par) {
|
||||
if ( par && par.name ) {
|
||||
renderSkin(par.name);
|
||||
}
|
||||
function skin_macro(par) {
|
||||
if (par && par.name) {
|
||||
renderSkin(par.name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -13,6 +13,6 @@ function skin_macro(par) {
|
|||
* Macro returning the actual date and time.
|
||||
*/
|
||||
function now_macro() {
|
||||
var date = new Date();
|
||||
return(date.format("dd.MM.yyyy, HH:mm'h' zzz"));
|
||||
var date = new Date();
|
||||
return(date.format("dd.MM.yyyy, HH:mm'h' zzz"));
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
<p></p>
|
||||
<div class="list_apps">
|
||||
<i>and <% root.appCount filter="disabled" %> disabled apps:</i>
|
||||
<i>disabled apps:</i>
|
||||
</div>
|
||||
|
||||
<% root.appList filter="disabled" skin="navig_disabled" %>
|
||||
|
@ -27,4 +27,4 @@
|
|||
|
||||
<p>
|
||||
<li><a href="<% root.href action="makekey" %>">generate server password</a>
|
||||
</p>
|
||||
</p>
|
||||
|
|
|
@ -1,95 +1,85 @@
|
|||
|
||||
|
||||
function renderLink (docEl, param) {
|
||||
var text = "";
|
||||
if (docEl.getType () == docEl.APPLICATION || docEl.getType () == docEl.PROTOTYPE) {
|
||||
text = docEl.getName ();
|
||||
} else if (docEl.getType () == docEl.SKIN) {
|
||||
text = docEl.getName () + ".skin";
|
||||
} else if (docEl.getType () == docEl.MACRO) {
|
||||
if (param.handler!="false" && docEl.getParentElement () && docEl.getParentElement().getName()!="global") {
|
||||
text = docEl.getParentElement ().getName () + ".";
|
||||
}
|
||||
var str = docEl.getName ();
|
||||
if (str.indexOf("_macro")) {
|
||||
text += str.substring (0, str.length-6);
|
||||
}
|
||||
} else if (docEl.getType () == docEl.FUNCTION) {
|
||||
var text = docEl.getName () + "(";
|
||||
var arr = docEl.listParameters ();
|
||||
for (var i=0; i<arr.length ;i++) {
|
||||
text += arr[i];
|
||||
if (i<arr.length-1)
|
||||
text += ", ";
|
||||
}
|
||||
text += ")";
|
||||
} else {
|
||||
text = docEl.getName ();
|
||||
}
|
||||
param.href = docEl.href ("main");
|
||||
if (!param.target) {
|
||||
param.target = "main";
|
||||
}
|
||||
return renderLinkTag (param) + text + '</a>';
|
||||
function renderLink(docEl, param) {
|
||||
var text = "";
|
||||
if (docEl.getType() == docEl.APPLICATION || docEl.getType() == docEl.PROTOTYPE) {
|
||||
text = docEl.getName();
|
||||
} else if (docEl.getType() == docEl.SKIN) {
|
||||
text = docEl.getName() + ".skin";
|
||||
} else if (docEl.getType() == docEl.MACRO) {
|
||||
if (param.handler != "false" && docEl.getParentElement() && docEl.getParentElement().getName() != "global") {
|
||||
text = docEl.getParentElement().getName() + ".";
|
||||
}
|
||||
var str = docEl.getName();
|
||||
if (str.indexOf("_macro")) {
|
||||
text += str.substring(0, str.length - 6);
|
||||
}
|
||||
} else if (docEl.getType() == docEl.FUNCTION) {
|
||||
text = docEl.getName() + "(";
|
||||
var arr = docEl.listParameters();
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
text += arr[i];
|
||||
if (i < arr.length - 1)
|
||||
text += ", ";
|
||||
}
|
||||
text += ")";
|
||||
} else {
|
||||
text = docEl.getName();
|
||||
}
|
||||
param.href = docEl.href("main");
|
||||
if (!param.target) {
|
||||
param.target = "main";
|
||||
}
|
||||
return renderLinkTag(param) + text + '</a>';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function renderLinkTag (param) {
|
||||
var sb = new java.lang.StringBuffer ();
|
||||
sb.append ('<a');
|
||||
for (var i in param) {
|
||||
sb.append (' ');
|
||||
sb.append (i);
|
||||
sb.append ('="');
|
||||
sb.append (param[i]);
|
||||
sb.append ('"');
|
||||
}
|
||||
sb.append ('>');
|
||||
return sb.toString ();
|
||||
function renderLinkTag(param) {
|
||||
var sb = new java.lang.StringBuffer ();
|
||||
sb.append('<a');
|
||||
for (var i in param) {
|
||||
sb.append(' ');
|
||||
sb.append(i);
|
||||
sb.append('="');
|
||||
sb.append(param[i]);
|
||||
sb.append('"');
|
||||
}
|
||||
sb.append('>');
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* renders the name of the location relative to the application
|
||||
* root.
|
||||
*/
|
||||
* renders the name of the location of a doc element.
|
||||
*/
|
||||
function renderLocation (docEl, param) {
|
||||
var f = docEl.getLocation ();
|
||||
// with repositories, always display full file path
|
||||
return f.getAbsolutePath();
|
||||
return docEl.toString();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* renders tag list.
|
||||
* @param param.skin skin to render on found DocTags
|
||||
* @param param.separator String printed between tags
|
||||
* @param param.type type string (param|return|author|version|see) to filter tags.
|
||||
*/
|
||||
function renderTags (docEl, param) {
|
||||
var skinname = (param.skin) ? param.skin : "main";
|
||||
var type = param.type;
|
||||
if (type=="params")
|
||||
type = "param";
|
||||
else if (type=="returns")
|
||||
type = "return";
|
||||
else if (type=="arg")
|
||||
* renders tag list.
|
||||
* @param param.skin skin to render on found DocTags
|
||||
* @param param.separator String printed between tags
|
||||
* @param param.type type string (param|return|author|version|see) to filter tags.
|
||||
*/
|
||||
function renderTags(docEl, param) {
|
||||
var skinname = (param.skin) ? param.skin : "main";
|
||||
var type = param.type;
|
||||
if (type == "params")
|
||||
type = "param";
|
||||
var str = "";
|
||||
var arr = docEl.listTags ();
|
||||
for (var i=0; i<arr.length; i++) {
|
||||
if (arr[i].getType () == type) {
|
||||
if (type=="see" || type=="overrides") {
|
||||
param.link = renderReference (arr[i], docEl);
|
||||
}
|
||||
str += arr[i].renderSkinAsString (skinname, param);
|
||||
str += (param.separator) ? param.separator : "";
|
||||
}
|
||||
}
|
||||
return str;
|
||||
else if (type == "returns")
|
||||
type = "return";
|
||||
else if (type == "arg")
|
||||
type = "param";
|
||||
var str = "";
|
||||
var arr = docEl.listTags();
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i].getType() == type) {
|
||||
if (type == "see" || type == "overrides") {
|
||||
param.link = renderReference(arr[i], docEl);
|
||||
}
|
||||
str += arr[i].renderSkinAsString(skinname, param);
|
||||
str += (param.separator) ? param.separator : "";
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
|
@ -100,66 +90,64 @@ function renderTags (docEl, param) {
|
|||
* @param docTagObj
|
||||
* @param docEl needed to be able to walk up to application object
|
||||
*/
|
||||
function renderReference (docTagObj, docEl) {
|
||||
// prepare the text:
|
||||
var text = docTagObj.getText ();
|
||||
text = new java.lang.String (text);
|
||||
text = text.trim ();
|
||||
if (text.indexOf("http://")==0) {
|
||||
// an url is a simple job
|
||||
return '<a href="' + text + '" target="_new">' + text + '</a>';
|
||||
} else {
|
||||
// make sure we only use the first item in the text so that unlinked comments
|
||||
// can follow, store & split the that
|
||||
var tok = new java.util.StringTokenizer (text);
|
||||
var tmp = tok.nextToken ();
|
||||
text = " " + text.substring (tmp.length + 1);
|
||||
var parts = tmp.split(".");
|
||||
// try to find the application object
|
||||
var obj = docEl;
|
||||
while (obj!=null) {
|
||||
if (obj.getType () == Packages.helma.doc.DocElement.APPLICATION) {
|
||||
var appObj = obj;
|
||||
break;
|
||||
}
|
||||
obj = obj.getParentElement ();
|
||||
}
|
||||
var protoObj = appObj.getChildElement ("prototype_" + parts[0]);
|
||||
if (protoObj==null) {
|
||||
// prototype wasn't found, return the unlinked tag
|
||||
return tmp + text;
|
||||
}
|
||||
if (parts.length==1) {
|
||||
// no function specified, return the linked prototype
|
||||
return '<a href="' + protoObj.href ("main") + '">' + format (tmp) + '</a>' + text;
|
||||
}
|
||||
// try to find a function object:
|
||||
var arr = protoObj.listChildren ();
|
||||
for (var i=0; i<arr.length; i++) {
|
||||
if (arr[i].getName () == parts [1]) {
|
||||
return '<a href="' + arr[i].href("main") + '">' + format(tmp) + '</a>' + text;
|
||||
}
|
||||
}
|
||||
// function not found:
|
||||
return tmp + text;
|
||||
}
|
||||
function renderReference(docTagObj, docEl) {
|
||||
// prepare the text:
|
||||
var text = docTagObj.getText();
|
||||
text = new java.lang.String (text);
|
||||
text = text.trim();
|
||||
if (text.indexOf("http://") == 0) {
|
||||
// an url is a simple job
|
||||
return '<a href="' + text + '" target="_new">' + text + '</a>';
|
||||
} else {
|
||||
// make sure we only use the first item in the text so that unlinked comments
|
||||
// can follow, store & split the that
|
||||
var tok = new java.util.StringTokenizer (text);
|
||||
var tmp = tok.nextToken();
|
||||
text = " " + text.substring(tmp.length + 1);
|
||||
var parts = tmp.split(".");
|
||||
// try to find the application object
|
||||
var obj = docEl;
|
||||
while (obj != null) {
|
||||
if (obj.getType() == Packages.helma.doc.DocElement.APPLICATION) {
|
||||
var appObj = obj;
|
||||
break;
|
||||
}
|
||||
obj = obj.getParentElement();
|
||||
}
|
||||
var protoObj = appObj.getChildElement("prototype_" + parts[0]);
|
||||
if (protoObj == null) {
|
||||
// prototype wasn't found, return the unlinked tag
|
||||
return tmp + text;
|
||||
}
|
||||
if (parts.length == 1) {
|
||||
// no function specified, return the linked prototype
|
||||
return '<a href="' + protoObj.href("main") + '">' + format(tmp) + '</a>' + text;
|
||||
}
|
||||
// try to find a function object:
|
||||
var arr = protoObj.listChildren();
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i].getName() == parts [1]) {
|
||||
return '<a href="' + arr[i].href("main") + '">' + format(tmp) + '</a>' + text;
|
||||
}
|
||||
}
|
||||
// function not found:
|
||||
return tmp + text;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* function rendering a comment.
|
||||
* @param param.length comment is shortened to the given length.
|
||||
* @returns string
|
||||
*/
|
||||
function renderComment (docEl, param) {
|
||||
var str = docEl.getComment ();
|
||||
if (param.length) {
|
||||
if (param.length < str.length) {
|
||||
return str.substring (0, param.length) + " ...";
|
||||
}
|
||||
}
|
||||
return str;
|
||||
* function rendering a comment.
|
||||
* @param param.length comment is shortened to the given length.
|
||||
* @returns string
|
||||
*/
|
||||
function renderComment(docEl, param) {
|
||||
var str = docEl.getComment();
|
||||
if (param.length) {
|
||||
if (param.length < str.length) {
|
||||
return str.substring(0, param.length) + " ...";
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue