diff options
author | PiBa-NL <pba_2k3@yahoo.com> | 2012-09-16 12:17:17 +0200 |
---|---|---|
committer | PiBa-NL <pba_2k3@yahoo.com> | 2012-09-16 12:17:17 +0200 |
commit | f06f7cc0c2051e3e5e507d6b95583fcc32b7890e (patch) | |
tree | 4849c0ed7aa9b7295d02683bad8dc2c4175e7aae | |
parent | 32f8552e8a3fc10ef8dec0f325189e4fcc295fcf (diff) | |
download | pfsense-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.inc | 2 | ||||
-rw-r--r-- | usr/local/www/css/table.css | 42 | ||||
-rwxr-xr-x | usr/local/www/diag_dump_states.php | 1 | ||||
-rw-r--r-- | usr/local/www/diag_dump_states_sources.php | 1 | ||||
-rwxr-xr-x | usr/local/www/diag_logs_filter.php | 51 | ||||
-rw-r--r-- | usr/local/www/diag_routes.php | 12 | ||||
-rwxr-xr-x | usr/local/www/head.inc | 10 | ||||
-rw-r--r-- | usr/local/www/javascript/filter_log.js | 4 | ||||
-rw-r--r-- | usr/local/www/javascript/sorttable.js | 87 | ||||
-rwxr-xr-x | usr/local/www/status_captiveportal.php | 1 | ||||
-rwxr-xr-x | usr/local/www/status_lb_pool.php | 1 | ||||
-rw-r--r-- | usr/local/www/status_openvpn.php | 3 | ||||
-rw-r--r-- | usr/local/www/themes/pfsense-dropdown/all.css | 2 | ||||
-rw-r--r-- | usr/local/www/themes/pfsense_ng/all.css | 4 | ||||
-rw-r--r-- | usr/local/www/widgets/widgets/captive_portal_status.widget.php | 1 | ||||
-rw-r--r-- | usr/local/www/widgets/widgets/openvpn.widget.php | 26 |
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&int={$int}&src={$filterent['srcip']}&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&int={$int}&proto={$proto}&src={$filterent['srcip']}&dst={$filterent['dstip']}&dstport={$filterent['dstport']}&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"> </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> |