Repository: incubator-sdap-mudrod
Updated Branches:
  refs/heads/master [created] 7b76fa168


http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/js/libs/underscore-min.js
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/js/libs/underscore-min.js 
b/web/META-INF/resources/js/libs/underscore-min.js
new file mode 100644
index 0000000..f01025b
--- /dev/null
+++ b/web/META-INF/resources/js/libs/underscore-min.js
@@ -0,0 +1,6 @@
+//     Underscore.js 1.8.3
+//     http://underscorejs.org
+//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative 
Reporters & Editors
+//     Underscore may be freely distributed under the MIT license.
+(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var 
a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var 
o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return 
arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return 
function(t,r,e){r=x(r,e);for(var 
u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function 
r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof 
i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else 
if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return 
i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return
 i;return-1}}function e(n,t){var 
r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i
 in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var 
u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.h
 
asOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return
 n instanceof m?n:this instanceof m?void(this._wrapped=n):new 
m(n)};"undefined"!=typeof exports?("undefined"!=typeof 
module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var
 b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return 
function(r){return n.call(t,r)};case 2:return function(r,e){return 
n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 
4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return 
n.apply(t,arguments)}},x=function(n,t,r){return 
null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return
 x(n,t,1/0)};var _=function(n,t){return function(r){var 
e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var 
i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 
0||(r[f]=i[f])}return r}}
 ,j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var 
t=new d;return d.prototype=null,t},w=function(n){return function(t){return 
null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var 
t=O(n);return"number"==typeof 
t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var 
e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var 
i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return 
n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var 
e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var 
a=e?e[o]:o;i[o]=t(n[a],a,n)}return 
i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var
 e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 
0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return 
t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return
 m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var 
e=!k(n)
 &&m.keys(n),u=(e||n).length,i=0;u>i;i++){var 
o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var
 e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var 
o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return
 k(n)||(n=m.values(n)),("number"!=typeof 
r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var 
r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var 
u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return 
m.map(n,m.property(t))},m.where=function(n,t){return 
m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return 
m.find(n,m.matcher(t))},m.max=function(n,t,r){var 
e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var 
a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else 
t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return
 i},m.min=function(n,t,r){var 
e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var
  a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else 
t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return
 i},m.shuffle=function(n){for(var 
t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return
 u},m.sample=function(n,t,r){return 
null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return
 
t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var
 r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 
1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var 
F=function(n){return function(t,r,e){var u={};return 
r=x(r,e),m.each(t,function(e,i){var 
o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return
 n?m.isArray(n)?l.c
 all(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return 
null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var
 e=[],u=[];return 
m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return
 null==n?void 
0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return 
l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return
 null==n?void 
0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return
 l.call(n,null==t||r?1:t)},m.compact=function(n){return 
m.filter(n,m.identity)};var S=function(n,t,r,e){for(var 
u=[],i=0,o=e||0,a=O(n);a>o;o++){var 
c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var 
f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return 
u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return 
m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,
 r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var 
u=[],i=[],o=0,a=O(n);a>o;o++){var 
c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return
 u},m.union=function(){return 
m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var 
t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var 
i=n[e];if(!m.contains(t,i)){for(var 
o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return 
t},m.difference=function(n){var t=S(arguments,!0,!0,1);return 
m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return 
m.unzip(arguments)},m.unzip=function(n){for(var 
t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return 
r},m.object=function(n,t){for(var 
r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return 
r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var
 u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])<u?i=a+1:o=a}return 
i},m.i
 
ndexOf=r(1,m.findIndex,m.sortedIndex),m.lastIndexOf=r(-1,m.findLastIndex),m.range=function(n,t,r){null==t&&(t=n||0,n=0),r=r||1;for(var
 e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return 
u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var 
i=j(n.prototype),o=n.apply(i,u);return 
m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return 
g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind 
must be called on a function");var r=l.call(arguments,2),e=function(){return 
E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var 
t=l.call(arguments,1),r=function(){for(var 
e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e<arguments.length;)i.push(arguments[e++]);return
 E(n,r,this,this,i)};return r},m.bindAll=function(n){var 
t,r,e=arguments.length;if(1>=e)throw new Error("bindAll must be passed function 
names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.
 memoize=function(n,t){var r=function(e){var 
u=r.cache,i=""+(t?t.apply(this,arguments):e);return 
m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return 
r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return 
setTimeout(function(){return 
n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var
 e,u,i,o=null,a=0;r||(r={});var 
c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return
 function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return 
e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var
 e,u,i,o,a,c=function(){var 
f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return
 function(){i=this,u=arguments,o=m.now();var f=r&&!e;return 
e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return
 m.partial(t,n)},m.negate=function(n){return func
 tion(){return!n.apply(this,arguments)}},m.compose=function(){var 
n=arguments,t=n.length-1;return function(){for(var 
r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return 
e}},m.after=function(n,t){return 
function(){return--n<1?t.apply(this,arguments):void 
0}},m.before=function(n,t){var r;return 
function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var
 
M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return
 v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return 
M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var 
r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var 
t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return 
e},m.mapObject=function(n,t,r){t=x(t,r);for(var 
e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e
 ,n);return o},m.pairs=function(n){for(var 
t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return 
e},m.invert=function(n){for(var 
t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return 
t},m.functions=m.methods=function(n){var t=[];for(var r in 
n)m.isFunction(n[r])&&t.push(r);return 
t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var
 e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return 
e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return 
i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return
 t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var 
f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return 
i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var 
e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return
 m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var 
r=j(n);return t&&m.extendOwn(r,t),r},m.clone=
 function(n){return 
m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return
 t(n),n},m.isMatch=function(n,t){var 
r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var 
o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var 
N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return 
n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var 
u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object 
RegExp]":case"[object String]":return""+n==""+t;case"[object 
Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object 
Date]":case"[object Boolean]":return+n===+t}var i="[object 
Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var 
o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof 
o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in 
t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return 
e[c]===t;if(r.push(n),e.push(t)
 
,i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var
 
f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return
 r.pop(),e.pop(),!0};m.isEqual=function(n,t){return 
N(n,t)},m.isEmpty=function(n){return 
null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object
 Array]"===s.call(n)},m.isObject=function(n){var t=typeof 
n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return
 s.call(t)==="[object 
"+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return 
m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof 
Int8Array&&(m.isFunction=function(n){return"function"==typeof 
n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))}
 ,m.isNaN=function(n){return 
m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object 
Boolean]"===s.call(n)},m.isNull=function(n){return 
null===n},m.isUndefined=function(n){return n===void 
0},m.has=function(n,t){return 
null!=n&&p.call(n,t)},m.noConflict=function(){return 
u._=i,this},m.identity=function(n){return n},m.constant=function(n){return 
function(){return 
n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return 
null==n?function(){}:function(t){return 
n[t]}},m.matcher=m.matches=function(n){return 
n=m.extendOwn({},n),function(t){return 
m.isMatch(t,n)}},m.times=function(n,t,r){var 
e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return 
e},m.random=function(n,t){return 
null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new
 Date).getTime()};var 
B={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},T=m.invert(B),R=function(n){var
 t=function(t){return n[t]},r="(?:"+m.keys(n)
 .join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return 
n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var
 e=null==n?void 0:n[t];return e===void 
0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var 
t=++q+"";return 
n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var
 
K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var
 
e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return
 
i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i
 ="with(obj||{}){\n"+i+"}\n"),i="var 
__t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return
 __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw 
a.source=i,a}var c=function(n){return 
o.call(this,n,m)},f=t.variable||"obj";return 
c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return 
t._chain=!0,t};var P=function(n,t){return 
n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var
 r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return 
f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var
 t=o[n];m.prototype[n]=function(){var r=this._wrapped;return 
t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete 
r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var 
t=o[n];m.prototype[n]=function(){return 
P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=f
 unction(){return 
this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof
 define&&define.amd&&define("underscore",[],function(){return m})}).call(this);
+//# sourceMappingURL=underscore-min.map
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/js/services.js
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/js/services.js 
b/web/META-INF/resources/js/services.js
new file mode 100755
index 0000000..3d80be4
--- /dev/null
+++ b/web/META-INF/resources/js/services.js
@@ -0,0 +1,127 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License"); you 
+ * may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+'use strict';
+
+/* Services */
+
+var mudrodServices = angular.module('mudrodServices', ['ngResource']);
+
+mudrodServices.factory('MetaData', ['$resource',
+    function($resource) {
+        return $resource("services/metadata/search/", {}, {
+            get: {method: 'GET', cache: false, isArray: false}
+        });
+    }]);
+
+mudrodServices.factory('VocabList', ['$resource',
+    function($resource) {
+        return $resource("services/vocabulary/search/", {}, {
+            get: {method: 'GET', cache: false, isArray: false}            
+        });
+    }]);
+
+mudrodServices.factory('Autocomplete', ['$resource',
+    function($resource) {
+        return $resource("services/autocomplete/query", {}, {
+            get: {method: 'GET', cache: false, isArray: true}            
+        });
+    }]);
+
+mudrodServices.factory('DatasetDetail', ['$resource',
+    function($resource) {
+        return $resource("services/datasetdetail/search/", {}, {
+            get: {method: 'GET', cache: false, isArray: false}
+        });
+    }]);
+
+mudrodServices.factory('HRecommendation', ['$resource',
+    function($resource) {
+        return $resource("services/hrecommendation/search/", {}, {
+            get: {method: 'GET', cache: false, isArray: false}
+        });
+    }]);
+
+mudrodServices.factory('SearchOptions', function(){
+       var searchOptions = {'opt':'Or'};
+       return {
+           getSearchOptions: function () {
+               return searchOptions;
+           },
+           setSearchOptions: function (value) {
+               searchOptions = value;
+           }
+       };
+});
+
+mudrodServices.factory('PagerService',
+    function() {
+        // service definition
+        var service = {};
+
+        service.GetPager = GetPager;
+
+        return service;
+
+        // service implementation
+        function GetPager(totalItems, currentPage, pageSize) {
+            // default to first page
+            currentPage = currentPage || 1;
+
+            // default page size is 10
+            pageSize = pageSize || 10;
+
+            // calculate total pages
+            var totalPages = Math.ceil(totalItems / pageSize);
+
+            var startPage, endPage;
+            if (totalPages <= 10) {
+                // less than 10 total pages so show all
+                startPage = 1;
+                endPage = totalPages;
+            } else {
+                // more than 10 total pages so calculate start and end pages
+                if (currentPage <= 6) {
+                    startPage = 1;
+                    endPage = 10;
+                } else if (currentPage + 4 >= totalPages) {
+                    startPage = totalPages - 9;
+                    endPage = totalPages;
+                } else {
+                    startPage = currentPage - 5;
+                    endPage = currentPage + 4;
+                }
+            }
+
+            // calculate start and end item indexes
+            var startIndex = (currentPage - 1) * pageSize;
+            var endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);
+
+            // create an array of pages to ng-repeat in the pager control
+            var pages = _.range(startPage, endPage + 1);
+
+            // return object with all pager properties required by the view
+            return {
+                totalItems: totalItems,
+                currentPage: currentPage,
+                pageSize: pageSize,
+                totalPages: totalPages,
+                startPage: startPage,
+                endPage: endPage,
+                startIndex: startIndex,
+                endIndex: endIndex,
+                pages: pages
+            };
+        }
+    });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/datasetResults.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/datasetResults.html 
b/web/META-INF/resources/partials/datasetResults.html
new file mode 100644
index 0000000..4e21b87
--- /dev/null
+++ b/web/META-INF/resources/partials/datasetResults.html
@@ -0,0 +1,152 @@
+<!-- 
+  Licensed under the Apache License, Version 2.0 (the "License"); 
+  you may not use this file except in compliance with the License. 
+  You may obtain  a copy of the License at 
+  
+  http://www.apache.org/licenses/LICENSE-2.0 Unless 
+  
+  required by applicable law or agreed to in writing, software 
+  distributed under the License is distributed on an "AS IS" 
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
+  express or implied. See the License for the specific language 
+  governing permissions and limitations under the License. 
+  -->
+<div ng-include src="'partials/navbar-search.html'"></div>
+
+<div id="container" class="container view-area-fixed">
+    <div class="row no-gutter content-holder">
+        <div class="col-md-9 col-sm-8" id="content">
+            <div class="panel panel-primary post-holder">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        <strong class="title">{{dataset['Short 
Name']}}</strong>
+                    </h4>
+                </div>
+                <div class="panel-body">
+                    <table class="table table-strip">
+                        <tbody>
+                        <tr>
+                            <td>Long Name</td>
+                            <td>{{dataset['Long Name']}}</td>
+                        </tr>
+                        <tr>
+                            <td>Landing Page</td>
+                            <td>
+                                <a 
ng-href="https://podaac.jpl.nasa.gov/dataset/{{dataset['Short Name'] | 
urlencode}}" 
target="_blank">https://podaac.jpl.nasa.gov/dataset/{{dataset['Short 
Name']}}</a>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>DOI</td>
+                            <td>
+                                <a ng-if="dataset['Dataset-Doi']" 
ng-href="https://podaac.jpl.nasa.gov/dataset/{{dataset['Short Name'] | 
urlencode}}" target="_blank">{{dataset['Dataset-Doi']}}</a>
+                                <span ng-if="!dataset['Dataset-Doi']">Not 
Registered</span>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Measurement</td>
+                            <td>
+                                <p ng-repeat="measurement in 
dataset['Measurements'] track by $index">
+                                    <span ng-repeat="element in measurement 
track by $index"><a ng-href="#/metadataView?query={{element | 
urlencode}}">{{element}}</a>{{$last ? '' : ' > '}}</span>
+                                </p>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Version</td>
+                            <td>{{dataset['Version'].join(', ')}}</td>
+                        </tr>
+                        <tr>
+                            <td>Description</td>
+                            <td>{{dataset['Dataset-Description']}}</td>
+                        </tr>
+                        <tr>
+                            <td>Processing Level</td>
+                            <td>{{dataset['Processing Level']}}</td>
+                        </tr>
+                        <tr>
+                            <td>Coverage</td>
+                            <td>
+                                Region: {{dataset['Region'].join(', ')}}<br>
+                                Northernmost Latitude: {{dataset['NorthLat']}} 
degrees<br>
+                                Southernmost Latitude: {{dataset['NorthLat']}} 
degrees<br>
+                                Westernmost Longitude: {{dataset['WestLon']}} 
degrees<br>
+                                Easternmost Longitude: {{dataset['EastLon']}} 
degrees<br>
+                                Time Span: {{dataset['Time Span']}}
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Spatial Resolution</td>
+                            <td>{{dataset['SpatialResolution']}}</td>
+                        </tr>
+                        <tr>
+                            <td>Temporal Repeat</td>
+                            <td>{{dataset['TemporalResolution']}}</td>
+                        </tr>
+                        <tr>
+                            <td>Sensor</td>
+                            <td>
+                                <a ng-repeat="sensor in 
dataset['DatasetSource-Sensor-ShortName']" 
ng-href="#/metadataView?query={{sensor | urlencode}}">{{sensor}}{{$last ? '' : 
', '}}</a>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Project</td>
+                            <td>
+                                <a ng-repeat="project in 
dataset['DatasetProject-Project-ShortName']" 
ng-href="#/metadataView?query={{project | urlencode}}">{{project}}{{$last ? '' 
: ', '}}</a>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Format</td>
+                            <td>{{dataset['DataFormat']}}</td>
+                        </tr>
+                        <tr>
+                            <td>Data Access</td>
+                            <td>
+                                <p ng-repeat="path in 
dataset['DatasetLocationPolicy-BasePath']">
+                                    <a ng-href="{{path}}" 
target="_blank">{{path}}</a>
+                                </p>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+        <div class="col-md-3 col-sm-4">
+            <div class="panel-group">
+                <div class="panel panel-primary sidenav">
+                    <div class="panel-heading">
+                        <h4 class="panel-title">
+                            <a data-toggle="collapse" data-parent="#accordion" 
data-target="#collapse1">Related Datasets</a>
+                        </h4>
+                    </div>
+                    <div id="collapse1" class="panel-collapse collapse in">
+                        <div class="panel-body" 
ng-controller="hRecommendationCtrl">
+                            <div class="list-related-searches" 
ng-repeat="recommendation in recommendationList">
+                                <a title="{{recommendation['name']}}" 
ng-href="#/datasetView?shortname={{recommendation['name'] | 
urlencode}}">{{recommendation['name']}}</a>
+                            </div>
+                            <div class="learn-more">
+                                <a 
href="https://mudrod.github.io/recommendation-algorithms/"; target="_blank">How 
does MUDROD find related Datasets?</a>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="panel panel-primary sidenav">
+                    <div class="panel-heading">
+                        <h4 class="panel-title">
+                            <a data-toggle="collapse" data-parent="#accordion" 
data-target="#collapse2">Related Keyword Searches</a>
+                        </h4>
+                    </div>
+                    <div id="collapse2" class="panel-collapse collapse in">
+                        <div class="panel-body" ng-controller="vocabularyCtrl">
+                            <div class="list-related-searches" 
ng-repeat="ontology in ontologyList">
+                                <a title="{{ontology['word']}}" 
ng-href="#/metadataView?query={{ontology['word'] | 
urlencode}}">{{ontology['word'] | uppercase}} ({{ontology['weight']}})</a>
+                            </div>
+                            <div class="learn-more">
+                                <a 
href="https://mudrod.github.io/vocabulary-similarity-algorithm/"; 
target="_blank">How does MUDROD find related keyword searches?</a>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/footer.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/footer.html 
b/web/META-INF/resources/partials/footer.html
new file mode 100644
index 0000000..13d526b
--- /dev/null
+++ b/web/META-INF/resources/partials/footer.html
@@ -0,0 +1,19 @@
+<!--
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain  a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0 Unless
+
+  required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS"
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+  express or implied. See the License for the specific language
+  governing permissions and limitations under the License.
+  -->
+
+<!--
+
+    This file can be used to provide a customized footer for the MUDROD 
website. It is currently left empty.
+
+ -->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/main-header.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/main-header.html 
b/web/META-INF/resources/partials/main-header.html
new file mode 100644
index 0000000..6db05dc
--- /dev/null
+++ b/web/META-INF/resources/partials/main-header.html
@@ -0,0 +1,19 @@
+<!--
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain  a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0 Unless
+
+  required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS"
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+  express or implied. See the License for the specific language
+  governing permissions and limitations under the License.
+  -->
+
+<!--
+
+    This file can be used to provide a customized header for the MUDROD 
website. It is currently left empty.
+
+ -->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/metadataResults.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/metadataResults.html 
b/web/META-INF/resources/partials/metadataResults.html
new file mode 100755
index 0000000..8daf6e7
--- /dev/null
+++ b/web/META-INF/resources/partials/metadataResults.html
@@ -0,0 +1,50 @@
+<!-- 
+  Licensed under the Apache License, Version 2.0 (the "License"); 
+  you may not use this file except in compliance with the License. 
+  You may obtain  a copy of the License at 
+  
+  http://www.apache.org/licenses/LICENSE-2.0 Unless 
+  
+  required by applicable law or agreed to in writing, software 
+  distributed under the License is distributed on an "AS IS" 
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
+  express or implied. See the License for the specific language 
+  governing permissions and limitations under the License. 
+  -->
+<div ng-include src="'partials/navbar-search.html'"></div>
+
+<div id="container" class="container view-area-fixed" 
ng-controller="metadataViewCtrl as vm">
+    <div class="row no-gutter content-holder">
+        <div class="col-md-9 col-sm-8" id="content">
+
+            <ng-include ng-if="!searchComplete" ng-model="searchComplete" 
src="'partials/search-in-progress.html'"></ng-include>
+            <ng-include ng-if="searchComplete" ng-model="searchComplete" 
src="'partials/search-results.html'"></ng-include>
+
+        </div>
+
+        <div class="col-md-3 col-sm-4">
+            <div class="panel panel-primary sidenav">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        <a data-toggle="collapse" data-parent="#accordion" 
data-target="#collapse1">Related Searches</a>
+                    </h4>
+                </div>
+                <div id="collapse1" class="panel-collapse collapse in">
+                    <div class="panel-body" ng-controller="vocabularyCtrl">
+                        <div ng-if="searchComplete && ontologyList.length > 0" 
ng-model="searchComplete" class="list-related-searches" ng-repeat="ontology in 
ontologyList">
+                            <a 
ng-href="#/metadataView?query={{ontology['word'] | urlencode}}" 
title="{{ontology['word']}}">{{ontology['word'] | uppercase}} 
({{ontology['weight']}})</a>
+                        </div>
+
+                        <div ng-if="searchComplete && ontologyList.length === 
0" ng-model="searchComplete">
+                            <span style="font-size: 1em;">No related searches 
found</span>
+                        </div>
+
+                        <div ng-if="!searchComplete" ng-model="searchComplete" 
id="spinner">
+                            <img src="images/spinner.gif" title="Search in 
progress" style="height: 5em;">
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/navbar-plain.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/navbar-plain.html 
b/web/META-INF/resources/partials/navbar-plain.html
new file mode 100755
index 0000000..ce4e811
--- /dev/null
+++ b/web/META-INF/resources/partials/navbar-plain.html
@@ -0,0 +1,35 @@
+<!-- 
+  Licensed under the Apache License, Version 2.0 (the "License"); 
+  you may not use this file except in compliance with the License. 
+  You may obtain  a copy of the License at 
+  
+  http://www.apache.org/licenses/LICENSE-2.0 Unless 
+  
+  required by applicable law or agreed to in writing, software 
+  distributed under the License is distributed on an "AS IS" 
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
+  express or implied. See the License for the specific language 
+  governing permissions and limitations under the License. 
+  -->
+<header>
+    <nav class="navbar navbar-inverse mudrod-navbar">
+        <div class="container-fluid">
+            <div class="navbar-header">
+                <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#mudrod-collapse" aria-expanded="false">
+                    <span class="sr-only">Toggle navigation</span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </button>
+                <a class="navbar-brand navbar-link" 
href="https://mudrod.github.io/";>MUDROD</a>
+            </div>
+            <div class="collapse navbar-collapse" id="mudrod-collapse">
+                <div class="nav navbar-nav">
+                    <div class="nav-item active">
+                        <a class="nav-link" href="#/">Home <span 
class="sr-only">(current)</span></a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </nav>
+</header>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/navbar-search.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/navbar-search.html 
b/web/META-INF/resources/partials/navbar-search.html
new file mode 100755
index 0000000..fdc99da
--- /dev/null
+++ b/web/META-INF/resources/partials/navbar-search.html
@@ -0,0 +1,62 @@
+<!-- 
+  Licensed under the Apache License, Version 2.0 (the "License"); 
+  you may not use this file except in compliance with the License. 
+  You may obtain  a copy of the License at 
+  
+  http://www.apache.org/licenses/LICENSE-2.0 Unless 
+  
+  required by applicable law or agreed to in writing, software 
+  distributed under the License is distributed on an "AS IS" 
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
+  express or implied. See the License for the specific language 
+  governing permissions and limitations under the License. 
+  -->
+<header>
+
+    <nav class="navbar navbar-inverse mudrod-navbar">
+        <div class="container-fluid">
+            <div class="navbar-header">
+                <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#mudrod-collapse" aria-expanded="false">
+                    <span class="sr-only">Toggle navigation</span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                    <span class="icon-bar"></span>
+                </button>
+                <a class="navbar-brand navbar-link" 
href="https://mudrod.github.io/";>MUDROD</a>
+            </div>
+            <div class="collapse navbar-collapse" id="mudrod-collapse">
+                <div class="nav navbar-nav">
+                    <div class="nav-item active">
+                        <a class="nav-link" href="#/">Home <span 
class="sr-only">(current)</span></a>
+                    </div>
+                </div>
+
+                <form id="searchForm" class="navbar-form navbar-right" 
autocomplete="off" ng-controller="searchCtrl">
+                    <div class="form-group">
+                        <input id="query" type="text" role="search" 
class="form-control" ng-model="options.query" ng-keyup="complete(options.query)"
+                               placeholder="Enter ocean concepts (e.g. ocean 
wind) to search">
+                        <ul class="list-group search-ul autocomplete" 
ng-model="hidethis" ng-hide="hidethis">
+                            <li class="list-group-item" ng-repeat="searchdata 
in filterSearch" 
ng-click="fillTextbox(searchdata.value)">{{searchdata.value}}</li>
+                        </ul>
+                        <button class="btn btn-default" id="search-btn" 
ng-click="search(options)"
+                                type="submit">
+                            <i class="glyphicon glyphicon-search"></i>
+                        </button>
+                        <div class="searchOption input-group" 
id="searchOption">
+                            <label for="searchOption" style="padding-right: 
.5em;">Search Operator: </label>
+                            <label class="radio-inline">
+                                <input type="radio" ng-model="options.opt" 
value="Or">Or
+                            </label>
+                            <label class="radio-inline">
+                                <input type="radio" ng-model="options.opt" 
value="Phrase"> Phrase
+                            </label>
+                            <label class="radio-inline">
+                                <input type="radio" ng-model="options.opt" 
value="And"> And
+                            </label>
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </nav>
+</header>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/search-in-progress.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/search-in-progress.html 
b/web/META-INF/resources/partials/search-in-progress.html
new file mode 100644
index 0000000..ea776d2
--- /dev/null
+++ b/web/META-INF/resources/partials/search-in-progress.html
@@ -0,0 +1,12 @@
+<div class="panel panel-primary post-holder">
+    <div class="panel-heading">
+        <h4 class="panel-title">
+            <strong class="title">Searching ...</strong>
+        </h4>
+    </div>
+    <div class="panel-body">
+        <div id="spinner">
+            <img src="images/spinner.gif" title="Search in progress">
+        </div>
+    </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/search-results.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/search-results.html 
b/web/META-INF/resources/partials/search-results.html
new file mode 100644
index 0000000..4dac2b5
--- /dev/null
+++ b/web/META-INF/resources/partials/search-results.html
@@ -0,0 +1,116 @@
+<div class="panel panel-primary post-holder">
+    <div class="panel-heading">
+        <select title="Sort By" class="title rankoption" name="rankOption" 
id="rankOption" ng-model="vm.rankopt" ng-change="vm.rankData(vm.rankopt)" 
ng-if="!vm.searchError">
+            <option value="Rank-SVM">Default (Machine Learning 
Ranking)</option>
+            <option value="Rank-AllTimePopularity">Popularity (All 
Time)</option>
+            <option value="Rank-MonthlyPopularity">Popularity (This 
Month)</option>
+            <option value="Rank-UserPopularity">Popularity (Users)</option>
+            <option value="Rank-LongName-Full">Long Name (A-Z)</option>
+            <option value="Rank-ShortName-Full">Short Name (A-Z)</option>
+            <option value="Rank-GridSpatialResolution">Grid Spatial 
Resolution</option>
+            <option value="Rank-SatelliteSpatialResolution">Satellite Spatial 
Resolution</option>
+            <option value="Rank-StartTimeLong-Long">Start Date</option>
+            <option value="Rank-StopTimeLong-Long">Stop Date</option>
+        </select>
+        <h4 class="panel-title">
+            <strong ng-if="vm.pager.pages.length > 1" class="title">Showing 
{{vm.items.length}} of {{vm.pager.totalItems}} total match(es)</strong>
+            <strong ng-if="vm.pager.pages.length <= 1" class="title">Showing 
{{vm.items.length}} total match(es)</strong>
+            <strong ng-if="vm.searchError" class="title">No matches</strong>
+        </h4>
+    </div>
+    <div class="panel-body">
+
+        <!-- pager -->
+        <ul ng-if="vm.pager.pages.length > 1" class="pagination" 
style="margin-top: 0">
+            <li ng-class="{disabled:vm.pager.currentPage === 1}">
+                <a ng-click="vm.setPage(1)">First</a>
+            </li>
+            <li ng-class="{disabled:vm.pager.currentPage === 1}">
+                <a ng-click="vm.setPage(vm.pager.currentPage - 1)">Previous</a>
+            </li>
+            <li ng-repeat="page in vm.pager.pages" 
ng-class="{active:vm.pager.currentPage === page}">
+                <a ng-click="vm.setPage(page)">{{page}}</a>
+            </li>
+            <li ng-class="{disabled:vm.pager.currentPage === 
vm.pager.totalPages}">
+                <a ng-click="vm.setPage(vm.pager.currentPage + 1)">Next</a>
+            </li>
+            <li ng-class="{disabled:vm.pager.currentPage === 
vm.pager.totalPages}">
+                <a ng-click="vm.setPage(vm.pager.totalPages)">Last</a>
+            </li>
+        </ul>
+        <hr style="clear:both; margin: 0; border: 0; border-bottom: 1px solid 
#c3c3c3;">
+        <div ng-repeat="pdresult in vm.items">
+            <article class="post">
+                <a href="#/datasetView?shortname={{pdresult['Short Name'] | 
urlencode}}&query={{vm.query | urlencode}}&opt={{vm.opt | urlencode}}">
+                    <strong>Name:</strong> {{pdresult['Short Name']}}
+                </a>
+                <br><strong>Long Name:</strong> {{pdresult['Long Name']}}
+                <br><strong>Topic:</strong>
+                <span style="color:green" 
ng-click="vm.searchTopic(pdresult.Topic)">{{pdresult.Topic}}</span>
+                <br><strong>Platform/Sensors:</strong> {{pdresult['Sensor']}}
+                <br><strong>Processing Level:</strong> {{pdresult['Processing 
Level']}}
+                <br><strong>Start/End Date:</strong> {{pdresult['Start/End 
Date']}}
+                <br><strong>Description:</strong>
+                <div ng-init="limit = 150; moreShown = false">
+                    {{pdresult.Description | limitTo: 
limit}}{{pdresult.Description.length > limit ? '...' : ''}}
+                    <a ng-show="pdresult.Description.length > limit"
+                       href ng-click="limit=pdresult.Description.length; 
moreShown = true"> More
+                    </a>
+                    <a ng-show="moreShown" href ng-click="limit=150; moreShown 
= false"> Less </a>
+                </div>
+            </article>
+        </div>
+        <!-- pager -->
+        <ul ng-if="vm.pager.pages.length > 1" class="pagination">
+            <li ng-class="{disabled:vm.pager.currentPage === 1}">
+                <a ng-click="vm.setPage(1)">First</a>
+            </li>
+            <li ng-class="{disabled:vm.pager.currentPage === 1}">
+                <a ng-click="vm.setPage(vm.pager.currentPage - 1)">Previous</a>
+            </li>
+            <li ng-repeat="page in vm.pager.pages" 
ng-class="{active:vm.pager.currentPage === page}">
+                <a ng-click="vm.setPage(page)">{{page}}</a>
+            </li>
+            <li ng-class="{disabled:vm.pager.currentPage === 
vm.pager.totalPages}">
+                <a ng-click="vm.setPage(vm.pager.currentPage + 1)">Next</a>
+            </li>
+            <li ng-class="{disabled:vm.pager.currentPage === 
vm.pager.totalPages}">
+                <a ng-click="vm.setPage(vm.pager.totalPages)">Last</a>
+            </li>
+        </ul>
+
+        <div ng-show="!vm.searchError && !vm.items.length">
+            <article class="post">
+                Your search did not match any dataset.
+                <br>Suggestion
+                <ul>
+                    <li>Make sure all words are spelled correctly</li>
+                    <li>Try different keywords</li>
+                    <li>Try different search options</li>
+                </ul>
+            </article>
+        </div>
+
+        <div ng-show="vm.searchError">
+            <article class="post">
+                There was an error while executing your search.
+                <br>Suggestion
+                <ul>
+                    <li>Make sure all words are spelled correctly</li>
+                    <li>Try different keywords</li>
+                    <li>Try different search options</li>
+                </ul>
+                <br>
+
+                <a ng-show="!showErrorDetails" ng-click="showErrorDetails = 
true;">Show error details</a>
+                <div ng-show="showErrorDetails" class="animate-show">
+                    <span>Error details:</span>
+                    <br>
+                    <pre>{{vm.searchError | json}}</pre>
+                    <br>
+                    <a ng-click="showErrorDetails = false;">Hide error 
details</a>
+                </div>
+            </article>
+        </div>
+    </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/META-INF/resources/partials/search.html
----------------------------------------------------------------------
diff --git a/web/META-INF/resources/partials/search.html 
b/web/META-INF/resources/partials/search.html
new file mode 100644
index 0000000..5844cd1
--- /dev/null
+++ b/web/META-INF/resources/partials/search.html
@@ -0,0 +1,58 @@
+<!-- 
+  Licensed under the Apache License, Version 2.0 (the "License"); 
+  you may not use this file except in compliance with the License. 
+  You may obtain  a copy of the License at 
+  
+  http://www.apache.org/licenses/LICENSE-2.0 Unless 
+  
+  required by applicable law or agreed to in writing, software 
+  distributed under the License is distributed on an "AS IS" 
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
+  express or implied. See the License for the specific language 
+  governing permissions and limitations under the License. 
+  -->
+<div ng-include src="'partials/navbar-plain.html'"></div>
+
+<div id="container" class="container view-area-scroll">
+    <div class="landing-dialog">
+        <div class="landing-dialog-header">
+            <h2>Oceanographic Data Discovery</h2>
+        </div>
+        <div class="searchBox toolbar">
+            <div class="landing-toolbar-content">
+                <form id="searchForm" class="search-form" autocomplete="off" 
ng-controller="searchCtrl">
+                    <div class="form-group" style="position: relative">
+
+                        <input id="query" type="search" class="form-control" 
ng-model="options.query" ng-keyup="complete(options.query)"
+                               placeholder="Enter ocean concepts (e.g. ocean 
wind) to search">
+                        <button id="search-btn" ng-click="search(options)"
+                                type="submit">
+                            <span class="ico-search"></span>
+                        </button>
+                        <div style="position: absolute; padding-top: 1em;">
+                            <label for="searchOption" style="padding-right: 
1em;">Search Operator:</label>
+                            <div id="searchOption" class="btn-group" 
data-toggle="buttons">
+                                <label class="radio-inline">
+                                    <input type="radio" ng-model="options.opt" 
value="Or">Or
+                                </label>
+                                <label class="radio-inline">
+                                    <input type="radio" ng-model="options.opt" 
value="Phrase">Phrase
+                                </label>
+                                <label class="radio-inline">
+                                    <input type="radio" ng-model="options.opt" 
value="And">And
+                                </label>
+                            </div>
+                        </div>
+                        <ul class="list-group autocomplete" 
ng-model="hidethis" ng-hide="hidethis">
+                            <li class="list-group-item" ng-repeat="searchdata 
in filterSearch" 
ng-click="fillTextbox(searchdata.value)">{{searchdata.value}}</li>
+                        </ul>
+                    </div>
+                </form>
+
+            </div>
+        </div>
+
+
+    </div>
+
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-sdap-mudrod/blob/7b76fa16/web/pom.xml
----------------------------------------------------------------------
diff --git a/web/pom.xml b/web/pom.xml
new file mode 100644
index 0000000..95b7c99
--- /dev/null
+++ b/web/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain  a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0 Unless
+
+  required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS"
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+  express or implied. See the License for the specific language
+  governing permissions and limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>gov.nasa.jpl.mudrod</groupId>
+    <artifactId>mudrod-web</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <build>
+        <resources>
+            <resource>
+                <directory>${project.basedir}/META-INF</directory>
+                <targetPath>META-INF</targetPath>
+            </resource>
+        </resources>
+    </build>
+    <packaging>jar</packaging>
+
+    <name>Mudrod :: Web</name>
+    <url>https://github.com/mudrod/mudrod.git</url>
+    <description>MUDROD: Mining and Utilizing Dataset Relevancy from
+        Oceanographic Datasets
+        to Improve Data Discovery and Access. MUDROD is a semantic discovery 
and
+        search project
+        funded by NASA AIST (NNX15AM85G).
+    </description>
+
+    <licenses>
+        <license>
+            <name>The Apache Software License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+        </license>
+    </licenses>
+
+
+</project>

Reply via email to