mirror of
https://github.com/sismics/docs.git
synced 2024-11-22 05:57:57 +01:00
Edition and display of tags on documents
This commit is contained in:
parent
779c45a1e2
commit
a8b9148359
@ -1,5 +1,3 @@
|
||||
- Client side edition of tags on documents
|
||||
- Client side displaying of tags on documents
|
||||
- Client/server side edition of created date
|
||||
- Client/server side search on tags
|
||||
- Client/server side search on creation date
|
||||
|
@ -33,16 +33,18 @@
|
||||
<script src="js/controller/FileView.js" type="text/javascript"></script>
|
||||
<script src="js/controller/Login.js" type="text/javascript"></script>
|
||||
<script src="js/controller/Tag.js" type="text/javascript"></script>
|
||||
<script src="js/controller/Navigation.js" type="text/javascript"></script>
|
||||
<script src="js/service/User.js" type="text/javascript"></script>
|
||||
<script src="js/service/Tag.js" type="text/javascript"></script>
|
||||
<script src="js/filter/Newline.js" type="text/javascript"></script>
|
||||
<script src="js/directive/File.js" type="text/javascript"></script>
|
||||
<script src="js/directive/SelectTag.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="navbar">
|
||||
<div class="navbar" ng-controller="Navigation">
|
||||
<div class="navbar-inner">
|
||||
<a class="brand" href="#">Sismics Docs</a>
|
||||
<ul class="nav">
|
||||
<ul class="nav" ng-show="!userInfo.anonymous">
|
||||
<li ng-class="{active: $uiRoute}" ui-route="/document"><a href="#/document">Documents</a></li>
|
||||
<li ng-class="{active: $uiRoute}" ui-route="/tag"><a href="#/tag">Tags</a></li>
|
||||
</ul>
|
||||
|
@ -108,7 +108,7 @@ var App = angular.module('docs', ['ui.state', 'ui.bootstrap', 'ui.route', 'ui.ke
|
||||
if(value instanceof Array) {
|
||||
for(i=0; i<value.length; ++i) {
|
||||
subValue = value[i];
|
||||
fullSubName = name + '[' + i + ']';
|
||||
fullSubName = name + '[]';
|
||||
innerObj = {};
|
||||
innerObj[fullSubName] = subValue;
|
||||
query += param(innerObj) + '&';
|
||||
|
@ -3,7 +3,7 @@
|
||||
/**
|
||||
* Document edition controller.
|
||||
*/
|
||||
App.controller('DocumentEdit', function($scope, $q, $http, $state, $stateParams, Restangular) {
|
||||
App.controller('DocumentEdit', function($scope, $q, $http, $state, $stateParams, Restangular, Tag) {
|
||||
/**
|
||||
* Returns true if in edit mode (false in add mode).
|
||||
*/
|
||||
@ -25,15 +25,19 @@ App.controller('DocumentEdit', function($scope, $q, $http, $state, $stateParams,
|
||||
*/
|
||||
$scope.edit = function() {
|
||||
var promise = null;
|
||||
var document = angular.copy($scope.document);
|
||||
|
||||
// Extract ids from tags
|
||||
document.tags = _.pluck(document.tags, 'id');
|
||||
|
||||
if ($scope.isEdit()) {
|
||||
promise = Restangular
|
||||
.one('document', $stateParams.id)
|
||||
.post('', $scope.document);
|
||||
.post('', document);
|
||||
} else {
|
||||
promise = Restangular
|
||||
.one('document')
|
||||
.put($scope.document);
|
||||
.put(document);
|
||||
}
|
||||
|
||||
// Upload files after edition
|
||||
|
8
docs-web/src/main/webapp/js/controller/Navigation.js
Normal file
8
docs-web/src/main/webapp/js/controller/Navigation.js
Normal file
@ -0,0 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Navigation controller.
|
||||
*/
|
||||
App.controller('Navigation', function($scope, User) {
|
||||
$scope.userInfo = User.userInfo();
|
||||
});
|
64
docs-web/src/main/webapp/js/directive/SelectTag.js
Normal file
64
docs-web/src/main/webapp/js/directive/SelectTag.js
Normal file
@ -0,0 +1,64 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Tag selection directive.
|
||||
*/
|
||||
App.directive('selectTag', function() {
|
||||
return {
|
||||
restrict: 'E',
|
||||
templateUrl: 'partial/directive.selecttag.html',
|
||||
replace: true,
|
||||
scope: {
|
||||
tags: '=',
|
||||
ref: '@'
|
||||
},
|
||||
controller: function($scope, Tag) {
|
||||
// Retrieve tags
|
||||
Tag.tags().then(function(data) {
|
||||
$scope.allTags = data.tags;
|
||||
});
|
||||
|
||||
/**
|
||||
* Add a tag.
|
||||
*/
|
||||
$scope.addTag = function($event) {
|
||||
// Does the new tag exists
|
||||
var tag = _.find($scope.allTags, function(tag) {
|
||||
if (tag.name == $scope.input) {
|
||||
return tag;
|
||||
}
|
||||
});
|
||||
|
||||
// Does the new tag is already in the model
|
||||
var duplicate = _.find($scope.tags, function(tag2) {
|
||||
if (tag && tag2.id == tag.id) {
|
||||
return tag2;
|
||||
}
|
||||
});
|
||||
|
||||
// Add the new tag
|
||||
if (tag) {
|
||||
if (!duplicate) {
|
||||
$scope.tags.push(tag);
|
||||
}
|
||||
$scope.input = '';
|
||||
}
|
||||
|
||||
if ($event) {
|
||||
$event.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a tag.
|
||||
*/
|
||||
$scope.deleteTag = function(deleteTag) {
|
||||
$scope.tags = _.reject($scope.tags, function(tag) {
|
||||
return tag.id == deleteTag.id;
|
||||
})
|
||||
};
|
||||
},
|
||||
link: function(scope, element, attr, ctrl) {
|
||||
}
|
||||
}
|
||||
});
|
@ -0,0 +1,9 @@
|
||||
<div>
|
||||
<ul class="inline">
|
||||
<li ng-repeat="tag in tags"><span class="label label-info">{{ tag.name }} <span class="icon-remove icon-white" ng-click="deleteTag(tag)"></span></span></li>
|
||||
</ul>
|
||||
<p class="input-append">
|
||||
<input type="text" id="{{ ref }}" placeholder="Type a tag" ng-model="input" typeahead="tag.name for tag in allTags | filter: $viewValue" ui-keypress="{ 'enter': 'addTag($event)' }" />
|
||||
<button type="submit" class="btn" ng-click="addTag()">Add</button>
|
||||
</p>
|
||||
</div>
|
@ -17,6 +17,12 @@
|
||||
<file class="input-block-level" id="inputFiles" multiple="multiple" ng-model="newFiles" accept="image/png,image/jpg,image/jpeg,image/gif" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="inputTags">Tags</label>
|
||||
<div class="controls">
|
||||
<select-tag tags="document.tags" class="input-block-level" ref="inputTags" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary" ng-disabled="!documentForm.$valid" ng-click="edit()">{{ isEdit() ? 'Edit' : 'Add' }}</button>
|
||||
<button type="submit" class="btn" ng-click="cancel()">Cancel</button>
|
||||
|
@ -7,6 +7,9 @@
|
||||
|
||||
<div class="page-header">
|
||||
<h1>{{ document.title }} <small>{{ document.create_date | date: 'short' }}</small></h1>
|
||||
<ul class="inline">
|
||||
<li ng-repeat="tag in document.tags"><span class="label label-info">{{ tag.name }}</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p ng-bind-html="document.description | newline"></p>
|
||||
|
Loading…
Reference in New Issue
Block a user