mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-16 11:15:12 +00:00
add tagging
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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
16
src/services/tag.js
Normal 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
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -75,3 +75,8 @@ $snippet-list-item-hover-bg: #EEE;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.tags{
|
||||||
|
a{
|
||||||
|
margin: 0 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user