1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-16 11:15:12 +00:00

add tagging

This commit is contained in:
Rokt33r
2015-05-29 16:53:01 +09:00
parent 56175ecca5
commit e5b265e497
9 changed files with 72 additions and 14 deletions

View File

@@ -17,6 +17,9 @@ body {
label{ label{
font-family: "Lato", sans-serif; font-family: "Lato", sans-serif;
} }
textarea{
resize: vertical;
}
#side-view{ #side-view{
position:absolute; position:absolute;

View File

@@ -11,7 +11,7 @@ angular.module('codexen.modals')
open: open open: open
} }
}) })
.controller('NewSnippetModalController', function ($modalInstance, aceModes, $log, Snippet, $rootScope){ .controller('NewSnippetModalController', function ($modalInstance, aceModes, $log, Snippet, $rootScope, Tag){
var vm = this var vm = this
vm.aceModes = aceModes vm.aceModes = aceModes
@@ -22,7 +22,8 @@ angular.module('codexen.modals')
description: vm.description, description: vm.description,
prefix: vm.prefix, prefix: vm.prefix,
mode: vm.mode==null?null:vm.mode.name.toLowerCase(), mode: vm.mode==null?null:vm.mode.name.toLowerCase(),
content: vm.content content: vm.content,
tags: angular.isArray(vm.tags)?vm.tags.map(function (tag) { return {_id: tag._id, name: tag.name} }):[]
} }
Snippet.create(params) Snippet.create(params)
@@ -32,6 +33,23 @@ angular.module('codexen.modals')
}) })
} }
// vm.tags = []
vm.tagCandidates = []
vm.refreshTagCandidates = function(tagName) {
if (tagName == null || tagName == '') return null
return Tag.findByName(tagName)
.success(function (data) {
console.log('tags fetched!!', data)
vm.tagCandidates = data.tags
})
}
vm.transform = function (tagName) {
return {
_id:0,
name:tagName
}
}
vm.cancel = function () { vm.cancel = function () {
$modalInstance.dismiss() $modalInstance.dismiss()
} }

View File

@@ -10,7 +10,7 @@
<div class="form-group"> <div class="form-group">
<input ng-model="vm.prefix" type="text" name="prefix" class="inline-form-control" placeholder="Prefix"> <input ng-model="vm.prefix" type="text" name="prefix" class="inline-form-control" placeholder="Prefix">
<ui-select ng-model="vm.mode" style="display: inline-block;" on-select="vm.log(vm.mode.name.toLowerCase())" theme="bootstrap" ng-disabled="disabled"> <ui-select ng-model="vm.mode" style="display: inline-block;" on-select="vm.log(vm.mode.name.toLowerCase())" theme="bootstrap">
<ui-select-match placeholder="Select Type">{{$select.selected.name}}</ui-select-match> <ui-select-match placeholder="Select Type">{{$select.selected.name}}</ui-select-match>
<ui-select-choices repeat="mode in vm.aceModes | filter: {name: $select.search}"> <ui-select-choices repeat="mode in vm.aceModes | filter: {name: $select.search}">
<div ng-bind-html="mode.name | highlight: $select.search"></div> <div ng-bind-html="mode.name | highlight: $select.search"></div>
@@ -25,6 +25,19 @@
}" }"
ng-model="vm.content" ng-model="vm.content"
></div> ></div>
<div class="form-group">
<ui-select multiple tagging="vm.transform" tagging-tokens="SPACE|,|/" ng-model="vm.tags" theme="bootstrap">
<ui-select-match placeholder="Write Tags">{{$item.name}}</ui-select-match>
<ui-select-choices repeat="tag in vm.tagCandidates" refresh="vm.refreshTagCandidates($select.search)"
refresh-delay="200">
<div><span ng-bind-html="tag.name | highlight: $select.search"></span><span ng-if="tag.isTag">(new)</span></div>
</ui-select-choices>
</ui-select>
</div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">

View File

@@ -1,7 +1,7 @@
angular.module('codexen.services') angular.module('codexen.services')
.factory('Snippet', function ($http, $auth, apiUrl) { .factory('Snippet', function ($http, $auth, apiUrl) {
var findByUser = function (user) { var findByUser = function (user) {
var url = apiUrl + 'snippets' var url = apiUrl + 'snippets/search'
return $http.get(url, { return $http.get(url, {
params: { params: {
@@ -11,13 +11,13 @@ angular.module('codexen.services')
} }
var create = function (params) { var create = function (params) {
var url = apiUrl + 'snippets' var url = apiUrl + 'snippets/create'
return $http.post(url, params) return $http.post(url, params)
} }
var show = function (id) { var show = function (id) {
var url = apiUrl + 'snippets/' + id var url = apiUrl + 'snippets/id/' + id
return $http.get(url) return $http.get(url)
} }

16
src/services/tag.js Normal file
View File

@@ -0,0 +1,16 @@
angular.module('codexen.services')
.factory('Tag', function ($http, apiUrl) {
var findByName = function (tagName) {
var url = apiUrl + 'tags/search'
return $http.get(url, {
params: {
name: tagName
}
})
}
return {
findByName: findByName
}
})

View File

@@ -18,15 +18,18 @@
</div> </div>
<div ng-if="vm.isLoaded" class=""> <div ng-if="vm.isLoaded" class="">
<p> <p class="tags">
<span ng-repeat="tag in vm.snippet.tags" ng-bind="tag.name"></span> <small><i class="fa fa-tags"></i></small> <a ng-repeat="tag in vm.snippet.tags" ng-bind="tag.name" href="#" class="label label-default"></a>
</p> </p>
<label>Description</label> <label>Description</label>
<p ng-bind="vm.snippet.description"></p> <p ng-bind="vm.snippet.description"></p>
<label>Content</label> <label>Content</label>
<div ui-ace="{ <div ui-ace="{
readonly: true, readonly: true,
showGutter: false showGutter: false,
rendererOptions: {
maxLinks: Infinity
}
}" ng-model="vm.snippet.content"></div> }" ng-model="vm.snippet.content"></div>
</div> </div>
</div> </div>

View File

@@ -34,8 +34,8 @@
</div> </div>
</div> </div>
<p ng-bind="snippet.description"></p> <p ng-bind="snippet.description"></p>
<p> <p class="tags">
<a ng-repeat="tag in snippet.tags" ng-bind="tag.name" href="#" class="label label-default"></a> <small><i class="fa fa-tags"></i></small> <a ng-repeat="tag in snippet.tags" ng-bind="tag.name" href="#" class="label label-default"></a>
</p> </p>
</li> </li>
</ul> </ul>

View File

@@ -75,3 +75,8 @@ $snippet-list-item-hover-bg: #EEE;
} }
} }
} }
.tags{
a{
margin: 0 2px;
}
}