9
VERSION
@ -1,5 +1,10 @@
|
||||
v0.2.3
|
||||
v0.2.4
|
||||
|
||||
Changelog
|
||||
|
||||
* Bugfix for automatic actions typo error in v0.2.2 (@alex3305)
|
||||
* Bugfix for attachments downloading with hash instead of file name (#41).
|
||||
* Bugfix for item positions (#37).
|
||||
* noty errors are ignored now.
|
||||
* Favicons added.
|
||||
* API Error now returns exception message in JSON data.
|
||||
|
||||
|
@ -17,9 +17,14 @@ require_once('helpers.php'); // Must come after $jsonResponse exists.
|
||||
|
||||
// Catch Exception if connection to DB failed
|
||||
function exceptionHandler($exception) {
|
||||
global $jsonResponse;
|
||||
|
||||
header('Content-Type: application/json');
|
||||
http_response_code(503);
|
||||
echo '{"message": "API Error."}';
|
||||
|
||||
$jsonResponse->message = 'API Error.';
|
||||
$jsonResponse->data = $exception->getMessage();
|
||||
echo $jsonResponse->asJson();
|
||||
};
|
||||
set_exception_handler('exceptionHandler');
|
||||
|
||||
|
@ -311,8 +311,8 @@ a:hover.fa {
|
||||
border-radius: 5px;
|
||||
margin: 5px;
|
||||
}
|
||||
a > span.fa-plus {
|
||||
margin-left: 5px;
|
||||
span.fa {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.lane-placeholder {
|
||||
width: 100%;
|
||||
|
BIN
favicons/apple-touch-icon-114x114.png
Executable file
After Width: | Height: | Size: 2.6 KiB |
BIN
favicons/apple-touch-icon-120x120.png
Executable file
After Width: | Height: | Size: 3.0 KiB |
BIN
favicons/apple-touch-icon-144x144.png
Executable file
After Width: | Height: | Size: 4.7 KiB |
BIN
favicons/apple-touch-icon-152x152.png
Executable file
After Width: | Height: | Size: 4.8 KiB |
BIN
favicons/apple-touch-icon-180x180.png
Executable file
After Width: | Height: | Size: 5.4 KiB |
BIN
favicons/apple-touch-icon-57x57.png
Executable file
After Width: | Height: | Size: 1.1 KiB |
BIN
favicons/apple-touch-icon-60x60.png
Executable file
After Width: | Height: | Size: 1.2 KiB |
BIN
favicons/apple-touch-icon-72x72.png
Executable file
After Width: | Height: | Size: 1.3 KiB |
BIN
favicons/apple-touch-icon-76x76.png
Executable file
After Width: | Height: | Size: 1.5 KiB |
BIN
favicons/apple-touch-icon-precomposed.png
Executable file
After Width: | Height: | Size: 6.0 KiB |
BIN
favicons/apple-touch-icon.png
Executable file
After Width: | Height: | Size: 5.4 KiB |
12
favicons/browserconfig.xml
Executable file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="icons/mstile-70x70.png"/>
|
||||
<square150x150logo src="icons/mstile-150x150.png"/>
|
||||
<square310x310logo src="icons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="icons/mstile-310x150.png"/>
|
||||
<TileColor>#2b5797</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
BIN
favicons/favicon-160x160.png
Executable file
After Width: | Height: | Size: 4.1 KiB |
BIN
favicons/favicon-16x16.png
Executable file
After Width: | Height: | Size: 314 B |
BIN
favicons/favicon-192x192.png
Executable file
After Width: | Height: | Size: 5.7 KiB |
BIN
favicons/favicon-32x32.png
Executable file
After Width: | Height: | Size: 534 B |
BIN
favicons/favicon-96x96.png
Executable file
After Width: | Height: | Size: 2.1 KiB |
BIN
favicons/favicon.ico
Executable file
After Width: | Height: | Size: 7.2 KiB |
BIN
favicons/mstile-144x144.png
Executable file
After Width: | Height: | Size: 4.7 KiB |
BIN
favicons/mstile-150x150.png
Executable file
After Width: | Height: | Size: 2.3 KiB |
BIN
favicons/mstile-310x150.png
Executable file
After Width: | Height: | Size: 1.9 KiB |
BIN
favicons/mstile-310x310.png
Executable file
After Width: | Height: | Size: 8.7 KiB |
BIN
favicons/mstile-70x70.png
Executable file
After Width: | Height: | Size: 1.8 KiB |
22
index.html
@ -14,13 +14,33 @@
|
||||
<link rel="stylesheet" href="lib/css/jquery-ui.min.css">
|
||||
<link rel="stylesheet" href="lib/css/jquery-ui.structure.min.css">
|
||||
<link rel="stylesheet" href="lib/css/spectrum.css">
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Pontano+Sans|Raleway:500">
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Pontano+Sans|Raleway:500" data-noprefix>
|
||||
<link rel="stylesheet" href="css/styles.css">
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!--favicons -->
|
||||
<link rel="shortcut icon" href="favicons/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-160x160.png" sizes="160x160">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-32x32.png" sizes="32x32">
|
||||
<meta name="msapplication-TileColor" content="#2b5797">
|
||||
<meta name="msapplication-TileImage" content="favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="favicons/browserconfig.xml">
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper" data-ng-view data-ng-cloak>
|
||||
|
@ -10,13 +10,33 @@
|
||||
<title>TaskBoard</title>
|
||||
|
||||
<link rel="stylesheet" href="lib/css/combined.min.css">
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Pontano+Sans%7CRaleway:500">
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Pontano+Sans|Raleway:500" data-noprefix>
|
||||
<link rel="stylesheet" href="css/styles.min.css">
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!--favicons -->
|
||||
<link rel="shortcut icon" href="favicons/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-160x160.png" sizes="160x160">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="favicons/favicon-32x32.png" sizes="32x32">
|
||||
<meta name="msapplication-TileColor" content="#2b5797">
|
||||
<meta name="msapplication-TileImage" content="favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="favicons/browserconfig.xml">
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper" data-ng-view data-ng-cloak>
|
||||
|
@ -83,7 +83,7 @@ function ($scope, $routeParams, $location, $interval, $window,
|
||||
if ($scope.boardId) {
|
||||
$interval.cancel($scope.interval);
|
||||
}
|
||||
if ($scope.boardsLoaded && !$scope.boardId && parseInt($scope.currentUser.defaultBoard)) {
|
||||
if ($scope.boardsLoaded && !$scope.boardId && $scope.currentUser && parseInt($scope.currentUser.defaultBoard)) {
|
||||
$interval.cancel($scope.interval);
|
||||
$location.path('boards/' + $scope.currentUser.defaultBoard);
|
||||
}
|
||||
@ -155,6 +155,8 @@ function ($scope, $routeParams, $location, $interval, $window,
|
||||
} else if (diff < (1000 * 60 * 60 * 24 * 3)) { // Three days
|
||||
item.dateNear = true;
|
||||
}
|
||||
|
||||
item.position = parseInt(item.position);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -33,7 +33,9 @@ function ($scope, $window, $location, UserService, AuthenticationService, AlertS
|
||||
$scope.display.smallText = ' - File Viewer';
|
||||
}
|
||||
|
||||
$.noty.closeAll(); // Clear any alerts on page load.
|
||||
try {
|
||||
$.noty.closeAll(); // Clear any alerts on page load.
|
||||
} catch(e) {}
|
||||
|
||||
$scope.logout = function() {
|
||||
UserService.logOut()
|
||||
|
@ -47,7 +47,7 @@
|
||||
<span class="fa fa-angle-double-up small expand" title="Expand Column"
|
||||
data-ng-click="toggleLane(lane)"></span>
|
||||
</h3>
|
||||
<div class="itemContainer">
|
||||
<div class="itemContainer">
|
||||
<div><!-- Needed to fix sortable behavior when there are no items in a column. --></div>
|
||||
<div class="boardItem clearfix" data-ng-class="{'filtered': item.filtered}"
|
||||
data-ng-repeat="item in lane.ownItem | orderBy:'position':false"
|
||||
|
@ -71,8 +71,8 @@
|
||||
<button type="submit" class="btn btn-info"
|
||||
data-ng-click="submitItem(itemFormData)"
|
||||
data-ng-disabled="itemFormData.isSaving">
|
||||
<span data-ng-if="itemFormData.isAdd">Add</span>
|
||||
<span data-ng-if="!itemFormData.isAdd">Edit</span>
|
||||
<span data-ng-if="itemFormData.isAdd"><span class="fa fa-plus"></span> Add</span>
|
||||
<span data-ng-if="!itemFormData.isAdd"><span class="fa fa-save"></span> Save</span>
|
||||
Item</button>
|
||||
<a class="btn btn-default" data-ng-click="itemFormData.cancel()"
|
||||
data-ng-disabled="itemFormData.isSaving">Cancel</a>
|
||||
|
@ -68,9 +68,9 @@
|
||||
<input type="file" name="file" class="form-control"
|
||||
data-file-upload="itemUpload" data-reset-flag="fileReset"
|
||||
data-ng-disabled="viewItem.disabled">
|
||||
<button type="submit" id="upload-attachment" class="btn btn-primary"
|
||||
<button type="submit" id="upload-attachment" class="btn btn-info"
|
||||
data-ng-class="{'disabled': viewItem.disabled}"
|
||||
data-ng-click="addItemAttachment()">Upload</button>
|
||||
data-ng-click="addItemAttachment()"><span class="fa fa-upload"></span> Upload</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="view-item-comments" data-ng-if="viewItem.ownComment.length">
|
||||
@ -100,9 +100,9 @@
|
||||
<h4>Add Comment</h4>
|
||||
<div class="form-group">
|
||||
<textarea id="itemComment" class="form-control" rows="4" data-ng-model="comment.text"></textarea>
|
||||
<button type="submit" id="add-comment" class="btn btn-primary pull-right"
|
||||
<button type="submit" id="add-comment" class="btn btn-info pull-right"
|
||||
data-ng-class="{ 'disabled': viewItem.disabled }"
|
||||
data-ng-click="addItemComment(comment.text)">Submit Comment</button>
|
||||
data-ng-click="addItemComment(comment.text)"><span class="fa fa-comment-o"></span> Submit Comment</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -93,7 +93,7 @@
|
||||
<p>
|
||||
<a role="button" id="addAction" class="btn btn-info pull-right"
|
||||
data-ng-click="addAction()" data-ng-disabled="null === actionData.board" title="Add Action">
|
||||
Add Action <span class="fa fa-plus"></span>
|
||||
<span class="fa fa-plus"></span> Add Action
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -76,9 +76,15 @@
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" id="modalAddBoard" class="btn btn-info" data-ng-click="addBoard(boardFormData)"
|
||||
data-ng-if="boardFormData.isAdd" data-ng-disabled="boardFormData.isSaving">Add Board</button>
|
||||
data-ng-if="boardFormData.isAdd" data-ng-disabled="boardFormData.isSaving">
|
||||
<span class="fa fa-plus"></span>
|
||||
Add Board
|
||||
</button>
|
||||
<button type="submit" id="modalEditBoard" class="btn btn-info" data-ng-click="editBoard(boardFormData)"
|
||||
data-ng-if="!boardFormData.isAdd" data-ng-disabled="boardFormData.isSaving">Edit Board</button>
|
||||
data-ng-if="!boardFormData.isAdd" data-ng-disabled="boardFormData.isSaving">
|
||||
<span class="fa fa-save"></span>
|
||||
Save Board
|
||||
</button>
|
||||
<a class="btn btn-default" data-ng-click="boardFormData.cancel()"
|
||||
data-ng-disabled="boardFormData.isSaving">Cancel</a>
|
||||
</div>
|
||||
|
@ -48,7 +48,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<div data-ng-if="currentUser.isAdmin == '1'">
|
||||
<p><a role="button" id="addBoard" class="btn btn-info" data-toggle="modal" data-target=".boardModal" data-ng-click="boardFormData.reset()" title="Add Board">Add Board <span class="fa fa-plus"> </span></a></p>
|
||||
<p><a role="button" id="addBoard" class="btn btn-info" data-toggle="modal" data-target=".boardModal" data-ng-click="boardFormData.reset()" title="Add Board"><span class="fa fa-plus"></span> Add Board</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -42,8 +42,8 @@
|
||||
</label>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" id="modalAddUser" class="btn btn-info" data-ng-click="addUser(userFormData)" data-ng-if="userFormData.isAdd">Add User</button>
|
||||
<button type="submit" id="modalEditUser" class="btn btn-info" data-ng-click="editUser(userFormData)" data-ng-if="!userFormData.isAdd">Edit User</button>
|
||||
<button type="submit" id="modalAddUser" class="btn btn-info" data-ng-click="addUser(userFormData)" data-ng-if="userFormData.isAdd"><span class="fa fa-plus"></span> Add User</button>
|
||||
<button type="submit" id="modalEditUser" class="btn btn-info" data-ng-click="editUser(userFormData)" data-ng-if="!userFormData.isAdd"><span class="fa fa-save"></span> Save User</button>
|
||||
<a class="btn btn-default" data-ng-click="userFormData.cancel()">Cancel</a>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -35,6 +35,6 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<div data-ng-if="currentUser.isAdmin == '1'">
|
||||
<p><a role="button" id="addUser" class="btn btn-info" data-toggle="modal" data-target=".userModal" data-ng-click="userFormData.reset()" title="Add User">Add User <span class="fa fa-plus"> </span></a></p>
|
||||
<p><a role="button" id="addUser" class="btn btn-info" data-toggle="modal" data-target=".userModal" data-ng-click="userFormData.reset()" title="Add User"><span class="fa fa-plus"></span> Add User</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|