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