cmda-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From xingwei...@apache.org
Subject [09/49] incubator-cmda git commit: remove all
Date Tue, 08 Sep 2015 22:43:44 GMT
http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/a8965336/public/javascripts/keyword_tree.js
----------------------------------------------------------------------
diff --git a/public/javascripts/keyword_tree.js b/public/javascripts/keyword_tree.js
deleted file mode 100644
index 572dfd5..0000000
--- a/public/javascripts/keyword_tree.js
+++ /dev/null
@@ -1,58 +0,0 @@
-$(function () {
-    var checked_ids;
-    $('#jstree_div')
-        .jstree({
-            'core': {
-                'data': {
-                    'url': '/climate/keywordTree/', // the URL to fetch the data. Use relative url if required}
-                    'data': function (node) {
-                        return { 'id': node.id };
-                    }
-                }
-            },
-            "checkbox": {
-                "keep_selected_style": false
-            },
-            "state": {
-                "key": "keyword_tree"
-            },
-            "plugins": [ "checkbox", "state"]
-        })
-        .on('changed.jstree', function (e, data) {
-            var checked_texts = [];
-//            var selected = $('#jstree_div').jstree(true).get_selected(true)
-//                .each (function () {
-//                checked_texts.push(this.text);
-//            });
-            console.log(checked_texts);
-        });
-
-
-//built in filter of tree (search plugin)
-    var to = false;
-    $('#jstree_div_q').keyup(function () {
-        if (to) {
-            clearTimeout(to);
-        }
-        to = setTimeout(function () {
-            var v = $('#jstree_div_q').val();
-            $('#jstree_div').jstree(true).search(v);
-        }, 250);
-    });
-
-    $('#submit').click(function () {
-        var data = $("#jstree_div").jstree(true).get_checked(true);
-        var json = JSON.stringify(data);
-        console.log(json);
-        $.ajax({
-            type: "POST",
-            url: "/climate/recommendation/selectedKeywordSearch",
-            contentType: "application/json",
-            data: JSON.stringify(data),
-            success: function(){
-                location.reload();
-            }
-        });
-    });
-});
-

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/a8965336/public/javascripts/lastLoader.js
----------------------------------------------------------------------
diff --git a/public/javascripts/lastLoader.js b/public/javascripts/lastLoader.js
deleted file mode 100644
index bc85375..0000000
--- a/public/javascripts/lastLoader.js
+++ /dev/null
@@ -1,8 +0,0 @@
-$(document).ready(function() 
-    { 
-        $("#myTable").tablesorter(); 
-        $("#myTable2").tablesorter(); 
-        $("#myTable3").tablesorter();
-        $("#csTable").tablesorter(); 
-    } 
-); 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/a8965336/public/javascripts/livefitler.js
----------------------------------------------------------------------
diff --git a/public/javascripts/livefitler.js b/public/javascripts/livefitler.js
deleted file mode 100644
index 2bcf50a..0000000
--- a/public/javascripts/livefitler.js
+++ /dev/null
@@ -1,38 +0,0 @@
-$(document).ready(function () {
-    var oTable = $('.liveFilterList').dataTable( {
-        "oLanguage": {
-            "sSearch": "Search all columns:"
-        }
-    });
-    
-      $("tfoot input").keyup( function () {
-        /* Filter on the column (the index) of this element */
-        oTable.fnFilter( this.value, $("tfoot input").index(this) );
-    } );
-    
-     /*
-     * Support functions to provide a little bit of 'user friendlyness' to the textboxes in 
-     * the footer
-     */
-    $("tfoot input").each( function (i) {
-        asInitVals[i] = this.value;
-    } );
-     
-    $("tfoot input").focus( function () {
-        if ( this.className == "search_init" )
-        {
-            this.className = "";
-            this.value = "";
-        }
-    } );
-     
-    $("tfoot input").blur( function (i) {
-        if ( this.value == "" )
-        {
-            this.className = "search_init";
-            this.value = asInitVals[$("tfoot input").index(this)];
-        }
-    } );
-
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/a8965336/public/javascripts/underscore-1.5.2.js
----------------------------------------------------------------------
diff --git a/public/javascripts/underscore-1.5.2.js b/public/javascripts/underscore-1.5.2.js
deleted file mode 100644
index a3cf397..0000000
--- a/public/javascripts/underscore-1.5.2.js
+++ /dev/null
@@ -1,1276 +0,0 @@
-//     Underscore.js 1.5.2
-//     http://underscorejs.org
-//     (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-//     Underscore may be freely distributed under the MIT license.
-
-(function() {
-
-  // Baseline setup
-  // --------------
-
-  // Establish the root object, `window` in the browser, or `exports` on the server.
-  var root = this;
-
-  // Save the previous value of the `_` variable.
-  var previousUnderscore = root._;
-
-  // Establish the object that gets returned to break out of a loop iteration.
-  var breaker = {};
-
-  // Save bytes in the minified (but not gzipped) version:
-  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
-
-  // Create quick reference variables for speed access to core prototypes.
-  var
-    push             = ArrayProto.push,
-    slice            = ArrayProto.slice,
-    concat           = ArrayProto.concat,
-    toString         = ObjProto.toString,
-    hasOwnProperty   = ObjProto.hasOwnProperty;
-
-  // All **ECMAScript 5** native function implementations that we hope to use
-  // are declared here.
-  var
-    nativeForEach      = ArrayProto.forEach,
-    nativeMap          = ArrayProto.map,
-    nativeReduce       = ArrayProto.reduce,
-    nativeReduceRight  = ArrayProto.reduceRight,
-    nativeFilter       = ArrayProto.filter,
-    nativeEvery        = ArrayProto.every,
-    nativeSome         = ArrayProto.some,
-    nativeIndexOf      = ArrayProto.indexOf,
-    nativeLastIndexOf  = ArrayProto.lastIndexOf,
-    nativeIsArray      = Array.isArray,
-    nativeKeys         = Object.keys,
-    nativeBind         = FuncProto.bind;
-
-  // Create a safe reference to the Underscore object for use below.
-  var _ = function(obj) {
-    if (obj instanceof _) return obj;
-    if (!(this instanceof _)) return new _(obj);
-    this._wrapped = obj;
-  };
-
-  // Export the Underscore object for **Node.js**, with
-  // backwards-compatibility for the old `require()` API. If we're in
-  // the browser, add `_` as a global object via a string identifier,
-  // for Closure Compiler "advanced" mode.
-  if (typeof exports !== 'undefined') {
-    if (typeof module !== 'undefined' && module.exports) {
-      exports = module.exports = _;
-    }
-    exports._ = _;
-  } else {
-    root._ = _;
-  }
-
-  // Current version.
-  _.VERSION = '1.5.2';
-
-  // Collection Functions
-  // --------------------
-
-  // The cornerstone, an `each` implementation, aka `forEach`.
-  // Handles objects with the built-in `forEach`, arrays, and raw objects.
-  // Delegates to **ECMAScript 5**'s native `forEach` if available.
-  var each = _.each = _.forEach = function(obj, iterator, context) {
-    if (obj == null) return;
-    if (nativeForEach && obj.forEach === nativeForEach) {
-      obj.forEach(iterator, context);
-    } else if (obj.length === +obj.length) {
-      for (var i = 0, length = obj.length; i < length; i++) {
-        if (iterator.call(context, obj[i], i, obj) === breaker) return;
-      }
-    } else {
-      var keys = _.keys(obj);
-      for (var i = 0, length = keys.length; i < length; i++) {
-        if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
-      }
-    }
-  };
-
-  // Return the results of applying the iterator to each element.
-  // Delegates to **ECMAScript 5**'s native `map` if available.
-  _.map = _.collect = function(obj, iterator, context) {
-    var results = [];
-    if (obj == null) return results;
-    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
-    each(obj, function(value, index, list) {
-      results.push(iterator.call(context, value, index, list));
-    });
-    return results;
-  };
-
-  var reduceError = 'Reduce of empty array with no initial value';
-
-  // **Reduce** builds up a single result from a list of values, aka `inject`,
-  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
-  _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
-    var initial = arguments.length > 2;
-    if (obj == null) obj = [];
-    if (nativeReduce && obj.reduce === nativeReduce) {
-      if (context) iterator = _.bind(iterator, context);
-      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
-    }
-    each(obj, function(value, index, list) {
-      if (!initial) {
-        memo = value;
-        initial = true;
-      } else {
-        memo = iterator.call(context, memo, value, index, list);
-      }
-    });
-    if (!initial) throw new TypeError(reduceError);
-    return memo;
-  };
-
-  // The right-associative version of reduce, also known as `foldr`.
-  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
-  _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
-    var initial = arguments.length > 2;
-    if (obj == null) obj = [];
-    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
-      if (context) iterator = _.bind(iterator, context);
-      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
-    }
-    var length = obj.length;
-    if (length !== +length) {
-      var keys = _.keys(obj);
-      length = keys.length;
-    }
-    each(obj, function(value, index, list) {
-      index = keys ? keys[--length] : --length;
-      if (!initial) {
-        memo = obj[index];
-        initial = true;
-      } else {
-        memo = iterator.call(context, memo, obj[index], index, list);
-      }
-    });
-    if (!initial) throw new TypeError(reduceError);
-    return memo;
-  };
-
-  // Return the first value which passes a truth test. Aliased as `detect`.
-  _.find = _.detect = function(obj, iterator, context) {
-    var result;
-    any(obj, function(value, index, list) {
-      if (iterator.call(context, value, index, list)) {
-        result = value;
-        return true;
-      }
-    });
-    return result;
-  };
-
-  // Return all the elements that pass a truth test.
-  // Delegates to **ECMAScript 5**'s native `filter` if available.
-  // Aliased as `select`.
-  _.filter = _.select = function(obj, iterator, context) {
-    var results = [];
-    if (obj == null) return results;
-    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
-    each(obj, function(value, index, list) {
-      if (iterator.call(context, value, index, list)) results.push(value);
-    });
-    return results;
-  };
-
-  // Return all the elements for which a truth test fails.
-  _.reject = function(obj, iterator, context) {
-    return _.filter(obj, function(value, index, list) {
-      return !iterator.call(context, value, index, list);
-    }, context);
-  };
-
-  // Determine whether all of the elements match a truth test.
-  // Delegates to **ECMAScript 5**'s native `every` if available.
-  // Aliased as `all`.
-  _.every = _.all = function(obj, iterator, context) {
-    iterator || (iterator = _.identity);
-    var result = true;
-    if (obj == null) return result;
-    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
-    each(obj, function(value, index, list) {
-      if (!(result = result && iterator.call(context, value, index, list))) return breaker;
-    });
-    return !!result;
-  };
-
-  // Determine if at least one element in the object matches a truth test.
-  // Delegates to **ECMAScript 5**'s native `some` if available.
-  // Aliased as `any`.
-  var any = _.some = _.any = function(obj, iterator, context) {
-    iterator || (iterator = _.identity);
-    var result = false;
-    if (obj == null) return result;
-    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
-    each(obj, function(value, index, list) {
-      if (result || (result = iterator.call(context, value, index, list))) return breaker;
-    });
-    return !!result;
-  };
-
-  // Determine if the array or object contains a given value (using `===`).
-  // Aliased as `include`.
-  _.contains = _.include = function(obj, target) {
-    if (obj == null) return false;
-    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
-    return any(obj, function(value) {
-      return value === target;
-    });
-  };
-
-  // Invoke a method (with arguments) on every item in a collection.
-  _.invoke = function(obj, method) {
-    var args = slice.call(arguments, 2);
-    var isFunc = _.isFunction(method);
-    return _.map(obj, function(value) {
-      return (isFunc ? method : value[method]).apply(value, args);
-    });
-  };
-
-  // Convenience version of a common use case of `map`: fetching a property.
-  _.pluck = function(obj, key) {
-    return _.map(obj, function(value){ return value[key]; });
-  };
-
-  // Convenience version of a common use case of `filter`: selecting only objects
-  // containing specific `key:value` pairs.
-  _.where = function(obj, attrs, first) {
-    if (_.isEmpty(attrs)) return first ? void 0 : [];
-    return _[first ? 'find' : 'filter'](obj, function(value) {
-      for (var key in attrs) {
-        if (attrs[key] !== value[key]) return false;
-      }
-      return true;
-    });
-  };
-
-  // Convenience version of a common use case of `find`: getting the first object
-  // containing specific `key:value` pairs.
-  _.findWhere = function(obj, attrs) {
-    return _.where(obj, attrs, true);
-  };
-
-  // Return the maximum element or (element-based computation).
-  // Can't optimize arrays of integers longer than 65,535 elements.
-  // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797)
-  _.max = function(obj, iterator, context) {
-    if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
-      return Math.max.apply(Math, obj);
-    }
-    if (!iterator && _.isEmpty(obj)) return -Infinity;
-    var result = {computed : -Infinity, value: -Infinity};
-    each(obj, function(value, index, list) {
-      var computed = iterator ? iterator.call(context, value, index, list) : value;
-      computed > result.computed && (result = {value : value, computed : computed});
-    });
-    return result.value;
-  };
-
-  // Return the minimum element (or element-based computation).
-  _.min = function(obj, iterator, context) {
-    if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
-      return Math.min.apply(Math, obj);
-    }
-    if (!iterator && _.isEmpty(obj)) return Infinity;
-    var result = {computed : Infinity, value: Infinity};
-    each(obj, function(value, index, list) {
-      var computed = iterator ? iterator.call(context, value, index, list) : value;
-      computed < result.computed && (result = {value : value, computed : computed});
-    });
-    return result.value;
-  };
-
-  // Shuffle an array, using the modern version of the 
-  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
-  _.shuffle = function(obj) {
-    var rand;
-    var index = 0;
-    var shuffled = [];
-    each(obj, function(value) {
-      rand = _.random(index++);
-      shuffled[index - 1] = shuffled[rand];
-      shuffled[rand] = value;
-    });
-    return shuffled;
-  };
-
-  // Sample **n** random values from an array.
-  // If **n** is not specified, returns a single random element from the array.
-  // The internal `guard` argument allows it to work with `map`.
-  _.sample = function(obj, n, guard) {
-    if (arguments.length < 2 || guard) {
-      return obj[_.random(obj.length - 1)];
-    }
-    return _.shuffle(obj).slice(0, Math.max(0, n));
-  };
-
-  // An internal function to generate lookup iterators.
-  var lookupIterator = function(value) {
-    return _.isFunction(value) ? value : function(obj){ return obj[value]; };
-  };
-
-  // Sort the object's values by a criterion produced by an iterator.
-  _.sortBy = function(obj, value, context) {
-    var iterator = lookupIterator(value);
-    return _.pluck(_.map(obj, function(value, index, list) {
-      return {
-        value: value,
-        index: index,
-        criteria: iterator.call(context, value, index, list)
-      };
-    }).sort(function(left, right) {
-      var a = left.criteria;
-      var b = right.criteria;
-      if (a !== b) {
-        if (a > b || a === void 0) return 1;
-        if (a < b || b === void 0) return -1;
-      }
-      return left.index - right.index;
-    }), 'value');
-  };
-
-  // An internal function used for aggregate "group by" operations.
-  var group = function(behavior) {
-    return function(obj, value, context) {
-      var result = {};
-      var iterator = value == null ? _.identity : lookupIterator(value);
-      each(obj, function(value, index) {
-        var key = iterator.call(context, value, index, obj);
-        behavior(result, key, value);
-      });
-      return result;
-    };
-  };
-
-  // Groups the object's values by a criterion. Pass either a string attribute
-  // to group by, or a function that returns the criterion.
-  _.groupBy = group(function(result, key, value) {
-    (_.has(result, key) ? result[key] : (result[key] = [])).push(value);
-  });
-
-  // Indexes the object's values by a criterion, similar to `groupBy`, but for
-  // when you know that your index values will be unique.
-  _.indexBy = group(function(result, key, value) {
-    result[key] = value;
-  });
-
-  // Counts instances of an object that group by a certain criterion. Pass
-  // either a string attribute to count by, or a function that returns the
-  // criterion.
-  _.countBy = group(function(result, key) {
-    _.has(result, key) ? result[key]++ : result[key] = 1;
-  });
-
-  // Use a comparator function to figure out the smallest index at which
-  // an object should be inserted so as to maintain order. Uses binary search.
-  _.sortedIndex = function(array, obj, iterator, context) {
-    iterator = iterator == null ? _.identity : lookupIterator(iterator);
-    var value = iterator.call(context, obj);
-    var low = 0, high = array.length;
-    while (low < high) {
-      var mid = (low + high) >>> 1;
-      iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;
-    }
-    return low;
-  };
-
-  // Safely create a real, live array from anything iterable.
-  _.toArray = function(obj) {
-    if (!obj) return [];
-    if (_.isArray(obj)) return slice.call(obj);
-    if (obj.length === +obj.length) return _.map(obj, _.identity);
-    return _.values(obj);
-  };
-
-  // Return the number of elements in an object.
-  _.size = function(obj) {
-    if (obj == null) return 0;
-    return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;
-  };
-
-  // Array Functions
-  // ---------------
-
-  // Get the first element of an array. Passing **n** will return the first N
-  // values in the array. Aliased as `head` and `take`. The **guard** check
-  // allows it to work with `_.map`.
-  _.first = _.head = _.take = function(array, n, guard) {
-    if (array == null) return void 0;
-    return (n == null) || guard ? array[0] : slice.call(array, 0, n);
-  };
-
-  // Returns everything but the last entry of the array. Especially useful on
-  // the arguments object. Passing **n** will return all the values in
-  // the array, excluding the last N. The **guard** check allows it to work with
-  // `_.map`.
-  _.initial = function(array, n, guard) {
-    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
-  };
-
-  // Get the last element of an array. Passing **n** will return the last N
-  // values in the array. The **guard** check allows it to work with `_.map`.
-  _.last = function(array, n, guard) {
-    if (array == null) return void 0;
-    if ((n == null) || guard) {
-      return array[array.length - 1];
-    } else {
-      return slice.call(array, Math.max(array.length - n, 0));
-    }
-  };
-
-  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
-  // Especially useful on the arguments object. Passing an **n** will return
-  // the rest N values in the array. The **guard**
-  // check allows it to work with `_.map`.
-  _.rest = _.tail = _.drop = function(array, n, guard) {
-    return slice.call(array, (n == null) || guard ? 1 : n);
-  };
-
-  // Trim out all falsy values from an array.
-  _.compact = function(array) {
-    return _.filter(array, _.identity);
-  };
-
-  // Internal implementation of a recursive `flatten` function.
-  var flatten = function(input, shallow, output) {
-    if (shallow && _.every(input, _.isArray)) {
-      return concat.apply(output, input);
-    }
-    each(input, function(value) {
-      if (_.isArray(value) || _.isArguments(value)) {
-        shallow ? push.apply(output, value) : flatten(value, shallow, output);
-      } else {
-        output.push(value);
-      }
-    });
-    return output;
-  };
-
-  // Flatten out an array, either recursively (by default), or just one level.
-  _.flatten = function(array, shallow) {
-    return flatten(array, shallow, []);
-  };
-
-  // Return a version of the array that does not contain the specified value(s).
-  _.without = function(array) {
-    return _.difference(array, slice.call(arguments, 1));
-  };
-
-  // Produce a duplicate-free version of the array. If the array has already
-  // been sorted, you have the option of using a faster algorithm.
-  // Aliased as `unique`.
-  _.uniq = _.unique = function(array, isSorted, iterator, context) {
-    if (_.isFunction(isSorted)) {
-      context = iterator;
-      iterator = isSorted;
-      isSorted = false;
-    }
-    var initial = iterator ? _.map(array, iterator, context) : array;
-    var results = [];
-    var seen = [];
-    each(initial, function(value, index) {
-      if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {
-        seen.push(value);
-        results.push(array[index]);
-      }
-    });
-    return results;
-  };
-
-  // Produce an array that contains the union: each distinct element from all of
-  // the passed-in arrays.
-  _.union = function() {
-    return _.uniq(_.flatten(arguments, true));
-  };
-
-  // Produce an array that contains every item shared between all the
-  // passed-in arrays.
-  _.intersection = function(array) {
-    var rest = slice.call(arguments, 1);
-    return _.filter(_.uniq(array), function(item) {
-      return _.every(rest, function(other) {
-        return _.indexOf(other, item) >= 0;
-      });
-    });
-  };
-
-  // Take the difference between one array and a number of other arrays.
-  // Only the elements present in just the first array will remain.
-  _.difference = function(array) {
-    var rest = concat.apply(ArrayProto, slice.call(arguments, 1));
-    return _.filter(array, function(value){ return !_.contains(rest, value); });
-  };
-
-  // Zip together multiple lists into a single array -- elements that share
-  // an index go together.
-  _.zip = function() {
-    var length = _.max(_.pluck(arguments, "length").concat(0));
-    var results = new Array(length);
-    for (var i = 0; i < length; i++) {
-      results[i] = _.pluck(arguments, '' + i);
-    }
-    return results;
-  };
-
-  // Converts lists into objects. Pass either a single array of `[key, value]`
-  // pairs, or two parallel arrays of the same length -- one of keys, and one of
-  // the corresponding values.
-  _.object = function(list, values) {
-    if (list == null) return {};
-    var result = {};
-    for (var i = 0, length = list.length; i < length; i++) {
-      if (values) {
-        result[list[i]] = values[i];
-      } else {
-        result[list[i][0]] = list[i][1];
-      }
-    }
-    return result;
-  };
-
-  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
-  // we need this function. Return the position of the first occurrence of an
-  // item in an array, or -1 if the item is not included in the array.
-  // Delegates to **ECMAScript 5**'s native `indexOf` if available.
-  // If the array is large and already in sort order, pass `true`
-  // for **isSorted** to use binary search.
-  _.indexOf = function(array, item, isSorted) {
-    if (array == null) return -1;
-    var i = 0, length = array.length;
-    if (isSorted) {
-      if (typeof isSorted == 'number') {
-        i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);
-      } else {
-        i = _.sortedIndex(array, item);
-        return array[i] === item ? i : -1;
-      }
-    }
-    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
-    for (; i < length; i++) if (array[i] === item) return i;
-    return -1;
-  };
-
-  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
-  _.lastIndexOf = function(array, item, from) {
-    if (array == null) return -1;
-    var hasIndex = from != null;
-    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {
-      return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);
-    }
-    var i = (hasIndex ? from : array.length);
-    while (i--) if (array[i] === item) return i;
-    return -1;
-  };
-
-  // Generate an integer Array containing an arithmetic progression. A port of
-  // the native Python `range()` function. See
-  // [the Python documentation](http://docs.python.org/library/functions.html#range).
-  _.range = function(start, stop, step) {
-    if (arguments.length <= 1) {
-      stop = start || 0;
-      start = 0;
-    }
-    step = arguments[2] || 1;
-
-    var length = Math.max(Math.ceil((stop - start) / step), 0);
-    var idx = 0;
-    var range = new Array(length);
-
-    while(idx < length) {
-      range[idx++] = start;
-      start += step;
-    }
-
-    return range;
-  };
-
-  // Function (ahem) Functions
-  // ------------------
-
-  // Reusable constructor function for prototype setting.
-  var ctor = function(){};
-
-  // Create a function bound to a given object (assigning `this`, and arguments,
-  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
-  // available.
-  _.bind = function(func, context) {
-    var args, bound;
-    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
-    if (!_.isFunction(func)) throw new TypeError;
-    args = slice.call(arguments, 2);
-    return bound = function() {
-      if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
-      ctor.prototype = func.prototype;
-      var self = new ctor;
-      ctor.prototype = null;
-      var result = func.apply(self, args.concat(slice.call(arguments)));
-      if (Object(result) === result) return result;
-      return self;
-    };
-  };
-
-  // Partially apply a function by creating a version that has had some of its
-  // arguments pre-filled, without changing its dynamic `this` context.
-  _.partial = function(func) {
-    var args = slice.call(arguments, 1);
-    return function() {
-      return func.apply(this, args.concat(slice.call(arguments)));
-    };
-  };
-
-  // Bind all of an object's methods to that object. Useful for ensuring that
-  // all callbacks defined on an object belong to it.
-  _.bindAll = function(obj) {
-    var funcs = slice.call(arguments, 1);
-    if (funcs.length === 0) throw new Error("bindAll must be passed function names");
-    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
-    return obj;
-  };
-
-  // Memoize an expensive function by storing its results.
-  _.memoize = function(func, hasher) {
-    var memo = {};
-    hasher || (hasher = _.identity);
-    return function() {
-      var key = hasher.apply(this, arguments);
-      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
-    };
-  };
-
-  // Delays a function for the given number of milliseconds, and then calls
-  // it with the arguments supplied.
-  _.delay = function(func, wait) {
-    var args = slice.call(arguments, 2);
-    return setTimeout(function(){ return func.apply(null, args); }, wait);
-  };
-
-  // Defers a function, scheduling it to run after the current call stack has
-  // cleared.
-  _.defer = function(func) {
-    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
-  };
-
-  // Returns a function, that, when invoked, will only be triggered at most once
-  // during a given window of time. Normally, the throttled function will run
-  // as much as it can, without ever going more than once per `wait` duration;
-  // but if you'd like to disable the execution on the leading edge, pass
-  // `{leading: false}`. To disable execution on the trailing edge, ditto.
-  _.throttle = function(func, wait, options) {
-    var context, args, result;
-    var timeout = null;
-    var previous = 0;
-    options || (options = {});
-    var later = function() {
-      previous = options.leading === false ? 0 : new Date;
-      timeout = null;
-      result = func.apply(context, args);
-    };
-    return function() {
-      var now = new Date;
-      if (!previous && options.leading === false) previous = now;
-      var remaining = wait - (now - previous);
-      context = this;
-      args = arguments;
-      if (remaining <= 0) {
-        clearTimeout(timeout);
-        timeout = null;
-        previous = now;
-        result = func.apply(context, args);
-      } else if (!timeout && options.trailing !== false) {
-        timeout = setTimeout(later, remaining);
-      }
-      return result;
-    };
-  };
-
-  // Returns a function, that, as long as it continues to be invoked, will not
-  // be triggered. The function will be called after it stops being called for
-  // N milliseconds. If `immediate` is passed, trigger the function on the
-  // leading edge, instead of the trailing.
-  _.debounce = function(func, wait, immediate) {
-    var timeout, args, context, timestamp, result;
-    return function() {
-      context = this;
-      args = arguments;
-      timestamp = new Date();
-      var later = function() {
-        var last = (new Date()) - timestamp;
-        if (last < wait) {
-          timeout = setTimeout(later, wait - last);
-        } else {
-          timeout = null;
-          if (!immediate) result = func.apply(context, args);
-        }
-      };
-      var callNow = immediate && !timeout;
-      if (!timeout) {
-        timeout = setTimeout(later, wait);
-      }
-      if (callNow) result = func.apply(context, args);
-      return result;
-    };
-  };
-
-  // Returns a function that will be executed at most one time, no matter how
-  // often you call it. Useful for lazy initialization.
-  _.once = function(func) {
-    var ran = false, memo;
-    return function() {
-      if (ran) return memo;
-      ran = true;
-      memo = func.apply(this, arguments);
-      func = null;
-      return memo;
-    };
-  };
-
-  // Returns the first function passed as an argument to the second,
-  // allowing you to adjust arguments, run code before and after, and
-  // conditionally execute the original function.
-  _.wrap = function(func, wrapper) {
-    return function() {
-      var args = [func];
-      push.apply(args, arguments);
-      return wrapper.apply(this, args);
-    };
-  };
-
-  // Returns a function that is the composition of a list of functions, each
-  // consuming the return value of the function that follows.
-  _.compose = function() {
-    var funcs = arguments;
-    return function() {
-      var args = arguments;
-      for (var i = funcs.length - 1; i >= 0; i--) {
-        args = [funcs[i].apply(this, args)];
-      }
-      return args[0];
-    };
-  };
-
-  // Returns a function that will only be executed after being called N times.
-  _.after = function(times, func) {
-    return function() {
-      if (--times < 1) {
-        return func.apply(this, arguments);
-      }
-    };
-  };
-
-  // Object Functions
-  // ----------------
-
-  // Retrieve the names of an object's properties.
-  // Delegates to **ECMAScript 5**'s native `Object.keys`
-  _.keys = nativeKeys || function(obj) {
-    if (obj !== Object(obj)) throw new TypeError('Invalid object');
-    var keys = [];
-    for (var key in obj) if (_.has(obj, key)) keys.push(key);
-    return keys;
-  };
-
-  // Retrieve the values of an object's properties.
-  _.values = function(obj) {
-    var keys = _.keys(obj);
-    var length = keys.length;
-    var values = new Array(length);
-    for (var i = 0; i < length; i++) {
-      values[i] = obj[keys[i]];
-    }
-    return values;
-  };
-
-  // Convert an object into a list of `[key, value]` pairs.
-  _.pairs = function(obj) {
-    var keys = _.keys(obj);
-    var length = keys.length;
-    var pairs = new Array(length);
-    for (var i = 0; i < length; i++) {
-      pairs[i] = [keys[i], obj[keys[i]]];
-    }
-    return pairs;
-  };
-
-  // Invert the keys and values of an object. The values must be serializable.
-  _.invert = function(obj) {
-    var result = {};
-    var keys = _.keys(obj);
-    for (var i = 0, length = keys.length; i < length; i++) {
-      result[obj[keys[i]]] = keys[i];
-    }
-    return result;
-  };
-
-  // Return a sorted list of the function names available on the object.
-  // Aliased as `methods`
-  _.functions = _.methods = function(obj) {
-    var names = [];
-    for (var key in obj) {
-      if (_.isFunction(obj[key])) names.push(key);
-    }
-    return names.sort();
-  };
-
-  // Extend a given object with all the properties in passed-in object(s).
-  _.extend = function(obj) {
-    each(slice.call(arguments, 1), function(source) {
-      if (source) {
-        for (var prop in source) {
-          obj[prop] = source[prop];
-        }
-      }
-    });
-    return obj;
-  };
-
-  // Return a copy of the object only containing the whitelisted properties.
-  _.pick = function(obj) {
-    var copy = {};
-    var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
-    each(keys, function(key) {
-      if (key in obj) copy[key] = obj[key];
-    });
-    return copy;
-  };
-
-   // Return a copy of the object without the blacklisted properties.
-  _.omit = function(obj) {
-    var copy = {};
-    var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
-    for (var key in obj) {
-      if (!_.contains(keys, key)) copy[key] = obj[key];
-    }
-    return copy;
-  };
-
-  // Fill in a given object with default properties.
-  _.defaults = function(obj) {
-    each(slice.call(arguments, 1), function(source) {
-      if (source) {
-        for (var prop in source) {
-          if (obj[prop] === void 0) obj[prop] = source[prop];
-        }
-      }
-    });
-    return obj;
-  };
-
-  // Create a (shallow-cloned) duplicate of an object.
-  _.clone = function(obj) {
-    if (!_.isObject(obj)) return obj;
-    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
-  };
-
-  // Invokes interceptor with the obj, and then returns obj.
-  // The primary purpose of this method is to "tap into" a method chain, in
-  // order to perform operations on intermediate results within the chain.
-  _.tap = function(obj, interceptor) {
-    interceptor(obj);
-    return obj;
-  };
-
-  // Internal recursive comparison function for `isEqual`.
-  var eq = function(a, b, aStack, bStack) {
-    // Identical objects are equal. `0 === -0`, but they aren't identical.
-    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
-    if (a === b) return a !== 0 || 1 / a == 1 / b;
-    // A strict comparison is necessary because `null == undefined`.
-    if (a == null || b == null) return a === b;
-    // Unwrap any wrapped objects.
-    if (a instanceof _) a = a._wrapped;
-    if (b instanceof _) b = b._wrapped;
-    // Compare `[[Class]]` names.
-    var className = toString.call(a);
-    if (className != toString.call(b)) return false;
-    switch (className) {
-      // Strings, numbers, dates, and booleans are compared by value.
-      case '[object String]':
-        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
-        // equivalent to `new String("5")`.
-        return a == String(b);
-      case '[object Number]':
-        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
-        // other numeric values.
-        return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
-      case '[object Date]':
-      case '[object Boolean]':
-        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
-        // millisecond representations. Note that invalid dates with millisecond representations
-        // of `NaN` are not equivalent.
-        return +a == +b;
-      // RegExps are compared by their source patterns and flags.
-      case '[object RegExp]':
-        return a.source == b.source &&
-               a.global == b.global &&
-               a.multiline == b.multiline &&
-               a.ignoreCase == b.ignoreCase;
-    }
-    if (typeof a != 'object' || typeof b != 'object') return false;
-    // Assume equality for cyclic structures. The algorithm for detecting cyclic
-    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
-    var length = aStack.length;
-    while (length--) {
-      // Linear search. Performance is inversely proportional to the number of
-      // unique nested structures.
-      if (aStack[length] == a) return bStack[length] == b;
-    }
-    // Objects with different constructors are not equivalent, but `Object`s
-    // from different frames are.
-    var aCtor = a.constructor, bCtor = b.constructor;
-    if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
-                             _.isFunction(bCtor) && (bCtor instanceof bCtor))) {
-      return false;
-    }
-    // Add the first object to the stack of traversed objects.
-    aStack.push(a);
-    bStack.push(b);
-    var size = 0, result = true;
-    // Recursively compare objects and arrays.
-    if (className == '[object Array]') {
-      // Compare array lengths to determine if a deep comparison is necessary.
-      size = a.length;
-      result = size == b.length;
-      if (result) {
-        // Deep compare the contents, ignoring non-numeric properties.
-        while (size--) {
-          if (!(result = eq(a[size], b[size], aStack, bStack))) break;
-        }
-      }
-    } else {
-      // Deep compare objects.
-      for (var key in a) {
-        if (_.has(a, key)) {
-          // Count the expected number of properties.
-          size++;
-          // Deep compare each member.
-          if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
-        }
-      }
-      // Ensure that both objects contain the same number of properties.
-      if (result) {
-        for (key in b) {
-          if (_.has(b, key) && !(size--)) break;
-        }
-        result = !size;
-      }
-    }
-    // Remove the first object from the stack of traversed objects.
-    aStack.pop();
-    bStack.pop();
-    return result;
-  };
-
-  // Perform a deep comparison to check if two objects are equal.
-  _.isEqual = function(a, b) {
-    return eq(a, b, [], []);
-  };
-
-  // Is a given array, string, or object empty?
-  // An "empty" object has no enumerable own-properties.
-  _.isEmpty = function(obj) {
-    if (obj == null) return true;
-    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
-    for (var key in obj) if (_.has(obj, key)) return false;
-    return true;
-  };
-
-  // Is a given value a DOM element?
-  _.isElement = function(obj) {
-    return !!(obj && obj.nodeType === 1);
-  };
-
-  // Is a given value an array?
-  // Delegates to ECMA5's native Array.isArray
-  _.isArray = nativeIsArray || function(obj) {
-    return toString.call(obj) == '[object Array]';
-  };
-
-  // Is a given variable an object?
-  _.isObject = function(obj) {
-    return obj === Object(obj);
-  };
-
-  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.
-  each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
-    _['is' + name] = function(obj) {
-      return toString.call(obj) == '[object ' + name + ']';
-    };
-  });
-
-  // Define a fallback version of the method in browsers (ahem, IE), where
-  // there isn't any inspectable "Arguments" type.
-  if (!_.isArguments(arguments)) {
-    _.isArguments = function(obj) {
-      return !!(obj && _.has(obj, 'callee'));
-    };
-  }
-
-  // Optimize `isFunction` if appropriate.
-  if (typeof (/./) !== 'function') {
-    _.isFunction = function(obj) {
-      return typeof obj === 'function';
-    };
-  }
-
-  // Is a given object a finite number?
-  _.isFinite = function(obj) {
-    return isFinite(obj) && !isNaN(parseFloat(obj));
-  };
-
-  // Is the given value `NaN`? (NaN is the only number which does not equal itself).
-  _.isNaN = function(obj) {
-    return _.isNumber(obj) && obj != +obj;
-  };
-
-  // Is a given value a boolean?
-  _.isBoolean = function(obj) {
-    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
-  };
-
-  // Is a given value equal to null?
-  _.isNull = function(obj) {
-    return obj === null;
-  };
-
-  // Is a given variable undefined?
-  _.isUndefined = function(obj) {
-    return obj === void 0;
-  };
-
-  // Shortcut function for checking if an object has a given property directly
-  // on itself (in other words, not on a prototype).
-  _.has = function(obj, key) {
-    return hasOwnProperty.call(obj, key);
-  };
-
-  // Utility Functions
-  // -----------------
-
-  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
-  // previous owner. Returns a reference to the Underscore object.
-  _.noConflict = function() {
-    root._ = previousUnderscore;
-    return this;
-  };
-
-  // Keep the identity function around for default iterators.
-  _.identity = function(value) {
-    return value;
-  };
-
-  // Run a function **n** times.
-  _.times = function(n, iterator, context) {
-    var accum = Array(Math.max(0, n));
-    for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
-    return accum;
-  };
-
-  // Return a random integer between min and max (inclusive).
-  _.random = function(min, max) {
-    if (max == null) {
-      max = min;
-      min = 0;
-    }
-    return min + Math.floor(Math.random() * (max - min + 1));
-  };
-
-  // List of HTML entities for escaping.
-  var entityMap = {
-    escape: {
-      '&': '&amp;',
-      '<': '&lt;',
-      '>': '&gt;',
-      '"': '&quot;',
-      "'": '&#x27;'
-    }
-  };
-  entityMap.unescape = _.invert(entityMap.escape);
-
-  // Regexes containing the keys and values listed immediately above.
-  var entityRegexes = {
-    escape:   new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),
-    unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')
-  };
-
-  // Functions for escaping and unescaping strings to/from HTML interpolation.
-  _.each(['escape', 'unescape'], function(method) {
-    _[method] = function(string) {
-      if (string == null) return '';
-      return ('' + string).replace(entityRegexes[method], function(match) {
-        return entityMap[method][match];
-      });
-    };
-  });
-
-  // If the value of the named `property` is a function then invoke it with the
-  // `object` as context; otherwise, return it.
-  _.result = function(object, property) {
-    if (object == null) return void 0;
-    var value = object[property];
-    return _.isFunction(value) ? value.call(object) : value;
-  };
-
-  // Add your own custom functions to the Underscore object.
-  _.mixin = function(obj) {
-    each(_.functions(obj), function(name) {
-      var func = _[name] = obj[name];
-      _.prototype[name] = function() {
-        var args = [this._wrapped];
-        push.apply(args, arguments);
-        return result.call(this, func.apply(_, args));
-      };
-    });
-  };
-
-  // Generate a unique integer id (unique within the entire client session).
-  // Useful for temporary DOM ids.
-  var idCounter = 0;
-  _.uniqueId = function(prefix) {
-    var id = ++idCounter + '';
-    return prefix ? prefix + id : id;
-  };
-
-  // By default, Underscore uses ERB-style template delimiters, change the
-  // following template settings to use alternative delimiters.
-  _.templateSettings = {
-    evaluate    : /<%([\s\S]+?)%>/g,
-    interpolate : /<%=([\s\S]+?)%>/g,
-    escape      : /<%-([\s\S]+?)%>/g
-  };
-
-  // When customizing `templateSettings`, if you don't want to define an
-  // interpolation, evaluation or escaping regex, we need one that is
-  // guaranteed not to match.
-  var noMatch = /(.)^/;
-
-  // Certain characters need to be escaped so that they can be put into a
-  // string literal.
-  var escapes = {
-    "'":      "'",
-    '\\':     '\\',
-    '\r':     'r',
-    '\n':     'n',
-    '\t':     't',
-    '\u2028': 'u2028',
-    '\u2029': 'u2029'
-  };
-
-  var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;
-
-  // JavaScript micro-templating, similar to John Resig's implementation.
-  // Underscore templating handles arbitrary delimiters, preserves whitespace,
-  // and correctly escapes quotes within interpolated code.
-  _.template = function(text, data, settings) {
-    var render;
-    settings = _.defaults({}, settings, _.templateSettings);
-
-    // Combine delimiters into one regular expression via alternation.
-    var matcher = new RegExp([
-      (settings.escape || noMatch).source,
-      (settings.interpolate || noMatch).source,
-      (settings.evaluate || noMatch).source
-    ].join('|') + '|$', 'g');
-
-    // Compile the template source, escaping string literals appropriately.
-    var index = 0;
-    var source = "__p+='";
-    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
-      source += text.slice(index, offset)
-        .replace(escaper, function(match) { return '\\' + escapes[match]; });
-
-      if (escape) {
-        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
-      }
-      if (interpolate) {
-        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
-      }
-      if (evaluate) {
-        source += "';\n" + evaluate + "\n__p+='";
-      }
-      index = offset + match.length;
-      return match;
-    });
-    source += "';\n";
-
-    // If a variable is not specified, place data values in local scope.
-    if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
-
-    source = "var __t,__p='',__j=Array.prototype.join," +
-      "print=function(){__p+=__j.call(arguments,'');};\n" +
-      source + "return __p;\n";
-
-    try {
-      render = new Function(settings.variable || 'obj', '_', source);
-    } catch (e) {
-      e.source = source;
-      throw e;
-    }
-
-    if (data) return render(data, _);
-    var template = function(data) {
-      return render.call(this, data, _);
-    };
-
-    // Provide the compiled function source as a convenience for precompilation.
-    template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}';
-
-    return template;
-  };
-
-  // Add a "chain" function, which will delegate to the wrapper.
-  _.chain = function(obj) {
-    return _(obj).chain();
-  };
-
-  // OOP
-  // ---------------
-  // If Underscore is called as a function, it returns a wrapped object that
-  // can be used OO-style. This wrapper holds altered versions of all the
-  // underscore functions. Wrapped objects may be chained.
-
-  // Helper function to continue chaining intermediate results.
-  var result = function(obj) {
-    return this._chain ? _(obj).chain() : obj;
-  };
-
-  // Add all of the Underscore functions to the wrapper object.
-  _.mixin(_);
-
-  // Add all mutator Array functions to the wrapper.
-  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
-    var method = ArrayProto[name];
-    _.prototype[name] = function() {
-      var obj = this._wrapped;
-      method.apply(obj, arguments);
-      if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];
-      return result.call(this, obj);
-    };
-  });
-
-  // Add all accessor Array functions to the wrapper.
-  each(['concat', 'join', 'slice'], function(name) {
-    var method = ArrayProto[name];
-    _.prototype[name] = function() {
-      return result.call(this, method.apply(this._wrapped, arguments));
-    };
-  });
-
-  _.extend(_.prototype, {
-
-    // Start chaining a wrapped Underscore object.
-    chain: function() {
-      this._chain = true;
-      return this;
-    },
-
-    // Extracts the result from a wrapped and chained object.
-    value: function() {
-      return this._wrapped;
-    }
-
-  });
-
-}).call(this);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/a8965336/public/javascripts/varList.js
----------------------------------------------------------------------
diff --git a/public/javascripts/varList.js b/public/javascripts/varList.js
deleted file mode 100644
index efa8b4a..0000000
--- a/public/javascripts/varList.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// shortName: [longName, groupName, dimension, timeRange],
-var varList = {
-"pr":       ["Precipitation Flux",                                "", 2, ""],    
-"clt":      ["Total Cloud Fraction",                              "", 2, ""],      
-"ts":       ["Surface Temperature",                               "", 2, ""],     
-"tos":      ["Sea Surface Temperature",                           "", 2, ""],         
-"uas":      ["Eastward Near-Surface Wind",                        "", 2, ""],            
-"vas":      ["Northward Near-Surface Wind",                       "", 2, ""],             
-"sfcWind":  ["Near-Surface Wind Speed",                           "", 2, ""],         
-"zos":      ["Sea Surface Height",                                "", 2, ""],    
-"lai":      ["Leaf Area Index",                                   "", 2, ""], 
-"zl":       ["Equivalent Water Height Over Land",                 "", 2, ""],                   
-"zo":       ["Equivalent Water Height Over Ocean",                "", 2, ""],                    
-"ohc700":   ["Ocean Heat Content Anomaly within 700 m Depth",     "", 2, ""],                
-"ohc2000":  ["Ocean Heat Content Anomaly within 2000 m Depth",    "", 2, ""],                
-"rlds":     ["Surface Downwelling Longwave Radiation",            "", 2, ""],                        
-"rsds":     ["Surface Downwelling Shortwave Radiation",           "", 2, ""],                         
-"rlus":     ["Surface Upwelling Longwave Radiation",              "", 2, ""],                      
-"rsus":     ["Surface Upwelling Shortwave Radiation",             "", 2, ""],                       
-"rldscs":   ["Surface Downwelling Clear-Sky Longwave Radiation",  "", 2, ""],             
-"rsdscs":   ["Surface Downwelling Clear-Sky Shortwave Radiation", "", 2, ""],                   
-"rsuscs":   ["Surface Upwelling Clear-Sky Shortwave Radiation",   "", 2, ""],                
-"rsdt":     ["TOA Incident Shortwave Radiation",                  "", 2, ""],                  
-"rlut":     ["TOA Outgoing Longwave Radiation",                   "", 2, ""],                 
-"rsut":     ["TOA Outgoing Shortwave Radiation",                  "", 2, ""],                  
-"rlutcs":   ["TOA Outgoing Clear-Sky Longwave Radiation",         "", 2, ""],       
-"rsutcs":   ["TOA Outgoing Clear-Sky Shortwave Radiation",        "", 2, ""],              
-"ta":       ["Air Temperature",                                   "", 3, ""], 
-"hus":      ["Specific Humidity",                                 "", 3, ""],   
-"cli":      ["Cloud Ice Water Content",                           "", 3, ""],         
-"clw":      ["Cloud Liquid Water Content",                        "", 3, ""],            
-"ot":       ["Ocean Temperature",                                 "", 3, ""],   
-"os":       ["Ocean Salinity",                                    "", 3, ""],
-"wap":      ["Vertical Wind Velocity",                            "", 3, ""],        
-"hur":      ["Relative Humidity",                                 "", 3, ""],   
-};

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/a8965336/public/javascripts/visualsearch.js
----------------------------------------------------------------------
diff --git a/public/javascripts/visualsearch.js b/public/javascripts/visualsearch.js
deleted file mode 100644
index 33bd88c..0000000
--- a/public/javascripts/visualsearch.js
+++ /dev/null
@@ -1,36 +0,0 @@
-
-(function(){var $=jQuery;if(!window.VS)window.VS={};if(!VS.app)VS.app={};if(!VS.ui)VS.ui={};if(!VS.model)VS.model={};if(!VS.utils)VS.utils={};VS.VERSION='0.5.0';VS.VisualSearch=function(options){var defaults={container:'',query:'',autosearch:true,unquotable:[],remainder:'text',showFacets:true,readOnly:false,callbacks:{search:$.noop,focus:$.noop,blur:$.noop,facetMatches:$.noop,valueMatches:$.noop,clearSearch:$.noop,removedFacet:$.noop}};this.options=_.extend({},defaults,options);this.options.callbacks=_.extend({},defaults.callbacks,options.callbacks);VS.app.hotkeys.initialize();this.searchQuery=new VS.model.SearchQuery();this.searchBox=new VS.ui.SearchBox({app:this,showFacets:this.options.showFacets});if(options.container){var searchBox=this.searchBox.render().el;$(this.options.container).html(searchBox);}
-this.searchBox.value(this.options.query||'');$(window).bind('unload',function(e){});return this;};VS.init=function(options){return new VS.VisualSearch(options);};})();(function(){var $=jQuery;VS.ui.SearchBox=Backbone.View.extend({id:'search',events:{'click .VS-cancel-search-box':'clearSearch','mousedown .VS-search-box':'maybeFocusSearch','dblclick .VS-search-box':'highlightSearch','click .VS-search-box':'maybeTripleClick'},initialize:function(options){this.options=_.extend({},this.options,options);this.app=this.options.app;this.flags={allSelected:false};this.facetViews=[];this.inputViews=[];_.bindAll(this,'renderFacets','_maybeDisableFacets','disableFacets','deselectAllFacets','addedFacet','removedFacet','changedFacet');this.app.searchQuery.bind('reset',this.renderFacets).bind('add',this.addedFacet).bind('remove',this.removedFacet).bind('change',this.changedFacet);$(document).bind('keydown',this._maybeDisableFacets);},render:function(){$(this.el).append(JST['search_box']({readOnly:t
 his.app.options.readOnly}));$(document.body).setMode('no','search');return this;},value:function(query){if(query==null)return this.serialize();return this.setQuery(query);},serialize:function(){var query=[];var inputViewsCount=this.inputViews.length;this.app.searchQuery.each(_.bind(function(facet,i){query.push(this.inputViews[i].value());query.push(facet.serialize());},this));if(inputViewsCount){query.push(this.inputViews[inputViewsCount-1].value());}
-return _.compact(query).join(' ');},selected:function(){return _.select(this.facetViews,function(view){return view.modes.editing=='is'||view.modes.selected=='is';});},selectedModels:function(){return _.pluck(this.selected(),'model');},setQuery:function(query){this.currentQuery=query;VS.app.SearchParser.parse(this.app,query);},viewPosition:function(view){var views=view.type=='facet'?this.facetViews:this.inputViews;var position=_.indexOf(views,view);if(position==-1)position=0;return position;},searchEvent:function(e){var query=this.value();this.focusSearch(e);this.value(query);this.app.options.callbacks.search(query,this.app.searchQuery);},addFacet:function(category,initialQuery,position){category=VS.utils.inflector.trim(category);initialQuery=VS.utils.inflector.trim(initialQuery||'');if(!category)return;var model=new VS.model.SearchFacet({category:category,value:initialQuery||'',app:this.app});this.app.searchQuery.add(model,{at:position});},addedFacet:function(model){this.renderFacet
 s();var facetView=_.detect(this.facetViews,function(view){if(view.model==model)return true;});_.defer(function(){facetView.enableEdit();});},changedFacet:function(){this.renderFacets();},removedFacet:function(facet,query,options){this.app.options.callbacks.removedFacet(facet,query,options);},renderFacets:function(){this.facetViews=[];this.inputViews=[];this.$('.VS-search-inner').empty();this.app.searchQuery.each(_.bind(this.renderFacet,this));this.renderSearchInput();this.renderPlaceholder();},renderFacet:function(facet,position){var view=new VS.ui.SearchFacet({app:this.app,model:facet,order:position});this.renderSearchInput();this.facetViews.push(view);this.$('.VS-search-inner').children().eq(position*2).after(view.render().el);view.calculateSize();_.defer(_.bind(view.calculateSize,view));return view;},renderSearchInput:function(){var input=new VS.ui.SearchInput({position:this.inputViews.length,app:this.app,showFacets:this.options.showFacets});this.$('.VS-search-inner').append(inpu
 t.render().el);this.inputViews.push(input);},renderPlaceholder:function(){var $placeholder=this.$('.VS-placeholder');if(this.app.searchQuery.length){$placeholder.addClass("VS-hidden");}else{$placeholder.removeClass("VS-hidden").text(this.app.options.placeholder);}},clearSearch:function(e){if(this.app.options.readOnly)return;var actualClearSearch=_.bind(function(){this.disableFacets();this.value('');this.flags.allSelected=false;this.searchEvent(e);this.focusSearch(e);},this);if(this.app.options.callbacks.clearSearch!=$.noop){this.app.options.callbacks.clearSearch(actualClearSearch);}else{actualClearSearch();}},selectAllFacets:function(){this.flags.allSelected=true;$(document).one('click.selectAllFacets',this.deselectAllFacets);_.each(this.facetViews,function(facetView,i){facetView.selectFacet();});_.each(this.inputViews,function(inputView,i){inputView.selectText();});},allSelected:function(deselect){if(deselect)this.flags.allSelected=false;return this.flags.allSelected;},deselectAllF
 acets:function(e){this.disableFacets();if(this.$(e.target).is('.category,input')){var el=$(e.target).closest('.search_facet,.search_input');var view=_.detect(this.facetViews.concat(this.inputViews),function(v){return v.el==el[0];});if(view.type=='facet'){view.selectFacet();}else if(view.type=='input'){_.defer(function(){view.enableEdit(true);});}}},disableFacets:function(keepView){_.each(this.inputViews,function(view){if(view&&view!=keepView&&(view.modes.editing=='is'||view.modes.selected=='is')){view.disableEdit();}});_.each(this.facetViews,function(view){if(view&&view!=keepView&&(view.modes.editing=='is'||view.modes.selected=='is')){view.disableEdit();view.deselectFacet();}});this.flags.allSelected=false;this.removeFocus();$(document).unbind('click.selectAllFacets');},resizeFacets:function(view){_.each(this.facetViews,function(facetView,i){if(!view||facetView==view){facetView.resize();}});},_maybeDisableFacets:function(e){if(this.flags.allSelected&&VS.app.hotkeys.key(e)=='backspac
 e'){e.preventDefault();this.clearSearch(e);return false;}else if(this.flags.allSelected&&VS.app.hotkeys.printable(e)){this.clearSearch(e);}},focusNextFacet:function(currentView,direction,options){options=options||{};var viewCount=this.facetViews.length;var viewPosition=options.viewPosition||this.viewPosition(currentView);if(!options.skipToFacet){if(currentView.type=='text'&&direction>0)direction-=1;if(currentView.type=='facet'&&direction<0)direction+=1;}else if(options.skipToFacet&&currentView.type=='text'&&viewCount==viewPosition&&direction>=0){return false;}
-var view,next=Math.min(viewCount,viewPosition+direction);if(currentView.type=='text'){if(next>=0&&next<viewCount){view=this.facetViews[next];}else if(next==viewCount){view=this.inputViews[this.inputViews.length-1];}
-if(view&&options.selectFacet&&view.type=='facet'){view.selectFacet();}else if(view){view.enableEdit();view.setCursorAtEnd(direction||options.startAtEnd);}}else if(currentView.type=='facet'){if(options.skipToFacet){if(next>=viewCount||next<0){view=_.last(this.inputViews);view.enableEdit();}else{view=this.facetViews[next];view.enableEdit();view.setCursorAtEnd(direction||options.startAtEnd);}}else{view=this.inputViews[next];view.enableEdit();}}
-if(options.selectText)view.selectText();this.resizeFacets();return true;},maybeFocusSearch:function(e){if(this.app.options.readOnly)return;if($(e.target).is('.VS-search-box')||$(e.target).is('.VS-search-inner')||e.type=='keydown'){this.focusSearch(e);}},focusSearch:function(e,selectText){if(this.app.options.readOnly)return;var view=this.inputViews[this.inputViews.length-1];view.enableEdit(selectText);if(!selectText)view.setCursorAtEnd(-1);if(e.type=='keydown'){view.keydown(e);view.box.trigger('keydown');}
-_.defer(_.bind(function(){if(!this.$('input:focus').length){view.enableEdit(selectText);}},this));},highlightSearch:function(e){if(this.app.options.readOnly)return;if($(e.target).is('.VS-search-box')||$(e.target).is('.VS-search-inner')||e.type=='keydown'){var lastinput=this.inputViews[this.inputViews.length-1];lastinput.startTripleClickTimer();this.focusSearch(e,true);}},maybeTripleClick:function(e){var lastinput=this.inputViews[this.inputViews.length-1];return lastinput.maybeTripleClick(e);},addFocus:function(){if(this.app.options.readOnly)return;this.app.options.callbacks.focus();this.$('.VS-search-box').addClass('VS-focus');},removeFocus:function(){this.app.options.callbacks.blur();var focus=_.any(this.facetViews.concat(this.inputViews),function(view){return view.isFocused();});if(!focus)this.$('.VS-search-box').removeClass('VS-focus');},showFacetCategoryMenu:function(e){e.preventDefault();e.stopPropagation();if(this.facetCategoryMenu&&this.facetCategoryMenu.modes.open=='is'){ret
 urn this.facetCategoryMenu.close();}
-var items=[{title:'Account',onClick:_.bind(this.addFacet,this,'account','')},{title:'Project',onClick:_.bind(this.addFacet,this,'project','')},{title:'Filter',onClick:_.bind(this.addFacet,this,'filter','')},{title:'Access',onClick:_.bind(this.addFacet,this,'access','')}];var menu=this.facetCategoryMenu||(this.facetCategoryMenu=new dc.ui.Menu({items:items,standalone:true}));this.$('.VS-icon-search').after(menu.render().open().content);return false;}});})();(function(){var $=jQuery;VS.ui.SearchFacet=Backbone.View.extend({type:'facet',className:'search_facet',events:{'click .category':'selectFacet','keydown input':'keydown','mousedown input':'enableEdit','mouseover .VS-icon-cancel':'showDelete','mouseout .VS-icon-cancel':'hideDelete','click .VS-icon-cancel':'remove'},initialize:function(options){this.options=_.extend({},this.options,options);this.flags={canClose:false};_.bindAll(this,'set','keydown','deselectFacet','deferDisableEdit');this.app=this.options.app;},render:function(){$(thi
 s.el).html(JST['search_facet']({model:this.model,readOnly:this.app.options.readOnly}));this.setMode('not','editing');this.setMode('not','selected');this.box=this.$('input');this.box.val(this.model.label());this.box.bind('blur',this.deferDisableEdit);this.box.bind('input propertychange',this.keydown);this.setupAutocomplete();return this;},calculateSize:function(){this.box.autoGrowInput();this.box.unbind('updated.autogrow');this.box.bind('updated.autogrow',_.bind(this.moveAutocomplete,this));},resize:function(e){this.box.trigger('resize.autogrow',e);},setupAutocomplete:function(){this.box.autocomplete({source:_.bind(this.autocompleteValues,this),minLength:0,delay:0,autoFocus:true,position:{offset:"0 5"},create:_.bind(function(e,ui){$(this.el).find('.ui-autocomplete-input').css('z-index','auto');},this),select:_.bind(function(e,ui){e.preventDefault();var originalValue=this.model.get('value');this.set(ui.item.value);if(originalValue!=ui.item.value||this.box.val()!=ui.item.value){if(this
 .app.options.autosearch){this.search(e);}else{this.app.searchBox.renderFacets();this.app.searchBox.focusNextFacet(this,1,{viewPosition:this.options.order});}}
-return false;},this),open:_.bind(function(e,ui){var box=this.box;this.box.autocomplete('widget').find('.ui-menu-item').each(function(){var $value=$(this),autoCompleteData=$value.data('item.autocomplete')||$value.data('ui-autocomplete-item');if(autoCompleteData['value']==box.val()&&box.data('ui-autocomplete').menu.activate){box.data('ui-autocomplete').menu.activate(new $.Event("mouseover"),$value);}});},this)});this.box.autocomplete('widget').addClass('VS-interface');},moveAutocomplete:function(){var autocomplete=this.box.data('ui-autocomplete');if(autocomplete){autocomplete.menu.element.position({my:"left top",at:"left bottom",of:this.box.data('ui-autocomplete').element,collision:"flip",offset:"0 5"});}},searchAutocomplete:function(e){var autocomplete=this.box.data('ui-autocomplete');if(autocomplete){var menu=autocomplete.menu.element;autocomplete.search();menu.outerWidth(Math.max(menu.width('').outerWidth(),autocomplete.element.outerWidth()));}},closeAutocomplete:function(){var aut
 ocomplete=this.box.data('ui-autocomplete');if(autocomplete)autocomplete.close();},autocompleteValues:function(req,resp){var category=this.model.get('category');var value=this.model.get('value');var searchTerm=req.term;this.app.options.callbacks.valueMatches(category,searchTerm,function(matches,options){options=options||{};matches=matches||[];if(searchTerm&&value!=searchTerm){if(options.preserveMatches){resp(matches);}else{var re=VS.utils.inflector.escapeRegExp(searchTerm||'');var matcher=new RegExp('\\b'+re,'i');matches=$.grep(matches,function(item){return matcher.test(item)||matcher.test(item.value)||matcher.test(item.label);});}}
-if(options.preserveOrder){resp(matches);}else{resp(_.sortBy(matches,function(match){if(match==value||match.value==value)return'';else return match;}));}});},set:function(value){if(!value)return;this.model.set({'value':value});},search:function(e,direction){if(!direction)direction=1;this.closeAutocomplete();this.app.searchBox.searchEvent(e);_.defer(_.bind(function(){this.app.searchBox.focusNextFacet(this,direction,{viewPosition:this.options.order});},this));},enableEdit:function(){if(this.app.options.readOnly)return;if(this.modes.editing!='is'){this.setMode('is','editing');this.deselectFacet();if(this.box.val()==''){this.box.val(this.model.get('value'));}}
-this.flags.canClose=false;this.app.searchBox.disableFacets(this);this.app.searchBox.addFocus();_.defer(_.bind(function(){this.app.searchBox.addFocus();},this));this.resize();this.searchAutocomplete();this.box.focus();},deferDisableEdit:function(){this.flags.canClose=true;_.delay(_.bind(function(){if(this.flags.canClose&&!this.box.is(':focus')&&this.modes.editing=='is'&&this.modes.selected!='is'){this.disableEdit();}},this),250);},disableEdit:function(){var newFacetQuery=VS.utils.inflector.trim(this.box.val());if(newFacetQuery!=this.model.get('value')){this.set(newFacetQuery);}
-this.flags.canClose=false;this.box.selectRange(0,0);this.box.blur();this.setMode('not','editing');this.closeAutocomplete();this.app.searchBox.removeFocus();},selectFacet:function(e){if(e)e.preventDefault();if(this.app.options.readOnly)return;var allSelected=this.app.searchBox.allSelected();if(this.modes.selected=='is')return;if(this.box.is(':focus')){this.box.setCursorPosition(0);this.box.blur();}
-this.flags.canClose=false;this.closeAutocomplete();this.setMode('is','selected');this.setMode('not','editing');if(!allSelected||e){$(document).unbind('keydown.facet',this.keydown);$(document).unbind('click.facet',this.deselectFacet);_.defer(_.bind(function(){$(document).unbind('keydown.facet').bind('keydown.facet',this.keydown);$(document).unbind('click.facet').one('click.facet',this.deselectFacet);},this));this.app.searchBox.disableFacets(this);this.app.searchBox.addFocus();}
-return false;},deselectFacet:function(e){if(e)e.preventDefault();if(this.modes.selected=='is'){this.setMode('not','selected');this.closeAutocomplete();this.app.searchBox.removeFocus();}
-$(document).unbind('keydown.facet',this.keydown);$(document).unbind('click.facet',this.deselectFacet);return false;},isFocused:function(){return this.box.is(':focus');},showDelete:function(){$(this.el).addClass('search_facet_maybe_delete');},hideDelete:function(){$(this.el).removeClass('search_facet_maybe_delete');},setCursorAtEnd:function(direction){if(direction==-1){this.box.setCursorPosition(this.box.val().length);}else{this.box.setCursorPosition(0);}},remove:function(e){var committed=this.model.get('value');this.deselectFacet();this.disableEdit();this.app.searchQuery.remove(this.model);if(committed&&this.app.options.autosearch){this.search(e,-1);}else{this.app.searchBox.renderFacets();this.app.searchBox.focusNextFacet(this,-1,{viewPosition:this.options.order});}},selectText:function(){this.box.selectRange(0,this.box.val().length);},keydown:function(e){var key=VS.app.hotkeys.key(e);if(key=='enter'&&this.box.val()){this.disableEdit();this.search(e);}else if(key=='left'){if(this.mo
 des.selected=='is'){this.deselectFacet();this.app.searchBox.focusNextFacet(this,-1,{startAtEnd:-1});}else if(this.box.getCursorPosition()==0&&!this.box.getSelection().length){this.selectFacet();}}else if(key=='right'){if(this.modes.selected=='is'){e.preventDefault();this.deselectFacet();this.setCursorAtEnd(0);this.enableEdit();}else if(this.box.getCursorPosition()==this.box.val().length){e.preventDefault();this.disableEdit();this.app.searchBox.focusNextFacet(this,1);}}else if(VS.app.hotkeys.shift&&key=='tab'){e.preventDefault();this.app.searchBox.focusNextFacet(this,-1,{startAtEnd:-1,skipToFacet:true,selectText:true});}else if(key=='tab'){e.preventDefault();this.app.searchBox.focusNextFacet(this,1,{skipToFacet:true,selectText:true});}else if(VS.app.hotkeys.command&&(e.which==97||e.which==65)){e.preventDefault();this.app.searchBox.selectAllFacets();return false;}else if(VS.app.hotkeys.printable(e)&&this.modes.selected=='is'){this.app.searchBox.focusNextFacet(this,-1,{startAtEnd:-1});
 this.remove(e);}else if(key=='backspace'){$(document).on('keydown.backspace',function(e){if(VS.app.hotkeys.key(e)==='backspace'){e.preventDefault();}});$(document).on('keyup.backspace',function(e){$(document).off('.backspace');});if(this.modes.selected=='is'){e.preventDefault();this.remove(e);}else if(this.box.getCursorPosition()==0&&!this.box.getSelection().length){e.preventDefault();this.selectFacet();}
-e.stopPropagation();}
-if(e.which==null){_.defer(_.bind(this.resize,this,e));}else{this.resize(e);}}});})();(function(){var $=jQuery;VS.ui.SearchInput=Backbone.View.extend({type:'text',className:'search_input ui-menu',events:{'keypress input':'keypress','keydown input':'keydown','keyup input':'keyup','click input':'maybeTripleClick','dblclick input':'startTripleClickTimer'},initialize:function(options){this.options=_.extend({},this.options,options);this.app=this.options.app;this.flags={canClose:false};_.bindAll(this,'removeFocus','addFocus','moveAutocomplete','deferDisableEdit');},render:function(){$(this.el).html(JST['search_input']({readOnly:this.app.options.readOnly}));this.setMode('not','editing');this.setMode('not','selected');this.box=this.$('input');this.box.autoGrowInput();this.box.bind('updated.autogrow',this.moveAutocomplete);this.box.bind('blur',this.deferDisableEdit);this.box.bind('focus',this.addFocus);this.setupAutocomplete();return this;},setupAutocomplete:function(){this.box.autocomplete({
 minLength:this.options.showFacets?0:1,delay:50,autoFocus:true,position:{offset:"0 -1"},source:_.bind(this.autocompleteValues,this),focus:function(){return false;},create:_.bind(function(e,ui){$(this.el).find('.ui-autocomplete-input').css('z-index','auto');},this),select:_.bind(function(e,ui){e.preventDefault();var remainder=this.addTextFacetRemainder(ui.item.label||ui.item.value);var position=this.options.position+(remainder?1:0);this.app.searchBox.addFacet(ui.item instanceof String?ui.item:ui.item.value,'',position);return false;},this)});this.box.data('ui-autocomplete')._renderMenu=function(ul,items){var category='';_.each(items,_.bind(function(item,i){if(item.category&&item.category!=category){ul.append('<li class="ui-autocomplete-category">'+item.category+'</li>');category=item.category;}
-if(this._renderItemData){this._renderItemData(ul,item);}else{this._renderItem(ul,item);}},this));};this.box.autocomplete('widget').addClass('VS-interface');},autocompleteValues:function(req,resp){var searchTerm=req.term;var lastWord=searchTerm.match(/\w+\*?$/);var re=VS.utils.inflector.escapeRegExp(lastWord&&lastWord[0]||'');this.app.options.callbacks.facetMatches(function(prefixes,options){options=options||{};prefixes=prefixes||[];var matcher=new RegExp('^'+re,'i');var matches=$.grep(prefixes,function(item){return item&&matcher.test(item.label||item);});if(options.preserveOrder){resp(matches);}else{resp(_.sortBy(matches,function(match){if(match.label)return match.category+'-'+match.label;else return match;}));}});},closeAutocomplete:function(){var autocomplete=this.box.data('ui-autocomplete');if(autocomplete)autocomplete.close();},moveAutocomplete:function(){var autocomplete=this.box.data('ui-autocomplete');if(autocomplete){autocomplete.menu.element.position({my:"left top",at:"left
  bottom",of:this.box.data('ui-autocomplete').element,collision:"none",offset:'0 -1'});}},searchAutocomplete:function(e){var autocomplete=this.box.data('ui-autocomplete');if(autocomplete){var menu=autocomplete.menu.element;autocomplete.search();menu.outerWidth(Math.max(menu.width('').outerWidth(),autocomplete.element.outerWidth()));}},addTextFacetRemainder:function(facetValue){var boxValue=this.box.val();var lastWord=boxValue.match(/\b(\w+)$/);if(!lastWord){return'';}
-var matcher=new RegExp(lastWord[0],"i");if(facetValue.search(matcher)==0){boxValue=boxValue.replace(/\b(\w+)$/,'');}
-boxValue=boxValue.replace('^\s+|\s+$','');if(boxValue){this.app.searchBox.addFacet(this.app.options.remainder,boxValue,this.options.position);}
-return boxValue;},enableEdit:function(selectText){this.addFocus();if(selectText){this.selectText();}
-this.box.focus();},addFocus:function(){this.flags.canClose=false;if(!this.app.searchBox.allSelected()){this.app.searchBox.disableFacets(this);}
-this.app.searchBox.addFocus();this.setMode('is','editing');this.setMode('not','selected');if(!this.app.searchBox.allSelected()){this.searchAutocomplete();}},disableEdit:function(){this.box.blur();this.removeFocus();},removeFocus:function(){this.flags.canClose=false;this.app.searchBox.removeFocus();this.setMode('not','editing');this.setMode('not','selected');this.closeAutocomplete();},deferDisableEdit:function(){this.flags.canClose=true;_.delay(_.bind(function(){if(this.flags.canClose&&!this.box.is(':focus')&&this.modes.editing=='is'){this.disableEdit();}},this),250);},startTripleClickTimer:function(){this.tripleClickTimer=setTimeout(_.bind(function(){this.tripleClickTimer=null;},this),500);},maybeTripleClick:function(e){if(this.app.options.readOnly)return;if(!!this.tripleClickTimer){e.preventDefault();this.app.searchBox.selectAllFacets();return false;}},isFocused:function(){return this.box.is(':focus');},value:function(){return this.box.val();},setCursorAtEnd:function(direction){if(
 direction==-1){this.box.setCursorPosition(this.box.val().length);}else{this.box.setCursorPosition(0);}},selectText:function(){this.box.selectRange(0,this.box.val().length);if(!this.app.searchBox.allSelected()){this.box.focus();}else{this.setMode('is','selected');}},search:function(e,direction){if(!direction)direction=0;this.closeAutocomplete();this.app.searchBox.searchEvent(e);_.defer(_.bind(function(){this.app.searchBox.focusNextFacet(this,direction);},this));},keypress:function(e){var key=VS.app.hotkeys.key(e);if(key=='enter'){return this.search(e,100);}else if(VS.app.hotkeys.colon(e)){this.box.trigger('resize.autogrow',e);var query=this.box.val();var prefixes=[];this.app.options.callbacks.facetMatches(function(p){prefixes=p;});var labels=_.map(prefixes,function(prefix){if(prefix.label)return prefix.label;else return prefix;});if(_.contains(labels,query)){e.preventDefault();var remainder=this.addTextFacetRemainder(query);var position=this.options.position+(remainder?1:0);this.app.
 searchBox.addFacet(query,'',position);return false;}}else if(key=='backspace'){if(this.box.getCursorPosition()==0&&!this.box.getSelection().length){e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();this.app.searchBox.resizeFacets();return false;}}},keydown:function(e){var key=VS.app.hotkeys.key(e);if(key=='left'){if(this.box.getCursorPosition()==0){e.preventDefault();this.app.searchBox.focusNextFacet(this,-1,{startAtEnd:-1});}}else if(key=='right'){if(this.box.getCursorPosition()==this.box.val().length){e.preventDefault();this.app.searchBox.focusNextFacet(this,1,{selectFacet:true});}}else if(VS.app.hotkeys.shift&&key=='tab'){e.preventDefault();this.app.searchBox.focusNextFacet(this,-1,{selectText:true});}else if(key=='tab'){var value=this.box.val();if(value.length){e.preventDefault();var remainder=this.addTextFacetRemainder(value);var position=this.options.position+(remainder?1:0);if(value!=remainder){this.app.searchBox.addFacet(value,'',position);}}else{var foundF
 acet=this.app.searchBox.focusNextFacet(this,0,{skipToFacet:true,selectText:true});if(foundFacet){e.preventDefault();}}}else if(VS.app.hotkeys.command&&String.fromCharCode(e.which).toLowerCase()=='a'){e.preventDefault();this.app.searchBox.selectAllFacets();return false;}else if(key=='backspace'&&!this.app.searchBox.allSelected()){if(this.box.getCursorPosition()==0&&!this.box.getSelection().length){e.preventDefault();this.app.searchBox.focusNextFacet(this,-1,{backspace:true});return false;}}else if(key=='end'){var view=this.app.searchBox.inputViews[this.app.searchBox.inputViews.length-1];view.setCursorAtEnd(-1);}else if(key=='home'){var view=this.app.searchBox.inputViews[0];view.setCursorAtEnd(-1);}},keyup:function(e){this.box.trigger('resize.autogrow',e);}});})();(function(){var $=jQuery;Backbone.View.prototype.setMode=function(mode,group){this.modes||(this.modes={});if(this.modes[group]===mode)return;$(this.el).setMode(mode,group);this.modes[group]=mode;};})();(function(){var $=jQue
 ry;VS.app.hotkeys={KEYS:{'16':'shift','17':'command','91':'command','93':'command','224':'command','13':'enter','37':'left','38':'upArrow','39':'right','40':'downArrow','46':'delete','8':'backspace','35':'end','36':'home','9':'tab','188':'comma'},initialize:function(){_.bindAll(this,'down','up','blur');$(document).bind('keydown',this.down);$(document).bind('keyup',this.up);$(window).bind('blur',this.blur);},down:function(e){var key=this.KEYS[e.which];if(key)this[key]=true;},up:function(e){var key=this.KEYS[e.which];if(key)this[key]=false;},blur:function(e){for(var key in this.KEYS)this[this.KEYS[key]]=false;},key:function(e){return this.KEYS[e.which];},colon:function(e){var charCode=e.which;return charCode&&String.fromCharCode(charCode)==":";},printable:function(e){var code=e.which;if(e.type=='keydown'){if(code==32||(code>=48&&code<=90)||(code>=96&&code<=111)||(code>=186&&code<=192)||(code>=219&&code<=222)){return true;}}else{if((code>=32&&code<=126)||(code>=160&&code<=500)||(String
 .fromCharCode(code)==":")){return true;}}
-return false;}};})();(function(){var $=jQuery;VS.utils.inflector={trim:function(s){return s.trim?s.trim():s.replace(/^\s+|\s+$/g,'');},escapeRegExp:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,'\\$1');}};})();(function(){var $=jQuery;$.fn.extend({setMode:function(state,group){group=group||'mode';var re=new RegExp("\\w+_"+group+"(\\s|$)",'g');var mode=(state===null)?"":state+"_"+group;this.each(function(){this.className=(this.className.replace(re,'')+' '+mode).replace(/\s\s/g,' ');});return mode;},autoGrowInput:function(){return this.each(function(){var $input=$(this);var $tester=$('<div />').css({opacity:0,top:-9999,left:-9999,position:'absolute',whiteSpace:'nowrap'}).addClass('VS-input-width-tester').addClass('VS-interface');var events='keydown.autogrow keypress.autogrow '+'resize.autogrow change.autogrow';$input.next('.VS-input-width-tester').remove();$input.after($tester);$input.unbind(events).bind(events,function(e,realEvent){if(realEvent)e=realEvent;var value=$input.v
 al();if(VS.app.hotkeys.key(e)=='backspace'){var position=$input.getCursorPosition();if(position>0)value=value.slice(0,position-1)+
-value.slice(position,value.length);}else if(VS.app.hotkeys.printable(e)&&!VS.app.hotkeys.command){value+=String.fromCharCode(e.which);}
-value=value.replace(/&/g,'&amp;').replace(/\s/g,'&nbsp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');$tester.html(value);$input.width($tester.width()+3+parseInt($input.css('min-width')));$input.trigger('updated.autogrow');});$input.trigger('resize.autogrow');});},getCursorPosition:function(){var position=0;var input=this.get(0);if(document.selection){input.focus();var sel=document.selection.createRange();var selLen=document.selection.createRange().text.length;sel.moveStart('character',-input.value.length);position=sel.text.length-selLen;}else if(input&&$(input).is(':visible')&&input.selectionStart!=null){position=input.selectionStart;}
-return position;},setCursorPosition:function(position){return this.each(function(){return $(this).selectRange(position,position);});},selectRange:function(start,end){return this.filter(':visible').each(function(){if(this.setSelectionRange){this.focus();this.setSelectionRange(start,end);}else if(this.createTextRange){var range=this.createTextRange();range.collapse(true);range.moveEnd('character',end);range.moveStart('character',start);if(end-start>=0)range.select();}});},getSelection:function(){var input=this[0];if(input.selectionStart!=null){var start=input.selectionStart;var end=input.selectionEnd;return{start:start,end:end,length:end-start,text:input.value.substr(start,end-start)};}else if(document.selection){var range=document.selection.createRange();if(range){var textRange=input.createTextRange();var copyRange=textRange.duplicate();textRange.moveToBookmark(range.getBookmark());copyRange.setEndPoint('EndToStart',textRange);var start=copyRange.text.length;var end=start+range.text.
 length;return{start:start,end:end,length:end-start,text:range.text};}}
-return{start:0,end:0,length:0};}});if(false){window.console={};var _$ied;window.console.log=function(msg){if(_.isArray(msg)){var message=msg[0];var vars=_.map(msg.slice(1),function(arg){return JSON.stringify(arg);}).join(' - ');}
-if(!_$ied){_$ied=$('<div><ol></ol></div>').css({'position':'fixed','bottom':10,'left':10,'zIndex':20000,'width':$('body').width()-80,'border':'1px solid #000','padding':'10px','backgroundColor':'#fff','fontFamily':'arial,helvetica,sans-serif','fontSize':'11px'});$('body').append(_$ied);}
-var $message=$('<li>'+message+' - '+vars+'</li>').css({'borderBottom':'1px solid #999999'});_$ied.find('ol').append($message);_.delay(function(){$message.fadeOut(500);},5000);};}})();(function(){var $=jQuery;var QUOTES_RE="('[^']+'|\"[^\"]+\")";var FREETEXT_RE="('[^']+'|\"[^\"]+\"|[^'\"\\s]\\S*)";var CATEGORY_RE=FREETEXT_RE+':\\s*';VS.app.SearchParser={ALL_FIELDS:new RegExp(CATEGORY_RE+FREETEXT_RE,'g'),CATEGORY:new RegExp(CATEGORY_RE),parse:function(instance,query){var searchFacets=this._extractAllFacets(instance,query);instance.searchQuery.reset(searchFacets);return searchFacets;},_extractAllFacets:function(instance,query){var facets=[];var originalQuery=query;while(query){var category,value;originalQuery=query;var field=this._extractNextField(query);if(!field){category=instance.options.remainder;value=this._extractSearchText(query);query=VS.utils.inflector.trim(query.replace(value,''));}else if(field.indexOf(':')!=-1){category=field.match(this.CATEGORY)[1].replace(/(^['"]|['"]$)/g
 ,'');value=field.replace(this.CATEGORY,'').replace(/(^['"]|['"]$)/g,'');query=VS.utils.inflector.trim(query.replace(field,''));}else if(field.indexOf(':')==-1){category=instance.options.remainder;value=field;query=VS.utils.inflector.trim(query.replace(value,''));}
-if(category&&value){var searchFacet=new VS.model.SearchFacet({category:category,value:VS.utils.inflector.trim(value),app:instance});facets.push(searchFacet);}
-if(originalQuery==query)break;}
-return facets;},_extractNextField:function(query){var textRe=new RegExp('^\\s*(\\S+)\\s+(?='+QUOTES_RE+FREETEXT_RE+')');var textMatch=query.match(textRe);if(textMatch&&textMatch.length>=1){return textMatch[1];}else{return this._extractFirstField(query);}},_extractFirstField:function(query){var fields=query.match(this.ALL_FIELDS);return fields&&fields.length&&fields[0];},_extractSearchText:function(query){query=query||'';var text=VS.utils.inflector.trim(query.replace(this.ALL_FIELDS,''));return text;}};})();(function(){var $=jQuery;VS.model.SearchFacet=Backbone.Model.extend({serialize:function(){var category=this.quoteCategory(this.get('category'));var value=VS.utils.inflector.trim(this.get('value'));var remainder=this.get("app").options.remainder;if(!value)return'';if(!_.contains(this.get("app").options.unquotable||[],category)&&category!=remainder){value=this.quoteValue(value);}
-if(category!=remainder){category=category+': ';}else{category="";}
-return category+value;},quoteCategory:function(category){var hasDoubleQuote=(/"/).test(category);var hasSingleQuote=(/'/).test(category);var hasSpace=(/\s/).test(category);if(hasDoubleQuote&&!hasSingleQuote){return"'"+category+"'";}else if(hasSpace||(hasSingleQuote&&!hasDoubleQuote)){return'"'+category+'"';}else{return category;}},quoteValue:function(value){var hasDoubleQuote=(/"/).test(value);var hasSingleQuote=(/'/).test(value);if(hasDoubleQuote&&!hasSingleQuote){return"'"+value+"'";}else{return'"'+value+'"';}},label:function(){return this.get('label')||this.get('value');}});})();(function(){var $=jQuery;VS.model.SearchQuery=Backbone.Collection.extend({model:VS.model.SearchFacet,serialize:function(){return this.map(function(facet){return facet.serialize();}).join(' ');},facets:function(){return this.map(function(facet){var value={};value[facet.get('category')]=facet.get('value');return value;});},find:function(category){var facet=this.detect(function(facet){return facet.get('categ
 ory').toLowerCase()==category.toLowerCase();});return facet&&facet.get('value');},count:function(category){return this.select(function(facet){return facet.get('category').toLowerCase()==category.toLowerCase();}).length;},values:function(category){var facets=this.select(function(facet){return facet.get('category').toLowerCase()==category.toLowerCase();});return _.map(facets,function(facet){return facet.get('value');});},has:function(category,value){return this.any(function(facet){var categoryMatched=facet.get('category').toLowerCase()==category.toLowerCase();if(!value)return categoryMatched;return categoryMatched&&facet.get('value')==value;});},withoutCategory:function(){var categories=_.map(_.toArray(arguments),function(cat){return cat.toLowerCase();});return this.map(function(facet){if(!_.include(categories,facet.get('category').toLowerCase())){return facet.serialize();};}).join(' ');}});})();(function(){window.JST=window.JST||{};window.JST['search_box']=_.template('<div class="VS-
 search <% if (readOnly) { %>VS-readonly<% } %>">\n  <div class="VS-search-box-wrapper VS-search-box">\n    <div class="VS-icon VS-icon-search"></div>\n    <div class="VS-placeholder"></div>\n    <div class="VS-search-inner"></div>\n    <div class="VS-icon VS-icon-cancel VS-cancel-search-box" title="clear search"></div>\n  </div>\n</div>');window.JST['search_facet']=_.template('<% if (model.has(\'category\')) { %>\n  <div class="category"><%= model.get(\'category\') %>:</div>\n<% } %>\n\n<div class="search_facet_input_container">\n  <input type="text" class="search_facet_input ui-menu VS-interface" value="" <% if (readOnly) { %>disabled="disabled"<% } %> />\n</div>\n\n<div class="search_facet_remove VS-icon VS-icon-cancel"></div>');window.JST['search_input']=_.template('<input type="text" class="ui-menu" <% if (readOnly) { %>disabled="disabled"<% } %> />');})();
\ No newline at end of file


Mime
View raw message