apotiki-0.5.2: System/Apotiki/Templates.hs
module System.Apotiki.Templates where
import Data.List (unlines)
--
-- I am NOT proud of this heredoc implementation.
--
detailsHtml = unlines [ "<div class=\"panel panel-default\">",
" <div class=\"panel-heading\">",
" Package: {{repo[arch][name]['Package']}}",
" </div>",
" <div class=\"panel-body\">",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Package</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Package']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Version</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Version']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Architecture</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Architecture']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Maintainer</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Maintainer']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>License</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['License']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Installed Size</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Installed-Size']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Priority</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Priority']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Depends</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Depends']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Homepage</strong></div>",
" <div class=\"col-md-10\"><a href=\"{{repo[arch][name]['Homepage']}}\">{{repo[arch][name]['Homepage']}}</a></div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Vendor</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Vendor']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Section</strong></div>",
" <div class=\"col-md-10\">{{repo[arch][name]['Section']}}</div>",
" </div>",
" <div class=\"row\">",
" <div class=\"col-md-2\"><strong>Description</strong></div>",
" <div class=\"col-md-10\">",
" <pre ng-bind=\"repo[arch][name]['Description']\"></pre>",
" </div>",
" </div>",
" </div>",
"</div>" ]
indexHtml = unlines [ "<!doctype html>",
"<html lang=\"en\">",
"",
" <head>",
" <title>apotiki debian repository</title>",
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
" <link href=\"//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css\" rel=\"stylesheet\">",
" <script src=\"//ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.min.js\"></script>",
" <script src=\"//ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular-route.js\"></script>",
" <script src=\"/apotiki.js\"></script>",
" </head>",
"",
" <body ng-app=\"repo\">",
" <div class=\"navbar navbar-default\" role=\"navigation\">",
" <div class=\"container\">",
" <div class=\"navbar-header\">",
" <a class=\"navbar-brand\" href=\"#\">apotiki</a>",
" </div>",
" <div class=\"navbar-collapse collapse\">",
" <ul class=\"nav navbar-nav\">",
" <li><a href=\"#list\">Listing</a></li>",
" <li><a href=\"/post.html\">Submit</a></li>",
" </ul>",
" </div>",
" </div>",
" </div>",
" ",
" <div class=\"container\">",
" <div class=\"row\">",
" <div class=\"col-lg-8 col-lg-offset-2\">",
" <ng-view></ng-view>",
" </div>",
" </div>",
" </div>",
" ",
" </body>",
" ",
"</html>" ]
postHtml = unlines [ "<!doctype html>",
"<html lang=\"en\">",
" <head>",
" <title>apotiki debian repository</title>",
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
" <link href=\"//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css\" rel=\"stylesheet\">",
" </head>",
" <body ng-app=\"repo\">",
" <div class=\"navbar navbar-default\" role=\"navigation\">",
" <div class=\"container\">",
" <div class=\"navbar-header\">",
" <a class=\"navbar-brand\" href=\"#\">apotiki</a>",
" </div>",
" <div class=\"navbar-collapse collapse\">",
" <ul class=\"nav navbar-nav\">",
" <li><a href=\"/index.html#list\">Listing</a></li>",
" <li><a href=\"/post.html\">Submit</a></li>",
" </ul>",
" </div>",
" </div>",
" </div>",
" <div class=\"container\">",
" <div class=\"row\">",
" <div class=\"col-lg-8 col-lg-offset-2\">",
"<div class=\"panel panel-default\">",
" <div class=\"panel-heading\">",
" <h4>Package</h4>",
" </div>",
" <div class=\"panel-body\">",
" <form method=\"POST\" action=\"/repo\" enctype=\"multipart/form-data\" role=\"form\">",
" <div class=\"form-group\">",
" <label>Choose package</label>",
" <input type=\"file\" name=\"file\" id=\"file\">",
" <p class=\"help-block\">",
" Package file will overwrite any previous versions.",
" </p>",
" </div>",
" <button type=\"submit\" class=\"btn btn-default\">Submit</button>",
" </form>",
" </div>",
"</div>",
" </div>",
" </div>",
" </div>",
" </body>",
"</html>"]
listingHtml = unlines [ "<div class=\"panel panel-default\">",
" ",
" <div class=\"panel-heading\">",
" <div class=\"row\">",
" <div class=\"col-sm-2\">",
" <h4>Package listing</h4>",
" </div>",
" <div class=\"col-sm-4 col-sm-offset-6\">",
" <form class=\"form-inline\">",
" <input type=\"search\" ng-model=\"searchterm\" class=\"form-control\">",
" </form>",
" </div>",
" </div>",
" </div>",
" ",
" <div class=\"panel-body\">",
" <table class=\"table table-striped\">",
" <thead>",
" <th>Package</th>",
" <th>Version</th>",
" <th>Architecture</th>",
" </thead>",
" <tbody>",
" <tr ng-repeat=\"pkg in repolist | filter:searchterm\">",
" <td><a href=\"#repo/{{pkg['Architecture']}}/{{pkg['Package']}}\">{{pkg['Package']}}</a></td>",
" <td>{{pkg['Version']}}</td>",
" <td>{{pkg['Architecture']}}</td>",
" </tr>",
" </tbody>",
" </table>",
" </div>",
"</div>" ]
jsApp = unlines [ "var app = angular.module('repo', ['ngRoute']);",
"app.controller('Apotiki', function($scope, $routeParams, $location, $http) {",
"$scope.repolist = []; $scope.repo = {};",
"$scope.refresh = function(){$http.get('/repo').success(function(data){$scope.repo=data;for(var k in data){for (var subk in data[k]){$scope.repolist.push(data[k][subk]);}}});};",
"if ($routeParams.name) { $scope.name = $routeParams.name; }",
"if ($routeParams.arch) { $scope.arch = $routeParams.arch; }",
"$scope.refresh();});",
"app.config(function($routeProvider) {",
" $routeProvider",
" .when('/repo', {templateUrl: 'listing.html', controller: 'Apotiki'})",
" .when('/repo/:arch/:name', {templateUrl: 'details.html', controller: 'Apotiki'})",
" .when('/post', {templateUrl: 'post.html'})",
" .otherwise({redirectTo: '/repo'});});" ]