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 Choice prototype.
 28  */
 29 
 30 markgettext("Choice");
 31 markgettext("choice");
 32 
 33 /**
 34  * 
 35  */
 36 Choice.add = function(title, poll) {
 37    HopObject.confirmConstructor(Choice);
 38    var choice = new Choice(title);
 39    choice.created = choice.modified = new Date;
 40    poll.add(choice);
 41    return choice;
 42 }
 43  
 44 /**
 45  * 
 46  */
 47 Choice.remove = function() {
 48    if (this.constructor === Choice) {
 49       HopObject.remove.call(this);
 50       this.remove();
 51    }
 52    return;
 53 }
 54 
 55 /**
 56  * @name Choice
 57  * @constructor
 58  * @param {String} title
 59  * @property {Vote[]} _children
 60  * @property {Date} created
 61  * @property {Date} modified
 62  * @property {Poll} poll
 63  * @property {String} title
 64  * @extends HopObject
 65  */
 66 Choice.prototype.constructor = function(title) {
 67    HopObject.confirmConstructor.call(this);
 68    this.title = title;
 69    return this;
 70 }
 71 
 72 /**
 73  * 
 74  */
 75 Choice.prototype.selected_macro = function() {
 76    var votes;
 77    if (session.user && (votes = this._parent.votes.get(session.user.name))) {
 78       res.write(this === votes.choice);
 79    } else {
 80       res.write(false);
 81    }
 82    return;
 83 }
 84 
 85 /**
 86  * 
 87  * @param {Object} param
 88  * @param {String} variant
 89  */
 90 Choice.prototype.votes_macro = function(param, variant) {
 91    var votes = 0;
 92    if (variant) {
 93       if (variant.endsWith("%")) {
 94          variant = parseInt(variant) || 1;
 95          var max = this._parent.votes.size();
 96          votes = this.size() / max * variant;
 97       } else {
 98          var max = 1;
 99          this._parent.forEach(function() {
100             var n = this.size();
101             if (n > max) {
102                max = n;
103             }
104             return;
105          });
106          votes = Math.round(this.size() / max * variant);
107       }
108    } else {
109       votes = this.size();
110    }
111    if (!votes && param["default"]) {
112       return param["default"];
113    }
114    return votes;
115 }
116