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 FlexiPath prototype.
 28  */
 29 
 30 var FlexiPath = function(name, parent) {
 31    var self = this;
 32 
 33    this._id = name;
 34    this._parent = parent;
 35    this._patterns = {};
 36 
 37    this.__defineGetter__("patterns", function() {
 38       var ref = this;
 39       while (ref._parent.constructor === FlexiPath) {
 40          ref = ref._parent;
 41       }
 42       return ref._patterns;
 43    });
 44 
 45    this.addUrlPattern = function(pattern, callback) {
 46       this._patterns[pattern] = callback;
 47       return;
 48    }
 49 
 50    this.href = function(action) {
 51       var href = [];
 52       var ref = this;
 53       while (ref._parent === this.constructor) {
 54          href.unshift(ref._id);
 55          ref = ref._parent;
 56       }
 57       //href.push("/");
 58       if (action) {
 59          href.push(action);
 60       }
 61       return this._parent.href() + href.join("/");
 62    }
 63 
 64    this.getChildElement = function(name) {
 65       return new this.constructor(name, self);
 66    }
 67 
 68    return this;
 69 };
 70 
 71 FlexiPath.prototype.main_action = function() {
 72    for (let pattern in this.patterns) {
 73       let match;
 74       let re = new RegExp(pattern);
 75       if (match = req.path.match(re)) {
 76          return this.patterns[pattern].apply(this, match);
 77       }
 78    }
 79    return;
 80 }
 81