Index: trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.cshtml
===================================================================
--- trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.cshtml	(revision 12546)
+++ trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.cshtml	(revision 12546)
@@ -0,0 +1,55 @@
+﻿<div class="default-view-container">
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">Responsible for Contents and Editing of Pages</h3>
+                </div>
+                <div class="panel-body">
+                    <p>
+                        Heuristic and Evolutionary Algorithms Laboratory (HEAL)<br />
+                        School of Informatics, Communications and Media<br />
+                        University of Applied Sciences Upper Austria<br />
+                        Softwarepark 11<br />
+                        A-4232 Hagenberg, Austria<br />
+                        (media owner and editor for the purposes of the Austrian Media Act)<br />
+                    </p>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">Contact</h3>
+                </div>
+                <div class="panel-body">
+                    <p><strong>Support and Inquiries</strong>: ​<a href="mailto:#">support@heuristiclab.com</a></p>
+                    <p><strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong>: <a href="​http://heal.heuristiclab.com">​http://heal.heuristiclab.com</a></p>
+                    <p>
+                        <strong>Head of HeuristicLab</strong>:<br />
+                        FH-Prof. DI Dr. Stefan Wagner<br />
+                        Phone: +43 50804 22030<br />
+                        Fax: +43 50804 21599<br />
+                        E-mail: <a href="mailto:#">stefan.wagner@heuristiclab.com</a><br />
+                    </p>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">Disclaimer of Liability and Endorsement</h3>
+                </div>
+                <div class="panel-body">
+                    <p style="text-align:justify">HeuristicLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (http://www.gnu.org/licenses). All contents on the development homepage and wiki of the HeuristicLab have been compiled carefully. Still, the Heuristic and Evolutionary Algorithms Laboratory (HEAL) makes no guarantees of accuracy, completeness and timeliness of the information on this website. Therefore HEAL accepts no responsibility or liability for damages or losses resulting from the use of this website and/or the software.</p>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
Index: trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.js
===================================================================
--- trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.js	(revision 12546)
+++ trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.js	(revision 12546)
@@ -0,0 +1,19 @@
+﻿var appAboutPlugin = app.registerPlugin('about');
+(function () {
+    var plugin = appAboutPlugin;
+    plugin.dependencies = ['ngResource', 'ui.bootstrap'];
+    plugin.files = ['aboutCtrl.js'];
+    plugin.view = 'about.cshtml';
+    plugin.controller = 'app.about.ctrl';
+    plugin.routes = [];
+
+    var menu = app.getMenu();
+    var section = menu.getSection('Menü', -1);
+    section.addEntry({
+        index: 10000,
+        name: 'About',
+        route: '#/about',
+        icon: 'glyphicon glyphicon-info-sign',
+        entries: []
+    });
+})();
Index: trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/aboutCtrl.js
===================================================================
--- trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/aboutCtrl.js	(revision 12546)
+++ trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/aboutCtrl.js	(revision 12546)
@@ -0,0 +1,4 @@
+﻿(function () {
+    var module = appAboutPlugin.getAngularModule();
+    module.controller('app.about.ctrl', ['$scope', function ($scope) { }]);
+})();
Index: trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/shared/filter/filters.js
===================================================================
--- trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/shared/filter/filters.js	(revision 12546)
+++ trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/shared/filter/filters.js	(revision 12546)
@@ -0,0 +1,44 @@
+﻿(function () {
+    var module = appMainPlugin.getAngularModule();
+    module.filter('kbToGB', function () {
+        return function (text, length, end) {
+            if (text == null || text == '') text = '0';
+            text = Math.round(parseInt(text, 10) / 1024);
+            return text;
+        };
+    });
+
+    module.filter('toDate', function () {
+        return function (text, length, end) {
+            if (text == null || text == '' || text.length < 19)
+                return 'Invalid';
+            var day = text.slice(8, 10);
+            var month = text.slice(5, 7);
+            var year = text.slice(0, 4);
+            var hour = text.slice(11, 13);
+            var minute = text.slice(14, 16);
+            var second = text.slice(17, 19);
+            return day + '.' + month + '.' + year + ' ' + hour + ':' + minute + ':' + second;
+        };
+    });
+
+    module.filter('toTimespan', function () {
+        return function (text, length, end) {
+            if (text == null || text == '') text = '0';
+            var d = Number(parseInt(text, 10));
+            var years = Math.floor(d / 31536000);
+            var days = Math.floor(d / 86400 % 365);
+            var h = Math.floor(d / 3600 % 24);
+            var m = Math.floor(d % 3600 / 60);
+            var s = Math.floor(d % 3600 % 60);
+            var timeStr = "";
+            if (years > 0) {
+                timeStr = years + "y ";
+            }
+            if (days > 0) {
+                timeStr = timeStr + days + "d ";
+            }
+            return timeStr + h.zeropad(2) + ":" + m.zeropad(2) + ":" + s.zeropad(2);
+        };
+    });
+})();
