1 // The Antville Project
  2 // http://code.google.com/p/antville
  3 //
  4 // Copyright 2007-2011 by Tobi Schäfer.
  5 //
  6 // Copyright 2001–2007 Robert Gaggl, Hannes Wallnöfer, Tobi Schäfer,
  7 // Matthias & Michael Platzer, Christoph Lincke.
  8 //
  9 // Licensed under the Apache License, Version 2.0 (the ``License'');
 10 // you may not use this file except in compliance with the License.
 11 // You may obtain a copy of the License at
 12 //
 13 //    http://www.apache.org/licenses/LICENSE-2.0
 14 //
 15 // Unless required by applicable law or agreed to in writing, software
 16 // distributed under the License is distributed on an ``AS IS'' BASIS,
 17 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 18 // See the License for the specific language governing permissions and
 19 // limitations under the License.
 20 //
 21 // $Revision$
 22 // $LastChangedBy$
 23 // $LastChangedDate$
 24 // $URL$
 25 
 26 /**
 27  * @fileOverview Defines the TagHub prototype
 28  */
 29 
 30 /**
 31  * @param {String} name
 32  * @param {Story|Image} tagged
 33  * @param {User} user
 34  * @returns {TagHub}
 35  */
 36 TagHub.add = function(name, tagged, user) {
 37    HopObject.confirmConstructor(this);
 38    var hub = new TagHub;
 39    var site = tagged.site || res.handlers.site;
 40    var tag = site.getTags(tagged._prototype, Tags.ALL).get(name);
 41    if (!tag) {
 42       tag = Tag.add(name, tagged._prototype, site);
 43    }
 44    hub.tag = tag;
 45    hub.tagged = tagged;
 46    hub.user = user;
 47    tagged.tags.add(hub);
 48    return hub;   
 49 }
 50 
 51 /**
 52  * @name TagHub
 53  * @constructor
 54  * @property {Tag} tag
 55  * @property {Number} tag_id
 56  * @property {Story|Image} tagged
 57  * @property {Number} tagged_id
 58  * @property {String} tagged_type
 59  * @property {User} user
 60  * @extends HopObject
 61  */
 62 TagHub.prototype.constructor = function() {
 63    HopObject.confirmConstructor(TagHub);
 64    return this;
 65 }
 66 
 67 /**
 68  * 
 69  * @param {String} name
 70  * @returns {HopObject}
 71  */
 72 TagHub.prototype.getMacroHandler = function(name) {
 73    switch (name.toLowerCase()) {
 74       case "tagged":
 75       case "story":
 76       case "image":
 77       return this.tagged;
 78       break;
 79    }
 80 }
 81 
 82 /**
 83  * @return {String}
 84  */
 85 TagHub.prototype.toString = function() {
 86    return "Tag " + this.tag.name + " of " + this.tagged.toString();
 87 }
 88