summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiBa-NL <pba_2k3@yahoo.com>2012-09-16 12:17:17 +0200
committerPiBa-NL <pba_2k3@yahoo.com>2012-09-16 12:17:17 +0200
commitf06f7cc0c2051e3e5e507d6b95583fcc32b7890e (patch)
tree4849c0ed7aa9b7295d02683bad8dc2c4175e7aae
parent32f8552e8a3fc10ef8dec0f325189e4fcc295fcf (diff)
downloadpfsense-f06f7cc0c2051e3e5e507d6b95583fcc32b7890e.zip
pfsense-f06f7cc0c2051e3e5e507d6b95583fcc32b7890e.tar.gz
(line endings UNIX format..)
Firewall log alternating colored rows Firewall log sortable Fixed several sorting issues in widgets and other pages Sorting now possible on multiple rows in the header tables Sorting now possible for text that starts with IPv4:port
-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