diff options
author | Jim P <jim@pingle.org> | 2012-09-18 09:27:23 -0700 |
---|---|---|
committer | Jim P <jim@pingle.org> | 2012-09-18 09:27:23 -0700 |
commit | 15f47319097d9f485b4e4cb939a7bc4a1449e4de (patch) | |
tree | 85ef717c968763e9f5f5682de1a6d04a8e9de860 /usr | |
parent | f6e4341d14a56c6ff6ef0f8059d71e0caed1e4d5 (diff) | |
parent | f06f7cc0c2051e3e5e507d6b95583fcc32b7890e (diff) | |
download | pfsense-15f47319097d9f485b4e4cb939a7bc4a1449e4de.zip pfsense-15f47319097d9f485b4e4cb939a7bc4a1449e4de.tar.gz |
Merge pull request #223 from PiBa-NL/master
Firewall log, alternating color rows & sorting improvements.
Diffstat (limited to 'usr')
-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 |
15 files changed, 180 insertions, 66 deletions
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> |