Added: 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap-prettify.min.js
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap-prettify.min.js?rev=1521565&view=auto
==============================================================================
--- 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap-prettify.min.js
 (added)
+++ 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap-prettify.min.js
 Tue Sep 10 17:55:21 2013
@@ -0,0 +1,41 @@
+/*
+ AngularJS v1.0.8
+ (c) 2010-2012 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(u,s,H){'use strict';function F(c){return 
c.replace(/\&/g,"&amp;").replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/"/g,"&quot;")}function
 A(c,e){var 
b=s.element("<pre>"+e+"</pre>");c.html("");c.append(b.contents());return c}var 
w={},x={value:{}},K={"angular.js":"http://code.angularjs.org/"+s.version.full+"/angular.min.js","angular-resource.js":"http://code.angularjs.org/"+s.version.full+"/angular-resource.min.js","angular-sanitize.js":"http://code.angularjs.org/"+s.version.full+"/angular-sanitize.min.js";,
+"angular-cookies.js":"http://code.angularjs.org/"+s.version.full+"/angular-cookies.min.js"};w.jsFiddle=function(c,e,b){return{terminal:!0,link:function(n,a,o){function
 d(a,b){return'<input type="hidden" name="'+a+'" value="'+e(b)+'">'}var 
p={html:"",css:"",js:""};s.forEach(o.jsFiddle.split(" "),function(a,b){var 
d=a.split(".")[1];p[d]+=d=="html"?b==0?"<div 
ng-app"+(o.module?'="'+o.module+'"':"")+">\n"+c(a,2):"\n\n\n  <\!-- CACHE FILE: 
"+a+' --\>\n  <script type="text/ng-template" id="'+a+'">\n'+c(a,
+4)+"  <\/script>\n":c(a)+"\n"});p.html+="</div>\n";A(a,'<form class="jsfiddle" 
method="post" action="http://jsfiddle.net/api/post/library/pure/"; 
target="_blank">'+d("title","AngularJS Example: ")+d("css",'</style> <\!-- Ugly 
Hack due to jsFiddle issue: http://goo.gl/BUfGZ --\> \n<link rel="stylesheet" 
href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css";>\n'+b.angular+(o.resource?b.resource:"")+"<style>\n"+p.css)+d("html",p.html)+d("js",p.js)+'<button
 class="btn btn-primary"><i class="icon-white icon-pencil"></i> Edit 
Me</button></form>')}}};
+w.code=function(){return{restrict:"E",terminal:!0}};w.prettyprint=["reindentCode",function(c){return{restrict:"C",terminal:!0,compile:function(e){e.html(u.prettyPrintOne(c(e.html()),H,!0))}}}];w.ngSetText=["getEmbeddedTemplate",function(c){return{restrict:"CA",priority:10,compile:function(e,b){A(e,F(c(b.ngSetText)))}}}];w.ngHtmlWrap=["reindentCode","templateMerge",function(c,e){return{compile:function(b,c){var
 a={head:"",module:"",body:b.text()};s.forEach((c.ngHtmlWrap||"").split(" 
"),function(b){if(b){var b=
+K[b]||b,d=b.split(/\./).pop();d=="css"?a.head+='<link rel="stylesheet" 
href="'+b+'" type="text/css">\n':d=="js"?a.head+='<script 
src="'+b+'"><\/script>\n':a.module='="'+b+'"'}});A(b,F(e("<!doctype 
html>\n<html ng-app{{module}}>\n  <head>\n{{head:4}}  </head>\n  
<body>\n{{body:4}}  
</body>\n</html>",a)))}}}];w.ngSetHtml=["getEmbeddedTemplate",function(c){return{restrict:"CA",priority:10,compile:function(e,b){A(e,c(b.ngSetHtml))}}}];w.ngEvalJavascript=["getEmbeddedTemplate",function(c){return{compile:function(e,
+b){var 
n=c(b.ngEvalJavascript);try{u.execScript?u.execScript(n||'""'):u.eval(n)}catch(a){u.console?u.console.log(n,"\n",a):u.alert(a)}}}}];w.ngEmbedApp=["$templateCache","$browser","$rootScope","$location",function(c,e,b,n){return{terminal:!0,link:function(a,o,d){var
 
a=[],p,u;a.push(["$provide",function(a){a.value("$templateCache",c);a.value("$anchorScroll",s.noop);a.value("$browser",e);a.provider("$location",function(){this.$get=["$rootScope",function(a){b.$on("$locationChangeSuccess",function(b,
+d,c){a.$broadcast("$locationChangeSuccess",d,c)});return 
n}];this.html5Mode=s.noop});a.decorator("$timeout",["$rootScope","$delegate",function(a,b){return
 s.extend(function(d,c){return 
c&&c>50?setTimeout(function(){a.$apply(d)},c):b.apply(this,arguments)},b)}]);a.decorator("$rootScope",["$delegate",function(a){p=a;u=b.$watch(function(){p.$digest()});return
 
p}])}]);d.ngEmbedApp&&a.push(d.ngEmbedApp);o.bind("click",function(a){a.target.attributes.getNamedItem("ng-click")&&a.preventDefault()});o.bind("$destroy",
+function(){u();p.$destroy()});s.bootstrap(o,a)}}}];x.reindentCode=function(){return
 function(c,e){if(!c)return c;for(var b=c.split(/\r?\n/),n="      
".substr(0,e||0),a;b.length&&b[0].match(/^\s*$/);)b.shift();for(;b.length&&b[b.length-1].match(/^\s*$/);)b.pop();var
 o=999;for(a=0;a<b.length;a++){var 
d=b[0],p=d.match(/^\s*/)[0];if(p!==d&&p.length<o)o=p.length}for(a=0;a<b.length;a++)b[a]=n+b[a].substring(o);b.push("");return
 b.join("\n")}};x.templateMerge=["reindentCode",function(c){return function(e,
+b){return 
e.replace(/\{\{(\w+)(?:\:(\d+))?\}\}/g,function(e,a,o){e=b[a];o&&(e=c(e,o));return
 e==H?"":e})}}];x.getEmbeddedTemplate=["reindentCode",function(c){return 
function(e){e=document.getElementById(e);return!e?null:c(s.element(e).html(),0)}}];s.module("bootstrapPrettify",[]).directive(w).factory(x);u.PR_SHOULD_USE_CONTINUATION=!0;(function(){function
 c(a){function b(i){var a=i.charCodeAt(0);if(a!==92)return a;var 
k=i.charAt(1);return(a=t[k])?a:"0"<=k&&k<="7"?parseInt(i.substring(1),8):k==="u"||
+k==="x"?parseInt(i.substring(2),16):i.charCodeAt(1)}function 
C(i){if(i<32)return(i<16?"\\x0":"\\x")+i.toString(16);i=String.fromCharCode(i);return
 i==="\\"||i==="-"||i==="]"||i==="^"?"\\"+i:i}function L(i){var 
a=i.substring(1,i.length-1).match(/\\u[0-9A-Fa-f]{4}|\\x[0-9A-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\s\S]|-|[^-\\]/g),i=[],k=a[0]==="^",f=["["];k&&f.push("^");for(var
 k=k?1:0,g=a.length;k<g;++k){var 
j=a[k];if(/\\[bdsw]/i.test(j))f.push(j);else{var 
j=b(j),h;k+2<g&&"-"===a[k+1]?(h=b(a[k+
+2]),k+=2):h=j;i.push([j,h]);h<65||j>122||(h<65||j>90||i.push([Math.max(65,j)|32,Math.min(h,90)|32]),h<97||j>122||i.push([Math.max(97,j)&-33,Math.min(h,122)&-33]))}}i.sort(function(i,a){return
 
i[0]-a[0]||a[1]-i[1]});a=[];g=[];for(k=0;k<i.length;++k)j=i[k],j[0]<=g[1]+1?g[1]=Math.max(g[1],j[1]):a.push(g=j);for(k=0;k<a.length;++k)j=a[k],f.push(C(j[0])),j[1]>j[0]&&(j[1]+1>j[0]&&f.push("-"),f.push(C(j[1])));f.push("]");return
 f.join("")}function c(i){for(var 
a=i.source.match(RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)",
+"g")),f=a.length,b=[],g=0,j=0;g<f;++g){var 
h=a[g];h==="("?++j:"\\"===h.charAt(0)&&(h=+h.substring(1))&&(h<=j?b[h]=-1:a[g]=C(h))}for(g=1;g<b.length;++g)-1===b[g]&&(b[g]=++d);for(j=g=0;g<f;++g)h=a[g],h==="("?(++j,b[j]||(a[g]="(?:")):"\\"===h.charAt(0)&&(h=+h.substring(1))&&h<=j&&(a[g]="\\"+b[h]);for(g=0;g<f;++g)"^"===a[g]&&"^"!==a[g+1]&&(a[g]="");if(i.ignoreCase&&e)for(g=0;g<f;++g)h=a[g],i=h.charAt(0),h.length>=2&&i==="["?a[g]=L(h):i!=="\\"&&(a[g]=h.replace(/[a-zA-Z]/g,function(a){a=a.charCodeAt(0);
+return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var 
d=0,e=!1,m=!1,r=0,f=a.length;r<f;++r){var l=a[r];if(l.ignoreCase)m=!0;else 
if(/[a-z]/i.test(l.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){e=!0;m=!1;break}}for(var
 
t={b:8,t:9,n:10,v:11,f:12,r:13},q=[],r=0,f=a.length;r<f;++r){l=a[r];if(l.global||l.multiline)throw
 Error(""+l);q.push("(?:"+c(l)+")")}return 
RegExp(q.join("|"),m?"gi":"g")}function e(a,b){function 
C(a){switch(a.nodeType){case 1:if(L.test(a.className))break;
+for(var 
f=a.firstChild;f;f=f.nextSibling)C(f);f=a.nodeName.toLowerCase();if("br"===f||"li"===f)c[m]="\n",e[m<<1]=d++,e[m++<<1|1]=a;break;case
 3:case 4:f=a.nodeValue,f.length&&(f=b?f.replace(/\r\n?/g,"\n"):f.replace(/[ 
\t\r\n]+/g," "),c[m]=f,e[m<<1]=d,d+=f.length,e[m++<<1|1]=a)}}var 
L=/(?:^|\s)nocode(?:\s|$)/,c=[],d=0,e=[],m=0;C(a);return{sourceCode:c.join("").replace(/\n$/,""),spans:e}}function
 
b(a,b,c,d){b&&(a={sourceCode:b,basePos:a},c(a),d.push.apply(d,a.decorations))}function
 n(a,d){var C={},
+e;(function(){for(var b=a.concat(d),m=[],r={},f=0,l=b.length;f<l;++f){var 
t=b[f],q=t[3];if(q)for(var 
i=q.length;--i>=0;)C[q.charAt(i)]=t;t=t[1];q=""+t;r.hasOwnProperty(q)||(m.push(t),r[q]=null)}m.push(/[\0-\uffff]/);e=c(m)})();var
 o=d.length,s=function(a){for(var 
c=a.basePos,G=[c,"pln"],f=0,l=a.sourceCode.match(e)||[],t={},q=0,i=l.length;q<i;++q){var
 y=l[q],k=t[y],v=void 0,g;if(typeof k==="string")g=!1;else{var 
j=C[y.charAt(0)];if(j)v=y.match(j[1]),k=j[0];else{for(g=0;g<o;++g)if(j=d[g],v=y.match(j[1])){k=
+j[0];break}v||(k="pln")}if((g=k.length>=5&&"lang-"===k.substring(0,5))&&!(v&&typeof
 v[1]==="string"))g=!1,k="src";g||(t[y]=k)}j=f;f+=y.length;if(g){g=v[1];var 
h=y.indexOf(g),E=h+g.length;v[2]&&(E=y.length-v[2].length,h=E-g.length);k=k.substring(5);b(c+j,y.substring(0,h),s,G);b(c+j+h,g,p(k,g),G);b(c+j+E,y.substring(E),s,G)}else
 G.push(c+j,k)}a.decorations=G};return s}function a(a){var 
b=[],c=[];a.tripleQuotedStrings?b.push(["str",/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
+null,"'\""]):a.multiLineStrings?b.push(["str",/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"]):b.push(["str",/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"]);a.verbatimStrings&&c.push(["str",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null]);var
 
d=a.hashComments;d&&(a.cStyleComments?(d>1?b.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"]):b.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
+null,"#"]),c.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,null])):b.push(["com",/^#[^\r\n]*/,null,"#"]));a.cStyleComments&&(c.push(["com",/^\/\/[^\r\n]*/,null]),c.push(["com",/^\/\*[\s\S]*?(?:\*\/|$)/,null]));a.regexLiterals&&c.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*(/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/)")]);
+(d=a.types)&&c.push(["typ",d]);a=(""+a.keywords).replace(/^ | 
$/g,"");a.length&&c.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),null]);b.push(["pln",/^\s+/,null,"
 
\r\n\t\u00a0"]);c.push(["lit",/^@[a-z_$][a-z_$@0-9]*/i,null],["typ",/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],["pln",/^[a-z_$][a-z_$@0-9]*/i,null],["lit",/^(?:0x[a-f0-9]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+\-]?\d+)?)[a-z]*/i,null,"0123456789"],["pln",/^\\[\s\S]?/,null],["pun",/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);
+return n(b,c)}function o(a,b,c){function d(a){switch(a.nodeType){case 
1:if(s.test(a.className))break;if("br"===a.nodeName)e(a),a.parentNode&&a.parentNode.removeChild(a);else
 for(a=a.firstChild;a;a=a.nextSibling)d(a);break;case 3:case 4:if(c){var 
b=a.nodeValue,f=b.match(o);if(f){var 
l=b.substring(0,f.index);a.nodeValue=l;(b=b.substring(f.index+f[0].length))&&a.parentNode.insertBefore(m.createTextNode(b),a.nextSibling);e(a);l||a.parentNode.removeChild(a)}}}}function
 e(a){function b(a,f){var c=f?a.cloneNode(!1):
+a,h=a.parentNode;if(h){var h=b(h,1),d=a.nextSibling;h.appendChild(c);for(var 
i=d;i;i=d)d=i.nextSibling,h.appendChild(i)}return 
c}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var 
a=b(a.nextSibling,0),c;(c=a.parentNode)&&c.nodeType===1;)a=c;f.push(a)}for(var 
s=/(?:^|\s)nocode(?:\s|$)/,o=/\r\n?|\n/,m=a.ownerDocument,r=m.createElement("li");a.firstChild;)r.appendChild(a.firstChild);for(var
 f=[r],l=0;l<f.length;++l)d(f[l]);b===(b|0)&&f[0].setAttribute("value",b);var 
t=m.createElement("ol");t.className=
+"linenums";for(var 
b=Math.max(0,b-1|0)||0,l=0,q=f.length;l<q;++l)r=f[l],r.className="L"+(l+b)%10,r.firstChild||r.appendChild(m.createTextNode("\u00a0")),t.appendChild(r);a.appendChild(t)}function
 d(a,b){for(var c=b.length;--c>=0;){var 
d=b[c];I.hasOwnProperty(d)?w.console&&console.warn("cannot override language 
handler %s",d):I[d]=a}}function 
p(a,b){if(!a||!I.hasOwnProperty(a))a=/^\s*</.test(b)?"default-markup":"default-code";return
 I[a]}function s(a){var b=a.langExtension;try{var c=e(a.sourceNode,
+a.pre),d=c.sourceCode;a.sourceCode=d;a.spans=c.spans;a.basePos=0;p(b,d)(a);var 
o=/\bMSIE\s(\d+)/.exec(navigator.userAgent),o=o&&+o[1]<=8,b=/\n/g,n=a.sourceCode,u=n.length,c=0,m=a.spans,r=m.length,d=0,f=a.decorations,l=f.length,t=0;f[l]=u;var
 
q,i;for(i=q=0;i<l;)f[i]!==f[i+2]?(f[q++]=f[i++],f[q++]=f[i++]):i+=2;l=q;for(i=q=0;i<l;){for(var
 
y=f[i],k=f[i+1],v=i+2;v+2<=l&&f[v+1]===k;)v+=2;f[q++]=y;f[q++]=k;i=v}f.length=q;var
 
g=a.sourceNode,j;if(g)j=g.style.display,g.style.display="none";try{for(;d<r;){var
 h=
+m[d+2]||u,E=f[t+2]||u,v=Math.min(h,E),D=m[d+1],J;if(D.nodeType!==1&&(J=n.substring(c,v))){o&&(J=J.replace(b,"\r"));D.nodeValue=J;var
 A=D.ownerDocument,x=A.createElement("span");x.className=f[t+1];var 
B=D.parentNode;B.replaceChild(x,D);x.appendChild(D);c<h&&(m[d+1]=D=A.createTextNode(n.substring(v,h)),B.insertBefore(D,x.nextSibling))}c=v;c>=h&&(d+=2);c>=E&&(t+=2)}}finally{if(g)g.style.display=j}}catch(z){w.console&&console.log(z&&z.stack?z.stack:z)}}var
 w=u,B=["break,continue,do,else,for,if,return,while"],
+z=[[B,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],A=[z,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],
+x=[z,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],F=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],z=[z,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],
+M=[B,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],N=[B,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],B=[B,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],O=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,
+K=/\S/,P=a({keywords:[A,F,z,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+M,N,B],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),I={};d(P,["default-code"]);d(n([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",
+/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);d(n([["pln",/^[\s]+/,null,"
 
\t\r\n"],["atv",/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
+["pun",/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);d(n([],[["atv",/^[\s\S]+/]]),["uq.val"]);d(a({keywords:A,hashComments:!0,cStyleComments:!0,types:O}),["c","cc","cpp","cxx","cyc","m"]);d(a({keywords:"null,true,false"}),["json"]);d(a({keywords:F,hashComments:!0,cStyleComments:!0,
+verbatimStrings:!0,types:O}),["cs"]);d(a({keywords:x,cStyleComments:!0}),["java"]);d(a({keywords:B,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);d(a({keywords:M,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py"]);d(a({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl",
+"pl","pm"]);d(a({keywords:N,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);d(a({keywords:z,cStyleComments:!0,regexLiterals:!0}),["js"]);d(a({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);d(n([],[["str",/^[\s\S]+/]]),["regex"]);var
 Q=w.PR={createSimpleLexer:n,
+registerLangHandler:d,sourceDecorator:a,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:w.prettyPrintOne=function(a,b,c){var
 
d=document.createElement("div");d.innerHTML="<pre>"+a+"</pre>";d=d.firstChild;c&&o(d,c,!0);s({langExtension:b,numberLines:c,sourceNode:d,pre:1});return
 d.innerHTML},prettyPrint:w.prettyPrint=
+function(a){function b(){var v;for(var 
c=w.PR_SHOULD_USE_CONTINUATION?m.now()+250:Infinity;r<d.length&&m.now()<c;r++){var
 g=d[r],j=g.className;if(t.test(j)&&!q.test(j)){for(var 
h=!1,e=g.parentNode;e;e=e.parentNode)if(k.test(e.tagName)&&e.className&&t.test(e.className)){h=!0;break}if(!h){g.className+="
 prettyprinted";var j=j.match(l),n;if(h=!j){for(var 
h=g,e=H,p=h.firstChild;p;p=p.nextSibling)var 
x=p.nodeType,e=x===1?e?h:p:x===3?K.test(p.nodeValue)?h:e:e;h=(n=e===h?H:e)&&u.test(n.tagName)}h&&(j=n.className.match(l));
+j&&(j=j[1]);v=i.test(g.tagName)?1:(h=(h=g.currentStyle)?h.whiteSpace:document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(g,null).getPropertyValue("white-space"):0)&&"pre"===h.substring(0,3),h=v;(e=(e=g.className.match(/\blinenums\b(?::(\d+))?/))?e[1]&&e[1].length?+e[1]:!0:!1)&&o(g,e,h);f={langExtension:j,sourceNode:g,numberLines:e,pre:h};s(f)}}}r<d.length?setTimeout(b,250):a&&a()}for(var
 c=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),
+document.getElementsByTagName("xmp")],d=[],e=0;e<c.length;++e)for(var 
n=0,p=c[e].length;n<p;++n)d.push(c[e][n]);var 
c=null,m=Date;m.now||(m={now:function(){return+new Date}});var 
r=0,f,l=/\blang(?:uage)?-([\w.]+)(?!\S)/,t=/\bprettyprint\b/,q=/\bprettyprinted\b/,i=/pre|xmp/i,u=/^code$/i,k=/^(?:pre|code|xmp)$/i;b()}};typeof
 
define==="function"&&define.amd&&define("google-code-prettify",[],function(){return
 
Q})})()})(window,window.angular);angular.element(document).find("head").append('<style
 
type="text/css">.com{color:#93a1a1;}.lit{color:#195f91;}.pun,.opn,.clo{color:#93a1a1;}.fun{color:#dc322f;}.str,.atv{color:#D14;}.kwd,.linenums
 
.tag{color:#1e347b;}.typ,.atn,.dec,.var{color:teal;}.pln{color:#48484c;}.prettyprint{padding:8px;background-color:#f7f7f9;border:1px
 solid #e1e1e8;}.prettyprint.linenums{-webkit-box-shadow:inset 40px 0 0 
#fbfbfc,inset 41px 0 0 #ececf0;-moz-box-shadow:inset 40px 0 0 #fbfbfc,inset 
41px 0 0 #ececf0;box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0;}ol.l
 inenums{margin:0 0 0 33px;}ol.linenums 
li{padding-left:12px;color:#bebec5;line-height:18px;text-shadow:0 1px 0 
#fff;}</style>');

Added: 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap.js
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap.js?rev=1521565&view=auto
==============================================================================
--- 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap.js
 (added)
+++ 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap.js
 Tue Sep 10 17:55:21 2013
@@ -0,0 +1,175 @@
+/**
+ * @license AngularJS v1.0.8
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {
+'use strict';
+
+var directive = {};
+
+directive.dropdownToggle =
+          ['$document', '$location', '$window',
+  function ($document,   $location,   $window) {
+    var openElement = null, close;
+    return {
+      restrict: 'C',
+      link: function(scope, element, attrs) {
+        scope.$watch(function dropdownTogglePathWatch(){return 
$location.path();}, function dropdownTogglePathWatchAction() {
+          close && close();
+        });
+
+        element.parent().bind('click', function(event) {
+          close && close();
+        });
+
+        element.bind('click', function(event) {
+          event.preventDefault();
+          event.stopPropagation();
+
+          var iWasOpen = false;
+
+          if (openElement) {
+            iWasOpen = openElement === element;
+            close();
+          }
+
+          if (!iWasOpen){
+            element.parent().addClass('open');
+            openElement = element;
+
+            close = function (event) {
+              event && event.preventDefault();
+              event && event.stopPropagation();
+              $document.unbind('click', close);
+              element.parent().removeClass('open');
+              close = null;
+              openElement = null;
+            }
+
+            $document.bind('click', close);
+          }
+        });
+      }
+    };
+  }];
+
+
+directive.tabbable = function() {
+  return {
+    restrict: 'C',
+    compile: function(element) {
+      var navTabs = angular.element('<ul class="nav nav-tabs"></ul>'),
+          tabContent = angular.element('<div class="tab-content"></div>');
+
+      tabContent.append(element.contents());
+      element.append(navTabs).append(tabContent);
+    },
+    controller: ['$scope', '$element', function($scope, $element) {
+      var navTabs = $element.contents().eq(0),
+          ngModel = $element.controller('ngModel') || {},
+          tabs = [],
+          selectedTab;
+
+      ngModel.$render = function() {
+        var $viewValue = this.$viewValue;
+
+        if (selectedTab ? (selectedTab.value != $viewValue) : $viewValue) {
+          if(selectedTab) {
+            selectedTab.paneElement.removeClass('active');
+            selectedTab.tabElement.removeClass('active');
+            selectedTab = null;
+          }
+          if($viewValue) {
+            for(var i = 0, ii = tabs.length; i < ii; i++) {
+              if ($viewValue == tabs[i].value) {
+                selectedTab = tabs[i];
+                break;
+              }
+            }
+            if (selectedTab) {
+              selectedTab.paneElement.addClass('active');
+              selectedTab.tabElement.addClass('active');
+            }
+          }
+
+        }
+      };
+
+      this.addPane = function(element, attr) {
+        var li = angular.element('<li><a href></a></li>'),
+            a = li.find('a'),
+            tab = {
+              paneElement: element,
+              paneAttrs: attr,
+              tabElement: li
+            };
+
+        tabs.push(tab);
+
+        attr.$observe('value', update)();
+        attr.$observe('title', function(){ update(); a.text(tab.title); })();
+
+        function update() {
+          tab.title = attr.title;
+          tab.value = attr.value || attr.title;
+          if (!ngModel.$setViewValue && (!ngModel.$viewValue || tab == 
selectedTab)) {
+            // we are not part of angular
+            ngModel.$viewValue = tab.value;
+          }
+          ngModel.$render();
+        }
+
+        navTabs.append(li);
+        li.bind('click', function(event) {
+          event.preventDefault();
+          event.stopPropagation();
+          if (ngModel.$setViewValue) {
+            $scope.$apply(function() {
+              ngModel.$setViewValue(tab.value);
+              ngModel.$render();
+            });
+          } else {
+            // we are not part of angular
+            ngModel.$viewValue = tab.value;
+            ngModel.$render();
+          }
+        });
+
+        return function() {
+          tab.tabElement.remove();
+          for(var i = 0, ii = tabs.length; i < ii; i++ ) {
+            if (tab == tabs[i]) {
+              tabs.splice(i, 1);
+            }
+          }
+        };
+      }
+    }]
+  };
+};
+
+directive.table = function() {
+  return {
+    restrict: 'E',
+    link: function(scope, element, attrs) {
+      element[0].className = 'table table-bordered table-striped code-table';
+    }
+  };
+};
+
+directive.tabPane = function() {
+  return {
+    require: '^tabbable',
+    restrict: 'C',
+    link: function(scope, element, attrs, tabsCtrl) {
+      element.bind('$remove', tabsCtrl.addPane(element, attrs));
+    }
+  };
+};
+
+
+angular.module('bootstrap', []).directive(directive);
+
+
+})(window, window.angular);

Added: 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap.min.js
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap.min.js?rev=1521565&view=auto
==============================================================================
--- 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap.min.js
 (added)
+++ 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-bootstrap.min.js
 Tue Sep 10 17:55:21 2013
@@ -0,0 +1,9 @@
+/*
+ AngularJS v1.0.8
+ (c) 2010-2012 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(n,j){'use 
strict';j.module("bootstrap",[]).directive({dropdownToggle:["$document","$location","$window",function(g,d){var
 e=null,a;return{restrict:"C",link:function(h,b){h.$watch(function(){return 
d.path()},function(){a&&a()});b.parent().bind("click",function(){a&&a()});b.bind("click",function(i){i.preventDefault();i.stopPropagation();i=!1;e&&(i=e===b,a());i||(b.parent().addClass("open"),e=b,a=function(c){c&&c.preventDefault();c&&c.stopPropagation();g.unbind("click",a);b.parent().removeClass("open");
+e=a=null},g.bind("click",a))})}}}],tabbable:function(){return{restrict:"C",compile:function(g){var
 d=j.element('<ul class="nav nav-tabs"></ul>'),e=j.element('<div 
class="tab-content"></div>');e.append(g.contents());g.append(d).append(e)},controller:["$scope","$element",function(g,d){var
 
e=d.contents().eq(0),a=d.controller("ngModel")||{},h=[],b;a.$render=function(){var
 
a=this.$viewValue;if(b?b.value!=a:a)if(b&&(b.paneElement.removeClass("active"),b.tabElement.removeClass("active"),b=null),a){for(var
 c=
+0,d=h.length;c<d;c++)if(a==h[c].value){b=h[c];break}b&&(b.paneElement.addClass("active"),b.tabElement.addClass("active"))}};this.addPane=function(d,c){function
 
l(){f.title=c.title;f.value=c.value||c.title;if(!a.$setViewValue&&(!a.$viewValue||f==b))a.$viewValue=f.value;a.$render()}var
 k=j.element("<li><a 
href></a></li>"),m=k.find("a"),f={paneElement:d,paneAttrs:c,tabElement:k};h.push(f);c.$observe("value",l)();c.$observe("title",function(){l();m.text(f.title)})();e.append(k);k.bind("click",function(b){b.preventDefault();
+b.stopPropagation();a.$setViewValue?g.$apply(function(){a.$setViewValue(f.value);a.$render()}):(a.$viewValue=f.value,a.$render())});return
 function(){f.tabElement.remove();for(var 
a=0,b=h.length;a<b;a++)f==h[a]&&h.splice(a,1)}}}]}},table:function(){return{restrict:"E",link:function(g,d){d[0].className="table
 table-bordered table-striped 
code-table"}}},tabPane:function(){return{require:"^tabbable",restrict:"C",link:function(g,d,e,a){d.bind("$remove",a.addPane(d,e))}}}})})(window,window.angular);

Added: 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.js
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.js?rev=1521565&view=auto
==============================================================================
--- 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.js
 (added)
+++ 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.js
 Tue Sep 10 17:55:21 2013
@@ -0,0 +1,196 @@
+/**
+ * @license AngularJS v1.0.8
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {
+'use strict';
+
+/**
+ * @ngdoc overview
+ * @name ngCookies
+ */
+
+
+angular.module('ngCookies', ['ng']).
+  /**
+   * @ngdoc object
+   * @name ngCookies.$cookies
+   * @requires $browser
+   *
+   * @description
+   * Provides read/write access to browser's cookies.
+   *
+   * Only a simple Object is exposed and by adding or removing properties 
to/from
+   * this object, new cookies are created/deleted at the end of current $eval.
+   *
+   * # Installation
+   * To use $cookies make sure you have included the `angular-cookies.js` that 
comes in Angular
+   * package. You can also find this file on Google CDN, bower as well as at
+   * {@link http://code.angularjs.org/ code.angularjs.org}.
+   *
+   * Finally load the module in your application:
+   *
+   *        angular.module('app', ['ngCookies']);
+   *
+   * and you are ready to get started!
+   *
+   * @example
+   <doc:example>
+     <doc:source>
+       <script>
+         function ExampleController($cookies) {
+           // Retrieving a cookie
+           var favoriteCookie = $cookies.myFavorite;
+           // Setting a cookie
+           $cookies.myFavorite = 'oatmeal';
+         }
+       </script>
+     </doc:source>
+   </doc:example>
+   */
+   factory('$cookies', ['$rootScope', '$browser', function ($rootScope, 
$browser) {
+      var cookies = {},
+          lastCookies = {},
+          lastBrowserCookies,
+          runEval = false,
+          copy = angular.copy,
+          isUndefined = angular.isUndefined;
+
+      //creates a poller fn that copies all cookies from the $browser to 
service & inits the service
+      $browser.addPollFn(function() {
+        var currentCookies = $browser.cookies();
+        if (lastBrowserCookies != currentCookies) { //relies on 
browser.cookies() impl
+          lastBrowserCookies = currentCookies;
+          copy(currentCookies, lastCookies);
+          copy(currentCookies, cookies);
+          if (runEval) $rootScope.$apply();
+        }
+      })();
+
+      runEval = true;
+
+      //at the end of each eval, push cookies
+      //TODO: this should happen before the "delayed" watches fire, because if 
some cookies are not
+      //      strings or browser refuses to store some cookies, we update the 
model in the push fn.
+      $rootScope.$watch(push);
+
+      return cookies;
+
+
+      /**
+       * Pushes all the cookies from the service to the browser and verifies 
if all cookies were stored.
+       */
+      function push() {
+        var name,
+            value,
+            browserCookies,
+            updated;
+
+        //delete any cookies deleted in $cookies
+        for (name in lastCookies) {
+          if (isUndefined(cookies[name])) {
+            $browser.cookies(name, undefined);
+          }
+        }
+
+        //update all cookies updated in $cookies
+        for(name in cookies) {
+          value = cookies[name];
+          if (!angular.isString(value)) {
+            if (angular.isDefined(lastCookies[name])) {
+              cookies[name] = lastCookies[name];
+            } else {
+              delete cookies[name];
+            }
+          } else if (value !== lastCookies[name]) {
+            $browser.cookies(name, value);
+            updated = true;
+          }
+        }
+
+        //verify what was actually stored
+        if (updated){
+          updated = false;
+          browserCookies = $browser.cookies();
+
+          for (name in cookies) {
+            if (cookies[name] !== browserCookies[name]) {
+              //delete or reset all cookies that the browser dropped from 
$cookies
+              if (isUndefined(browserCookies[name])) {
+                delete cookies[name];
+              } else {
+                cookies[name] = browserCookies[name];
+              }
+              updated = true;
+            }
+          }
+        }
+      }
+    }]).
+
+
+  /**
+   * @ngdoc object
+   * @name ngCookies.$cookieStore
+   * @requires $cookies
+   *
+   * @description
+   * Provides a key-value (string-object) storage, that is backed by session 
cookies.
+   * Objects put or retrieved from this storage are automatically serialized or
+   * deserialized by angular's toJson/fromJson.
+   * @example
+   */
+   factory('$cookieStore', ['$cookies', function($cookies) {
+
+      return {
+        /**
+         * @ngdoc method
+         * @name ngCookies.$cookieStore#get
+         * @methodOf ngCookies.$cookieStore
+         *
+         * @description
+         * Returns the value of given cookie key
+         *
+         * @param {string} key Id to use for lookup.
+         * @returns {Object} Deserialized cookie value.
+         */
+        get: function(key) {
+          var value = $cookies[key];
+          return value ? angular.fromJson(value) : value;
+        },
+
+        /**
+         * @ngdoc method
+         * @name ngCookies.$cookieStore#put
+         * @methodOf ngCookies.$cookieStore
+         *
+         * @description
+         * Sets a value for given cookie key
+         *
+         * @param {string} key Id for the `value`.
+         * @param {Object} value Value to be stored.
+         */
+        put: function(key, value) {
+          $cookies[key] = angular.toJson(value);
+        },
+
+        /**
+         * @ngdoc method
+         * @name ngCookies.$cookieStore#remove
+         * @methodOf ngCookies.$cookieStore
+         *
+         * @description
+         * Remove given cookie
+         *
+         * @param {string} key Id of the key-value pair to delete.
+         */
+        remove: function(key) {
+          delete $cookies[key];
+        }
+      };
+
+    }]);
+
+
+})(window, window.angular);

Added: 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js?rev=1521565&view=auto
==============================================================================
--- 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js
 (added)
+++ 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js
 Tue Sep 10 17:55:21 2013
@@ -0,0 +1,7 @@
+/*
+ AngularJS v1.0.8
+ (c) 2010-2012 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(m,f,l){'use 
strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(d,b){var
 c={},g={},h,i=!1,j=f.copy,k=f.isUndefined;b.addPollFn(function(){var 
a=b.cookies();h!=a&&(h=a,j(a,g),j(a,c),i&&d.$apply())})();i=!0;d.$watch(function(){var
 a,e,d;for(a in g)k(c[a])&&b.cookies(a,l);for(a in 
c)e=c[a],f.isString(e)?e!==g[a]&&(b.cookies(a,e),d=!0):f.isDefined(g[a])?c[a]=g[a]:delete
 c[a];if(d)for(a in e=b.cookies(),c)c[a]!==e[a]&&(k(e[a])?delete 
c[a]:c[a]=e[a])});return c}]).factory("$cookieStore",
+["$cookies",function(d){return{get:function(b){return(b=d[b])?f.fromJson(b):b},put:function(b,c){d[b]=f.toJson(c)},remove:function(b){delete
 d[b]}}}])})(window,window.angular);

Added: 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.js
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.js?rev=1521565&view=auto
==============================================================================
--- 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.js
 (added)
+++ 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.js
 Tue Sep 10 17:55:21 2013
@@ -0,0 +1,277 @@
+/**
+ * @license AngularJS v1.0.8
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+
+(
+
+/**
+ * @ngdoc interface
+ * @name angular.Module
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+  function ensure(obj, name, factory) {
+    return obj[name] || (obj[name] = factory());
+  }
+
+  return ensure(ensure(window, 'angular', Object), 'module', function() {
+    /** @type {Object.<string, angular.Module>} */
+    var modules = {};
+
+    /**
+     * @ngdoc function
+     * @name angular.module
+     * @description
+     *
+     * The `angular.module` is a global place for creating and registering 
Angular modules. All
+     * modules (angular core or 3rd party) that should be available to an 
application must be
+     * registered using this mechanism.
+     *
+     *
+     * # Module
+     *
+     * A module is a collection of services, directives, filters, and 
configuration information.
+     * `angular.module` is used to configure the {@link AUTO.$injector 
$injector}.
+     *
+     * <pre>
+     * // Create a new module
+     * var myModule = angular.module('myModule', []);
+     *
+     * // register a new service
+     * myModule.value('appName', 'MyCoolApp');
+     *
+     * // configure existing services inside initialization blocks.
+     * myModule.config(function($locationProvider) {
+'use strict';
+     *   // Configure existing providers
+     *   $locationProvider.hashPrefix('!');
+     * });
+     * </pre>
+     *
+     * Then you can create an injector and load your modules like this:
+     *
+     * <pre>
+     * var injector = angular.injector(['ng', 'MyModule'])
+     * </pre>
+     *
+     * However it's more likely that you'll just use
+     * {@link ng.directive:ngApp ngApp} or
+     * {@link angular.bootstrap} to simplify this process for you.
+     *
+     * @param {!string} name The name of the module to create or retrieve.
+     * @param {Array.<string>=} requires If specified then new module is being 
created. If unspecified then the
+     *        the module is being retrieved for further configuration.
+     * @param {Function} configFn Optional configuration function for the 
module. Same as
+     *        {@link angular.Module#config Module#config()}.
+     * @returns {module} new module with the {@link angular.Module} api.
+     */
+    return function module(name, requires, configFn) {
+      if (requires && modules.hasOwnProperty(name)) {
+        modules[name] = null;
+      }
+      return ensure(modules, name, function() {
+        if (!requires) {
+          throw Error('No module: ' + name);
+        }
+
+        /** @type {!Array.<Array.<*>>} */
+        var invokeQueue = [];
+
+        /** @type {!Array.<Function>} */
+        var runBlocks = [];
+
+        var config = invokeLater('$injector', 'invoke');
+
+        /** @type {angular.Module} */
+        var moduleInstance = {
+          // Private state
+          _invokeQueue: invokeQueue,
+          _runBlocks: runBlocks,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#requires
+           * @propertyOf angular.Module
+           * @returns {Array.<string>} List of module names which must be 
loaded before this module.
+           * @description
+           * Holds the list of modules which the injector will load before the 
current module is loaded.
+           */
+          requires: requires,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#name
+           * @propertyOf angular.Module
+           * @returns {string} Name of the module.
+           * @description
+           */
+          name: name,
+
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#provider
+           * @methodOf angular.Module
+           * @param {string} name service name
+           * @param {Function} providerType Construction function for creating 
new instance of the service.
+           * @description
+           * See {@link AUTO.$provide#provider $provide.provider()}.
+           */
+          provider: invokeLater('$provide', 'provider'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#factory
+           * @methodOf angular.Module
+           * @param {string} name service name
+           * @param {Function} providerFunction Function for creating new 
instance of the service.
+           * @description
+           * See {@link AUTO.$provide#factory $provide.factory()}.
+           */
+          factory: invokeLater('$provide', 'factory'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#service
+           * @methodOf angular.Module
+           * @param {string} name service name
+           * @param {Function} constructor A constructor function that will be 
instantiated.
+           * @description
+           * See {@link AUTO.$provide#service $provide.service()}.
+           */
+          service: invokeLater('$provide', 'service'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#value
+           * @methodOf angular.Module
+           * @param {string} name service name
+           * @param {*} object Service instance object.
+           * @description
+           * See {@link AUTO.$provide#value $provide.value()}.
+           */
+          value: invokeLater('$provide', 'value'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#constant
+           * @methodOf angular.Module
+           * @param {string} name constant name
+           * @param {*} object Constant value.
+           * @description
+           * Because the constant are fixed, they get applied before other 
provide methods.
+           * See {@link AUTO.$provide#constant $provide.constant()}.
+           */
+          constant: invokeLater('$provide', 'constant', 'unshift'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#filter
+           * @methodOf angular.Module
+           * @param {string} name Filter name.
+           * @param {Function} filterFactory Factory function for creating new 
instance of filter.
+           * @description
+           * See {@link ng.$filterProvider#register 
$filterProvider.register()}.
+           */
+          filter: invokeLater('$filterProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#controller
+           * @methodOf angular.Module
+           * @param {string} name Controller name.
+           * @param {Function} constructor Controller constructor function.
+           * @description
+           * See {@link ng.$controllerProvider#register 
$controllerProvider.register()}.
+           */
+          controller: invokeLater('$controllerProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#directive
+           * @methodOf angular.Module
+           * @param {string} name directive name
+           * @param {Function} directiveFactory Factory function for creating 
new instance of
+           * directives.
+           * @description
+           * See {@link ng.$compileProvider#directive 
$compileProvider.directive()}.
+           */
+          directive: invokeLater('$compileProvider', 'directive'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#config
+           * @methodOf angular.Module
+           * @param {Function} configFn Execute this function on module load. 
Useful for service
+           *    configuration.
+           * @description
+           * Use this method to register work which needs to be performed on 
module loading.
+           */
+          config: config,
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#run
+           * @methodOf angular.Module
+           * @param {Function} initializationFn Execute this function after 
injector creation.
+           *    Useful for application initialization.
+           * @description
+           * Use this method to register work which should be performed when 
the injector is done
+           * loading all modules.
+           */
+          run: function(block) {
+            runBlocks.push(block);
+            return this;
+          }
+        };
+
+        if (configFn) {
+          config(configFn);
+        }
+
+        return  moduleInstance;
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @param {String=} insertMethod
+         * @returns {angular.Module}
+         */
+        function invokeLater(provider, method, insertMethod) {
+          return function() {
+            invokeQueue[insertMethod || 'push']([provider, method, arguments]);
+            return moduleInstance;
+          }
+        }
+      });
+    };
+  });
+
+}
+
+)(window);
+
+/**
+ * Closure compiler type information
+ *
+ * @typedef { {
+ *   requires: !Array.<string>,
+ *   invokeQueue: !Array.<Array.<*>>,
+ *
+ *   service: function(string, Function):angular.Module,
+ *   factory: function(string, Function):angular.Module,
+ *   value: function(string, *):angular.Module,
+ *
+ *   filter: function(string, Function):angular.Module,
+ *
+ *   init: function(Function):angular.Module
+ * } }
+ */
+angular.Module;
+

Added: 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js?rev=1521565&view=auto
==============================================================================
--- 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js
 (added)
+++ 
struts/struts2/trunk/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js
 Tue Sep 10 17:55:21 2013
@@ -0,0 +1,7 @@
+/*
+ AngularJS v1.0.8
+ (c) 2010-2012 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(i){'use strict';function d(c,b,e){return c[b]||(c[b]=e())}return 
d(d(i,"angular",Object),"module",function(){var c={};return 
function(b,e,f){e&&c.hasOwnProperty(b)&&(c[b]=null);return 
d(c,b,function(){function a(a,b,d){return 
function(){c[d||"push"]([a,b,arguments]);return g}}if(!e)throw Error("No 
module: "+b);var 
c=[],d=[],h=a("$injector","invoke"),g={_invokeQueue:c,_runBlocks:d,requires:e,name:b,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),
+value:a("$provide","value"),constant:a("$provide","constant","unshift"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:h,run:function(a){d.push(a);return
 this}};f&&h(f);return g})}})})(window);


Reply via email to