summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/inc/filter_log.inc2
-rw-r--r--usr/local/www/css/table.css42
-rwxr-xr-xusr/local/www/diag_dump_states.php1
-rw-r--r--usr/local/www/diag_dump_states_sources.php1
-rwxr-xr-xusr/local/www/diag_logs_filter.php51
-rw-r--r--usr/local/www/diag_routes.php12
-rwxr-xr-xusr/local/www/head.inc10
-rw-r--r--usr/local/www/javascript/filter_log.js4
-rw-r--r--usr/local/www/javascript/sorttable.js87
-rwxr-xr-xusr/local/www/status_captiveportal.php1
-rwxr-xr-xusr/local/www/status_lb_pool.php1
-rw-r--r--usr/local/www/status_openvpn.php3
-rw-r--r--usr/local/www/themes/pfsense-dropdown/all.css2
-rw-r--r--usr/local/www/themes/pfsense_ng/all.css4
-rw-r--r--usr/local/www/widgets/widgets/captive_portal_status.widget.php1
-rw-r--r--usr/local/www/widgets/widgets/openvpn.widget.php26
16 files changed, 181 insertions, 67 deletions
diff --git a/etc/inc/filter_log.inc b/etc/inc/filter_log.inc
index 2bfc895..d55d332 100644
--- a/etc/inc/filter_log.inc
+++ b/etc/inc/filter_log.inc
@@ -257,7 +257,7 @@ function find_rule_by_number_buffer($rulenum, $type){
list(,$rulename,) = explode("\"",$ruleString);
$rulename = str_replace("USER_RULE: ",'<img src="/themes/'.$g['theme'].'/images/icons/icon_frmfld_user.png" width="11" height="12" title="USER_RULE" alt="USER_RULE"/> ',$rulename);
}
- return "@".$rulenum." ".$rulename;
+ return $rulename." (@".$rulenum.")";
}
function find_action_image($action) {
diff --git a/usr/local/www/css/table.css b/usr/local/www/css/table.css
new file mode 100644
index 0000000..29ae503
--- /dev/null
+++ b/usr/local/www/css/table.css
@@ -0,0 +1,42 @@
+/* Element CSS Definitions for (MultiRow-)tables
+if theme changes are needed include a table.css in the /themes/yourtheme/ */
+.listMR {
+ background-color: #DDD;
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listMRlr {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listMRr {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listMRodd {
+ background-color: #FFFFFF;
+}
+.listMReven {
+ background-color: #F0F0F0;
+}
+.listMRDescriptionL {
+ border-right: none;
+ border-bottom: 2px solid #999999;
+}
+.listMRDescriptionR {
+ border-left: none;
+ border-bottom: 2px solid #999999;
+}
diff --git a/usr/local/www/diag_dump_states.php b/usr/local/www/diag_dump_states.php
index b368542..ef00595 100755
--- a/usr/local/www/diag_dump_states.php
+++ b/usr/local/www/diag_dump_states.php
@@ -78,7 +78,6 @@ include("head.inc");
?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
-<script src="/javascript/sorttable.js" type="text/javascript"></script>
<?php include("fbegin.inc"); ?>
<form action="diag_dump_states.php" method="get" name="iform">
diff --git a/usr/local/www/diag_dump_states_sources.php b/usr/local/www/diag_dump_states_sources.php
index 6081291..791cd68 100644
--- a/usr/local/www/diag_dump_states_sources.php
+++ b/usr/local/www/diag_dump_states_sources.php
@@ -68,7 +68,6 @@ include("head.inc");
?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
-<script src="/javascript/sorttable.js" type="text/javascript"></script>
<?php include("fbegin.inc"); ?>
<form action="diag_dump_states_sources.php" method="get" name="iform">
diff --git a/usr/local/www/diag_logs_filter.php b/usr/local/www/diag_logs_filter.php
index ce076ab..193585a 100755
--- a/usr/local/www/diag_logs_filter.php
+++ b/usr/local/www/diag_logs_filter.php
@@ -116,7 +116,8 @@ include("head.inc");
<tr>
<td>
<div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" sortableMultirow="<?=$config['syslog']['filterdescriptions'] === "2"?2:1?>">
+ <thead>
<tr>
<td colspan="<?=(!isset($config['syslog']['rawfilter']))?7:2?>" align="left" valign="middle">
<div style="float: right; vertical-align:middle">
@@ -130,7 +131,7 @@ include("head.inc");
<?=gettext("Normal View");?> | <a href="diag_logs_filter_dynamic.php"><?=gettext("Dynamic View");?></a> | <a href="diag_logs_filter_summary.php"><?=gettext("Summary View");?></a>
<br/><br/>
<?php if (isset($config['syslog']['filterdescriptions']) && $config['syslog']['filterdescriptions'] === "2"):?>
- <a href="#" onclick="showRuleDescriptions()">Show/hide rule descriptions</a>
+ <a href="#" onclick="toggleListDescriptions()">Show/hide rule descriptions</a>
<?php endif;?>
<br/>
</div>
@@ -148,32 +149,36 @@ include("head.inc");
printf(gettext("Max(%s)"),$nentries);?>
</td>
</tr>
- <tr>
- <td width="10%" class="listhdrr"><?=gettext("Act");?></td>
- <td width="10%" class="listhdrr"><?=gettext("Time");?></td>
- <td width="15%" class="listhdrr"><?=gettext("If");?></td>
+ <tr class="sortableHeaderRowIdentifier">
+ <td width="10%" class="listhdrr"><?=gettext("Act");?></ td>
+ <td width="10%" class="listhdrr"><?=gettext("Time");?></ td>
+ <td width="15%" class="listhdrr"><?=gettext("If");?></ td>
<?php if ($config['syslog']['filterdescriptions'] === "1"):?>
- <td width="10%" class="listhdrr"><?=gettext("Rule");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Rule");?></ td>
<?php endif;?>
- <td width="25%" class="listhdrr"><?=gettext("Source");?></td>
- <td width="25%" class="listhdrr"><?=gettext("Destination");?></td>
- <td width="15%" class="listhdrr"><?=gettext("Proto");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Source");?></ td>
+ <td width="25%" class="listhdrr"><?=gettext("Destination");?></ td>
+ <td width="15%" class="listhdrr"><?=gettext("Proto");?></ td>
</tr>
+ </thead>
<?php
if ($config['syslog']['filterdescriptions'])
buffer_rules_load();
- foreach ($filterlog as $filterent): ?>
- <tr>
- <td class="listlr" nowrap="nowrap" align="center">
+ $rowIndex = 0;
+ foreach ($filterlog as $filterent):
+ $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
+ $rowIndex++;?>
+ <tr class="<?=$evenRowClass?>">
+ <td class="listMRlr" nowrap="nowrap" align="center" sorttable_customkey="<?=$filterent['act']?>">
<center>
<a href="#" onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['act']}"; ?>', outputrule);">
<img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" align="middle" alt="<?php echo $filterent['act'];?>" title="<?php echo $filterent['act'];?>" />
<?php if ($filterent['count']) echo $filterent['count'];?></a></center></td>
- <td class="listr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['time']);?></td>
- <td class="listr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['interface']);?></td>
+ <td class="listMRr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['time']);?></td>
+ <td class="listMRr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['interface']);?></td>
<?php
if ($config['syslog']['filterdescriptions'] === "1")
- echo("<td class=\"listr\" nowrap=\"nowrap\">".find_rule_by_number_buffer($filterent['rulenum'],$filterent['act'])."</td>");
+ echo("<td class=\"listrg\" nowrap=\"nowrap\">".find_rule_by_number_buffer($filterent['rulenum'],$filterent['act'])."</td>");
$int = strtolower($filterent['interface']);
$proto = strtolower($filterent['proto']);
@@ -188,14 +193,14 @@ include("head.inc");
$srcstr = $filterent['srcip'] . get_port_with_service($filterent['srcport'], $proto);
$dststr = $filterent['dstip'] . get_port_with_service($filterent['dstport'], $proto);
?>
- <td class="listr" nowrap="nowrap">
+ <td class="listMRr" nowrap="nowrap">
<a href="diag_dns.php?host=<?php echo $filterent['srcip']; ?>" title="<?=gettext("Reverse Resolve with DNS");?>">
<img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" alt="Icon Reverse Resolve with DNS"/></a>
<a href="easyrule.php?<?php echo "action=block&amp;int={$int}&amp;src={$filterent['srcip']}&amp;ipproto={$ipproto}"; ?>" title="<?=gettext("Easy Rule: Add to Block List");?>" onclick="return confirm('<?=gettext("Do you really want to add this BLOCK rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.")?>')">
<img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_block_add.gif" alt="Icon Easy Rule: Add to Block List" /></a>
<?php echo $srcstr;?>
</td>
- <td class="listr" nowrap="nowrap">
+ <td class="listMRr" nowrap="nowrap">
<a href="diag_dns.php?host=<?php echo $filterent['dstip']; ?>" title="<?=gettext("Reverse Resolve with DNS");?>">
<img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" alt="Icon Reverse Resolve with DNS" /></a>
<a href="easyrule.php?<?php echo "action=pass&amp;int={$int}&amp;proto={$proto}&amp;src={$filterent['srcip']}&amp;dst={$filterent['dstip']}&amp;dstport={$filterent['dstport']}&amp;ipproto={$ipproto}"; ?>" title="<?=gettext("Easy Rule: Pass this traffic");?>" onclick="return confirm('<?=gettext("Do you really want to add this PASS rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.");?>')">
@@ -206,12 +211,12 @@ include("head.inc");
if ($filterent['proto'] == "TCP")
$filterent['proto'] .= ":{$filterent['tcpflags']}";
?>
- <td class="listr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['proto']);?></td>
+ <td class="listMRr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['proto']);?></td>
</tr>
<?php if (isset($config['syslog']['filterdescriptions']) && $config['syslog']['filterdescriptions'] === "2"):?>
- <tr>
- <td colspan="2" class="listFirewall listlr" />
- <td class="listFirewall listr" colspan="4" nowrap="nowrap"><?=find_rule_by_number_buffer($filterent['rulenum'],$filterent['act']);?></td>
+ <tr class="<?=$evenRowClass?>">
+ <td colspan="2" class="listMRDescriptionL listMRlr" />
+ <td colspan="4" class="listMRDescriptionR listMRr" nowrap="nowrap"><?=find_rule_by_number_buffer($filterent['rulenum'],$filterent['act']);?></td>
</tr>
<?php endif;
endforeach;
@@ -228,6 +233,7 @@ include("head.inc");
dump_clog($filter_logfile, $nentries);
?>
<?php endif; ?>
+ <tfoot>
<tr>
<td align="left" valign="top" colspan="3">
<form id="clearform" name="clearform" action="diag_logs_filter.php" method="post" style="margin-top: 14px;">
@@ -235,6 +241,7 @@ include("head.inc");
</form>
</td>
</tr>
+ </tfoot>
</table>
</div>
</td>
diff --git a/usr/local/www/diag_routes.php b/usr/local/www/diag_routes.php
index 980150f..e4a364f 100644
--- a/usr/local/www/diag_routes.php
+++ b/usr/local/www/diag_routes.php
@@ -86,18 +86,24 @@ include('head.inc');
$elements = ($tabindex == 0 ? 8 : 8);
$name = ($tabindex == 0 ? 'IPv4' : 'IPv6');
?>
-<table class="tabcont" width="100%" cellspacing="0" cellpadding="6" border="0">
+<table class="tabcont sortable" width="100%" cellspacing="0" cellpadding="6" border="0">
+<thead>
<tr><td class="listtopic" colspan="<?=$elements?>"><strong><?=$name;?></strong></font></td></tr>
<?php
foreach (explode("\n", $table) as $i => $line) {
if ($i == 0) continue;
+ if ($line == "") continue;
if ($i == 1)
$class = 'listhdrr';
else
$class = 'listlr';
- print("<tr>\n");
+ if ($i == 1)
+ print("<tr class=\"sortableHeaderRowIdentifier\">\n");
+ else
+ print("<tr>\n");
+
$j = 0;
foreach (explode(' ', $line) as $entry) {
if ($entry == '') continue;
@@ -112,6 +118,8 @@ include('head.inc');
if ($j == $elements - 1)
print('<td class="listr">&nbsp;</td>' . "\n");
print("</tr>\n");
+ if ($i == 1)
+ print("</thead>\n");
}
print("</table>\n");
}
diff --git a/usr/local/www/head.inc b/usr/local/www/head.inc
index 6301d14..e73ab0a 100755
--- a/usr/local/www/head.inc
+++ b/usr/local/www/head.inc
@@ -33,7 +33,15 @@ $pagetitle = gentitle( $pgtitle );
<title><?php echo($config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pagetitle); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="apple-touch-icon" href="/themes/<?php echo $g['theme']; ?>/apple-touch-icon.png"/>
- <?php if (strpos($_SERVER["SCRIPT_FILENAME"], "wizard.php") !== false &&
+ <?php
+ if (file_exists("{$g['www_path']}/themes/{$g['theme']}/table.css")):
+ echo "<link rel=\"stylesheet\" href=\"/themes/{$g['theme']}/table.css\" />";
+ else:
+ echo "<link rel=\"stylesheet\" href=\"/css/table.css\" media=\"all\" />";
+ endif;
+ ?>
+
+ <?php if (strpos($_SERVER["SCRIPT_FILENAME"], "wizard.php") !== false &&
file_exists("{$g['www_path']}/themes/{$g['theme']}/wizard.css")): ?>
<?php echo "<style type=\"text/css\" src=\"/themes/{$g['theme']}/wizard.css\"></style>"; ?>
<?php else: ?>
diff --git a/usr/local/www/javascript/filter_log.js b/usr/local/www/javascript/filter_log.js
index 1acb5c2..76c21e2 100644
--- a/usr/local/www/javascript/filter_log.js
+++ b/usr/local/www/javascript/filter_log.js
@@ -121,12 +121,12 @@ if (typeof updateDelay != 'undefined') {
timer = setInterval('fetch_new_rules()', updateDelay);
}
-function showRuleDescriptions(){
+function toggleListDescriptions(){
var ss = document.styleSheets;
for (var i=0; i<ss.length; i++) {
var rules = ss[i].cssRules || ss[i].rules;
for (var j=0; j<rules.length; j++) {
- if (rules[j].selectorText === ".listFirewall") {
+ if (rules[j].selectorText === ".listMRDescriptionL" || rules[j].selectorText === ".listMRDescriptionR") {
rules[j].style.display = rules[j].style.display === "none" ? "table-cell" : "none";
}
}
diff --git a/usr/local/www/javascript/sorttable.js b/usr/local/www/javascript/sorttable.js
index a66aafb..e86ba5d 100644
--- a/usr/local/www/javascript/sorttable.js
+++ b/usr/local/www/javascript/sorttable.js
@@ -13,6 +13,12 @@
Thanks to many, many people for contributions and suggestions.
Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
This basically means: do what you want with it.
+
+ -- pfSense modifications --
+ Allow for sorting of IP adresses
+ 2012-09-15 Allow for multiple header rows, using "sortableHeaderRowIdentifier" class for the TR that has the column headers. (used in firewall-log)
+ 2012-09-15 Allow sorting multiple dual/mutlti rows together, using sortablemultirow="2" attribute for the table
+ 2012-09-15 Allow sorting of IP:Port texts, changed sort compare function
*/
@@ -50,7 +56,27 @@ sorttable = {
// Safari doesn't support table.tHead, sigh
if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
- if (table.tHead.rows.length != 1) return; // can't cope with two header rows
+ headrow = undefined;
+ if (table.tHead.rows.length == 1)
+ headrow = table.tHead.rows[0].cells;
+ else
+ {
+ //if multiple rows are found one must be marked with class <tr class="sortableHeaderRowIdentifier">
+ for (var i=0; i<table.tHead.rows.length; i++) {
+ if (table.tHead.rows[i].className.search(/\bsortableHeaderRowIdentifier\b/) != -1)
+ {
+ headrow = table.tHead.rows[i].cells;
+ break;
+ }
+ }
+ }
+ if (headrow == undefined)
+ return;
+
+ if (table.getAttribute("sortableMultirow") != undefined)
+ sortableMultirow = parseInt(table.getAttribute("sortableMultirow"));
+ else
+ sortableMultirow = 1;
// Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
// "total" rows, for example). This is B&R, since what you're supposed
@@ -75,7 +101,6 @@ sorttable = {
}
// work through each column and calculate its type
- headrow = table.tHead.rows[0].cells;
for (var i=0; i<headrow.length; i++) {
// manually override the type with a sorttable_type attribute
if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
@@ -84,7 +109,7 @@ sorttable = {
if (mtch && typeof sorttable["sort_"+override] == 'function') {
headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
} else {
- headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);
+ headrow[i].sorttable_sortfunction = sorttable.guessType(table,i, sortableMultirow);
}
// make it clickable to sort
headrow[i].sorttable_columnindex = i;
@@ -94,7 +119,7 @@ sorttable = {
if (this.className.search(/\bsorttable_sorted\b/) != -1) {
// if we're already sorted by this column, just
// reverse the table, which is quicker
- sorttable.reverse(this.sorttable_tbody);
+ sorttable.reverse(this.sorttable_tbody, sortableMultirow);
this.className = this.className.replace('sorttable_sorted',
'sorttable_sorted_reverse');
this.removeChild(document.getElementById('sorttable_sortfwdind'));
@@ -107,7 +132,7 @@ sorttable = {
if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
// if we're already sorted by this column in reverse, just
// re-reverse the table, which is quicker
- sorttable.reverse(this.sorttable_tbody);
+ sorttable.reverse(this.sorttable_tbody, sortableMultirow);
this.className = this.className.replace('sorttable_sorted_reverse',
'sorttable_sorted');
this.removeChild(document.getElementById('sorttable_sortrevind'));
@@ -144,8 +169,12 @@ sorttable = {
row_array = [];
col = this.sorttable_columnindex;
rows = this.sorttable_tbody.rows;
- for (var j=0; j<rows.length; j++) {
+ for (var j=0; j<rows.length; j+=sortableMultirow) {
row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
+ for(var k=1; k < sortableMultirow;k++)
+ {
+ row_array[row_array.length-1][k+1]=rows[j+k];
+ }
}
/* If you want a stable sort, uncomment the following line */
//sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
@@ -154,7 +183,15 @@ sorttable = {
tb = this.sorttable_tbody;
for (var j=0; j<row_array.length; j++) {
- tb.appendChild(row_array[j][1]);
+ for(var k=0; k<sortableMultirow; k++) {
+ row = row_array[j][k+1];
+ if (j % 2 == 0)
+ row.className = row.className.replace(' listMReven',' listMRodd');
+ else
+ row.className = row.className.replace(' listMRodd',' listMReven');
+
+ tb.appendChild(row);
+ }
}
delete row_array;
@@ -163,13 +200,13 @@ sorttable = {
}
},
- guessType: function(table, column) {
+ guessType: function(table, column, sortableMultirow) {
// guess the type of a column based on its first non-blank row
sortfn = sorttable.sort_alpha;
- for (var i=0; i<table.tBodies[0].rows.length; i++) {
+ for (var i=0; i<table.tBodies[0].rows.length; i+=sortableMultirow) {
text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
if (text != '') {
- if (text.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/)) {
+ if (text.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\:[0-9]{1,5})?\b/)) {
return sorttable.sort_ipaddr;
}
if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) {
@@ -244,14 +281,17 @@ sorttable = {
}
},
- reverse: function(tbody) {
+ reverse: function(tbody, sortableMultirow) {
// reverse the rows in a tbody
newrows = [];
for (var i=0; i<tbody.rows.length; i++) {
newrows[newrows.length] = tbody.rows[i];
}
- for (var i=newrows.length-1; i>=0; i--) {
- tbody.appendChild(newrows[i]);
+ for (var i=newrows.length-1; i>=0; i-=sortableMultirow) {
+ for(var j=sortableMultirow-1;j>=0;j--)
+ {
+ tbody.appendChild(newrows[i-j]);
+ }
}
delete newrows;
},
@@ -346,12 +386,25 @@ sorttable = {
function ip2ulong(ip) {
ip += "";
var ulip = false;
- var octets = [];
- if (ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/)) {
- octets = ip.split('.');
+ var octets = [];
+ ipmatch = ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/);// IP only
+ if (ipmatch) {
+ ipmatch+="";
+ octets = ipmatch.split('.');
for (i=0; i < 4; i++) {
- ulip += octets[i] * Math.pow(256, (3-i));
+ ulip += octets[i] * Math.pow(256, (5-i));
}
+ } else {
+ ipportmatch = ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:[0-9]{1,5}\b/);// IP:port
+ if (ipportmatch) {
+ ipportmatch += "";
+ ipport = ipportmatch.split(':');
+ octets = ipport[0].split('.');
+ for (i=0; i < 4; i++) {
+ ulip += octets[i] * Math.pow(256, (5-i));
+ }
+ ulip += parseInt(ipport[1]);
+ }
}
return ulip;
}
diff --git a/usr/local/www/status_captiveportal.php b/usr/local/www/status_captiveportal.php
index e3474f2..0963a61 100755
--- a/usr/local/www/status_captiveportal.php
+++ b/usr/local/www/status_captiveportal.php
@@ -67,7 +67,6 @@ include("head.inc");
?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script src="/javascript/sorttable.js"></script>
<?php include("fbegin.inc"); ?>
<?php
diff --git a/usr/local/www/status_lb_pool.php b/usr/local/www/status_lb_pool.php
index 1d93953..83d21b4 100755
--- a/usr/local/www/status_lb_pool.php
+++ b/usr/local/www/status_lb_pool.php
@@ -107,7 +107,6 @@ if ($_POST) {
?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script src="/javascript/sorttable.js"></script>
<?php include("fbegin.inc"); ?>
<form action="status_lb_pool.php" method="POST">
<?php if (is_subsystem_dirty('loadbalancer')): ?><p>
diff --git a/usr/local/www/status_openvpn.php b/usr/local/www/status_openvpn.php
index 326e94a..330333d 100644
--- a/usr/local/www/status_openvpn.php
+++ b/usr/local/www/status_openvpn.php
@@ -106,7 +106,6 @@ $clients = openvpn_get_active_clients();
include("head.inc"); ?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
-<script src="/javascript/sorttable.js" type="text/javascript"></script>
<?php include("fbegin.inc"); ?>
<form action="status_openvpn.php" method="get" name="iform">
<script type="text/javascript">
@@ -188,9 +187,11 @@ include("head.inc"); ?>
</tr>
<?php endforeach; ?>
+ <tfoot>
<tr>
<td colspan="6" class="list" height="12"></td>
</tr>
+ </tfoot>
</table>
</td>
diff --git a/usr/local/www/themes/pfsense-dropdown/all.css b/usr/local/www/themes/pfsense-dropdown/all.css
index 44161ac..a4811fc 100644
--- a/usr/local/www/themes/pfsense-dropdown/all.css
+++ b/usr/local/www/themes/pfsense-dropdown/all.css
@@ -955,7 +955,7 @@ div#log span.log-protocol-mini-header {
/* Sortable tables */
table.sortable thead {
cursor: default;
- background-color: #EEEEEE;
+<!-- background-color: #EEEEEE;-->
padding-right: 12px;
padding-left: 12px;
padding-top: 12px;
diff --git a/usr/local/www/themes/pfsense_ng/all.css b/usr/local/www/themes/pfsense_ng/all.css
index cdb9b9a..3452c72 100644
--- a/usr/local/www/themes/pfsense_ng/all.css
+++ b/usr/local/www/themes/pfsense_ng/all.css
@@ -920,10 +920,6 @@ ul#wzdnav a:active {
padding-top: 4px;
padding-bottom: 4px;
}
-.listFirewall {
- border-bottom: 2px solid #999999;
- display:none;
-}
.listlrns {
background-color: #FFFFFF;
border-right: 1px solid #999999;
diff --git a/usr/local/www/widgets/widgets/captive_portal_status.widget.php b/usr/local/www/widgets/widgets/captive_portal_status.widget.php
index 829515f..b9d7933 100644
--- a/usr/local/www/widgets/widgets/captive_portal_status.widget.php
+++ b/usr/local/www/widgets/widgets/captive_portal_status.widget.php
@@ -42,7 +42,6 @@ require_once("captiveportal.inc");
?>
-<script src="/javascript/sorttable.js"></script>
<?php
if ($_GET['act'] == "del") {
diff --git a/usr/local/www/widgets/widgets/openvpn.widget.php b/usr/local/www/widgets/widgets/openvpn.widget.php
index 1eea8fd..92cc78e 100644
--- a/usr/local/www/widgets/widgets/openvpn.widget.php
+++ b/usr/local/www/widgets/widgets/openvpn.widget.php
@@ -60,7 +60,6 @@ $sk_servers = openvpn_get_active_servers("p2p");
$clients = openvpn_get_active_clients();
?>
-<script src="/javascript/sorttable.js" type="text/javascript"></script>
<br/>
<script type="text/javascript">
function killClient(mport, remipp) {
@@ -102,40 +101,45 @@ $clients = openvpn_get_active_clients();
</tr>
<tr>
<td>
- <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" sortableMultirow="2">
<tr>
<td class="listhdrr">Name/Time</td>
<td class="listhdrr">Real/Virtual IP</td>
</tr>
- <?php foreach ($server['conns'] as $conn): ?>
- <tr name='<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>'>
- <td class="listlr">
+ <?php $rowIndex = 0;
+ foreach ($server['conns'] as $conn):
+ $evenRowClass = $rowIndex % 2 ? " listEven" : " listOdd";
+ $rowIndex++;
+ ?>
+ <tr name='<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>' class="<?=$evenRowClass?>">
+ <td class="listlrg">
<?=$conn['common_name'];?>
</td>
- <td class="listr">
+ <td class="listrg">
<?=$conn['remote_host'];?>
</td>
- <td class='list' rowspan="2">
+ <td class='listg' rowspan="2">
<img src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif' height='17' width='17' border='0'
onclick="killClient('<?php echo $server['mgmt']; ?>', '<?php echo $conn['remote_host']; ?>');" style='cursor:pointer;'
name='<?php echo "i:{$server['mgmt']}:{$conn['remote_host']}"; ?>'
title='Kill client connection from <?php echo $conn['remote_host']; ?>' alt='' />
</td>
</tr>
- <tr name='<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>'>
- <td class="listlr">
+ <tr name='<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>' class="<?=$evenRowClass?>">
+ <td class="listlrg">
<?=$conn['connect_time'];?>
</td>
- <td class="listr">
+ <td class="listrg">
<?=$conn['virtual_addr'];?>
</td>
</tr>
<?php endforeach; ?>
+ <tfoot>
<tr>
<td colspan="6" class="list" height="12"></td>
</tr>
-
+ </tfoot>
</table>
</td>
</tr>
OpenPOWER on IntegriCloud