From c3c3ef41f92e1cad48e8049892d8d18f75593d87 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Fri, 30 Dec 2016 14:49:38 +1100 Subject: [PATCH 01/28] Remove generated files from Webpack --- app/generated/index.js | 216 ----------------------------------------- 1 file changed, 216 deletions(-) delete mode 100644 app/generated/index.js diff --git a/app/generated/index.js b/app/generated/index.js deleted file mode 100644 index 4ce5c74ca2..0000000000 --- a/app/generated/index.js +++ /dev/null @@ -1,216 +0,0 @@ -(function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:false};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.p="";return __webpack_require__(0)})([function(module,exports,__webpack_require__){"use strict";window._=__webpack_require__(1);window.$=window.jQuery=__webpack_require__(2);__webpack_require__(3);__webpack_require__(5);window.humanizeDuration=__webpack_require__(7);__webpack_require__(8);window.LZString=__webpack_require__(9);window.MessageFormat=__webpack_require__(10);window.moment=__webpack_require__(23);window.SQL=__webpack_require__(134);__webpack_require__(191);window.angular=__webpack_require__(192);__webpack_require__(194);__webpack_require__(196);__webpack_require__(197);__webpack_require__(198);__webpack_require__(200);__webpack_require__(202);__webpack_require__(204);__webpack_require__(205);__webpack_require__(206);__webpack_require__(207);__webpack_require__(210);__webpack_require__(211);__webpack_require__(212);__webpack_require__(213);__webpack_require__(215);__webpack_require__(216)},function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;(function(){var root=this;var previousUnderscore=root._;var ArrayProto=Array.prototype,ObjProto=Object.prototype,FuncProto=Function.prototype;var push=ArrayProto.push,slice=ArrayProto.slice,toString=ObjProto.toString,hasOwnProperty=ObjProto.hasOwnProperty;var nativeIsArray=Array.isArray,nativeKeys=Object.keys,nativeBind=FuncProto.bind,nativeCreate=Object.create;var Ctor=function(){};var _=function(obj){if(obj instanceof _)return obj;if(!(this instanceof _))return new _(obj);this._wrapped=obj};if(true){if(typeof module!=="undefined"&&module.exports){exports=module.exports=_}exports._=_}else{root._=_}_.VERSION="1.8.3";var optimizeCb=function(func,context,argCount){if(context===void 0)return func;switch(argCount==null?3:argCount){case 1:return function(value){return func.call(context,value)};case 2:return function(value,other){return func.call(context,value,other)};case 3:return function(value,index,collection){return func.call(context,value,index,collection)};case 4:return function(accumulator,value,index,collection){return func.call(context,accumulator,value,index,collection)}}return function(){return func.apply(context,arguments)}};var cb=function(value,context,argCount){if(value==null)return _.identity;if(_.isFunction(value))return optimizeCb(value,context,argCount);if(_.isObject(value))return _.matcher(value);return _.property(value)};_.iteratee=function(value,context){return cb(value,context,Infinity)};var createAssigner=function(keysFunc,undefinedOnly){return function(obj){var length=arguments.length;if(length<2||obj==null)return obj;for(var index=1;index=0&&length<=MAX_ARRAY_INDEX};_.each=_.forEach=function(obj,iteratee,context){iteratee=optimizeCb(iteratee,context);var i,length;if(isArrayLike(obj)){for(i=0,length=obj.length;i=0&&index0?0:length-1;if(arguments.length<3){memo=obj[keys?keys[index]:index];index+=dir}return iterator(obj,iteratee,memo,keys,index,length)}}_.reduce=_.foldl=_.inject=createReduce(1);_.reduceRight=_.foldr=createReduce(-1);_.find=_.detect=function(obj,predicate,context){var key;if(isArrayLike(obj)){key=_.findIndex(obj,predicate,context)}else{key=_.findKey(obj,predicate,context)}if(key!==void 0&&key!==-1)return obj[key]};_.filter=_.select=function(obj,predicate,context){var results=[];predicate=cb(predicate,context);_.each(obj,function(value,index,list){if(predicate(value,index,list))results.push(value)});return results};_.reject=function(obj,predicate,context){return _.filter(obj,_.negate(cb(predicate)),context)};_.every=_.all=function(obj,predicate,context){predicate=cb(predicate,context);var keys=!isArrayLike(obj)&&_.keys(obj),length=(keys||obj).length;for(var index=0;index=0};_.invoke=function(obj,method){var args=slice.call(arguments,2);var isFunc=_.isFunction(method);return _.map(obj,function(value){var func=isFunc?method:value[method];return func==null?func:func.apply(value,args)})};_.pluck=function(obj,key){return _.map(obj,_.property(key))};_.where=function(obj,attrs){return _.filter(obj,_.matcher(attrs))};_.findWhere=function(obj,attrs){return _.find(obj,_.matcher(attrs))};_.max=function(obj,iteratee,context){var result=-Infinity,lastComputed=-Infinity,value,computed;if(iteratee==null&&obj!=null){obj=isArrayLike(obj)?obj:_.values(obj);for(var i=0,length=obj.length;iresult){result=value}}}else{iteratee=cb(iteratee,context);_.each(obj,function(value,index,list){computed=iteratee(value,index,list);if(computed>lastComputed||computed===-Infinity&&result===-Infinity){result=value;lastComputed=computed}})}return result};_.min=function(obj,iteratee,context){var result=Infinity,lastComputed=Infinity,value,computed;if(iteratee==null&&obj!=null){obj=isArrayLike(obj)?obj:_.values(obj);for(var i=0,length=obj.length;ib||a===void 0)return 1;if(a0?0:length-1;for(;index>=0&&index0){i=idx>=0?idx:Math.max(idx+length,i)}else{length=idx>=0?Math.min(idx+1,length):idx+length+1}}else if(sortedIndex&&idx&&length){idx=sortedIndex(array,item);return array[idx]===item?idx:-1}if(item!==item){idx=predicateFind(slice.call(array,i,length),_.isNaN);return idx>=0?idx+i:-1}for(idx=dir>0?i:length-1;idx>=0&&idxwait){if(timeout){clearTimeout(timeout);timeout=null}previous=now;result=func.apply(context,args);if(!timeout)context=args=null}else if(!timeout&&options.trailing!==false){timeout=setTimeout(later,remaining)}return result}};_.debounce=function(func,wait,immediate){var timeout,args,context,timestamp,result;var later=function(){var last=_.now()-timestamp;if(last=0){timeout=setTimeout(later,wait-last)}else{timeout=null;if(!immediate){result=func.apply(context,args);if(!timeout)context=args=null}}};return function(){context=this;args=arguments;timestamp=_.now();var callNow=immediate&&!timeout;if(!timeout)timeout=setTimeout(later,wait);if(callNow){result=func.apply(context,args);context=args=null}return result}};_.wrap=function(func,wrapper){return _.partial(wrapper,func)};_.negate=function(predicate){return function(){return!predicate.apply(this,arguments)}};_.compose=function(){var args=arguments;var start=args.length-1;return function(){var i=start;var result=args[start].apply(this,arguments);while(i--)result=args[i].call(this,result);return result}};_.after=function(times,func){return function(){if(--times<1){return func.apply(this,arguments)}}};_.before=function(times,func){var memo;return function(){if(--times>0){memo=func.apply(this,arguments)}if(times<=1)func=null;return memo}};_.once=_.partial(_.before,2);var hasEnumBug=!{toString:null}.propertyIsEnumerable("toString");var nonEnumerableProps=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function collectNonEnumProps(obj,keys){var nonEnumIdx=nonEnumerableProps.length;var constructor=obj.constructor;var proto=_.isFunction(constructor)&&constructor.prototype||ObjProto;var prop="constructor";if(_.has(obj,prop)&&!_.contains(keys,prop))keys.push(prop);while(nonEnumIdx--){prop=nonEnumerableProps[nonEnumIdx];if(prop in obj&&obj[prop]!==proto[prop]&&!_.contains(keys,prop)){keys.push(prop)}}}_.keys=function(obj){if(!_.isObject(obj))return[];if(nativeKeys)return nativeKeys(obj);var keys=[];for(var key in obj)if(_.has(obj,key))keys.push(key);if(hasEnumBug)collectNonEnumProps(obj,keys);return keys};_.allKeys=function(obj){if(!_.isObject(obj))return[];var keys=[];for(var key in obj)keys.push(key);if(hasEnumBug)collectNonEnumProps(obj,keys);return keys};_.values=function(obj){var keys=_.keys(obj);var length=keys.length;var values=Array(length);for(var i=0;i":">",'"':""","'":"'","`":"`"};var unescapeMap=_.invert(escapeMap);var createEscaper=function(map){var escaper=function(match){return map[match]};var source="(?:"+_.keys(map).join("|")+")";var testRegexp=RegExp(source);var replaceRegexp=RegExp(source,"g");return function(string){string=string==null?"":""+string;return testRegexp.test(string)?string.replace(replaceRegexp,escaper):string}};_.escape=createEscaper(escapeMap);_.unescape=createEscaper(unescapeMap);_.result=function(object,property,fallback){var value=object==null?void 0:object[property];if(value===void 0){value=fallback}return _.isFunction(value)?value.call(object):value};var idCounter=0;_.uniqueId=function(prefix){var id=++idCounter+"";return prefix?prefix+id:id};_.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var noMatch=/(.)^/;var escapes={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"};var escaper=/\\|'|\r|\n|\u2028|\u2029/g;var escapeChar=function(match){return"\\"+escapes[match]};_.template=function(text,settings,oldSettings){if(!settings&&oldSettings)settings=oldSettings;settings=_.defaults({},settings,_.templateSettings);var matcher=RegExp([(settings.escape||noMatch).source,(settings.interpolate||noMatch).source,(settings.evaluate||noMatch).source].join("|")+"|$","g");var index=0;var source="__p+='";text.replace(matcher,function(match,escape,interpolate,evaluate,offset){source+=text.slice(index,offset).replace(escaper,escapeChar);index=offset+match.length;if(escape){source+="'+\n((__t=("+escape+"))==null?'':_.escape(__t))+\n'"}else if(interpolate){source+="'+\n((__t=("+interpolate+"))==null?'':__t)+\n'"}else if(evaluate){source+="';\n"+evaluate+"\n__p+='"}return match});source+="';\n";if(!settings.variable)source="with(obj||{}){\n"+source+"}\n";source="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+source+"return __p;\n";try{var render=new Function(settings.variable||"obj","_",source)}catch(e){e.source=source;throw e}var template=function(data){return render.call(this,data,_)};var argument=settings.variable||"obj";template.source="function("+argument+"){\n"+source+"}";return template};_.chain=function(obj){var instance=_(obj);instance._chain=true;return instance};var result=function(instance,obj){return instance._chain?_(obj).chain():obj};_.mixin=function(obj){_.each(_.functions(obj),function(name){var func=_[name]=obj[name];_.prototype[name]=function(){var args=[this._wrapped];push.apply(args,arguments);return result(this,func.apply(_,args))}})};_.mixin(_);_.each(["pop","push","reverse","shift","sort","splice","unshift"],function(name){var method=ArrayProto[name];_.prototype[name]=function(){var obj=this._wrapped;method.apply(obj,arguments);if((name==="shift"||name==="splice")&&obj.length===0)delete obj[0];return result(this,obj)}});_.each(["concat","join","slice"],function(name){var method=ArrayProto[name];_.prototype[name]=function(){return result(this,method.apply(this._wrapped,arguments))}});_.prototype.value=function(){return this._wrapped};_.prototype.valueOf=_.prototype.toJSON=_.prototype.value;_.prototype.toString=function(){return""+this._wrapped};if(true){!(__WEBPACK_AMD_DEFINE_ARRAY__=[],__WEBPACK_AMD_DEFINE_RESULT__=function(){return _}.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__),__WEBPACK_AMD_DEFINE_RESULT__!==undefined&&(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}}).call(this)},function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;/*! - * jQuery JavaScript Library v3.1.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2016-09-22T22:30Z - */ -(function(global,factory){"use strict";if(typeof module==="object"&&typeof module.exports==="object"){module.exports=global.document?factory(global,true):function(w){if(!w.document){throw new Error("jQuery requires a window with a document")}return factory(w)}}else{factory(global)}})(typeof window!=="undefined"?window:this,function(window,noGlobal){"use strict";var arr=[];var document=window.document;var getProto=Object.getPrototypeOf;var slice=arr.slice;var concat=arr.concat;var push=arr.push;var indexOf=arr.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var fnToString=hasOwn.toString;var ObjectFunctionString=fnToString.call(Object);var support={};function DOMEval(code,doc){doc=doc||document;var script=doc.createElement("script");script.text=code;doc.head.appendChild(script).parentNode.removeChild(script)}var version="3.1.1",jQuery=function(selector,context){return new jQuery.fn.init(selector,context)},rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,rmsPrefix=/^-ms-/,rdashAlpha=/-([a-z])/g,fcamelCase=function(all,letter){return letter.toUpperCase()};jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,length:0,toArray:function(){return slice.call(this)},get:function(num){if(num==null){return slice.call(this)}return num<0?this[num+this.length]:this[num]},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);ret.prevObject=this;return ret},each:function(callback){return jQuery.each(this,callback)},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem)}))},slice:function(){return this.pushStack(slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j0&&length-1 in obj}var Sizzle=/*! - * Sizzle CSS Selector Engine v2.3.3 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-08-08 - */ -function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date,preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function(a,b){if(a===b){hasDuplicate=true}return 0},hasOwn={}.hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){var i=0,len=list.length;for(;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+identifier+")"),CLASS:new RegExp("^\\.("+identifier+")"),TAG:new RegExp("^("+identifier+"|[*])"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)},rcssescape=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fcssescape=function(ch,asCodePoint){if(asCodePoint){if(ch==="\0"){return"�"}return ch.slice(0,-1)+"\\"+ch.charCodeAt(ch.length-1).toString(16)+" "}return"\\"+ch},unloadHandler=function(){setDocument()},disabledAncestor=addCombinator(function(elem){return elem.disabled===true&&("form"in elem||"label"in elem)},{dir:"parentNode",next:"legend"});try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var m,i,elem,nid,match,groups,newSelector,newContext=context&&context.ownerDocument,nodeType=context?context.nodeType:9;results=results||[];if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results}if(!seed){if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;if(documentIsHTML){if(nodeType!==11&&(match=rquickExpr.exec(selector))){if(m=match[1]){if(nodeType===9){if(elem=context.getElementById(m)){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&!compilerCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))){if(nodeType!==1){newContext=context;newSelector=selector}else if(context.nodeName.toLowerCase()!=="object"){if(nid=context.getAttribute("id")){nid=nid.replace(rcssescape,fcssescape)}else{context.setAttribute("id",nid=expando)}groups=tokenize(selector);i=groups.length;while(i--){groups[i]="#"+nid+" "+toSelector(groups[i])}newSelector=groups.join(",");newContext=rsibling.test(selector)&&testContext(context.parentNode)||context}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(nid===expando){context.removeAttribute("id")}}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var el=document.createElement("fieldset");try{return!!fn(el)}catch(e){return false}finally{if(el.parentNode){el.parentNode.removeChild(el)}el=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=arr.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&a.sourceIndex-b.sourceIndex;if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createDisabledPseudo(disabled){return function(elem){if("form"in elem){if(elem.parentNode&&elem.disabled===false){if("label"in elem){if("label"in elem.parentNode){return elem.parentNode.disabled===disabled}else{return elem.disabled===disabled}}return elem.isDisabled===disabled||elem.isDisabled!==!disabled&&disabledAncestor(elem)===disabled}return elem.disabled===disabled}else if("label"in elem){return elem.disabled===disabled}return false}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!=="undefined"&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,subWindow,doc=node?node.ownerDocument||node:preferredDoc;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=document.documentElement;documentIsHTML=!isXML(document);if(preferredDoc!==document&&(subWindow=document.defaultView)&&subWindow.top!==subWindow){if(subWindow.addEventListener){subWindow.addEventListener("unload",unloadHandler,false)}else if(subWindow.attachEvent){subWindow.attachEvent("onunload",unloadHandler)}}support.attributes=assert(function(el){el.className="i";return!el.getAttribute("className")});support.getElementsByTagName=assert(function(el){el.appendChild(document.createComment(""));return!el.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(document.getElementsByClassName);support.getById=assert(function(el){docElem.appendChild(el).id=expando;return!document.getElementsByName||!document.getElementsByName(expando).length});if(support.getById){Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var elem=context.getElementById(id);return elem?[elem]:[]}}}else{Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return node&&node.value===attrId}};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var node,i,elems,elem=context.getElementById(id);if(elem){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem]}elems=context.getElementsByName(id);i=0;while(elem=elems[i++]){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem]}}}return[]}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(tag)}else if(support.qsa){return context.querySelectorAll(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!=="undefined"&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(document.querySelectorAll)){assert(function(el){docElem.appendChild(el).innerHTML=""+"";if(el.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!el.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!el.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=")}if(!el.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}if(!el.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]")}});assert(function(el){el.innerHTML=""+"";var input=document.createElement("input");input.setAttribute("type","hidden");el.appendChild(input).setAttribute("name","D");if(el.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(el.querySelectorAll(":enabled").length!==2){rbuggyQSA.push(":enabled",":disabled")}docElem.appendChild(el).disabled=true;if(el.querySelectorAll(":disabled").length!==2){rbuggyQSA.push(":enabled",":disabled")}el.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(el){support.disconnectedMatch=matches.call(el,"*");matches.call(el,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===document||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===document||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===document?-1:b===document?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return document};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&!compilerCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.escape=function(sel){return(sel+"").replace(rcssescape,fcssescape)};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[6]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]){match[2]=match[4]||match[5]||""}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!=="undefined"&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=false;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){node=parent;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){uniqueCache[type]=[dirruns,nodeIndex,diff];break}}}else{if(useCache){node=elem;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex}if(diff===false){while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});uniqueCache[type]=[dirruns,diff]}if(node===elem){break}}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);input[0]=null;return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){text=text.replace(runescape,funescape);return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:createDisabledPseudo(false),disabled:createDisabledPseudo(true),checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){var ret=!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));checkContext=null;return ret}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context===document||context||outermost}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;if(!context&&elem.ownerDocument!==document){setDocument(elem);xml=!documentIsHTML}while(matcher=elementMatchers[j++]){if(matcher(elem,context||document,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(el){return el.compareDocumentPosition(document.createElement("fieldset"))&1});if(!assert(function(el){el.innerHTML="";return el.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(el){el.innerHTML="";el.firstChild.setAttribute("value","");return el.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(el){return el.getAttribute("disabled")==null})){ -addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}return Sizzle}(window);jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.pseudos;jQuery.uniqueSort=jQuery.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;jQuery.escapeSelector=Sizzle.escape;var dir=function(elem,dir,until){var matched=[],truncate=until!==undefined;while((elem=elem[dir])&&elem.nodeType!==9){if(elem.nodeType===1){if(truncate&&jQuery(elem).is(until)){break}matched.push(elem)}}return matched};var siblings=function(n,elem){var matched=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){matched.push(n)}}return matched};var rneedsContext=jQuery.expr.match.needsContext;var rsingleTag=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;var risSimple=/^.[^:#\[\.,]*$/;function winnow(elements,qualifier,not){if(jQuery.isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not})}if(qualifier.nodeType){return jQuery.grep(elements,function(elem){return elem===qualifier!==not})}if(typeof qualifier!=="string"){return jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem)>-1!==not})}if(risSimple.test(qualifier)){return jQuery.filter(qualifier,elements,not)}qualifier=jQuery.filter(qualifier,elements);return jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem)>-1!==not&&elem.nodeType===1})}jQuery.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")"}if(elems.length===1&&elem.nodeType===1){return jQuery.find.matchesSelector(elem,expr)?[elem]:[]}return jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType===1}))};jQuery.fn.extend({find:function(selector){var i,ret,len=this.length,self=this;if(typeof selector!=="string"){return this.pushStack(jQuery(selector).filter(function(){for(i=0;i1?jQuery.uniqueSort(ret):ret},filter:function(selector){return this.pushStack(winnow(this,selector||[],false))},not:function(selector){return this.pushStack(winnow(this,selector||[],true))},is:function(selector){return!!winnow(this,typeof selector==="string"&&rneedsContext.test(selector)?jQuery(selector):selector||[],false).length}});var rootjQuery,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,init=jQuery.fn.init=function(selector,context,root){var match,elem;if(!selector){return this}root=root||rootjQuery;if(typeof selector==="string"){if(selector[0]==="<"&&selector[selector.length-1]===">"&&selector.length>=3){match=[null,selector,null]}else{match=rquickExpr.exec(selector)}if(match&&(match[1]||!context)){if(match[1]){context=context instanceof jQuery?context[0]:context;jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,true));if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){for(match in context){if(jQuery.isFunction(this[match])){this[match](context[match])}else{this.attr(match,context[match])}}}return this}else{elem=document.getElementById(match[2]);if(elem){this[0]=elem;this.length=1}return this}}else if(!context||context.jquery){return(context||root).find(selector)}else{return this.constructor(context).find(selector)}}else if(selector.nodeType){this[0]=selector;this.length=1;return this}else if(jQuery.isFunction(selector)){return root.ready!==undefined?root.ready(selector):selector(jQuery)}return jQuery.makeArray(selector,this)};init.prototype=jQuery.fn;rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function(target){var targets=jQuery(target,this),l=targets.length;return this.filter(function(){var i=0;for(;i-1:cur.nodeType===1&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break}}}}return this.pushStack(matched.length>1?jQuery.uniqueSort(matched):matched)},index:function(elem){if(!elem){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1}if(typeof elem==="string"){return indexOf.call(jQuery(elem),this[0])}return indexOf.call(this,elem.jquery?elem[0]:elem)},add:function(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))))},addBack:function(selector){return this.add(selector==null?this.prevObject:this.prevObject.filter(selector))}});function sibling(cur,dir){while((cur=cur[dir])&&cur.nodeType!==1){}return cur}jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null},parents:function(elem){return dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return dir(elem,"nextSibling")},prevAll:function(elem){return dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return dir(elem,"previousSibling",until)},siblings:function(elem){return siblings((elem.parentNode||{}).firstChild,elem)},children:function(elem){return siblings(elem.firstChild)},contents:function(elem){return elem.contentDocument||jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var matched=jQuery.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until}if(selector&&typeof selector==="string"){matched=jQuery.filter(selector,matched)}if(this.length>1){if(!guaranteedUnique[name]){jQuery.uniqueSort(matched)}if(rparentsprev.test(name)){matched.reverse()}}return this.pushStack(matched)}});var rnothtmlwhite=/[^\x20\t\r\n\f]+/g;function createOptions(options){var object={};jQuery.each(options.match(rnothtmlwhite)||[],function(_,flag){object[flag]=true});return object}jQuery.Callbacks=function(options){options=typeof options==="string"?createOptions(options):jQuery.extend({},options);var firing,memory,fired,locked,list=[],queue=[],firingIndex=-1,fire=function(){locked=options.once;fired=firing=true;for(;queue.length;firingIndex=-1){memory=queue.shift();while(++firingIndex-1){list.splice(index,1);if(index<=firingIndex){firingIndex--}}});return this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:list.length>0},empty:function(){if(list){list=[]}return this},disable:function(){locked=queue=[];list=memory="";return this},disabled:function(){return!list},lock:function(){locked=queue=[];if(!memory&&!firing){list=memory=""}return this},locked:function(){return!!locked},fireWith:function(context,args){if(!locked){args=args||[];args=[context,args.slice?args.slice():args];queue.push(args);if(!firing){fire()}}return this},fire:function(){self.fireWith(this,arguments);return this},fired:function(){return!!fired}};return self};function Identity(v){return v}function Thrower(ex){throw ex}function adoptValue(value,resolve,reject){var method;try{if(value&&jQuery.isFunction(method=value.promise)){method.call(value).done(resolve).fail(reject)}else if(value&&jQuery.isFunction(method=value.then)){method.call(value,resolve,reject)}else{resolve.call(undefined,value)}}catch(value){reject.call(undefined,value)}}jQuery.extend({Deferred:function(func){var tuples=[["notify","progress",jQuery.Callbacks("memory"),jQuery.Callbacks("memory"),2],["resolve","done",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),0,"resolved"],["reject","fail",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),1,"rejected"]],state="pending",promise={state:function(){return state},always:function(){deferred.done(arguments).fail(arguments);return this},catch:function(fn){return promise.then(null,fn)},pipe:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=jQuery.isFunction(fns[tuple[4]])&&fns[tuple[4]];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&jQuery.isFunction(returned.promise)){returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject)}else{newDefer[tuple[0]+"With"](this,fn?[returned]:arguments)}})});fns=null}).promise()},then:function(onFulfilled,onRejected,onProgress){var maxDepth=0;function resolve(depth,deferred,handler,special){return function(){var that=this,args=arguments,mightThrow=function(){var returned,then;if(depth=maxDepth){if(handler!==Thrower){that=undefined;args=[e]}deferred.rejectWith(that,args)}}};if(depth){process()}else{if(jQuery.Deferred.getStackHook){process.stackTrace=jQuery.Deferred.getStackHook()}window.setTimeout(process)}}}return jQuery.Deferred(function(newDefer){tuples[0][3].add(resolve(0,newDefer,jQuery.isFunction(onProgress)?onProgress:Identity,newDefer.notifyWith));tuples[1][3].add(resolve(0,newDefer,jQuery.isFunction(onFulfilled)?onFulfilled:Identity));tuples[2][3].add(resolve(0,newDefer,jQuery.isFunction(onRejected)?onRejected:Thrower))}).promise()},promise:function(obj){return obj!=null?jQuery.extend(obj,promise):promise}},deferred={};jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[5];promise[tuple[1]]=list.add;if(stateString){list.add(function(){state=stateString},tuples[3-i][2].disable,tuples[0][2].lock)}list.add(tuple[3].fire);deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?undefined:this,arguments);return this};deferred[tuple[0]+"With"]=list.fireWith});promise.promise(deferred);if(func){func.call(deferred,deferred)}return deferred},when:function(singleValue){var remaining=arguments.length,i=remaining,resolveContexts=Array(i),resolveValues=slice.call(arguments),master=jQuery.Deferred(),updateFunc=function(i){return function(value){resolveContexts[i]=this;resolveValues[i]=arguments.length>1?slice.call(arguments):value;if(!--remaining){master.resolveWith(resolveContexts,resolveValues)}}};if(remaining<=1){adoptValue(singleValue,master.done(updateFunc(i)).resolve,master.reject);if(master.state()==="pending"||jQuery.isFunction(resolveValues[i]&&resolveValues[i].then)){return master.then()}}while(i--){adoptValue(resolveValues[i],updateFunc(i),master.reject)}return master.promise()}});var rerrorNames=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;jQuery.Deferred.exceptionHook=function(error,stack){if(window.console&&window.console.warn&&error&&rerrorNames.test(error.name)){window.console.warn("jQuery.Deferred exception: "+error.message,error.stack,stack)}};jQuery.readyException=function(error){window.setTimeout(function(){throw error})};var readyList=jQuery.Deferred();jQuery.fn.ready=function(fn){readyList.then(fn).catch(function(error){jQuery.readyException(error)});return this};jQuery.extend({isReady:false,readyWait:1,holdReady:function(hold){if(hold){jQuery.readyWait++}else{jQuery.ready(true)}},ready:function(wait){if(wait===true?--jQuery.readyWait:jQuery.isReady){return}jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return}readyList.resolveWith(document,[jQuery])}});jQuery.ready.then=readyList.then;function completed(){document.removeEventListener("DOMContentLoaded",completed);window.removeEventListener("load",completed);jQuery.ready()}if(document.readyState==="complete"||document.readyState!=="loading"&&!document.documentElement.doScroll){window.setTimeout(jQuery.ready)}else{document.addEventListener("DOMContentLoaded",completed);window.addEventListener("load",completed)}var access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,len=elems.length,bulk=key==null;if(jQuery.type(key)==="object"){chainable=true;for(i in key){access(elems,fn,i,key[i],true,emptyGet,raw)}}else if(value!==undefined){chainable=true;if(!jQuery.isFunction(value)){raw=true}if(bulk){if(raw){fn.call(elems,value);fn=null}else{bulk=fn;fn=function(elem,key,value){return bulk.call(jQuery(elem),value)}}}if(fn){for(;i1,null,true)},removeData:function(key){return this.each(function(){dataUser.remove(this,key)})}});jQuery.extend({queue:function(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=dataPriv.get(elem,type);if(data){if(!queue||jQuery.isArray(data)){queue=dataPriv.access(elem,type,jQuery.makeArray(data))}else{queue.push(data)}}return queue||[]}},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type)};if(fn==="inprogress"){fn=queue.shift();startLength--}if(fn){if(type==="fx"){queue.unshift("inprogress")}delete hooks.stop;fn.call(elem,next,hooks)}if(!startLength&&hooks){hooks.empty.fire()}},_queueHooks:function(elem,type){var key=type+"queueHooks";return dataPriv.get(elem,key)||dataPriv.access(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){dataPriv.remove(elem,[type+"queue",key])})})}});jQuery.fn.extend({queue:function(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--}if(arguments.length\x20\t\r\n\f]+)/i;var rscriptType=/^$|\/(?:java|ecma)script/i;var wrapMap={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;function getAll(context,tag){var ret;if(typeof context.getElementsByTagName!=="undefined"){ret=context.getElementsByTagName(tag||"*")}else if(typeof context.querySelectorAll!=="undefined"){ret=context.querySelectorAll(tag||"*")}else{ret=[]}if(tag===undefined||tag&&jQuery.nodeName(context,tag)){return jQuery.merge([context],ret)}return ret}function setGlobalEval(elems,refElements){var i=0,l=elems.length;for(;i-1){if(ignored){ignored.push(elem)}continue}contains=jQuery.contains(elem.ownerDocument,elem);tmp=getAll(fragment.appendChild(elem),"script");if(contains){setGlobalEval(tmp)}if(scripts){j=0;while(elem=tmp[j++]){if(rscriptType.test(elem.type||"")){scripts.push(elem)}}}}return fragment}(function(){var fragment=document.createDocumentFragment(),div=fragment.appendChild(document.createElement("div")),input=document.createElement("input");input.setAttribute("type","radio");input.setAttribute("checked","checked");input.setAttribute("name","t");div.appendChild(input);support.checkClone=div.cloneNode(true).cloneNode(true).lastChild.checked;div.innerHTML="";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue})();var documentElement=document.documentElement;var rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true}function returnFalse(){return false}function safeActiveElement(){try{return document.activeElement}catch(err){}}function on(elem,types,selector,data,fn,one){var origFn,type;if(typeof types==="object"){if(typeof selector!=="string"){data=data||selector;selector=undefined}for(type in types){on(elem,type,selector,data,types[type],one)}return elem}if(data==null&&fn==null){fn=selector;data=selector=undefined}else if(fn==null){if(typeof selector==="string"){fn=data;data=undefined}else{fn=data;data=selector;selector=undefined}}if(fn===false){fn=returnFalse}else if(!fn){return elem}if(one===1){origFn=fn;fn=function(event){jQuery().off(event);return origFn.apply(this,arguments)};fn.guid=origFn.guid||(origFn.guid=jQuery.guid++)}return elem.each(function(){jQuery.event.add(this,types,fn,data,selector)})}jQuery.event={global:{},add:function(elem,types,handler,data,selector){var handleObjIn,eventHandle,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.get(elem);if(!elemData){return}if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.selector}if(selector){jQuery.find.matchesSelector(documentElement,selector)}if(!handler.guid){handler.guid=jQuery.guid++}if(!(events=elemData.events)){events=elemData.events={}}if(!(eventHandle=elemData.handle)){eventHandle=elemData.handle=function(e){return typeof jQuery!=="undefined"&&jQuery.event.triggered!==e.type?jQuery.event.dispatch.apply(elem,arguments):undefined}}types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;special=jQuery.event.special[type]||{};handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn);if(!(handlers=events[type])){handlers=events[type]=[];handlers.delegateCount=0;if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle)}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid}}if(selector){handlers.splice(handlers.delegateCount++,0,handleObj)}else{handlers.push(handleObj)}jQuery.event.global[type]=true}},remove:function(elem,types,handler,selector,mappedTypes){var j,origCount,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.hasData(elem)&&dataPriv.get(elem);if(!elemData||!(events=elemData.events)){return}types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){for(type in events){jQuery.event.remove(elem,type+types[t],handler,selector,true)}continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;handlers=events[type]||[];tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)");origCount=j=handlers.length;while(j--){handleObj=handlers[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!tmp||tmp.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.delegateCount--}if(special.remove){special.remove.call(elem,handleObj)}}}if(origCount&&!handlers.length){if(!special.teardown||special.teardown.call(elem,namespaces,elemData.handle)===false){jQuery.removeEvent(elem,type,elemData.handle)}delete events[type]}}if(jQuery.isEmptyObject(events)){dataPriv.remove(elem,"handle events")}},dispatch:function(nativeEvent){var event=jQuery.event.fix(nativeEvent);var i,j,ret,matched,handleObj,handlerQueue,args=new Array(arguments.length),handlers=(dataPriv.get(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};args[0]=event;for(i=1;i=1)){for(;cur!==this;cur=cur.parentNode||this){if(cur.nodeType===1&&!(event.type==="click"&&cur.disabled===true)){matchedHandlers=[];matchedSelectors={};for(i=0;i-1:jQuery.find(sel,this,null,[cur]).length}if(matchedSelectors[sel]){matchedHandlers.push(handleObj)}}if(matchedHandlers.length){handlerQueue.push({elem:cur,handlers:matchedHandlers})}}}}cur=this;if(delegateCount\x20\t\r\n\f]*)[^>]*)\/>/gi,rnoInnerhtml=/\s*$/g;function manipulationTarget(elem,content){if(jQuery.nodeName(elem,"table")&&jQuery.nodeName(content.nodeType!==11?content:content.firstChild,"tr")){return elem.getElementsByTagName("tbody")[0]||elem}return elem}function disableScript(elem){elem.type=(elem.getAttribute("type")!==null)+"/"+elem.type;return elem}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);if(match){elem.type=match[1]}else{elem.removeAttribute("type")}return elem}function cloneCopyEvent(src,dest){var i,l,type,pdataOld,pdataCur,udataOld,udataCur,events;if(dest.nodeType!==1){return}if(dataPriv.hasData(src)){pdataOld=dataPriv.access(src);pdataCur=dataPriv.set(dest,pdataOld);events=pdataOld.events;if(events){delete pdataCur.handle;pdataCur.events={};for(type in events){for(i=0,l=events[type].length;i1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value)){return collection.each(function(index){var self=collection.eq(index);if(isFunction){args[0]=value.call(this,index,self.html())}domManip(self,args,callback,ignored)})}if(l){fragment=buildFragment(args,collection[0].ownerDocument,false,collection,ignored);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first}if(first||ignored){scripts=jQuery.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;for(;i")},clone:function(elem,dataAndEvents,deepDataAndEvents){var i,l,srcElements,destElements,clone=elem.cloneNode(true),inPage=jQuery.contains(elem.ownerDocument,elem);if(!support.noCloneChecked&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){destElements=getAll(clone);srcElements=getAll(elem);for(i=0,l=srcElements.length;i0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"))}return clone},cleanData:function(elems){var data,elem,type,special=jQuery.event.special,i=0;for(;(elem=elems[i])!==undefined;i++){if(acceptData(elem)){if(data=elem[dataPriv.expando]){if(data.events){for(type in data.events){if(special[type]){jQuery.event.remove(elem,type)}else{jQuery.removeEvent(elem,type,data.handle)}}}elem[dataPriv.expando]=undefined}if(elem[dataUser.expando]){elem[dataUser.expando]=undefined}}}}});jQuery.fn.extend({detach:function(selector){return remove(this,selector,true)},remove:function(selector){return remove(this,selector)},text:function(value){return access(this,function(value){return value===undefined?jQuery.text(this):this.empty().each(function(){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){this.textContent=value}})},null,value,arguments.length)},append:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem)}})},prepend:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild)}})},before:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this)}})},after:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling)}})},empty:function(){var elem,i=0;for(;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.textContent=""}}return this},clone:function(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined&&elem.nodeType===1){return elem.innerHTML}if(typeof value==="string"&&!rnoInnerhtml.test(value)&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=jQuery.htmlPrefilter(value);try{for(;i1)}});function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing)}jQuery.Tween=Tween;Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem;this.prop=prop;this.easing=easing||jQuery.easing._default;this.options=options;this.start=this.now=this.cur();this.end=end;this.unit=unit||(jQuery.cssNumber[prop]?"":"px")},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this)},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];if(this.options.duration){this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration)}else{this.pos=eased=percent}this.now=(this.end-this.start)*eased+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this)}if(hooks&&hooks.set){hooks.set(this)}else{Tween.propHooks._default.set(this)}return this}};Tween.prototype.init.prototype=Tween.prototype;Tween.propHooks={_default:{get:function(tween){var result;if(tween.elem.nodeType!==1||tween.elem[tween.prop]!=null&&tween.elem.style[tween.prop]==null){return tween.elem[tween.prop]}result=jQuery.css(tween.elem,tween.prop,"");return!result||result==="auto"?0:result},set:function(tween){if(jQuery.fx.step[tween.prop]){jQuery.fx.step[tween.prop](tween)}else if(tween.elem.nodeType===1&&(tween.elem.style[jQuery.cssProps[tween.prop]]!=null||jQuery.cssHooks[tween.prop])){jQuery.style(tween.elem,tween.prop,tween.now+tween.unit)}else{tween.elem[tween.prop]=tween.now}}}};Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){if(tween.elem.nodeType&&tween.elem.parentNode){tween.elem[tween.prop]=tween.now}}};jQuery.easing={linear:function(p){return p},swing:function(p){return.5-Math.cos(p*Math.PI)/2},_default:"swing"};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var fxNow,timerId,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/;function raf(){if(timerId){window.requestAnimationFrame(raf);jQuery.fx.tick()}}function createFxNow(){window.setTimeout(function(){fxNow=undefined});return fxNow=jQuery.now()}function genFx(type,includeWidth){var which,i=0,attrs={height:type};includeWidth=includeWidth?1:0;for(;i<4;i+=2-includeWidth){which=cssExpand[i];attrs["margin"+which]=attrs["padding"+which]=type}if(includeWidth){attrs.opacity=attrs.width=type}return attrs}function createTween(value,prop,animation){var tween,collection=(Animation.tweeners[prop]||[]).concat(Animation.tweeners["*"]),index=0,length=collection.length;for(;index1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})}});jQuery.extend({attr:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return}if(typeof elem.getAttribute==="undefined"){return jQuery.prop(elem,name,value)}if(nType!==1||!jQuery.isXMLDoc(elem)){hooks=jQuery.attrHooks[name.toLowerCase()]||(jQuery.expr.match.bool.test(name)?boolHook:undefined)}if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name);return}if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}elem.setAttribute(name,value+"");return value}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}ret=jQuery.find.attr(elem,name);return ret==null?undefined:ret},attrHooks:{type:{set:function(elem,value){if(!support.radioValue&&value==="radio"&&jQuery.nodeName(elem,"input")){var val=elem.value;elem.setAttribute("type",value);if(val){elem.value=val}return value}}}},removeAttr:function(elem,value){var name,i=0,attrNames=value&&value.match(rnothtmlwhite);if(attrNames&&elem.nodeType===1){while(name=attrNames[i++]){elem.removeAttribute(name)}}}});boolHook={set:function(elem,value,name){if(value===false){jQuery.removeAttr(elem,name)}else{elem.setAttribute(name,name)}return name}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(i,name){var getter=attrHandle[name]||jQuery.find.attr;attrHandle[name]=function(elem,name,isXML){var ret,handle,lowercaseName=name.toLowerCase();if(!isXML){handle=attrHandle[lowercaseName]; -attrHandle[lowercaseName]=ret;ret=getter(elem,name,isXML)!=null?lowercaseName:null;attrHandle[lowercaseName]=handle}return ret}});var rfocusable=/^(?:input|select|textarea|button)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(name,value){return access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){return this.each(function(){delete this[jQuery.propFix[name]||name]})}});jQuery.extend({prop:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return}if(nType!==1||!jQuery.isXMLDoc(elem)){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name]}if(value!==undefined){if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}return elem[name]=value}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}return elem[name]},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");if(tabindex){return parseInt(tabindex,10)}if(rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href){return 0}return-1}}},propFix:{for:"htmlFor",class:"className"}});if(!support.optSelected){jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;if(parent&&parent.parentNode){parent.parentNode.selectedIndex}return null},set:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex}}}}}jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this});function stripAndCollapse(value){var tokens=value.match(rnothtmlwhite)||[];return tokens.join(" ")}function getClass(elem){return elem.getAttribute&&elem.getAttribute("class")||""}jQuery.fn.extend({addClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)))})}if(typeof value==="string"&&value){classes=value.match(rnothtmlwhite)||[];while(elem=this[i++]){curValue=getClass(elem);cur=elem.nodeType===1&&" "+stripAndCollapse(curValue)+" ";if(cur){j=0;while(clazz=classes[j++]){if(cur.indexOf(" "+clazz+" ")<0){cur+=clazz+" "}}finalValue=stripAndCollapse(cur);if(curValue!==finalValue){elem.setAttribute("class",finalValue)}}}}return this},removeClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)))})}if(!arguments.length){return this.attr("class","")}if(typeof value==="string"&&value){classes=value.match(rnothtmlwhite)||[];while(elem=this[i++]){curValue=getClass(elem);cur=elem.nodeType===1&&" "+stripAndCollapse(curValue)+" ";if(cur){j=0;while(clazz=classes[j++]){while(cur.indexOf(" "+clazz+" ")>-1){cur=cur.replace(" "+clazz+" "," ")}}finalValue=stripAndCollapse(cur);if(curValue!==finalValue){elem.setAttribute("class",finalValue)}}}}return this},toggleClass:function(value,stateVal){var type=typeof value;if(typeof stateVal==="boolean"&&type==="string"){return stateVal?this.addClass(value):this.removeClass(value)}if(jQuery.isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal)})}return this.each(function(){var className,i,self,classNames;if(type==="string"){i=0;self=jQuery(this);classNames=value.match(rnothtmlwhite)||[];while(className=classNames[i++]){if(self.hasClass(className)){self.removeClass(className)}else{self.addClass(className)}}}else if(value===undefined||type==="boolean"){className=getClass(this);if(className){dataPriv.set(this,"__className__",className)}if(this.setAttribute){this.setAttribute("class",className||value===false?"":dataPriv.get(this,"__className__")||"")}}})},hasClass:function(selector){var className,elem,i=0;className=" "+selector+" ";while(elem=this[i++]){if(elem.nodeType===1&&(" "+stripAndCollapse(getClass(elem))+" ").indexOf(className)>-1){return true}}return false}});var rreturn=/\r/g;jQuery.fn.extend({val:function(value){var hooks,ret,isFunction,elem=this[0];if(!arguments.length){if(elem){hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()];if(hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined){return ret}ret=elem.value;if(typeof ret==="string"){return ret.replace(rreturn,"")}return ret==null?"":ret}return}isFunction=jQuery.isFunction(value);return this.each(function(i){var val;if(this.nodeType!==1){return}if(isFunction){val=value.call(this,i,jQuery(this).val())}else{val=value}if(val==null){val=""}else if(typeof val==="number"){val+=""}else if(jQuery.isArray(val)){val=jQuery.map(val,function(value){return value==null?"":value+""})}hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()];if(!hooks||!("set"in hooks)||hooks.set(this,val,"value")===undefined){this.value=val}})}});jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return val!=null?val:stripAndCollapse(jQuery.text(elem))}},select:{get:function(elem){var value,option,i,options=elem.options,index=elem.selectedIndex,one=elem.type==="select-one",values=one?null:[],max=one?index+1:options.length;if(index<0){i=max}else{i=one?index:0}for(;i-1){optionSet=true}}if(!optionSet){elem.selectedIndex=-1}return values}}}});jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value){if(jQuery.isArray(value)){return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>-1}}};if(!support.checkOn){jQuery.valHooks[this].get=function(elem){return elem.getAttribute("value")===null?"on":elem.value}}});var rfocusMorph=/^(?:focusinfocus|focusoutblur)$/;jQuery.extend(jQuery.event,{trigger:function(event,data,elem,onlyHandlers){var i,cur,tmp,bubbleType,ontype,handle,special,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];cur=tmp=elem=elem||document;if(elem.nodeType===3||elem.nodeType===8){return}if(rfocusMorph.test(type+jQuery.event.triggered)){return}if(type.indexOf(".")>-1){namespaces=type.split(".");type=namespaces.shift();namespaces.sort()}ontype=type.indexOf(":")<0&&"on"+type;event=event[jQuery.expando]?event:new jQuery.Event(type,typeof event==="object"&&event);event.isTrigger=onlyHandlers?2:3;event.namespace=namespaces.join(".");event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;event.result=undefined;if(!event.target){event.target=elem}data=data==null?[event]:jQuery.makeArray(data,[event]);special=jQuery.event.special[type]||{};if(!onlyHandlers&&special.trigger&&special.trigger.apply(elem,data)===false){return}if(!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){bubbleType=special.delegateType||type;if(!rfocusMorph.test(bubbleType+type)){cur=cur.parentNode}for(;cur;cur=cur.parentNode){eventPath.push(cur);tmp=cur}if(tmp===(elem.ownerDocument||document)){eventPath.push(tmp.defaultView||tmp.parentWindow||window)}}i=0;while((cur=eventPath[i++])&&!event.isPropagationStopped()){event.type=i>1?bubbleType:special.bindType||type;handle=(dataPriv.get(cur,"events")||{})[event.type]&&dataPriv.get(cur,"handle");if(handle){handle.apply(cur,data)}handle=ontype&&cur[ontype];if(handle&&handle.apply&&acceptData(cur)){event.result=handle.apply(cur,data);if(event.result===false){event.preventDefault()}}}event.type=type;if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(eventPath.pop(),data)===false)&&acceptData(elem)){if(ontype&&jQuery.isFunction(elem[type])&&!jQuery.isWindow(elem)){tmp=elem[ontype];if(tmp){elem[ontype]=null}jQuery.event.triggered=type;elem[type]();jQuery.event.triggered=undefined;if(tmp){elem[ontype]=tmp}}}}return event.result},simulate:function(type,elem,event){var e=jQuery.extend(new jQuery.Event,event,{type:type,isSimulated:true});jQuery.event.trigger(e,null,elem)}});jQuery.fn.extend({trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this)})},triggerHandler:function(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true)}}});jQuery.each(("blur focus focusin focusout resize scroll click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup contextmenu").split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}});jQuery.fn.extend({hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)}});support.focusin="onfocusin"in window;if(!support.focusin){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event))};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this,attaches=dataPriv.access(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true)}dataPriv.access(doc,fix,(attaches||0)+1)},teardown:function(){var doc=this.ownerDocument||this,attaches=dataPriv.access(doc,fix)-1;if(!attaches){doc.removeEventListener(orig,handler,true);dataPriv.remove(doc,fix)}else{dataPriv.access(doc,fix,attaches)}}}})}var location=window.location;var nonce=jQuery.now();var rquery=/\?/;jQuery.parseXML=function(data){var xml;if(!data||typeof data!=="string"){return null}try{xml=(new window.DOMParser).parseFromString(data,"text/xml")}catch(e){xml=undefined}if(!xml||xml.getElementsByTagName("parsererror").length){jQuery.error("Invalid XML: "+data)}return xml};var rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(jQuery.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||rbracket.test(prefix)){add(prefix,v)}else{buildParams(prefix+"["+(typeof v==="object"&&v!=null?i:"")+"]",v,traditional,add)}})}else if(!traditional&&jQuery.type(obj)==="object"){for(name in obj){buildParams(prefix+"["+name+"]",obj[name],traditional,add)}}else{add(prefix,obj)}}jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,valueOrFunction){var value=jQuery.isFunction(valueOrFunction)?valueOrFunction():valueOrFunction;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value==null?"":value)};if(jQuery.isArray(a)||a.jquery&&!jQuery.isPlainObject(a)){jQuery.each(a,function(){add(this.name,this.value)})}else{for(prefix in a){buildParams(prefix,a[prefix],traditional,add)}}return s.join("&")};jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();if(val==null){return null}if(jQuery.isArray(val)){return jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}})}return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}});var r20=/%20/g,rhash=/#.*$/,rantiCache=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,prefilters={},transports={},allTypes="*/".concat("*"),originAnchor=document.createElement("a");originAnchor.href=location.href;function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*"}var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnothtmlwhite)||[];if(jQuery.isFunction(func)){while(dataType=dataTypes[i++]){if(dataType[0]==="+"){dataType=dataType.slice(1)||"*";(structure[dataType]=structure[dataType]||[]).unshift(func)}else{(structure[dataType]=structure[dataType]||[]).push(func)}}}}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){var inspected={},seekingTransport=structure===transports;function inspect(dataType){var selected;inspected[dataType]=true;jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);if(typeof dataTypeOrTransport==="string"&&!seekingTransport&&!inspected[dataTypeOrTransport]){options.dataTypes.unshift(dataTypeOrTransport);inspect(dataTypeOrTransport);return false}else if(seekingTransport){return!(selected=dataTypeOrTransport)}});return selected}return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var key,deep,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src){if(src[key]!==undefined){(flatOptions[key]?target:deep||(deep={}))[key]=src[key]}}if(deep){jQuery.extend(true,target,deep)}return target}function ajaxHandleResponses(s,jqXHR,responses){var ct,type,finalDataType,firstDataType,contents=s.contents,dataTypes=s.dataTypes;while(dataTypes[0]==="*"){dataTypes.shift();if(ct===undefined){ct=s.mimeType||jqXHR.getResponseHeader("Content-Type")}}if(ct){for(type in contents){if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}}}if(dataTypes[0]in responses){finalDataType=dataTypes[0]}else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}if(!firstDataType){firstDataType=type}}finalDataType=finalDataType||firstDataType}if(finalDataType){if(finalDataType!==dataTypes[0]){dataTypes.unshift(finalDataType)}return responses[finalDataType]}}function ajaxConvert(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1]){for(conv in s.converters){converters[conv.toLowerCase()]=s.converters[conv]}}current=dataTypes.shift();while(current){if(s.responseFields[current]){jqXHR[s.responseFields[current]]=response}if(!prev&&isSuccess&&s.dataFilter){response=s.dataFilter(response,s.dataType)}prev=current;current=dataTypes.shift();if(current){if(current==="*"){current=prev}else if(prev!=="*"&&prev!==current){conv=converters[prev+" "+current]||converters["* "+current];if(!conv){for(conv2 in converters){tmp=conv2.split(" ");if(tmp[1]===current){conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]];if(conv){if(conv===true){conv=converters[conv2]}else if(converters[conv2]!==true){current=tmp[0];dataTypes.unshift(tmp[1])}break}}}}if(conv!==true){if(conv&&s.throws){response=conv(response)}else{try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}}}}}return{state:"success",data:response}}jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:location.href,type:"GET",isLocal:rlocalProtocol.test(location.protocol),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":JSON.parse,"text xml":jQuery.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){if(typeof url==="object"){options=url;url=undefined}options=options||{};var transport,cacheURL,responseHeadersString,responseHeaders,timeoutTimer,urlAnchor,completed,fireGlobals,i,uncached,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(completed){if(!responseHeaders){responseHeaders={};while(match=rheaders.exec(responseHeadersString)){responseHeaders[match[1].toLowerCase()]=match[2]}}match=responseHeaders[key.toLowerCase()]}return match==null?null:match},getAllResponseHeaders:function(){return completed?responseHeadersString:null},setRequestHeader:function(name,value){if(completed==null){name=requestHeadersNames[name.toLowerCase()]=requestHeadersNames[name.toLowerCase()]||name;requestHeaders[name]=value}return this},overrideMimeType:function(type){if(completed==null){s.mimeType=type}return this},statusCode:function(map){var code;if(map){if(completed){jqXHR.always(map[jqXHR.status])}else{for(code in map){statusCode[code]=[statusCode[code],map[code]]}}}return this},abort:function(statusText){var finalText=statusText||strAbort;if(transport){transport.abort(finalText)}done(0,finalText);return this}};deferred.promise(jqXHR);s.url=((url||s.url||location.href)+"").replace(rprotocol,location.protocol+"//");s.type=options.method||options.type||s.method||s.type;s.dataTypes=(s.dataType||"*").toLowerCase().match(rnothtmlwhite)||[""];if(s.crossDomain==null){urlAnchor=document.createElement("a");try{urlAnchor.href=s.url;urlAnchor.href=urlAnchor.href;s.crossDomain=originAnchor.protocol+"//"+originAnchor.host!==urlAnchor.protocol+"//"+urlAnchor.host}catch(e){s.crossDomain=true}}if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional)}inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(completed){return jqXHR}fireGlobals=jQuery.event&&s.global;if(fireGlobals&&jQuery.active++===0){jQuery.event.trigger("ajaxStart")}s.type=s.type.toUpperCase();s.hasContent=!rnoContent.test(s.type);cacheURL=s.url.replace(rhash,"");if(!s.hasContent){uncached=s.url.slice(cacheURL.length);if(s.data){cacheURL+=(rquery.test(cacheURL)?"&":"?")+s.data;delete s.data}if(s.cache===false){cacheURL=cacheURL.replace(rantiCache,"$1");uncached=(rquery.test(cacheURL)?"&":"?")+"_="+nonce++ +uncached}s.url=cacheURL+uncached}else if(s.data&&s.processData&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0){s.data=s.data.replace(r20,"+")}if(s.ifModified){if(jQuery.lastModified[cacheURL]){jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL])}if(jQuery.etag[cacheURL]){jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])}}if(s.data&&s.hasContent&&s.contentType!==false||options.contentType){jqXHR.setRequestHeader("Content-Type",s.contentType)}jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+(s.dataTypes[0]!=="*"?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers){jqXHR.setRequestHeader(i,s.headers[i])}if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===false||completed)){return jqXHR.abort()}strAbort="abort";completeDeferred.add(s.complete);jqXHR.done(s.success);jqXHR.fail(s.error);transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport")}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s])}if(completed){return jqXHR}if(s.async&&s.timeout>0){timeoutTimer=window.setTimeout(function(){jqXHR.abort("timeout")},s.timeout)}try{completed=false;transport.send(requestHeaders,done)}catch(e){if(completed){throw e}done(-1,e)}}function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;if(completed){return}completed=true;if(timeoutTimer){window.clearTimeout(timeoutTimer)}transport=undefined;responseHeadersString=headers||"";jqXHR.readyState=status>0?4:0;isSuccess=status>=200&&status<300||status===304;if(responses){response=ajaxHandleResponses(s,jqXHR,responses)}response=ajaxConvert(s,response,jqXHR,isSuccess);if(isSuccess){if(s.ifModified){modified=jqXHR.getResponseHeader("Last-Modified");if(modified){jQuery.lastModified[cacheURL]=modified}modified=jqXHR.getResponseHeader("etag");if(modified){jQuery.etag[cacheURL]=modified}}if(status===204||s.type==="HEAD"){statusText="nocontent"}else if(status===304){statusText="notmodified"}else{statusText=response.state;success=response.data;error=response.error;isSuccess=!error}}else{error=statusText;if(status||!statusText){statusText="error";if(status<0){status=0}}}jqXHR.status=status;jqXHR.statusText=(nativeStatusText||statusText)+"";if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR])}else{deferred.rejectWith(callbackContext,[jqXHR,statusText,error])}jqXHR.statusCode(statusCode);statusCode=undefined;if(fireGlobals){globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error])}completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]);if(!--jQuery.active){jQuery.event.trigger("ajaxStop")}}}return jqXHR},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script")}});jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data=undefined}return jQuery.ajax(jQuery.extend({url:url,type:method,dataType:type,data:data,success:callback},jQuery.isPlainObject(url)&&url))}});jQuery._evalUrl=function(url){return jQuery.ajax({url:url,type:"GET",dataType:"script",cache:true,async:false,global:false,throws:true})};jQuery.fn.extend({wrapAll:function(html){var wrap;if(this[0]){if(jQuery.isFunction(html)){html=html.call(this[0])}wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0])}wrap.map(function(){var elem=this;while(elem.firstElementChild){elem=elem.firstElementChild}return elem}).append(this)}return this},wrapInner:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i))})}return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html)}else{self.append(html)}})},wrap:function(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html)})},unwrap:function(selector){this.parent(selector).not("body").each(function(){jQuery(this).replaceWith(this.childNodes)});return this}});jQuery.expr.pseudos.hidden=function(elem){return!jQuery.expr.pseudos.visible(elem)};jQuery.expr.pseudos.visible=function(elem){return!!(elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length)};jQuery.ajaxSettings.xhr=function(){try{return new window.XMLHttpRequest}catch(e){}};var xhrSuccessStatus={0:200,1223:204},xhrSupported=jQuery.ajaxSettings.xhr();support.cors=!!xhrSupported&&"withCredentials"in xhrSupported;support.ajax=xhrSupported=!!xhrSupported;jQuery.ajaxTransport(function(options){var callback,errorCallback;if(support.cors||xhrSupported&&!options.crossDomain){return{send:function(headers,complete){var i,xhr=options.xhr();xhr.open(options.type,options.url,options.async,options.username,options.password);if(options.xhrFields){for(i in options.xhrFields){xhr[i]=options.xhrFields[i]}}if(options.mimeType&&xhr.overrideMimeType){xhr.overrideMimeType(options.mimeType)}if(!options.crossDomain&&!headers["X-Requested-With"]){headers["X-Requested-With"]="XMLHttpRequest"}for(i in headers){xhr.setRequestHeader(i,headers[i])}callback=function(type){return function(){if(callback){callback=errorCallback=xhr.onload=xhr.onerror=xhr.onabort=xhr.onreadystatechange=null;if(type==="abort"){xhr.abort()}else if(type==="error"){if(typeof xhr.status!=="number"){complete(0,"error")}else{complete(xhr.status,xhr.statusText)}}else{complete(xhrSuccessStatus[xhr.status]||xhr.status,xhr.statusText,(xhr.responseType||"text")!=="text"||typeof xhr.responseText!=="string"?{binary:xhr.response}:{text:xhr.responseText},xhr.getAllResponseHeaders())}}}};xhr.onload=callback();errorCallback=xhr.onerror=callback("error");if(xhr.onabort!==undefined){xhr.onabort=errorCallback}else{xhr.onreadystatechange=function(){if(xhr.readyState===4){window.setTimeout(function(){if(callback){errorCallback()}})}}}callback=callback("abort");try{xhr.send(options.hasContent&&options.data||null)}catch(e){if(callback){throw e}}},abort:function(){if(callback){callback()}}}}});jQuery.ajaxPrefilter(function(s){if(s.crossDomain){s.contents.script=false}});jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, "+"application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(text){jQuery.globalEval(text);return text}}});jQuery.ajaxPrefilter("script",function(s){if(s.cache===undefined){s.cache=false}if(s.crossDomain){s.type="GET"}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,callback;return{send:function(_,complete){script=jQuery(" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/index.js b/app/index.js index f9985a6c48..4bd65d9867 100644 --- a/app/index.js +++ b/app/index.js @@ -1,33 +1,87 @@ -window._ = require('underscore'); - -window.$ = window.jQuery = require('jquery'); -require('jquery-textcomplete'); -require('jquery-ui/ui/position'); - -window.humanizeDuration = require('humanize-duration'); -require('imports?define=>false,module=>false,self=>window!idb-keyval'); -// window.JSZip = require('jszip'); -window.LZString = require('lz-string'); -window.MessageFormat = require('messageformat'); -window.moment = require('moment'); -window.SQL = require('sql.js'); -require('imports?this=>window!zip-js/WebContent/zip.js'); - -window.angular = require('exports?window.angular!angular'); - -require('angular-aria'); -require('angular-chrome-storage/angular-chrome-storage'); -require('angular-hotkeys'); -require('angular-messages'); -require('angular-moment'); -require('angular-native-dragdrop'); -require('angular-promise-tracker'); -require('angular-timer'); -require('angular-translate'); -require('angular-translate-interpolation-messageformat'); -require('angular-ui-router'); -require('angular-uuid2/dist/angular-uuid2.js'); -require('angularjs-slider'); -require('angularjs-toaster'); -require('ng-dialog'); -require('ng-http-rate-limiter'); +require('babel-polyfill'); + +require('./scripts/google'); + +require('./scripts/util'); // TODO: make these not global and instead import where needed + +require('./scripts/dimApp.module'); +require('./scripts/dimApp.config'); +require('./scripts/dimApp.i18n'); + +require('./scripts/services/dimActionQueue.factory'); +require('./scripts/services/dimBungieService.factory'); +require('./scripts/services/dimDefinitions.factory'); +require('./scripts/services/dimManifestService.factory'); +require('./scripts/services/dimBucketService.factory'); +require('./scripts/services/dimInfoService.factory'); +require('./scripts/services/dimPlatformService.factory'); +require('./scripts/services/dimLoadoutService.factory'); +require('./scripts/services/dimSettingsService.factory'); +require('./scripts/services/dimStoreService.factory'); +require('./scripts/services/dimVendorService.factory'); +require('./scripts/services/dimXurService.factory'); +require('./scripts/services/dimCsvService.factory'); +require('./scripts/services/dimItemService.factory'); +require('./scripts/services/dimItemMoveService.factory'); +require('./scripts/services/dimItemInfoService.factory'); +require('./scripts/services/dimFarmingService.factory'); +require('./scripts/services/dimSyncService.factory'); + +require('./scripts/loadout/dimLoadout.directive'); +require('./scripts/loadout/dimLoadoutPopup.directive'); +require('./scripts/loadout/random/dimRandom.controller'); +require('./scripts/compare/dimCompare.directive'); +require('./scripts/compare/dimCompareService.factory'); +require('./scripts/shell/dimAngularFilters.filter'); +require('./scripts/shell/dimMaterialsExchangeCtrl.controller'); +require('./scripts/shell/dimAppCtrl.controller'); +require('./scripts/shell/dimSettingsCtrl.controller'); +require('./scripts/shell/dimPlatformChoice.directive'); +require('./scripts/shell/dimSearchFilter.directive'); +require('./scripts/shell/dimClickAnywhereButHere.directive'); +require('./scripts/shell/dimFilterLink.directive'); +require('./scripts/shell/dimManifestProgress.directive'); +require('./scripts/store/dimPercentWidth.directive'); +require('./scripts/store/dimStores.directive'); +require('./scripts/store/dimStoreBucket.directive'); +require('./scripts/store/dimStoreReputation.directive'); +require('./scripts/store/dimStoreItem.directive'); +require('./scripts/store/dimStoreHeading.directive'); +require('./scripts/store/dimSimpleItem.directive'); +require('./scripts/store/dimStats.directive'); +require('./scripts/store/dimFarming.directive'); +require('./scripts/store/dimClearNewItems.directive'); +require('./scripts/move-popup/dimMoveAmount.directive'); +require('./scripts/move-popup/dimMovePopup.directive'); +require('./scripts/move-popup/dimTalentGrid.directive'); +require('./scripts/move-popup/dimMoveItemProperties.directive'); +require('./scripts/move-popup/dimItemTag.directive'); +require('./scripts/infuse/dimInfuse.controller'); +require('./scripts/xur/dimXur.controller'); +require('./scripts/vendors/dimVendor.controller'); +require('./scripts/vendors/dimVendorItems.directive'); +require('./scripts/vendors/dimVendorCurrencies.directive'); +require('./scripts/minmax/dimMinMax.controller'); +require('./scripts/minmax/dimMinMaxItem.directive'); +require('./scripts/minmax/dimMinMaxLocks.directive'); +require('./scripts/minmax/dimMinMaxCharSelect.directive'); +require('./scripts/debug/dimDebugItem.controller'); +require('./scripts/developer/dimDeveloper.controller'); +require('./scripts/materials-exchange/dimCollapsible.directive'); + +// window._ = require('underscore'); + +// window.$ = window.jQuery = require('jquery'); +// require('jquery-textcomplete'); +// require('jquery-ui/ui/position'); + +// window.humanizeDuration = require('humanize-duration'); +// require('imports?define=>false,module=>false,self=>window!idb-keyval'); +// // window.JSZip = require('jszip'); +// window.LZString = require('lz-string'); +// window.MessageFormat = require('messageformat'); +// window.moment = require('moment'); +// window.SQL = require('sql.js'); +// require('imports?this=>window!zip-js/WebContent/zip.js'); + +// window.angular = require('exports?window.angular!angular'); diff --git a/app/manifest.json b/app/manifest.json index d14346e481..7ae1f8c2f1 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -32,7 +32,7 @@ "38": "icon38.png" } }, - "options_page": "index.html", + "options_page": "generated/index.html", "content_security_policy": "script-src 'self' 'unsafe-eval' https://www.google-analytics.com https://apis.google.com; object-src 'self'", "incognito": "split", "offline_enabled": false diff --git a/app/scripts/compare/dimCompare.directive.js b/app/scripts/compare/dimCompare.directive.js index 34b77eb1b1..a230241516 100644 --- a/app/scripts/compare/dimCompare.directive.js +++ b/app/scripts/compare/dimCompare.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/dimApp.module.js b/app/scripts/dimApp.module.js index 5f93555873..16ac6ec6a2 100644 --- a/app/scripts/dimApp.module.js +++ b/app/scripts/dimApp.module.js @@ -1,19 +1,35 @@ -(function() { - 'use strict'; +const angular = require('angular'); - angular.module('dimApp', [ - 'ui.router', - 'timer', - 'ngAria', - 'ngDialog', - 'ngMessages', - 'ang-drag-drop', - 'angularUUID2', - 'toaster', - 'ajoslin.promise-tracker', - 'cfp.hotkeys', - 'rzModule', - 'ngHttpRateLimiter', - 'pascalprecht.translate' - ]); -})(); +// Declare all of the external angular dependencies first +require('angular-aria'); +require('angular-chrome-storage/angular-chrome-storage'); +require('angular-hotkeys'); +require('angular-messages'); +require('angular-moment'); +require('angular-native-dragdrop'); +require('angular-promise-tracker'); +require('angular-timer'); +require('angular-translate'); +require('angular-translate-interpolation-messageformat'); +require('angular-ui-router'); +require('angular-uuid2/dist/angular-uuid2.js'); +require('angularjs-slider'); +require('angularjs-toaster'); +require('ng-dialog'); +require('ng-http-rate-limiter'); + +angular.module('dimApp', [ + 'ui.router', + 'timer', + 'ngAria', + 'ngDialog', + 'ngMessages', + 'ang-drag-drop', + 'angularUUID2', + 'toaster', + 'ajoslin.promise-tracker', + 'cfp.hotkeys', + 'rzModule', + 'ngHttpRateLimiter', + 'pascalprecht.translate' +]); diff --git a/app/scripts/infuse/dimInfuse.controller.js b/app/scripts/infuse/dimInfuse.controller.js index f6e126b936..ab82ecf650 100644 --- a/app/scripts/infuse/dimInfuse.controller.js +++ b/app/scripts/infuse/dimInfuse.controller.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/loadout/dimLoadout.directive.js b/app/scripts/loadout/dimLoadout.directive.js index 12ff0e1393..04ccb9d4d7 100644 --- a/app/scripts/loadout/dimLoadout.directive.js +++ b/app/scripts/loadout/dimLoadout.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/loadout/dimLoadoutPopup.directive.js b/app/scripts/loadout/dimLoadoutPopup.directive.js index de8476cc9a..e9a30b1357 100644 --- a/app/scripts/loadout/dimLoadoutPopup.directive.js +++ b/app/scripts/loadout/dimLoadoutPopup.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; angular.module('dimApp') diff --git a/app/scripts/loadout/random/dimRandom.controller.js b/app/scripts/loadout/random/dimRandom.controller.js index a237352c46..e0c3f49597 100644 --- a/app/scripts/loadout/random/dimRandom.controller.js +++ b/app/scripts/loadout/random/dimRandom.controller.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/minmax/dimMinMax.controller.js b/app/scripts/minmax/dimMinMax.controller.js index abafb0f80a..3d04a64921 100644 --- a/app/scripts/minmax/dimMinMax.controller.js +++ b/app/scripts/minmax/dimMinMax.controller.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/minmax/dimMinMaxItem.directive.js b/app/scripts/minmax/dimMinMaxItem.directive.js index 706ba31929..8e3bdb4a78 100644 --- a/app/scripts/minmax/dimMinMaxItem.directive.js +++ b/app/scripts/minmax/dimMinMaxItem.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/minmax/dimMinMaxLocks.directive.js b/app/scripts/minmax/dimMinMaxLocks.directive.js index 20274b97a7..62ca08ba8b 100644 --- a/app/scripts/minmax/dimMinMaxLocks.directive.js +++ b/app/scripts/minmax/dimMinMaxLocks.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/move-popup/dimItemTag.directive.js b/app/scripts/move-popup/dimItemTag.directive.js index 19a0d10a7b..fc6bf565bd 100644 --- a/app/scripts/move-popup/dimItemTag.directive.js +++ b/app/scripts/move-popup/dimItemTag.directive.js @@ -1,3 +1,5 @@ +const angular = require('angular'); +const _ = require('lodash'); (function() { 'use strict'; diff --git a/app/scripts/move-popup/dimMoveItemProperties.directive.js b/app/scripts/move-popup/dimMoveItemProperties.directive.js index 8a04131a27..0662e66b7c 100644 --- a/app/scripts/move-popup/dimMoveItemProperties.directive.js +++ b/app/scripts/move-popup/dimMoveItemProperties.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/move-popup/dimTalentGrid.directive.js b/app/scripts/move-popup/dimTalentGrid.directive.js index 975cd9d2ea..11be22343d 100644 --- a/app/scripts/move-popup/dimTalentGrid.directive.js +++ b/app/scripts/move-popup/dimTalentGrid.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimBucketService.factory.js b/app/scripts/services/dimBucketService.factory.js index ce9c46feac..b9a4a4c3e8 100644 --- a/app/scripts/services/dimBucketService.factory.js +++ b/app/scripts/services/dimBucketService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimBungieService.factory.js b/app/scripts/services/dimBungieService.factory.js index ba8beea94b..7578273f1a 100644 --- a/app/scripts/services/dimBungieService.factory.js +++ b/app/scripts/services/dimBungieService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimCsvService.factory.js b/app/scripts/services/dimCsvService.factory.js index 62981fe188..00fda38774 100644 --- a/app/scripts/services/dimCsvService.factory.js +++ b/app/scripts/services/dimCsvService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimFarmingService.factory.js b/app/scripts/services/dimFarmingService.factory.js index c27964f950..26e6510c8f 100644 --- a/app/scripts/services/dimFarmingService.factory.js +++ b/app/scripts/services/dimFarmingService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimInfoService.factory.js b/app/scripts/services/dimInfoService.factory.js index a73e4a8f72..ef622fdb12 100644 --- a/app/scripts/services/dimInfoService.factory.js +++ b/app/scripts/services/dimInfoService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimItemInfoService.factory.js b/app/scripts/services/dimItemInfoService.factory.js index e005fee651..0a68141620 100644 --- a/app/scripts/services/dimItemInfoService.factory.js +++ b/app/scripts/services/dimItemInfoService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimItemMoveService.factory.js b/app/scripts/services/dimItemMoveService.factory.js index 4aaf738fc5..5cd817bad5 100644 --- a/app/scripts/services/dimItemMoveService.factory.js +++ b/app/scripts/services/dimItemMoveService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimItemService.factory.js b/app/scripts/services/dimItemService.factory.js index ad05acb0d4..7156f87c5d 100644 --- a/app/scripts/services/dimItemService.factory.js +++ b/app/scripts/services/dimItemService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimLoadoutService.factory.js b/app/scripts/services/dimLoadoutService.factory.js index 70003b5e47..e6a20c7f22 100644 --- a/app/scripts/services/dimLoadoutService.factory.js +++ b/app/scripts/services/dimLoadoutService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimManifestService.factory.js b/app/scripts/services/dimManifestService.factory.js index 6fb97a81d2..416b5bf334 100644 --- a/app/scripts/services/dimManifestService.factory.js +++ b/app/scripts/services/dimManifestService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimPlatformService.factory.js b/app/scripts/services/dimPlatformService.factory.js index b0a0a176e2..43a876f036 100644 --- a/app/scripts/services/dimPlatformService.factory.js +++ b/app/scripts/services/dimPlatformService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimSettingsService.factory.js b/app/scripts/services/dimSettingsService.factory.js index 4d3624fb06..e9a09c2612 100644 --- a/app/scripts/services/dimSettingsService.factory.js +++ b/app/scripts/services/dimSettingsService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimStoreService.factory.js b/app/scripts/services/dimStoreService.factory.js index bcd1d0f219..848c3796e8 100644 --- a/app/scripts/services/dimStoreService.factory.js +++ b/app/scripts/services/dimStoreService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimVendorService.factory.js b/app/scripts/services/dimVendorService.factory.js index f4c7995b92..471e5e18f3 100644 --- a/app/scripts/services/dimVendorService.factory.js +++ b/app/scripts/services/dimVendorService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/services/dimXurService.factory.js b/app/scripts/services/dimXurService.factory.js index c64e993389..2a229a5973 100644 --- a/app/scripts/services/dimXurService.factory.js +++ b/app/scripts/services/dimXurService.factory.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/shell/dimAngularFilters.filter.js b/app/scripts/shell/dimAngularFilters.filter.js index 3e0cd94b80..87d416558a 100644 --- a/app/scripts/shell/dimAngularFilters.filter.js +++ b/app/scripts/shell/dimAngularFilters.filter.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/shell/dimAppCtrl.controller.js b/app/scripts/shell/dimAppCtrl.controller.js index cd6664c949..d3ac7150e2 100644 --- a/app/scripts/shell/dimAppCtrl.controller.js +++ b/app/scripts/shell/dimAppCtrl.controller.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/shell/dimMaterialsExchangeCtrl.controller.js b/app/scripts/shell/dimMaterialsExchangeCtrl.controller.js index 6c6d03a3cf..6586fe1743 100644 --- a/app/scripts/shell/dimMaterialsExchangeCtrl.controller.js +++ b/app/scripts/shell/dimMaterialsExchangeCtrl.controller.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/shell/dimSearchFilter.directive.js b/app/scripts/shell/dimSearchFilter.directive.js index 061431980d..b07ba2242a 100644 --- a/app/scripts/shell/dimSearchFilter.directive.js +++ b/app/scripts/shell/dimSearchFilter.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/shell/dimSettingsCtrl.controller.js b/app/scripts/shell/dimSettingsCtrl.controller.js index 451ccdf46d..934626f04e 100644 --- a/app/scripts/shell/dimSettingsCtrl.controller.js +++ b/app/scripts/shell/dimSettingsCtrl.controller.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/store/dimStoreBucket.directive.js b/app/scripts/store/dimStoreBucket.directive.js index 0bbf45fbe4..919eac67cb 100644 --- a/app/scripts/store/dimStoreBucket.directive.js +++ b/app/scripts/store/dimStoreBucket.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/store/dimStoreHeading.directive.js b/app/scripts/store/dimStoreHeading.directive.js index 25738a8a3a..7c6a8d1993 100644 --- a/app/scripts/store/dimStoreHeading.directive.js +++ b/app/scripts/store/dimStoreHeading.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/store/dimStores.directive.js b/app/scripts/store/dimStores.directive.js index e5f85c5d58..56b9ca1e9d 100644 --- a/app/scripts/store/dimStores.directive.js +++ b/app/scripts/store/dimStores.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/util.js b/app/scripts/util.js index bbd6d81165..a75475442e 100644 --- a/app/scripts/util.js +++ b/app/scripts/util.js @@ -1,3 +1,5 @@ +const _ = require('lodash'); + // Some utility functions missing from underscore window.sum = function sum(list, summer) { const fn = _.iteratee(summer); diff --git a/app/scripts/vendors/dimVendor.controller.js b/app/scripts/vendors/dimVendor.controller.js index 7443606acd..d2d588d758 100644 --- a/app/scripts/vendors/dimVendor.controller.js +++ b/app/scripts/vendors/dimVendor.controller.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/vendors/dimVendorItems.directive.js b/app/scripts/vendors/dimVendorItems.directive.js index eea80908ae..fb0d3da3df 100644 --- a/app/scripts/vendors/dimVendorItems.directive.js +++ b/app/scripts/vendors/dimVendorItems.directive.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/app/scripts/xur/dimXur.controller.js b/app/scripts/xur/dimXur.controller.js index ae92fd1648..147e758695 100644 --- a/app/scripts/xur/dimXur.controller.js +++ b/app/scripts/xur/dimXur.controller.js @@ -1,3 +1,6 @@ +const angular = require('angular'); +const _ = require('lodash'); + (function() { 'use strict'; diff --git a/bower.json b/bower.json deleted file mode 100644 index 3fbd7bc3b9..0000000000 --- a/bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "dim", - "description": "An item manager for Destiny.", - "version": "3.15.1", - "homepage": "https://github.com/DestinyItemManager/DIM", - "repository": { - "type": "git", - "url": "https://github.com/DestinyItemManager/DIM.git" - }, - "dependencies": { - "components-font-awesome": "~4.4.0", - "zip.js": "*" - } -} diff --git a/config/webpack.js b/config/webpack.js index 5c06357b8d..cea4da8abc 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -1,34 +1,51 @@ -var webpack = require('webpack'); - -module.exports = { - entry: './app/index.js', - output: { - path: './app/generated', - filename: 'index.js' - }, - module: { - loaders: [{ - test: /\.js$/, - exclude: /node_modules/, - loader: 'babel-loader' - }, { - test: /\.json$/, - loader: 'json-loader' - }] - }, - resolve: { - extensions: ['', '.webpack.js', '.web.js', '.js'] - }, - node: { - console: 'empty', - fs: 'empty', - net: 'empty', - tls: 'empty' - }, - plugins: [ - new webpack.optimize.UglifyJsPlugin({ - mangle: false, - compress: false - }) - ] -} +// const webpack = require('webpack'); + +// const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +// const CleanWebpackPlugin = require('clean-webpack-plugin'); + +module.exports = (options = {}) => { + const config = { + entry: './app/index.js', + + output: { + path: './app/generated', + filename: 'bundle-[chunkhash].js', + }, + + devtool: 'cheap-module-source-map', + + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader', + }, { + test: /\.json$/, + loader: 'json-loader' + }, { + test: /\.html$/, + loader: 'html-loader' + }, + ], + }, + + resolve: { + extensions: ['.js', '.json'] + }, + + plugins: [ + new HtmlWebpackPlugin({ + template: 'app/index.html', + }), + + // new webpack.optimize.UglifyJsPlugin({ + // mangle: false, + // compress: false + // }) + ], + }; + + return config; +}; diff --git a/package.json b/package.json index 41f9059760..d14cae3998 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,9 @@ "dev-chrome": "./node_modules/.bin/grunt dev-chrome", "generate-css": "./node_modules/.bin/grunt css", "lint": "./node_modules/.bin/grunt eslint", - "bower": "./node_modules/.bin/bower install", - "postinstall": "npm-run-all bower build-vendors", + "_postinstall": "npm-run-all bower build-vendors", "test": "echo \"No tests\"", - "build-vendors": "webpack --config ./config/webpack.js", + "start": "webpack --config ./config/webpack.js", "install": "napa" }, "napa": { @@ -32,8 +31,10 @@ "autoprefixer": "^6.3.7", "babel-core": "^6.21.0", "babel-loader": "^6.2.10", + "babel-preset-env": "^1.1.4", "babel-preset-es2015": "^6.18.0", "bower": "^1.7.9", + "clean-webpack-plugin": "^0.1.14", "exports-loader": "^0.6.3", "grunt": "^1.0.1", "grunt-contrib-clean": "^1.0.0", @@ -47,6 +48,8 @@ "grunt-sync": "^0.6.2", "grunt-text-replace": "^0.4.0", "grunt-webstore-upload": "^0.9.3", + "html-loader": "^0.4.4", + "html-webpack-plugin": "^2.24.1", "imports-loader": "^0.7.0", "jpm": "^1.1.1", "jshint": "^2.9.2", @@ -58,7 +61,7 @@ "sqlite3": "^3.1.4", "uglify-js": "^2.7.0", "unzip": "^0.1.11", - "webpack": "^1.14.0" + "webpack": "^2.2.0-rc.3" }, "dependencies": { "angular": "^1.6.1", From e7bcdc25a09addbec18ec54af89a7453a4bf9979 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Fri, 30 Dec 2016 16:35:36 +1100 Subject: [PATCH 04/28] Revert back to underscore, get more deps working including ZipJS --- app/index.js | 32 +++++++++---------- app/scripts/compare/dimCompare.directive.js | 2 +- app/scripts/dimApp.config.js | 12 +++---- app/scripts/infuse/dimInfuse.controller.js | 2 +- app/scripts/loadout/dimLoadout.directive.js | 2 +- .../loadout/dimLoadoutPopup.directive.js | 2 +- .../loadout/random/dimRandom.controller.js | 2 +- app/scripts/minmax/dimMinMax.controller.js | 2 +- app/scripts/minmax/dimMinMaxItem.directive.js | 2 +- .../minmax/dimMinMaxLocks.directive.js | 2 +- .../move-popup/dimItemTag.directive.js | 2 +- .../dimMoveItemProperties.directive.js | 2 +- .../move-popup/dimTalentGrid.directive.js | 2 +- .../services/dimBucketService.factory.js | 2 +- .../services/dimBungieService.factory.js | 2 +- app/scripts/services/dimCsvService.factory.js | 2 +- .../services/dimFarmingService.factory.js | 2 +- .../services/dimInfoService.factory.js | 2 +- .../services/dimItemInfoService.factory.js | 2 +- .../services/dimItemMoveService.factory.js | 2 +- .../services/dimItemService.factory.js | 2 +- .../services/dimLoadoutService.factory.js | 2 +- .../services/dimManifestService.factory.js | 2 +- .../services/dimPlatformService.factory.js | 2 +- .../services/dimSettingsService.factory.js | 2 +- .../services/dimStoreService.factory.js | 2 +- .../services/dimVendorService.factory.js | 2 +- app/scripts/services/dimXurService.factory.js | 2 +- app/scripts/shell/dimAngularFilters.filter.js | 2 +- app/scripts/shell/dimAppCtrl.controller.js | 2 +- .../dimMaterialsExchangeCtrl.controller.js | 2 +- .../shell/dimSearchFilter.directive.js | 2 +- .../shell/dimSettingsCtrl.controller.js | 2 +- app/scripts/store/dimStoreBucket.directive.js | 2 +- .../store/dimStoreHeading.directive.js | 2 +- app/scripts/store/dimStores.directive.js | 2 +- app/scripts/util.js | 2 +- app/scripts/vendors/dimVendor.controller.js | 2 +- .../vendors/dimVendorItems.directive.js | 2 +- app/scripts/xur/dimXur.controller.js | 2 +- config/webpack.js | 14 ++++++++ package.json | 2 ++ 42 files changed, 75 insertions(+), 61 deletions(-) diff --git a/app/index.js b/app/index.js index 4bd65d9867..14254edaea 100644 --- a/app/index.js +++ b/app/index.js @@ -2,6 +2,21 @@ require('babel-polyfill'); require('./scripts/google'); +// TODO: remove this globals and instead require where needed +window.$ = window.jQuery = require('jquery'); +require('jquery-textcomplete'); +require('jquery-ui/ui/position'); +window.humanizeDuration = require('humanize-duration'); +require('imports-loader?define=>false,module=>false,self=>window!idb-keyval'); +window.JSZip = require('jszip'); +window.LZString = require('lz-string'); +window.MessageFormat = require('messageformat'); +window.moment = require('moment'); +window.SQL = require('sql.js'); +require('imports-loader?this=>window!zip-js/WebContent/zip.js'); +window.angular = require('angular'); + + require('./scripts/util'); // TODO: make these not global and instead import where needed require('./scripts/dimApp.module'); @@ -68,20 +83,3 @@ require('./scripts/minmax/dimMinMaxCharSelect.directive'); require('./scripts/debug/dimDebugItem.controller'); require('./scripts/developer/dimDeveloper.controller'); require('./scripts/materials-exchange/dimCollapsible.directive'); - -// window._ = require('underscore'); - -// window.$ = window.jQuery = require('jquery'); -// require('jquery-textcomplete'); -// require('jquery-ui/ui/position'); - -// window.humanizeDuration = require('humanize-duration'); -// require('imports?define=>false,module=>false,self=>window!idb-keyval'); -// // window.JSZip = require('jszip'); -// window.LZString = require('lz-string'); -// window.MessageFormat = require('messageformat'); -// window.moment = require('moment'); -// window.SQL = require('sql.js'); -// require('imports?this=>window!zip-js/WebContent/zip.js'); - -// window.angular = require('exports?window.angular!angular'); diff --git a/app/scripts/compare/dimCompare.directive.js b/app/scripts/compare/dimCompare.directive.js index a230241516..7b0b8791fb 100644 --- a/app/scripts/compare/dimCompare.directive.js +++ b/app/scripts/compare/dimCompare.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/dimApp.config.js b/app/scripts/dimApp.config.js index 3c383ab2e7..f9b5b06ccf 100644 --- a/app/scripts/dimApp.config.js +++ b/app/scripts/dimApp.config.js @@ -144,27 +144,27 @@ $stateProvider .state('inventory', { url: "/inventory", - templateUrl: "views/inventory.html" + templateUrl: require("file-loader!../views/inventory.html"), }) .state('best', { url: "/best", - templateUrl: "views/best.html" + templateUrl: require("file-loader!../views/best.html"), }) .state('vendors', { url: "/vendors", - templateUrl: "views/vendors.html" + templateUrl: require("file-loader!../views/vendors.html"), }) .state('materials-exchange', { url: "/materials-exchange", - templateUrl: "views/mats-exchange.html" + templateUrl: require("file-loader!../views/mats-exchange.html"), }) .state('debugItem', { url: "/debugItem/:itemId", - templateUrl: "views/debugItem.html" + templateUrl: require("file-loader!../views/debugItem.html"), }) .state('developer', { url: "/developer", - templateUrl: "scripts/developer/developer.html" + templateUrl: require("file-loader!../scripts/developer/developer.html"), }); }); })(); diff --git a/app/scripts/infuse/dimInfuse.controller.js b/app/scripts/infuse/dimInfuse.controller.js index ab82ecf650..8b8e906fac 100644 --- a/app/scripts/infuse/dimInfuse.controller.js +++ b/app/scripts/infuse/dimInfuse.controller.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/loadout/dimLoadout.directive.js b/app/scripts/loadout/dimLoadout.directive.js index 04ccb9d4d7..adaaf861ab 100644 --- a/app/scripts/loadout/dimLoadout.directive.js +++ b/app/scripts/loadout/dimLoadout.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/loadout/dimLoadoutPopup.directive.js b/app/scripts/loadout/dimLoadoutPopup.directive.js index e9a30b1357..288b339316 100644 --- a/app/scripts/loadout/dimLoadoutPopup.directive.js +++ b/app/scripts/loadout/dimLoadoutPopup.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/loadout/random/dimRandom.controller.js b/app/scripts/loadout/random/dimRandom.controller.js index e0c3f49597..6debdfc23d 100644 --- a/app/scripts/loadout/random/dimRandom.controller.js +++ b/app/scripts/loadout/random/dimRandom.controller.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/minmax/dimMinMax.controller.js b/app/scripts/minmax/dimMinMax.controller.js index 3d04a64921..bc646a8a0f 100644 --- a/app/scripts/minmax/dimMinMax.controller.js +++ b/app/scripts/minmax/dimMinMax.controller.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/minmax/dimMinMaxItem.directive.js b/app/scripts/minmax/dimMinMaxItem.directive.js index 8e3bdb4a78..2a6a8d9134 100644 --- a/app/scripts/minmax/dimMinMaxItem.directive.js +++ b/app/scripts/minmax/dimMinMaxItem.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/minmax/dimMinMaxLocks.directive.js b/app/scripts/minmax/dimMinMaxLocks.directive.js index 62ca08ba8b..bffa7fd192 100644 --- a/app/scripts/minmax/dimMinMaxLocks.directive.js +++ b/app/scripts/minmax/dimMinMaxLocks.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/move-popup/dimItemTag.directive.js b/app/scripts/move-popup/dimItemTag.directive.js index fc6bf565bd..68e91cf96d 100644 --- a/app/scripts/move-popup/dimItemTag.directive.js +++ b/app/scripts/move-popup/dimItemTag.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/move-popup/dimMoveItemProperties.directive.js b/app/scripts/move-popup/dimMoveItemProperties.directive.js index 0662e66b7c..6e86202d30 100644 --- a/app/scripts/move-popup/dimMoveItemProperties.directive.js +++ b/app/scripts/move-popup/dimMoveItemProperties.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/move-popup/dimTalentGrid.directive.js b/app/scripts/move-popup/dimTalentGrid.directive.js index 11be22343d..685f99da7d 100644 --- a/app/scripts/move-popup/dimTalentGrid.directive.js +++ b/app/scripts/move-popup/dimTalentGrid.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimBucketService.factory.js b/app/scripts/services/dimBucketService.factory.js index b9a4a4c3e8..45a423fecb 100644 --- a/app/scripts/services/dimBucketService.factory.js +++ b/app/scripts/services/dimBucketService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimBungieService.factory.js b/app/scripts/services/dimBungieService.factory.js index 7578273f1a..e0558158fa 100644 --- a/app/scripts/services/dimBungieService.factory.js +++ b/app/scripts/services/dimBungieService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimCsvService.factory.js b/app/scripts/services/dimCsvService.factory.js index 00fda38774..b9b1a6e4d0 100644 --- a/app/scripts/services/dimCsvService.factory.js +++ b/app/scripts/services/dimCsvService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimFarmingService.factory.js b/app/scripts/services/dimFarmingService.factory.js index 26e6510c8f..4bc3a33559 100644 --- a/app/scripts/services/dimFarmingService.factory.js +++ b/app/scripts/services/dimFarmingService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimInfoService.factory.js b/app/scripts/services/dimInfoService.factory.js index ef622fdb12..fbcc4a7fc0 100644 --- a/app/scripts/services/dimInfoService.factory.js +++ b/app/scripts/services/dimInfoService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimItemInfoService.factory.js b/app/scripts/services/dimItemInfoService.factory.js index 0a68141620..c29d404849 100644 --- a/app/scripts/services/dimItemInfoService.factory.js +++ b/app/scripts/services/dimItemInfoService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimItemMoveService.factory.js b/app/scripts/services/dimItemMoveService.factory.js index 5cd817bad5..c5874aae62 100644 --- a/app/scripts/services/dimItemMoveService.factory.js +++ b/app/scripts/services/dimItemMoveService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimItemService.factory.js b/app/scripts/services/dimItemService.factory.js index 7156f87c5d..f0c8c3c037 100644 --- a/app/scripts/services/dimItemService.factory.js +++ b/app/scripts/services/dimItemService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimLoadoutService.factory.js b/app/scripts/services/dimLoadoutService.factory.js index e6a20c7f22..b98cb17a76 100644 --- a/app/scripts/services/dimLoadoutService.factory.js +++ b/app/scripts/services/dimLoadoutService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimManifestService.factory.js b/app/scripts/services/dimManifestService.factory.js index 416b5bf334..e44454babb 100644 --- a/app/scripts/services/dimManifestService.factory.js +++ b/app/scripts/services/dimManifestService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimPlatformService.factory.js b/app/scripts/services/dimPlatformService.factory.js index 43a876f036..a6c50b57da 100644 --- a/app/scripts/services/dimPlatformService.factory.js +++ b/app/scripts/services/dimPlatformService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimSettingsService.factory.js b/app/scripts/services/dimSettingsService.factory.js index e9a09c2612..f98535d7a6 100644 --- a/app/scripts/services/dimSettingsService.factory.js +++ b/app/scripts/services/dimSettingsService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimStoreService.factory.js b/app/scripts/services/dimStoreService.factory.js index 848c3796e8..97a5311a3e 100644 --- a/app/scripts/services/dimStoreService.factory.js +++ b/app/scripts/services/dimStoreService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimVendorService.factory.js b/app/scripts/services/dimVendorService.factory.js index 471e5e18f3..5929142526 100644 --- a/app/scripts/services/dimVendorService.factory.js +++ b/app/scripts/services/dimVendorService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/services/dimXurService.factory.js b/app/scripts/services/dimXurService.factory.js index 2a229a5973..8e9490253b 100644 --- a/app/scripts/services/dimXurService.factory.js +++ b/app/scripts/services/dimXurService.factory.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/shell/dimAngularFilters.filter.js b/app/scripts/shell/dimAngularFilters.filter.js index 87d416558a..ce639dbd4e 100644 --- a/app/scripts/shell/dimAngularFilters.filter.js +++ b/app/scripts/shell/dimAngularFilters.filter.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/shell/dimAppCtrl.controller.js b/app/scripts/shell/dimAppCtrl.controller.js index d3ac7150e2..e475e08d49 100644 --- a/app/scripts/shell/dimAppCtrl.controller.js +++ b/app/scripts/shell/dimAppCtrl.controller.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/shell/dimMaterialsExchangeCtrl.controller.js b/app/scripts/shell/dimMaterialsExchangeCtrl.controller.js index 6586fe1743..d59b7f23ca 100644 --- a/app/scripts/shell/dimMaterialsExchangeCtrl.controller.js +++ b/app/scripts/shell/dimMaterialsExchangeCtrl.controller.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/shell/dimSearchFilter.directive.js b/app/scripts/shell/dimSearchFilter.directive.js index b07ba2242a..a7cf9829c8 100644 --- a/app/scripts/shell/dimSearchFilter.directive.js +++ b/app/scripts/shell/dimSearchFilter.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/shell/dimSettingsCtrl.controller.js b/app/scripts/shell/dimSettingsCtrl.controller.js index 934626f04e..e4e228e3fd 100644 --- a/app/scripts/shell/dimSettingsCtrl.controller.js +++ b/app/scripts/shell/dimSettingsCtrl.controller.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/store/dimStoreBucket.directive.js b/app/scripts/store/dimStoreBucket.directive.js index 919eac67cb..59781ff6f6 100644 --- a/app/scripts/store/dimStoreBucket.directive.js +++ b/app/scripts/store/dimStoreBucket.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/store/dimStoreHeading.directive.js b/app/scripts/store/dimStoreHeading.directive.js index 7c6a8d1993..9cdb3bbf61 100644 --- a/app/scripts/store/dimStoreHeading.directive.js +++ b/app/scripts/store/dimStoreHeading.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/store/dimStores.directive.js b/app/scripts/store/dimStores.directive.js index 56b9ca1e9d..9c57302057 100644 --- a/app/scripts/store/dimStores.directive.js +++ b/app/scripts/store/dimStores.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/util.js b/app/scripts/util.js index a75475442e..21a78cfd57 100644 --- a/app/scripts/util.js +++ b/app/scripts/util.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +const _ = require('underscore'); // Some utility functions missing from underscore window.sum = function sum(list, summer) { diff --git a/app/scripts/vendors/dimVendor.controller.js b/app/scripts/vendors/dimVendor.controller.js index d2d588d758..fbd5c48c50 100644 --- a/app/scripts/vendors/dimVendor.controller.js +++ b/app/scripts/vendors/dimVendor.controller.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/vendors/dimVendorItems.directive.js b/app/scripts/vendors/dimVendorItems.directive.js index fb0d3da3df..8f4193332e 100644 --- a/app/scripts/vendors/dimVendorItems.directive.js +++ b/app/scripts/vendors/dimVendorItems.directive.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/app/scripts/xur/dimXur.controller.js b/app/scripts/xur/dimXur.controller.js index 147e758695..95d2323c60 100644 --- a/app/scripts/xur/dimXur.controller.js +++ b/app/scripts/xur/dimXur.controller.js @@ -1,5 +1,5 @@ const angular = require('angular'); -const _ = require('lodash'); +const _ = require('underscore'); (function() { 'use strict'; diff --git a/config/webpack.js b/config/webpack.js index cea4da8abc..fd961b2dba 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -2,6 +2,7 @@ // const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); // const CleanWebpackPlugin = require('clean-webpack-plugin'); module.exports = (options = {}) => { @@ -40,11 +41,24 @@ module.exports = (options = {}) => { template: 'app/index.html', }), + new CopyWebpackPlugin([ + { + from: './node_modules/zip-js/WebContent', + to: 'zipjs' + } + ]), + // new webpack.optimize.UglifyJsPlugin({ // mangle: false, // compress: false // }) ], + + node: { + fs: 'empty', + net: 'empty', + tls: 'empty' + }, }; return config; diff --git a/package.json b/package.json index d14cae3998..a6bbd7d575 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "babel-preset-es2015": "^6.18.0", "bower": "^1.7.9", "clean-webpack-plugin": "^0.1.14", + "copy-webpack-plugin": "^4.0.1", "exports-loader": "^0.6.3", "grunt": "^1.0.1", "grunt-contrib-clean": "^1.0.0", @@ -79,6 +80,7 @@ "angularjs-toaster": "github:DestinyItemManager/AngularJS-Toaster", "babel-polyfill": "^6.20.0", "components-font-awesome": "^4.7.0", + "file-loader": "^0.9.0", "humanize-duration": "^3.10.0", "idb-keyval": "^2.3.0", "jquery": "^3.1.1", From 9a453c13ce9d0161805a86f1175a05bfe4a4e3b6 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Fri, 30 Dec 2016 17:00:05 +1100 Subject: [PATCH 05/28] Got styles working --- app/index.js | 4 ++- app/scripts/dimApp.config.js | 12 ++++---- .../services/dimManifestService.factory.js | 2 +- config/webpack.js | 28 ++++++++++++++----- package.json | 6 +++- 5 files changed, 36 insertions(+), 16 deletions(-) diff --git a/app/index.js b/app/index.js index 14254edaea..3e2c9a424a 100644 --- a/app/index.js +++ b/app/index.js @@ -3,6 +3,7 @@ require('babel-polyfill'); require('./scripts/google'); // TODO: remove this globals and instead require where needed +window._ = require('underscore'); window.$ = window.jQuery = require('jquery'); require('jquery-textcomplete'); require('jquery-ui/ui/position'); @@ -16,7 +17,6 @@ window.SQL = require('sql.js'); require('imports-loader?this=>window!zip-js/WebContent/zip.js'); window.angular = require('angular'); - require('./scripts/util'); // TODO: make these not global and instead import where needed require('./scripts/dimApp.module'); @@ -83,3 +83,5 @@ require('./scripts/minmax/dimMinMaxCharSelect.directive'); require('./scripts/debug/dimDebugItem.controller'); require('./scripts/developer/dimDeveloper.controller'); require('./scripts/materials-exchange/dimCollapsible.directive'); + +require('./scss/main.scss'); diff --git a/app/scripts/dimApp.config.js b/app/scripts/dimApp.config.js index f9b5b06ccf..f47f622bb8 100644 --- a/app/scripts/dimApp.config.js +++ b/app/scripts/dimApp.config.js @@ -144,27 +144,27 @@ $stateProvider .state('inventory', { url: "/inventory", - templateUrl: require("file-loader!../views/inventory.html"), + templateUrl: require("!file-loader!../views/inventory.html"), }) .state('best', { url: "/best", - templateUrl: require("file-loader!../views/best.html"), + templateUrl: require("!file-loader!../views/best.html"), }) .state('vendors', { url: "/vendors", - templateUrl: require("file-loader!../views/vendors.html"), + templateUrl: require("!file-loader!../views/vendors.html"), }) .state('materials-exchange', { url: "/materials-exchange", - templateUrl: require("file-loader!../views/mats-exchange.html"), + templateUrl: require("!file-loader!../views/mats-exchange.html"), }) .state('debugItem', { url: "/debugItem/:itemId", - templateUrl: require("file-loader!../views/debugItem.html"), + templateUrl: require("!file-loader!../views/debugItem.html"), }) .state('developer', { url: "/developer", - templateUrl: require("file-loader!../scripts/developer/developer.html"), + templateUrl: require("!file-loader!../scripts/developer/developer.html"), }); }); })(); diff --git a/app/scripts/services/dimManifestService.factory.js b/app/scripts/services/dimManifestService.factory.js index e44454babb..c4d3ac149a 100644 --- a/app/scripts/services/dimManifestService.factory.js +++ b/app/scripts/services/dimManifestService.factory.js @@ -200,7 +200,7 @@ const _ = require('underscore'); function unzipManifest(blob) { return $q(function(resolve, reject) { zip.useWebWorkers = true; - zip.workerScriptsPath = "vendor/zip.js/WebContent/"; + zip.workerScriptsPath = 'zipjs/'; zip.createReader(new zip.BlobReader(blob), function(zipReader) { // get all entries from the zip zipReader.getEntries(function(entries) { diff --git a/config/webpack.js b/config/webpack.js index fd961b2dba..b6c419d1ba 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -1,8 +1,9 @@ -// const webpack = require('webpack'); +const webpack = require('webpack'); // const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); // const CleanWebpackPlugin = require('clean-webpack-plugin'); module.exports = (options = {}) => { @@ -25,10 +26,19 @@ module.exports = (options = {}) => { }, { test: /\.json$/, loader: 'json-loader' + }, { + test: /\.png$/, + loader: 'file-loader' }, { test: /\.html$/, loader: 'html-loader' - }, + }, { + test: /\.scss$/, + loader: ExtractTextPlugin.extract({ + fallbackLoader: 'style-loader', + loader: 'css-loader!sass-loader', + }), + } ], }, @@ -37,6 +47,8 @@ module.exports = (options = {}) => { }, plugins: [ + new ExtractTextPlugin('styles.css'), + new HtmlWebpackPlugin({ template: 'app/index.html', }), @@ -47,11 +59,6 @@ module.exports = (options = {}) => { to: 'zipjs' } ]), - - // new webpack.optimize.UglifyJsPlugin({ - // mangle: false, - // compress: false - // }) ], node: { @@ -61,5 +68,12 @@ module.exports = (options = {}) => { }, }; + if (options.prod) { + config.plugins.push(new webpack.optimize.UglifyJsPlugin({ + mangle: false, + compress: false + })); + } + return config; }; diff --git a/package.json b/package.json index a6bbd7d575..882c15d30b 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,9 @@ "bower": "^1.7.9", "clean-webpack-plugin": "^0.1.14", "copy-webpack-plugin": "^4.0.1", + "css-loader": "^0.26.1", "exports-loader": "^0.6.3", + "extract-text-webpack-plugin": "2.0.0-beta.4", "grunt": "^1.0.1", "grunt-contrib-clean": "^1.0.0", "grunt-contrib-compress": "^1.3.0", @@ -56,10 +58,12 @@ "jshint": "^2.9.2", "load-grunt-tasks": "^3.5.0", "napa": "^2.3.0", - "node-sass": "^3.8.0", + "node-sass": "^3.13.1", "npm-run-all": "^3.1.2", "request": "^2.73.0", + "sass-loader": "^4.1.1", "sqlite3": "^3.1.4", + "style-loader": "^0.13.1", "uglify-js": "^2.7.0", "unzip": "^0.1.11", "webpack": "^2.2.0-rc.3" From 786e8640ffa9ba26c24b5da94a61ac84f596bbcb Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Fri, 30 Dec 2016 17:01:03 +1100 Subject: [PATCH 06/28] Hash css file --- config/webpack.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/webpack.js b/config/webpack.js index b6c419d1ba..333db207bf 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -47,7 +47,7 @@ module.exports = (options = {}) => { }, plugins: [ - new ExtractTextPlugin('styles.css'), + new ExtractTextPlugin('styles-[hash].css'), new HtmlWebpackPlugin({ template: 'app/index.html', From 69dd6d12909ca73f3b723706283e601067b875e4 Mon Sep 17 00:00:00 2001 From: delphiactual Date: Fri, 30 Dec 2016 03:37:21 -0700 Subject: [PATCH 07/28] Update .babelrc --- .babelrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.babelrc b/.babelrc index 71657c915d..c9188844e7 100644 --- a/.babelrc +++ b/.babelrc @@ -12,3 +12,4 @@ }] ] } + From 333d21d739c832142f95cab664e4889d047c2c88 Mon Sep 17 00:00:00 2001 From: delphiactual Date: Fri, 30 Dec 2016 04:08:54 -0700 Subject: [PATCH 08/28] windows patch webpack --- config/webpack.js | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/webpack.js b/config/webpack.js index 333db207bf..3692936743 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -6,7 +6,7 @@ const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); // const CleanWebpackPlugin = require('clean-webpack-plugin'); -module.exports = (options = {}) => { +module.exports = (options) => { const config = { entry: './app/index.js', @@ -68,7 +68,7 @@ module.exports = (options = {}) => { }, }; - if (options.prod) { + if (options && options.prod) { config.plugins.push(new webpack.optimize.UglifyJsPlugin({ mangle: false, compress: false diff --git a/package.json b/package.json index 882c15d30b..45a4f85315 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "style-loader": "^0.13.1", "uglify-js": "^2.7.0", "unzip": "^0.1.11", - "webpack": "^2.2.0-rc.3" + "webpack": "^2.1.0-beta.19" }, "dependencies": { "angular": "^1.6.1", From 770fb6314315712ef3504e88a0c67a52965a5d48 Mon Sep 17 00:00:00 2001 From: delphiactual Date: Fri, 30 Dec 2016 04:09:38 -0700 Subject: [PATCH 09/28] whitespace fix --- .babelrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.babelrc b/.babelrc index c9188844e7..71657c915d 100644 --- a/.babelrc +++ b/.babelrc @@ -12,4 +12,3 @@ }] ] } - From 98f7a9cba0ab0574ce2db28d97f2af9ab2c3726e Mon Sep 17 00:00:00 2001 From: delphiactual Date: Fri, 30 Dec 2016 04:32:32 -0700 Subject: [PATCH 10/28] revert webpack.js --- config/webpack.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/webpack.js b/config/webpack.js index 3692936743..333db207bf 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -6,7 +6,7 @@ const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); // const CleanWebpackPlugin = require('clean-webpack-plugin'); -module.exports = (options) => { +module.exports = (options = {}) => { const config = { entry: './app/index.js', @@ -68,7 +68,7 @@ module.exports = (options) => { }, }; - if (options && options.prod) { + if (options.prod) { config.plugins.push(new webpack.optimize.UglifyJsPlugin({ mangle: false, compress: false From d73a87a0dfb583a4fe30c699378b7944c74af884 Mon Sep 17 00:00:00 2001 From: delphiactual Date: Fri, 30 Dec 2016 04:42:42 -0700 Subject: [PATCH 11/28] workaround for webpack-2-rc --- package.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 45a4f85315..bdaac05f92 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "version": "3.15.1", "description": "An item manager for Destiny.", "main": "app/index.html", + "engines": { + "node": "6.9.2" + }, "scripts": { "dev-chrome": "./node_modules/.bin/grunt dev-chrome", "generate-css": "./node_modules/.bin/grunt css", @@ -38,7 +41,7 @@ "copy-webpack-plugin": "^4.0.1", "css-loader": "^0.26.1", "exports-loader": "^0.6.3", - "extract-text-webpack-plugin": "2.0.0-beta.4", + "extract-text-webpack-plugin": "github:webpack/extract-text-webpack-plugin", "grunt": "^1.0.1", "grunt-contrib-clean": "^1.0.0", "grunt-contrib-compress": "^1.3.0", @@ -52,7 +55,7 @@ "grunt-text-replace": "^0.4.0", "grunt-webstore-upload": "^0.9.3", "html-loader": "^0.4.4", - "html-webpack-plugin": "^2.24.1", + "html-webpack-plugin": "github:ampedandwired/html-webpack-plugin", "imports-loader": "^0.7.0", "jpm": "^1.1.1", "jshint": "^2.9.2", @@ -66,7 +69,7 @@ "style-loader": "^0.13.1", "uglify-js": "^2.7.0", "unzip": "^0.1.11", - "webpack": "^2.1.0-beta.19" + "webpack": "^2.2.0-rc.0" }, "dependencies": { "angular": "^1.6.1", From 4bc3bc64909781d72ee7446ae4c6afa4c7521ada Mon Sep 17 00:00:00 2001 From: delphiactual Date: Fri, 30 Dec 2016 06:01:53 -0700 Subject: [PATCH 12/28] font-awesome loaded --- app/scss/main.scss | 4 +++- config/webpack.js | 3 +++ package.json | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/scss/main.scss b/app/scss/main.scss index cde9058ec8..7d03d785f9 100644 --- a/app/scss/main.scss +++ b/app/scss/main.scss @@ -12,4 +12,6 @@ @import 'loadout-builder'; @import 'vendors'; @import 'debug'; -@import './shell/materials-exchange' \ No newline at end of file +@import './shell/materials-exchange'; +@import './../vendor/components-font-awesome/css/font-awesome.css'; +@import './../vendor/angular-hotkeys/build/hotkeys.css' diff --git a/config/webpack.js b/config/webpack.js index 333db207bf..abe6936341 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -32,6 +32,9 @@ module.exports = (options = {}) => { }, { test: /\.html$/, loader: 'html-loader' + }, { + test: /\.(eot|svg|ttf|woff(2)?)(\?v=\d+\.\d+\.\d+)?/, + loader: 'url-loader' }, { test: /\.scss$/, loader: ExtractTextPlugin.extract({ diff --git a/package.json b/package.json index bdaac05f92..7524df925f 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "style-loader": "^0.13.1", "uglify-js": "^2.7.0", "unzip": "^0.1.11", + "url-loader": "^0.5.7", "webpack": "^2.2.0-rc.0" }, "dependencies": { From 414ea699066bc6c55d9ba49c1158d9739134af4f Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 10:32:16 +1100 Subject: [PATCH 13/28] Added in CleanWebpackPlugin and better UglifyJS options Also set up SQL.js to load async using System.import. Because the SQL library is 'rarely' used (only when the manifest changes), and it's actually really large and doesnt minifiy or compress really well, it makes sense to only load it when required. This gives us a dramatic reduction of the main bundle size, saving 2.3MB from the final bundle, which is really really good --- app/index.js | 1 - .../services/dimManifestService.factory.js | 9 ++++++++- config/webpack.js | 20 +++++++++++++++---- package.json | 3 ++- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/index.js b/app/index.js index 3e2c9a424a..693fd18b30 100644 --- a/app/index.js +++ b/app/index.js @@ -13,7 +13,6 @@ window.JSZip = require('jszip'); window.LZString = require('lz-string'); window.MessageFormat = require('messageformat'); window.moment = require('moment'); -window.SQL = require('sql.js'); require('imports-loader?this=>window!zip-js/WebContent/zip.js'); window.angular = require('angular'); diff --git a/app/scripts/services/dimManifestService.factory.js b/app/scripts/services/dimManifestService.factory.js index c4d3ac149a..ba6425a41b 100644 --- a/app/scripts/services/dimManifestService.factory.js +++ b/app/scripts/services/dimManifestService.factory.js @@ -71,7 +71,14 @@ const _ = require('underscore'); }) .then(function(typedArray) { service.statusText = $translate.instant('Manifest.Build') + '...'; - const db = new SQL.Database(typedArray); + + return Promise.all([ + typedArray, + System.import('sql.js') // load sql.js async + ]); + }) + .then(function([typedArray, SQLLib]) { + const db = new SQLLib.Database(typedArray); // do a small request, just to test it out service.getAllRecords(db, 'DestinyRaceDefinition'); return db; diff --git a/config/webpack.js b/config/webpack.js index 333db207bf..0c2d3856c6 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -1,10 +1,11 @@ const webpack = require('webpack'); -// const path = require('path'); +const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); -// const CleanWebpackPlugin = require('clean-webpack-plugin'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); +const Visualizer = require('webpack-visualizer-plugin'); module.exports = (options = {}) => { const config = { @@ -47,6 +48,10 @@ module.exports = (options = {}) => { }, plugins: [ + new CleanWebpackPlugin(['app/generated'], { + root: path.resolve('./'), + }), + new ExtractTextPlugin('styles-[hash].css'), new HtmlWebpackPlugin({ @@ -59,6 +64,8 @@ module.exports = (options = {}) => { to: 'zipjs' } ]), + + new Visualizer(), ], node: { @@ -70,8 +77,13 @@ module.exports = (options = {}) => { if (options.prod) { config.plugins.push(new webpack.optimize.UglifyJsPlugin({ - mangle: false, - compress: false + compress: { + warnings: false, + }, + output: { + comments: false, + }, + sourceMap: false, })); } diff --git a/package.json b/package.json index 882c15d30b..4440332f8f 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,8 @@ "style-loader": "^0.13.1", "uglify-js": "^2.7.0", "unzip": "^0.1.11", - "webpack": "^2.2.0-rc.3" + "webpack": "^2.2.0-rc.3", + "webpack-visualizer-plugin": "^0.1.6" }, "dependencies": { "angular": "^1.6.1", From e547f7457d701079e0ad63c0ae362aa7679da3fd Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 10:44:11 +1100 Subject: [PATCH 14/28] Load external CSS from node_modules --- app/index.html | 2 -- app/scss/main.scss | 6 ++++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/index.html b/app/index.html index f5cd5faf0f..f9b6c0301c 100644 --- a/app/index.html +++ b/app/index.html @@ -20,8 +20,6 @@ - - diff --git a/app/scss/main.scss b/app/scss/main.scss index 7d03d785f9..6d9ae02f74 100644 --- a/app/scss/main.scss +++ b/app/scss/main.scss @@ -13,5 +13,7 @@ @import 'vendors'; @import 'debug'; @import './shell/materials-exchange'; -@import './../vendor/components-font-awesome/css/font-awesome.css'; -@import './../vendor/angular-hotkeys/build/hotkeys.css' + +// Load stylesheets from external dependencies from node_modules +@import '~components-font-awesome/css/font-awesome.css'; +@import '~angular-hotkeys/build/hotkeys.css' From 9f8f305919d392696eeba15935483c57d25d7059 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 10:59:39 +1100 Subject: [PATCH 15/28] Better names for hashed assets, added app/ as alias for root of source --- config/webpack.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/config/webpack.js b/config/webpack.js index 9a81b0fe94..7d3e1d90c9 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -13,7 +13,7 @@ module.exports = (options = {}) => { output: { path: './app/generated', - filename: 'bundle-[chunkhash].js', + filename: 'bundle-[chunkhash:6].js', }, devtool: 'cheap-module-source-map', @@ -27,15 +27,16 @@ module.exports = (options = {}) => { }, { test: /\.json$/, loader: 'json-loader' - }, { - test: /\.png$/, - loader: 'file-loader' }, { test: /\.html$/, loader: 'html-loader' }, { - test: /\.(eot|svg|ttf|woff(2)?)(\?v=\d+\.\d+\.\d+)?/, - loader: 'url-loader' + test: /\.(png|eot|svg|ttf|woff(2)?)(\?v=\d+\.\d+\.\d+)?/, + loader: 'url-loader', + query: { + limit: 5 * 1024, // only inline if less than 5kb + name: '[name]-[hash:6].[ext]' + }, }, { test: /\.scss$/, loader: ExtractTextPlugin.extract({ @@ -47,7 +48,11 @@ module.exports = (options = {}) => { }, resolve: { - extensions: ['.js', '.json'] + extensions: ['.js', '.json'], + + alias: { + app: path.resolve('./app'), + } }, plugins: [ @@ -55,7 +60,7 @@ module.exports = (options = {}) => { root: path.resolve('./'), }), - new ExtractTextPlugin('styles-[hash].css'), + new ExtractTextPlugin('styles-[hash:6].css'), new HtmlWebpackPlugin({ template: 'app/index.html', From c9fc8c99f1f239a41bb190351fffa2b19b2c29dd Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 10:59:59 +1100 Subject: [PATCH 16/28] Load stat icons using require() (but its not working :thinking:) --- app/scripts/minmax/dimMinMax.controller.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/scripts/minmax/dimMinMax.controller.js b/app/scripts/minmax/dimMinMax.controller.js index bc646a8a0f..4470cf4be7 100644 --- a/app/scripts/minmax/dimMinMax.controller.js +++ b/app/scripts/minmax/dimMinMax.controller.js @@ -508,23 +508,24 @@ const _ = require('underscore'); value: 0, tier: 0, name: 'Intellect', - icon: 'images/Intellect.png' + icon: require('app/images/Intellect.png'), }, STAT_DISCIPLINE: { value: 0, tier: 0, name: 'Discipline', - icon: 'images/Discipline.png' + icon: require('app/images/Discipline.png'), }, STAT_STRENGTH: { value: 0, tier: 0, name: 'Strength', - icon: 'images/Strength.png' + icon: require('app/images/Strength.png'), } }, setHash: 0 }; + if (validSet(set.armor)) { vm.hasSets = true; set.setHash = genSetHash(set.armor); From 6f01a1aecbf9e4a959dcc28b69af2760958bac26 Mon Sep 17 00:00:00 2001 From: delphiactual Date: Fri, 30 Dec 2016 17:27:08 -0700 Subject: [PATCH 17/28] require icons --- .../services/dimStoreService.factory.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/scripts/services/dimStoreService.factory.js b/app/scripts/services/dimStoreService.factory.js index 97a5311a3e..c4b023c85d 100644 --- a/app/scripts/services/dimStoreService.factory.js +++ b/app/scripts/services/dimStoreService.factory.js @@ -1558,13 +1558,23 @@ const _ = require('underscore'); var statHash = {}; statHash.id = statId; switch (statId) { - case 'STAT_INTELLECT': statHash.name = 'Intellect'; statHash.effect = 'Super'; break; - case 'STAT_DISCIPLINE': statHash.name = 'Discipline'; statHash.effect = 'Grenade'; break; - case 'STAT_STRENGTH': statHash.name = 'Strength'; statHash.effect = 'Melee'; break; + case 'STAT_INTELLECT': + statHash.name = 'Intellect'; + statHash.effect = 'Super'; + statHash.icon = require('app/images/intellect.png'); + break; + case 'STAT_DISCIPLINE': + statHash.name = 'Discipline'; + statHash.effect = 'Grenade'; + statHash.icon = require('app/images/discipline.png'); + break; + case 'STAT_STRENGTH': + statHash.name = 'Strength'; + statHash.effect = 'Melee'; + statHash.icon = require('app/images/strength.png'); + break; } - statHash.icon = statHash.name ? `images/${statHash.name.toLowerCase()}.png` : undefined; - const stat = data.stats[statId]; if (!stat) { return; From 3b8cd02d8f97900bedb7c6461d10fe8fdb7a7b63 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 11:34:05 +1100 Subject: [PATCH 18/28] Split out dimLoadout.directive template into external file to load it through html-loader --- app/scripts/loadout/dimLoadout.directive.js | 40 +------------------ .../dimLoadout.directive.template.html | 37 +++++++++++++++++ config/webpack.js | 5 ++- package.json | 1 + 4 files changed, 43 insertions(+), 40 deletions(-) create mode 100644 app/scripts/loadout/dimLoadout.directive.template.html diff --git a/app/scripts/loadout/dimLoadout.directive.js b/app/scripts/loadout/dimLoadout.directive.js index adaaf861ab..47f4c664aa 100644 --- a/app/scripts/loadout/dimLoadout.directive.js +++ b/app/scripts/loadout/dimLoadout.directive.js @@ -15,45 +15,7 @@ const _ = require('underscore'); bindToController: true, link: Link, scope: {}, - template: [ - '
', - '
', - '
A name is required.
', - '
...
', - '
...
', - '
', - '
', - '
', - '
', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - '

', - '
', - '
', - '

:

', - '
', - '
', - ' ', - '
', - '
', - '
', - '

:

', - '
', - '
', - '
', - ' ', - '
', - '
', - '
', - '
', - '
', - '
', - '
' - ].join('') + templateUrl: require('./dimLoadout.directive.template.html'), }; function Link(scope) { diff --git a/app/scripts/loadout/dimLoadout.directive.template.html b/app/scripts/loadout/dimLoadout.directive.template.html new file mode 100644 index 0000000000..9f996a9a18 --- /dev/null +++ b/app/scripts/loadout/dimLoadout.directive.template.html @@ -0,0 +1,37 @@ +
+
+
A name is required.
+
...
+
...
+
+
+
+
+ + + + + + +

+
+
+

:

+
+
+ +
+
+
+

:

+
+
+
+ +
+
+
+
+
+
+
diff --git a/config/webpack.js b/config/webpack.js index 7d3e1d90c9..c801bcfda0 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -28,7 +28,10 @@ module.exports = (options = {}) => { test: /\.json$/, loader: 'json-loader' }, { - test: /\.html$/, + test: /\.template\.html$/, + use: ['file-loader', 'extract-loader', 'html-loader'] + }, { + test: /^(?!.*template\.html$).*\.html$/, // for html files, excluding .template.html loader: 'html-loader' }, { test: /\.(png|eot|svg|ttf|woff(2)?)(\?v=\d+\.\d+\.\d+)?/, diff --git a/package.json b/package.json index 469a14650c..720c99a71a 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "copy-webpack-plugin": "^4.0.1", "css-loader": "^0.26.1", "exports-loader": "^0.6.3", + "extract-loader": "^0.1.0", "extract-text-webpack-plugin": "github:webpack/extract-text-webpack-plugin", "grunt": "^1.0.1", "grunt-contrib-clean": "^1.0.0", From b7a8b60a60a8039e7bb6b4bdc1e927fbf435adb3 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 11:36:02 +1100 Subject: [PATCH 19/28] Silence hound about global Zip module --- app/scripts/services/dimManifestService.factory.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/scripts/services/dimManifestService.factory.js b/app/scripts/services/dimManifestService.factory.js index ba6425a41b..bcd97281df 100644 --- a/app/scripts/services/dimManifestService.factory.js +++ b/app/scripts/services/dimManifestService.factory.js @@ -1,3 +1,5 @@ +/* global zip */ + const angular = require('angular'); const _ = require('underscore'); From e22494ab0afff508d2680bec2c139a1c38f113e1 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 13:08:15 +1100 Subject: [PATCH 20/28] Update template to use i18n --- app/scripts/loadout/dimLoadout.directive.template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scripts/loadout/dimLoadout.directive.template.html b/app/scripts/loadout/dimLoadout.directive.template.html index 9f996a9a18..e498b38118 100644 --- a/app/scripts/loadout/dimLoadout.directive.template.html +++ b/app/scripts/loadout/dimLoadout.directive.template.html @@ -1,6 +1,6 @@
-
A name is required.
+
...
...
From 876c2a1f4e445d8808e158acc643f301fceb4dd8 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 13:19:11 +1100 Subject: [PATCH 21/28] Tidy up build dir for webpack assets --- config/webpack.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/config/webpack.js b/config/webpack.js index c801bcfda0..17d33b5e19 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -7,6 +7,8 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const Visualizer = require('webpack-visualizer-plugin'); +const ASSET_NAME_PATTERN = 'static/[name]-[hash:6].[ext]'; + module.exports = (options = {}) => { const config = { entry: './app/index.js', @@ -29,16 +31,23 @@ module.exports = (options = {}) => { loader: 'json-loader' }, { test: /\.template\.html$/, - use: ['file-loader', 'extract-loader', 'html-loader'] + use: [ + { + loader: 'file-loader', + options: { name: ASSET_NAME_PATTERN }, + }, + 'extract-loader', + 'html-loader' + ], }, { test: /^(?!.*template\.html$).*\.html$/, // for html files, excluding .template.html loader: 'html-loader' }, { test: /\.(png|eot|svg|ttf|woff(2)?)(\?v=\d+\.\d+\.\d+)?/, loader: 'url-loader', - query: { + options: { limit: 5 * 1024, // only inline if less than 5kb - name: '[name]-[hash:6].[ext]' + name: ASSET_NAME_PATTERN }, }, { test: /\.scss$/, @@ -72,8 +81,8 @@ module.exports = (options = {}) => { new CopyWebpackPlugin([ { from: './node_modules/zip-js/WebContent', - to: 'zipjs' - } + to: 'static/zipjs' + }, ]), new Visualizer(), From d50ffc628102332c813d9458bf906ac81d330007 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 13:21:43 +1100 Subject: [PATCH 22/28] Load views using the new webpack config --- ...developer.html => developer.template.html} | 0 app/scripts/dimApp.config.js | 24 +++++++++---------- app/views/{best.html => best.template.html} | 0 ...debugItem.html => debugItem.template.html} | 0 ...inventory.html => inventory.template.html} | 0 ...hange.html => mats-exchange.template.html} | 0 .../{vendors.html => vendors.template.html} | 0 7 files changed, 12 insertions(+), 12 deletions(-) rename app/scripts/developer/{developer.html => developer.template.html} (100%) rename app/views/{best.html => best.template.html} (100%) rename app/views/{debugItem.html => debugItem.template.html} (100%) rename app/views/{inventory.html => inventory.template.html} (100%) rename app/views/{mats-exchange.html => mats-exchange.template.html} (100%) rename app/views/{vendors.html => vendors.template.html} (100%) diff --git a/app/scripts/developer/developer.html b/app/scripts/developer/developer.template.html similarity index 100% rename from app/scripts/developer/developer.html rename to app/scripts/developer/developer.template.html diff --git a/app/scripts/dimApp.config.js b/app/scripts/dimApp.config.js index f47f622bb8..cd055f3481 100644 --- a/app/scripts/dimApp.config.js +++ b/app/scripts/dimApp.config.js @@ -143,28 +143,28 @@ $stateProvider .state('inventory', { - url: "/inventory", - templateUrl: require("!file-loader!../views/inventory.html"), + url: '/inventory', + templateUrl: require('app/views/inventory.template.html'), }) .state('best', { - url: "/best", - templateUrl: require("!file-loader!../views/best.html"), + url: '/best', + templateUrl: require('app/views/best.template.html'), }) .state('vendors', { - url: "/vendors", - templateUrl: require("!file-loader!../views/vendors.html"), + url: '/vendors', + templateUrl: require('app/views/vendors.template.html'), }) .state('materials-exchange', { - url: "/materials-exchange", - templateUrl: require("!file-loader!../views/mats-exchange.html"), + url: '/materials-exchange', + templateUrl: require('app/views/mats-exchange.template.html'), }) .state('debugItem', { - url: "/debugItem/:itemId", - templateUrl: require("!file-loader!../views/debugItem.html"), + url: '/debugItem/:itemId', + templateUrl: require('app/views/debugItem.template.html'), }) .state('developer', { - url: "/developer", - templateUrl: require("!file-loader!../scripts/developer/developer.html"), + url: '/developer', + templateUrl: require('app/scripts/developer/developer.template.html'), }); }); })(); diff --git a/app/views/best.html b/app/views/best.template.html similarity index 100% rename from app/views/best.html rename to app/views/best.template.html diff --git a/app/views/debugItem.html b/app/views/debugItem.template.html similarity index 100% rename from app/views/debugItem.html rename to app/views/debugItem.template.html diff --git a/app/views/inventory.html b/app/views/inventory.template.html similarity index 100% rename from app/views/inventory.html rename to app/views/inventory.template.html diff --git a/app/views/mats-exchange.html b/app/views/mats-exchange.template.html similarity index 100% rename from app/views/mats-exchange.html rename to app/views/mats-exchange.template.html diff --git a/app/views/vendors.html b/app/views/vendors.template.html similarity index 100% rename from app/views/vendors.html rename to app/views/vendors.template.html From 6e85be2b686f052ef93403cde5bdf9a5e5f6b086 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 13:22:03 +1100 Subject: [PATCH 23/28] Update Zip.js worker dir --- app/scripts/services/dimManifestService.factory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scripts/services/dimManifestService.factory.js b/app/scripts/services/dimManifestService.factory.js index bcd97281df..678e11b1c9 100644 --- a/app/scripts/services/dimManifestService.factory.js +++ b/app/scripts/services/dimManifestService.factory.js @@ -209,7 +209,7 @@ const _ = require('underscore'); function unzipManifest(blob) { return $q(function(resolve, reject) { zip.useWebWorkers = true; - zip.workerScriptsPath = 'zipjs/'; + zip.workerScriptsPath = 'static/zipjs/'; zip.createReader(new zip.BlobReader(blob), function(zipReader) { // get all entries from the zip zipReader.getEntries(function(entries) { From 21eb8b3a50497a01c6c668a46b9dd18816f0d4cd Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 13:25:57 +1100 Subject: [PATCH 24/28] Lowercase attribute image filenames --- app/scripts/minmax/dimMinMax.controller.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/scripts/minmax/dimMinMax.controller.js b/app/scripts/minmax/dimMinMax.controller.js index 4470cf4be7..6d015b1bda 100644 --- a/app/scripts/minmax/dimMinMax.controller.js +++ b/app/scripts/minmax/dimMinMax.controller.js @@ -508,19 +508,19 @@ const _ = require('underscore'); value: 0, tier: 0, name: 'Intellect', - icon: require('app/images/Intellect.png'), + icon: require('app/images/intellect.png'), }, STAT_DISCIPLINE: { value: 0, tier: 0, name: 'Discipline', - icon: require('app/images/Discipline.png'), + icon: require('app/images/discipline.png'), }, STAT_STRENGTH: { value: 0, tier: 0, name: 'Strength', - icon: require('app/images/Strength.png'), + icon: require('app/images/strength.png'), } }, setHash: 0 From a599fefa3429f12edcb1b55c60062a49fe2989cc Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 14:45:08 +1100 Subject: [PATCH 25/28] Better Prod and Dev webpack modes, with NPM scripts --- README.md | 7 +++---- config/webpack.js | 17 ++++++++++++++++- package.json | 13 ++++++++----- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 3903a81332..782e46bbdc 100644 --- a/README.md +++ b/README.md @@ -30,14 +30,13 @@ Install dependencies: * `npm install` -Generate CSS -* `npm run generate-css` -* `npm run dev-chrome` (This will watch the scss files for any changes and generate a new style.css) +Build in dev mode +* `npm start`. This will bundle and copy all the assets, as well as watch for changes. Check code Style * `npm run lint` will tell you if you're following the DIM code style (and automatically fix what it can). -You can now run DIM locally by enabling [Chrome Extensions Developer Mode](https://developer.chrome.com/extensions/faq#faq-dev-01) and point to the `app/` folder. +You can now run DIM locally by enabling [Chrome Extensions Developer Mode](https://developer.chrome.com/extensions/faq#faq-dev-01) and point to the `app` folder. Get your own API key: diff --git a/config/webpack.js b/config/webpack.js index 17d33b5e19..917ba54b0c 100644 --- a/config/webpack.js +++ b/config/webpack.js @@ -7,6 +7,8 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const Visualizer = require('webpack-visualizer-plugin'); +const NotifyPlugin = require('notify-webpack-plugin'); + const ASSET_NAME_PATTERN = 'static/[name]-[hash:6].[ext]'; module.exports = (options = {}) => { @@ -20,6 +22,12 @@ module.exports = (options = {}) => { devtool: 'cheap-module-source-map', + stats: 'errors-only', + + performance: { + hints: false + }, + module: { rules: [ { @@ -72,6 +80,8 @@ module.exports = (options = {}) => { root: path.resolve('./'), }), + new NotifyPlugin('DIM', options.prod), + new ExtractTextPlugin('styles-[hash:6].css'), new HtmlWebpackPlugin({ @@ -81,7 +91,8 @@ module.exports = (options = {}) => { new CopyWebpackPlugin([ { from: './node_modules/zip-js/WebContent', - to: 'static/zipjs' + to: 'static/zipjs', + ignore: ['tests/**/*'], }, ]), @@ -96,6 +107,10 @@ module.exports = (options = {}) => { }; if (options.prod) { + // Bail and fail hard on first error + config.bail = true; + config.stats = 'verbose'; + config.plugins.push(new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false, diff --git a/package.json b/package.json index 720c99a71a..880f2b6c5d 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,13 @@ "node": "6.9.2" }, "scripts": { - "dev-chrome": "./node_modules/.bin/grunt dev-chrome", - "generate-css": "./node_modules/.bin/grunt css", - "lint": "./node_modules/.bin/grunt eslint", - "_postinstall": "npm-run-all bower build-vendors", "test": "echo \"No tests\"", - "start": "webpack --config ./config/webpack.js", + "dev-chrome": "npm start -s", + "generate-css": "echo \"No need to run this any more. Just run 'npm start'!\n\"", + "lint": "./node_modules/.bin/grunt eslint", + "bundle": "webpack --config ./config/webpack.js --hide-modules", + "start": "npm run bundle -s -- --watch", + "build": "npm run bundle -s -- --env.prod=true", "install": "napa" }, "napa": { @@ -37,6 +38,7 @@ "babel-preset-env": "^1.1.4", "babel-preset-es2015": "^6.18.0", "bower": "^1.7.9", + "chalk": "^1.1.3", "clean-webpack-plugin": "^0.1.14", "copy-webpack-plugin": "^4.0.1", "css-loader": "^0.26.1", @@ -63,6 +65,7 @@ "load-grunt-tasks": "^3.5.0", "napa": "^2.3.0", "node-sass": "^3.13.1", + "notify-webpack-plugin": "^1.0.0", "npm-run-all": "^3.1.2", "request": "^2.73.0", "sass-loader": "^4.1.1", From d638adf74e9dde5bc36f588b9b2fdb81627c09cc Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 14:47:21 +1100 Subject: [PATCH 26/28] Update .babelrc to remove the safari version --- .babelrc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.babelrc b/.babelrc index 71657c915d..57f16ce551 100644 --- a/.babelrc +++ b/.babelrc @@ -3,8 +3,7 @@ ["env", { "targets": { "browsers": [ - "last 2 versions", - "safari >= 7" + "last 2 versions" ] }, "modules": false, From f74211d17ccd5dc1ac563fa7c432cbb273c9ac36 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 15:01:16 +1100 Subject: [PATCH 27/28] Clean up globals in eslintrc and add ES6 env --- .eslintrc | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/.eslintrc b/.eslintrc index 039d91f901..f33bed00d8 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,6 @@ { "env": { + "es6": true, "browser": true, "jquery": true, "node": true, @@ -14,25 +15,15 @@ } }, "globals": { - "_angular": true, - _"$": true, - "__": true, - "__gaq": true, - "_chrome": true, - "_sum": true, - "_count": true, - "_flatMap": true, - "_gapi": true, - "_Set": true, - "_base64js": true, - "_SQL": true, - "_zip": true, - "_Uint8Array": true, - "_Int32Array": true, - "_DataView": true, - "_Proxy": true, - "_ga": true, - "_idbKeyval": true + "angular": true, + "_gaq": true, + "chrome": true, + "sum": true, + "count": true, + "flatMap": true, + "gapi": true, + "Set": true, + "idbKeyval": true }, "rules": { "array-callback-return": "error", From 21b44f2dbb53904ea3e5bf417d0386657979915b Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Sat, 31 Dec 2016 15:01:40 +1100 Subject: [PATCH 28/28] Remove a whole bunch of (now) unused Grunt scripts --- Gruntfile.js | 56 +--------------------------------------------------- package.json | 9 ++------- 2 files changed, 3 insertions(+), 62 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index dec6ec4fdd..faee5998c0 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -99,43 +99,6 @@ module.exports = function(grunt) { } }, - sass: { - options: { - sourceMap: true - }, - dist: { - files: { - 'app/styles/main.css': 'app/scss/main.scss' - } - } - }, - - postcss: { - options: { - map: true, - processors: [ - - require('autoprefixer')() - ] - }, - dist: { - src: 'app/styles/main.css', - dest: 'app/styles/main.css' - } - }, - - watch: { - sass: { - files:['app/scss/**/*.scss'], - tasks:['css','sync'], - options: { spawn: false } - }, - dist: { - files: ['app/**/*.{js,html}'], - tasks: ['sync'] - } - }, - // See https://github.com/c301/grunt-webstore-upload webstore_upload: { accounts: { @@ -174,33 +137,16 @@ module.exports = function(grunt) { } } }, - - eslint: { - target: ["app/scripts/**/*.js"], - options: { - fix: true - } - } }); - - grunt.loadNpmTasks('grunt-webstore-upload'); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-compress'); grunt.loadNpmTasks('grunt-text-replace'); grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-postcss'); - grunt.loadNpmTasks('grunt-sass'); - grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-sync'); - grunt.loadNpmTasks("grunt-eslint"); - - grunt.registerTask('css', ['sass', 'postcss']); - - grunt.registerTask('default', ['eslint', 'build', 'watch']); - grunt.registerTask('build', ['clean','css', 'sync']); + grunt.registerTask('build', ['clean', 'sync']); grunt.registerTask('update_chrome_beta_manifest', function() { var manifest = grunt.file.readJSON('dist/chrome/manifest.json'); diff --git a/package.json b/package.json index 880f2b6c5d..81ab1791f1 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "test": "echo \"No tests\"", "dev-chrome": "npm start -s", "generate-css": "echo \"No need to run this any more. Just run 'npm start'!\n\"", - "lint": "./node_modules/.bin/grunt eslint", + "lint": "eslint app/scripts", "bundle": "webpack --config ./config/webpack.js --hide-modules", "start": "npm run bundle -s -- --watch", "build": "npm run bundle -s -- --env.prod=true", @@ -42,6 +42,7 @@ "clean-webpack-plugin": "^0.1.14", "copy-webpack-plugin": "^4.0.1", "css-loader": "^0.26.1", + "eslint": "^3.12.2", "exports-loader": "^0.6.3", "extract-loader": "^0.1.0", "extract-text-webpack-plugin": "github:webpack/extract-text-webpack-plugin", @@ -49,11 +50,6 @@ "grunt-contrib-clean": "^1.0.0", "grunt-contrib-compress": "^1.3.0", "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-sass": "^1.0.0", - "grunt-contrib-watch": "^1.0.0", - "grunt-eslint": "^19.0.0", - "grunt-postcss": "^0.8.0", - "grunt-sass": "^1.2.0", "grunt-sync": "^0.6.2", "grunt-text-replace": "^0.4.0", "grunt-webstore-upload": "^0.9.3", @@ -61,7 +57,6 @@ "html-webpack-plugin": "github:ampedandwired/html-webpack-plugin", "imports-loader": "^0.7.0", "jpm": "^1.1.1", - "jshint": "^2.9.2", "load-grunt-tasks": "^3.5.0", "napa": "^2.3.0", "node-sass": "^3.13.1",