From d2713e4bf2090bcd85e0c1d7b99f08575d12f133 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Tue, 6 Jan 2015 16:36:10 +0100
Subject: [PATCH] - Fixed bug in quota lib - New dashboard layout

---
 interface/lib/classes/quota_lib.inc.php       | 17 +++-
 interface/web/dashboard/dashlets/limits.php   |  7 +-
 .../dashboard/dashlets/templates/limits.htm   | 39 ++++++---
 .../dashlets/templates/mailquota.htm          | 57 +++++++------
 .../dashboard/dashlets/templates/modules.htm  | 20 +++--
 .../dashboard/dashlets/templates/quota.htm    | 55 ++++++------
 .../web/dashboard/templates/dashboard.htm     | 84 +++++++------------
 .../default/assets/stylesheets/ispconfig.css  |  2 +-
 .../assets/stylesheets/ispconfig.min.css      |  2 +-
 .../web/themes/default/templates/main.tpl.htm |  8 ++
 10 files changed, 157 insertions(+), 134 deletions(-)

diff --git a/interface/lib/classes/quota_lib.inc.php b/interface/lib/classes/quota_lib.inc.php
index b9ef6aab26..613c5244b3 100644
--- a/interface/lib/classes/quota_lib.inc.php
+++ b/interface/lib/classes/quota_lib.inc.php
@@ -14,7 +14,7 @@ class quota_lib {
 		//print_r($monitor_data);
 		
 		// select all websites or websites belonging to client
-		$sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND type = 'vhost'".(($clientid != null)?" AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)":''), $app->functions->intval($client_id));
+		$sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND type = 'vhost'".(($clientid != null)?" AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)":''), $clientid);
 		
 		//print_r($sites);
 		if(is_array($sites) && !empty($sites)){
@@ -35,7 +35,13 @@ class quota_lib {
 				if (!is_numeric($sites[$i]['soft'])) $sites[$i]['soft']=$sites[$i]['soft'][1];
 				if (!is_numeric($sites[$i]['hard'])) $sites[$i]['hard']=$sites[$i]['hard'][1];
 				if (!is_numeric($sites[$i]['files'])) $sites[$i]['files']=$sites[$i]['files'][1];
-		
+				
+				$sites[$i]['used_raw'] = $sites[$i]['used'];
+				$sites[$i]['soft_raw'] = $sites[$i]['soft'];
+				$sites[$i]['hard_raw'] = $sites[$i]['hard'];
+				$sites[$i]['files_raw'] = $sites[$i]['files'];
+				$sites[$i]['used_percentage'] = ($sites[$i]['soft'] > 0 && $sites[$i]['used'] > 0 ? round($sites[$i]['used'] * 100 / $sites[$i]['soft']) : 0);
+				
 				if ($readable) {
 					// colours
 					$sites[$i]['display_colour'] = '#000000';
@@ -109,7 +115,7 @@ class quota_lib {
 		//print_r($monitor_data);
 		
 		// select all email accounts or email accounts belonging to client
-		$emails = $app->db->queryAllRecords("SELECT * FROM mail_user".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : ''), $app->functions->intval($client_id));
+		$emails = $app->db->queryAllRecords("SELECT * FROM mail_user".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : ''), $clientid);
 		
 		//print_r($emails);
 		if(is_array($emails) && !empty($emails)){
@@ -120,6 +126,11 @@ class quota_lib {
 		
 				if (!is_numeric($emails[$i]['used'])) $emails[$i]['used']=$emails[$i]['used'][1];
 				
+				$emails[$i]['quota_raw'] = $emails[$i]['quota'];
+				$emails[$i]['used_raw'] = $emails[$i]['used'];
+				$emails[$i]['used_percentage'] = ($emails[$i]['quota'] > 0 && $emails[$i]['used'] > 0 ? round($emails[$i]['used'] * 100 / $emails[$i]['quota']) : 0);
+
+				
 				if ($readable) {
 					// colours
 					$emails[$i]['display_colour'] = '#000000';
diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php
index 87898eb8a4..70113f3969 100644
--- a/interface/web/dashboard/dashlets/limits.php
+++ b/interface/web/dashboard/dashlets/limits.php
@@ -143,10 +143,15 @@ class dashlet_limits {
 			}
 			if($value != 0 || $value == $wb['unlimited_txt']) {
 				$value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value;
+				$usage = $this->_get_limit_usage($limit);
+				$percentage = ($value == '-1' || $value == 0 ? 0 : round(100 * $usage / $value));
 				$rows[] = array('field' => $field,
 					'field_txt' => $wb[$field.'_txt'],
 					'value' => $value_formatted,
-					'usage' => $this->_get_limit_usage($limit));
+					'value_raw' => $value,
+					'usage' => $usage,
+					'usage_raw' => $usage,
+					'percentage' => $percentage);
 			}
 		}
 		$tpl->setLoop('rows', $rows);
diff --git a/interface/web/dashboard/dashlets/templates/limits.htm b/interface/web/dashboard/dashlets/templates/limits.htm
index 396ba42ebc..35445ab89b 100644
--- a/interface/web/dashboard/dashlets/templates/limits.htm
+++ b/interface/web/dashboard/dashlets/templates/limits.htm
@@ -1,13 +1,26 @@
-	<h2>{tmpl_var name='limits_txt'}</h2>
-	<div style="width:350px;">
-	<div class="table-wrapper marginTop15">
-<table class="table">
-	<tmpl_loop name='rows'>
-		<tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-		  <td>{tmpl_var name='field_txt'}</td>
-		  <td style="white-space: nowrap">{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</td>
-		</tr>
-	</tmpl_loop>
-	</table>
-</div>
-	</div>
\ No newline at end of file
+	<div class='table-wrapper'>
+	  <table class='table'>
+		<caption>{tmpl_var name='limits_txt'}</caption>
+		<thead class="dark">
+		  <tr>
+			<th>&nbsp;</th>
+			<th colspan='2'>&nbsp;</th>
+		  </tr>
+		</thead>
+		<tbody>
+		<tmpl_loop name='rows'>
+			<tr>
+				<td>{tmpl_var name='field_txt'}</td>
+				<td>{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</td>
+				<td>
+				<div class='progress'>
+					<div class='progress-bar progress-bar-{tmpl_if name="percentage" op="<" value="50"}success{tmpl_elseif name="percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="percentage"}' style='width:{tmpl_var name="percentage"}%'>
+					<span class='sr-only'>{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</span>
+					</div>
+				</div>
+				</td>
+			</tr>
+		</tmpl_loop>
+		</tbody>
+	  </table>
+	</div>
diff --git a/interface/web/dashboard/dashlets/templates/mailquota.htm b/interface/web/dashboard/dashlets/templates/mailquota.htm
index 45f97c9b04..a4b87a31e8 100644
--- a/interface/web/dashboard/dashlets/templates/mailquota.htm
+++ b/interface/web/dashboard/dashlets/templates/mailquota.htm
@@ -1,31 +1,30 @@
-<div style="float: left;">
-	<h2>{tmpl_var name='mailquota_txt'}</h2>
-	<div style="width:350px;">
-	<div class="table-wrapper marginTop15">
-<table class="table">
+	<div class='table-wrapper'>
+	  <table class='table'>
+		<caption>{tmpl_var name='mailquota_txt'}</caption>
 		<thead class="dark">
-		<tr>
-		  <td>{tmpl_var name='email_txt'}</td>
-		  <td>{tmpl_var name='name_txt'}</td>
-		  <td>{tmpl_var name='used_txt'}</td>
-		  <td>{tmpl_var name='quota_txt'}</td>
-		</tr>
+		  <tr>
+			<th>{tmpl_var name='email_txt'}</th>
+			<th>{tmpl_var name='name_txt'}</th>
+			<th>{tmpl_var name='used_txt'}</th>
+			<th colspan="2">{tmpl_var name='quota_txt'}</th>
+		  </tr>
 		</thead>
-	<tmpl_if name="has_mailquota">
-	<tmpl_loop name='mailquota'>
-		<tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='email'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='name'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='used'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='quota'}</td>
-		</tr>
-	</tmpl_loop>
-	<tmpl_else>
-	<tr>
-	  <td colspan="4" style="text-align:center;">{tmpl_var name='no_email_accounts_txt'}</td>
-	</tr>
-	</tmpl_if>
-	</table>
-</div>
-	</div>
-</div>
\ No newline at end of file
+		<tbody>
+		<tmpl_loop name='mailquota'>
+			<tr>
+				<td>{tmpl_var name='email'}</td>
+				<td>{tmpl_var name='name'}</td>
+				<td>{tmpl_var name='used'}</td>
+				<td>{tmpl_var name='quota'}</td>
+				<td>
+				<div class='progress'>
+					<div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%'>
+					<span class='sr-only'>{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='quota'}</span>
+					</div>
+				</div>
+				</td>
+			</tr>
+		</tmpl_loop>
+		</tbody>
+	  </table>
+	</div>
\ No newline at end of file
diff --git a/interface/web/dashboard/dashlets/templates/modules.htm b/interface/web/dashboard/dashlets/templates/modules.htm
index 03fb8cb887..442e10243c 100644
--- a/interface/web/dashboard/dashlets/templates/modules.htm
+++ b/interface/web/dashboard/dashlets/templates/modules.htm
@@ -1,10 +1,18 @@
 	<h2>{tmpl_var name='available_modules_txt'}</h2>
-	<div style="width:350px;">
+	<div style='margin: 0 auto;'>
+	<ul class='modules clear'>
 	<tmpl_loop name='modules'>
-		<div class="dashboard-modules {tmpl_var name='modules_name'}">
-			<a href="#" onclick="capp('{tmpl_var name='modules_name'}')">
-			{tmpl_var name='modules_title'}
-			</a>
-		</div>
+		<li>
+			<div class='clear'>
+			  <div class='icon icon-{tmpl_var name='modules_name'}'></div>
+			  <div class='left'>
+				<div class='title'>{tmpl_var name='modules_title'}</div>
+			  </div>
+			</div>
+			<div class='btn btn-default button'>
+			  <a href='#' data-capp='{tmp_var name="modules_name"}'>Go to {tmpl_var name='modules_title'}</a>
+			</div>
+		</li>
 	</tmpl_loop>
+	</ul>
 	</div>
\ No newline at end of file
diff --git a/interface/web/dashboard/dashlets/templates/quota.htm b/interface/web/dashboard/dashlets/templates/quota.htm
index 68470dd175..823de6fe0b 100644
--- a/interface/web/dashboard/dashlets/templates/quota.htm
+++ b/interface/web/dashboard/dashlets/templates/quota.htm
@@ -1,31 +1,30 @@
-<div style="float: left;">
-	<h2>{tmpl_var name='quota_txt'}</h2>
-	<div style="width:350px;">
-	<div class="table-wrapper marginTop15">
-<table class="table">
+	<div class='table-wrapper'>
+	  <table class='table'>
+		<caption>{tmpl_var name='quota_txt'}</caption>
 		<thead class="dark">
-		<tr>
-		  <td>{tmpl_var name='domain_txt'}</td>
-		  <td>{tmpl_var name='used_txt'}</td>
-		  <td>{tmpl_var name='soft_txt'}</td>
-		  <td>{tmpl_var name='hard_txt'}</td>
-		</tr>
+		  <tr>
+			<th>{tmpl_var name='domain_txt'}</th>
+			<th>{tmpl_var name='used_txt'}</th>
+			<th>{tmpl_var name='soft_txt'}</th>
+			<th colspan="2">{tmpl_var name='hard_txt'}</th>
+		  </tr>
 		</thead>
-	<tmpl_if name="has_quota">
-	<tmpl_loop name='quota'>
-		<tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='domain'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='used'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='soft'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='hard'}</td>
-		</tr>
-	</tmpl_loop>
-	<tmpl_else>
-	<tr>
-	  <td colspan="4" style="text-align:center;">{tmpl_var name='no_sites_txt'}</td>
-	</tr>
-	</tmpl_if>
-	</table>
-</div>
+		<tbody>
+		<tmpl_loop name='quota'>
+			<tr>
+				<td>{tmpl_var name='domain'}</td>
+				<td>{tmpl_var name='used'}</td>
+				<td>{tmpl_var name='soft'}</td>
+				<td>{tmpl_var name='hard'}</td>
+				<td>
+				<div class='progress'>
+					<div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%'>
+					<span class='sr-only'>{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='soft'}</span>
+					</div>
+				</div>
+				</td>
+			</tr>
+		</tmpl_loop>
+		</tbody>
+	  </table>
 	</div>
-</div>
\ No newline at end of file
diff --git a/interface/web/dashboard/templates/dashboard.htm b/interface/web/dashboard/templates/dashboard.htm
index 231fb54bf6..65ccc7eae9 100644
--- a/interface/web/dashboard/templates/dashboard.htm
+++ b/interface/web/dashboard/templates/dashboard.htm
@@ -1,52 +1,32 @@
-<h1><tmpl_var name="welcome_user"></h1>
-<hr />
-<div class="panel panel_dashboard">
-    <div>
-        <tmpl_if name='error'>
-            <div class="systemmonitor-state state-error">
-                <div class="status"></div>
-                <div class="statusMsg">
-                    <tmpl_loop name="error">
-                        {tmpl_var name='error_msg'}
-                    </tmpl_loop>
-                </div>
-            </div>
-        </tmpl_if>
-        <tmpl_if name='warning'>
-            <div class="systemmonitor-state state-warning">
-                <div class="status"></div>
-                <div class="statusMsg">
-                    <tmpl_loop name="warning">
-                        {tmpl_var name='warning_msg'}
-                    </tmpl_loop>
-                </div>
-            </div>
-        </tmpl_if>
-        <tmpl_if name='info'>
-            <div class="systemmonitor-state state-info">
-                <div class="status"></div>
-                <div class="statusMsg">
-                    <tmpl_loop name="info">
-                        {tmpl_var name='info_msg'}
-                    </tmpl_loop>
-                </div>
-            </div>
-        </tmpl_if>
-    </div>
-    <div style="float:left; width:350px;">
-        <tmpl_loop name='leftcol'>
-            {tmpl_var name='content'}
-			<tmpl_if name='content'>
-            <p style="clear:left">&nbsp;</p>
-			</tmpl_if>
-        </tmpl_loop>
-    </div>
-    <div style="float:right; width:350px;padding-left:15px;">
-        <tmpl_loop name='rightcol'>
-            {tmpl_var name='content'}
-			<tmpl_if name='content'>
-            <p>&nbsp;</p>
-			</tmpl_if>
-        </tmpl_loop>
-    </div>
-</div>
\ No newline at end of file
+<div class='page-header'>
+  <h1>Welcome Admin</h1>
+</div>
+
+<tmpl_if name='error'>
+	<div class="alert alert-danger">
+		<tmpl_loop name="error">
+			{tmpl_var name='error_msg'}
+		</tmpl_loop>
+	</div>
+</tmpl_if>
+<tmpl_if name='warning'>
+	<div class="alert alert-danger">
+		<tmpl_loop name="warning">
+			{tmpl_var name='warning_msg'}
+		</tmpl_loop>
+	</div>
+</tmpl_if>
+<tmpl_if name='info'>
+	<div class="alert alert-notification">
+		<tmpl_loop name="info">
+			{tmpl_var name='info_msg'}
+		</tmpl_loop>
+	</div>
+</tmpl_if>
+
+<tmpl_loop name='leftcol'>
+	{tmpl_var name='content'}
+</tmpl_loop>
+<tmpl_loop name='rightcol'>
+	{tmpl_var name='content'}
+</tmpl_loop>
diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css
index 3c9a949bb3..0915b72ad2 100644
--- a/interface/web/themes/default/assets/stylesheets/ispconfig.css
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -217,7 +217,7 @@ body {
 .progress {
   display: inline-block;
   margin-bottom: 0;
-  width: 300px;
+  width: 150px;
   height: 10px; }
 
 .content-tab-wrapper {
diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.min.css b/interface/web/themes/default/assets/stylesheets/ispconfig.min.css
index fa4df1d88c..b4de7690fa 100644
--- a/interface/web/themes/default/assets/stylesheets/ispconfig.min.css
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.min.css
@@ -1 +1 @@
-body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px !important;padding-right:5px !important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}#main-wrapper{margin:0 auto;width:950px}#logo{float:left;width:200px;height:65px;background:url("../images/logo.png") no-repeat}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:710px}#sidebar{margin-top:27px;width:215px;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.progress{display:inline-block;margin-bottom:0;width:300px;height:10px}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none !important;border-right-style:solid !important;border-right-width:1px !important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}
\ No newline at end of file
+body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px !important;padding-right:5px !important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}#main-wrapper{margin:0 auto;width:950px}#logo{float:left;width:200px;height:65px;background:url("../images/logo.png") no-repeat}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:710px}#sidebar{margin-top:27px;width:215px;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none !important;border-right-style:solid !important;border-right-width:1px !important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}
\ No newline at end of file
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index bb40c50955..264689f3ef 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -148,6 +148,14 @@
 		loadContent(content_to_load);
 	});
 
+	$(document).on('click', 'a[data-capp],button[data-capp]', function(e) {
+		e.preventDefault();
+		var content_to_load = $(this).attr('data-capp');
+		if(!content_to_load) return this;
+		
+		capp(content_to_load);
+	});
+
 	$(document).bind("keypress", function(event) {
 		//Use $ submit with keypress Enter in panel filterbar
 		if (event.which == '13' && $(".panel #Filter").length > 0 && $(event.target).hasClass('ui-autocomplete-input') == false ) {
-- 
GitLab