PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/app/scripts/collections/tags.js

https://gitlab.com/dannywillems/laverna
JavaScript | 106 lines | 71 code | 22 blank | 13 comment | 8 complexity | 87930c3190b315e2014cf4696b1ec66d MD5 | raw file
  1. /*global define*/
  2. define([
  3. 'underscore',
  4. 'jquery',
  5. 'backbone',
  6. 'models/tag',
  7. 'migrations/note',
  8. 'indexedDB'
  9. ], function (_, $, Backbone, Tag, TagsDB) {
  10. 'use strict';
  11. /**
  12. * Tags collection
  13. */
  14. var Tags = Backbone.Collection.extend({
  15. model: Tag,
  16. database : TagsDB,
  17. storeName: 'tags',
  18. comparator: 'name',
  19. initialize: function () {
  20. },
  21. /**
  22. * Do not add if already exists
  23. */
  24. saveAdd: function (tags) {
  25. var done = $.Deferred(),
  26. model;
  27. if (tags.length === 0) {
  28. done.resolve(true);
  29. }
  30. _.each(tags, function (tag, iter) {
  31. tag = tag.trim();
  32. model = this.findWhere({name : tag});
  33. if (tag !== '' && model === undefined) {
  34. model = new this.model({ name : tag });
  35. model.save();
  36. }
  37. if (iter === (tags.length - 1)) {
  38. done.resolve(true);
  39. }
  40. }, this);
  41. return done;
  42. },
  43. /**
  44. * Find tag by name and return id's
  45. */
  46. getTagsId: function (tagNames) {
  47. var tags = [],
  48. that = this,
  49. tag;
  50. _.each(tagNames, function (name) {
  51. tag = that.where({name: name});
  52. if (tag.length !== 0) {
  53. tags.push(tag[0].get('id'));
  54. }
  55. });
  56. return tags;
  57. },
  58. /**
  59. * Return only tag names
  60. */
  61. getNames: function (tags) {
  62. var names = [];
  63. if (tags === undefined) {
  64. tags = this.toArray();
  65. }
  66. _.each(tags, function (tag) {
  67. if (tag !== undefined) {
  68. names.push(tag.get('name'));
  69. }
  70. });
  71. return names;
  72. },
  73. checkExist: function (tagNames) {
  74. var names = [];
  75. _.each(tagNames, function (name) {
  76. if (this.get({name : name})) {
  77. names.push(name);
  78. }
  79. });
  80. return names;
  81. }
  82. });
  83. return Tags;
  84. });