Giter Site home page Giter Site logo

tags's Introduction

meteor-tags

The package defines helpers that allow you to add groups of tags to documents in your collections.

Installation

meteor add patrickleet:tags

Collection API

To add tags to selected collection use the Tags.TagsMixin routine:

MyCollection = new Meteor.Collection("myCollection");
Tags.TagsMixin(MyCollection);

You can now do stuff like this:

MyCollection.addTag('tagName', selector);
MyCollection.addTag('tagName', 'tagGroup', selector);
MyCollection.removeTag('tagName', selector);
MyCollection.removeTag('tagName', 'tagGroup', selector);

By default the above actions are not allowed. To change this behavior you will need to allow actions on tags:

MyCollection.allowTags(function (userId) {
    // only allow if user is logged in
    return !!userId;
});

To search for all documents with a given tag use:

MyCollection.find({tags:'tagName'});

To search for all documents with a given tag in a group use:

MyCollection.find({tagGroupTags:'tagName'});

Tags are stored as an array on the documents specified by the selector. If you use a tagGroup the group is prefixed by the tagGroup name and also stored on the documents. That means getting the tags for a particular document is as simple as:

MyCollection.addTag('so tag', {_id: 1});
MyCollection.addTag('much meta', {_id: 1});
MyCollection.findOne({_id: 1}).tags; // ['so tag', 'much meta']

MyCollection.addTag('Chelsea', 'neighborhood', {_id: 1});
MyCollection.findOne({_id: 1}).neighborhoodTags; // ['Chelsea']

To see all tagGroups on a document

MyCollection.findOne().tagGroups 

This may be useful to loop through and check all of the tag properties of the document

var myDoc = MyCollection.findOne({_id: 1});
_.each(myDoc.tagGroups, function(groupName) {
   console.log(myDoc[groupName+'Tags']);
});

Example

Buildings = new Meteor.Collection('buildings');
Tags.TagsMixin(Buildings);

Buildings.allowTags(function (userId) { return true; });

mansionId = Buildings.insert({ name: 'My downtown mansion', type: 'mansion' });
Buildings.addTag('humble', { _id: mansionId });
Buildings.addTag('mansion', { _id: mansionId });
Buildings.addTag('leaks', 'roof', { _id: mansionId });
Buildings.addTag('asbestos', 'roof', { _id: mansionId });

mansion = Buildings.findOne({ _id: mansionId });
mansion.tags; // => [ 'humble', 'mansion' ]
mansion.roofTags; // => [ 'leaks', 'asbestos' ]
mansion.tagGroups; // => [ 'roof' ]

mansion;
// mansion => {
//   _id: '6PGs97ZgXigkN44uy',
//   name: 'My downtown mansion',
//   type: 'mansion',
//   tags: [ 'humble', 'mansion' ],
//   roofTags: [ 'leaks', 'asbestos' ],
//   tagGroups: [ 'roof' ]
// }

lodash.each(mansion.tagGroups, function(groupName) {
  console.log( groupName, ':', mansion[groupName+'Tags'] );
});
// console => roof : [ 'leaks', 'asbestos' ]

console.log( 'tags', ':', mansion['tags'] );
// console => tags : [ 'humble', 'mansion' ]

Meteor.tags

Additionally, you have a read only access to Meteor.tags collection that keeps record about all tags existing in your database. The records are documents consisting of the following fields:

{
    collection : // name of the corresponding collection
    createdAt  : // the date, this tag was first used
    createdBy  : // userId
    nRefs      : // number of references
    name       : // name of this tag
    group      : // name of tag group
}

UI

The package is very lightweight, and does not include any UI, as many JQuery plugins work very well already. Here is an example of a UI using selectize: https://gist.github.com/patrickleet/e1c7a05eca86f536e3d4

Example Project

Demo by @dstollie

tags's People

Contributors

dandv avatar guidouil avatar jamiecollinson avatar patrickleet avatar servel333 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.