From 8e7109161ac0e7f44c41977c391bfee8eb783adb Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Wed, 10 Jun 2015 16:10:22 +0900 Subject: [PATCH] update search behavior --- src/config/states.js | 2 +- src/controllers/modals/NewSnippetModalController.js | 2 +- src/controllers/states/SnippetsListController.js | 9 ++++++++- src/directives/tags.js | 9 ++++++++- src/filters/search-snippets.js | 7 ++++--- src/tpls/states/snippets.list.tpl.html | 2 +- 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/config/states.js b/src/config/states.js index 8f0f5b88..2aa51dcc 100644 --- a/src/config/states.js +++ b/src/config/states.js @@ -29,7 +29,7 @@ angular.module('codexen') /* Snippets */ .state('snippets', { - url: '/snippets', + url: '/snippets?search', views: { 'main-view': { templateUrl: 'tpls/states/snippets.list.tpl.html', diff --git a/src/controllers/modals/NewSnippetModalController.js b/src/controllers/modals/NewSnippetModalController.js index 1c92fb15..5fd1aa07 100644 --- a/src/controllers/modals/NewSnippetModalController.js +++ b/src/controllers/modals/NewSnippetModalController.js @@ -11,7 +11,7 @@ angular.module('codexen') callSign: vm.callSign, mode: vm.mode == null ? null : vm.mode.toLowerCase(), content: vm.content, - tags: angular.isArray(vm.Tags) ? vm.Tags.map(function (tag) { return tag.name }) : [] + Tags: angular.isArray(vm.Tags) ? vm.Tags.map(function (tag) { return tag.name }) : [] } Snippet.create(params) diff --git a/src/controllers/states/SnippetsListController.js b/src/controllers/states/SnippetsListController.js index 53619703..1da50f10 100644 --- a/src/controllers/states/SnippetsListController.js +++ b/src/controllers/states/SnippetsListController.js @@ -1,10 +1,17 @@ /* global angular */ angular.module('codexen') - .controller('SnippetsListController', function ($auth, Snippet, $scope, $state) { + .controller('SnippetsListController', function ($auth, Snippet, $scope, $state, $scope) { var vm = this vm.isLoaded = false + vm.search = $state.params.search + + vm.snippetId = parseInt($state.params.id) + $scope.$on('$stateChangeStart', function (e, toState, toParams) { + vm.snippetId = parseInt(toParams.id) + }) + var loadSnippets = function () { if ($auth.isAuthenticated) { Snippet.findMine({ diff --git a/src/directives/tags.js b/src/directives/tags.js index 232cc42c..8ab21888 100644 --- a/src/directives/tags.js +++ b/src/directives/tags.js @@ -5,10 +5,17 @@ angular.module('codexen') restrict: 'A', template: '

' + ' ' + - '#' + + '#' + '

', scope: { tags: '=' + }, + link: function (scope, el) { + el.ready(function () { + el.find('a').on('click', function (e) { + e.stopPropagation() + }) + }) } } }) diff --git a/src/filters/search-snippets.js b/src/filters/search-snippets.js index b39cb07e..aff6d6c9 100644 --- a/src/filters/search-snippets.js +++ b/src/filters/search-snippets.js @@ -2,9 +2,10 @@ angular.module('codexen') .filter('searchSnippets', function ($filter) { return function (input, needle) { - if (!angular.isString(needle)) return input - if (needle.match(/^#./)) { - var name = needle.match(/^#(.+)/)[1] + if (!angular.isString(needle) || !angular.isArray(input)) return input + if (needle.match(/#(.+)|tag:(.+)/)) { + var name = needle.match(/#(.+)/) ? needle.match(/#(.+)/)[1] : needle.match(/tag:(.+)/)[1] + return input.filter(function (snippet) { return snippet.Tags.some(function (tag) { return tag.name.match(new RegExp(name)) diff --git a/src/tpls/states/snippets.list.tpl.html b/src/tpls/states/snippets.list.tpl.html index 3be0e44b..b64bf559 100644 --- a/src/tpls/states/snippets.list.tpl.html +++ b/src/tpls/states/snippets.list.tpl.html @@ -26,7 +26,7 @@ Sign In -
  • +