From 64e4b7ac07f871e6eeb44af08844ffa873ed436c Mon Sep 17 00:00:00 2001 From: Gints Murans Date: Wed, 21 Oct 2015 20:14:52 +0300 Subject: [PATCH] Lot of changes. v0.9.0 --- .gitignore | 13 +- .../Config/Config.php | 35 +- .../Config/Routing.php | 4 +- .../cache => Application/Files}/.gitkeep | 0 .../Defaults/Controllers/Test/Test1.php | 4 +- .../Defaults/Controllers/Test/TestSecond.php | 16 + .../Modules/Defaults/Controllers/Welcome.php | 22 +- .../Modules/Defaults/Helpers/Bootstrap.php | 38 ++ .../Modules/Defaults/Views}/help.html | 2 +- .../Modules/Defaults/Views}/index.html | 5 +- .../Modules/Defaults/Views}/layout.html | 21 +- .../public => Application/Public}/.htaccess | 2 +- .../Public/assets/base/css}/.gitkeep | 0 .../Public/assets/base/css}/style.css | 0 .../Public/assets/base/js}/.gitkeep | 0 .../Public/assets/min/css/style.min.css | 1 + Application/Public/assets/min/js/main.min.js | 8 + .../Public/assets/min/js/main.min.js.map | 1 + Application/Public/index.php | 12 + README.md | 89 +++-- Scripts/git_post_receive.sh | 60 +++ Scripts/git_pre_commit.sh | 130 +++++++ Scripts/minify.py | 181 +++++++++ system/config/db.php => System/Config/Db.php | 0 .../Files}/table_sessions_mysql.sql | 0 .../Files}/table_sessions_postgres.sql | 0 .../Modules/Core/Controllers/Controller.php | 66 ++++ .../Modules/Core/Helpers/Bootstrap.php | 103 ++--- .../Modules/Core/Helpers/Html.php | 14 +- System/Modules/Core/Helpers/Other.php | 155 ++++++++ .../Modules/Core/Models/Db.php | 38 +- .../Modules/Core/Models/Fv.php | 58 +-- .../Modules/Core/Models/Load.php | 113 +++--- .../Modules/Core/Models/Pages.php | 4 +- .../Modules/Core/Models/Router.php | 280 +++++++++---- .../Modules/Core/Models/Sessions.php | 6 +- .../Modules/Core/Models/SessionsApc.php | 4 +- .../Modules/Core/Models/SessionsMemcached.php | 4 +- .../Modules/Core/Models/SessionsMongoDb.php | 4 +- System/Modules/Core/Views/Errors/E400.html | 26 ++ .../Modules/Core/Views/Errors}/E403.html | 9 +- .../Modules/Core/Views/Errors}/E404.html | 9 +- .../Modules/Core/Views/Errors}/E500.html | 3 +- application/controllers/test/test2.php | 11 - application/helpers/system.php | 13 - application/public/index.php | 10 - composer.json | 4 +- composer.lock | 367 ++++++++++++++++++ system/helpers/json_response.php | 26 -- 49 files changed, 1596 insertions(+), 375 deletions(-) rename application/config/config.php => Application/Config/Config.php (69%) rename application/config/routing.php => Application/Config/Routing.php (87%) rename {application/cache => Application/Files}/.gitkeep (100%) rename application/controllers/test/test1.php => Application/Modules/Defaults/Controllers/Test/Test1.php (62%) create mode 100644 Application/Modules/Defaults/Controllers/Test/TestSecond.php rename application/controllers/home.php => Application/Modules/Defaults/Controllers/Welcome.php (71%) create mode 100644 Application/Modules/Defaults/Helpers/Bootstrap.php rename {application/views/home => Application/Modules/Defaults/Views}/help.html (99%) rename {application/views/home => Application/Modules/Defaults/Views}/index.html (64%) rename {application/views => Application/Modules/Defaults/Views}/layout.html (59%) rename {application/public => Application/Public}/.htaccess (86%) rename {application/files => Application/Public/assets/base/css}/.gitkeep (100%) rename {application/public/assets/home => Application/Public/assets/base/css}/style.css (100%) rename {application/models => Application/Public/assets/base/js}/.gitkeep (100%) create mode 100644 Application/Public/assets/min/css/style.min.css create mode 100644 Application/Public/assets/min/js/main.min.js create mode 100644 Application/Public/assets/min/js/main.min.js.map create mode 100644 Application/Public/index.php create mode 100755 Scripts/git_post_receive.sh create mode 100755 Scripts/git_pre_commit.sh create mode 100755 Scripts/minify.py rename system/config/db.php => System/Config/Db.php (100%) rename {system/files => System/Files}/table_sessions_mysql.sql (100%) rename {system/files => System/Files}/table_sessions_postgres.sql (100%) create mode 100644 System/Modules/Core/Controllers/Controller.php rename system/core/bootstrap.php => System/Modules/Core/Helpers/Bootstrap.php (66%) rename system/helpers/html.php => System/Modules/Core/Helpers/Html.php (93%) create mode 100644 System/Modules/Core/Helpers/Other.php rename system/models/db.php => System/Modules/Core/Models/Db.php (92%) rename system/models/fv.php => System/Modules/Core/Models/Fv.php (90%) rename system/core/load.php => System/Modules/Core/Models/Load.php (86%) rename system/models/pages.php => System/Modules/Core/Models/Pages.php (98%) rename system/core/router.php => System/Modules/Core/Models/Router.php (70%) rename system/models/sessions.php => System/Modules/Core/Models/Sessions.php (96%) rename system/models/sessions_apc.php => System/Modules/Core/Models/SessionsApc.php (94%) rename system/models/sessions_memcached.php => System/Modules/Core/Models/SessionsMemcached.php (94%) rename system/models/sessions_mongodb.php => System/Modules/Core/Models/SessionsMongoDb.php (98%) create mode 100644 System/Modules/Core/Views/Errors/E400.html rename {application/views/errors => System/Modules/Core/Views/Errors}/E403.html (61%) rename {application/views/errors => System/Modules/Core/Views/Errors}/E404.html (61%) rename {application/views/errors => System/Modules/Core/Views/Errors}/E500.html (90%) delete mode 100644 application/controllers/test/test2.php delete mode 100644 application/helpers/system.php delete mode 100644 application/public/index.php create mode 100644 composer.lock delete mode 100644 system/helpers/json_response.php diff --git a/.gitignore b/.gitignore index 1b936d1..07f951b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,9 @@ -CHANGELOG.md -/tmp/ -/vendor/ -/application/cache/*/ -/application/public/assets/vendor/ -/composer.lock -/application/public/docs/ +/Vendor/ +/Application/Cache/ +/Application/Public/assets/vendor/ +/Application/Public/uploads/ +/Application/Public/xhprof/ +/Application/Public/docs/ # OS generated files # diff --git a/application/config/config.php b/Application/Config/Config.php similarity index 69% rename from application/config/config.php rename to Application/Config/Config.php index d14febe..6585a08 100644 --- a/application/config/config.php +++ b/Application/Config/Config.php @@ -18,6 +18,7 @@ $config['base_url'] = null; // NULL for auto detect + /* |-------------------------------------------------------------------------- | Debug @@ -25,19 +26,19 @@ */ // Set environment -$config['environment'] = ((empty($_SERVER['app_env']) || $_SERVER['app_env'] !== 'dev') && php_sapi_name() != 'cli-server' ? 'live' : 'dev'); - -// Set debug -$config['debug'] = ($config['environment'] !== 'dev' ? false : true); - -// List of ip addresses where debug will be turned on by default -$config['debug_ips'] = ['::1', '127.0.0.1']; +$config['env'] = ( + (empty($_SERVER['app_env']) || $_SERVER['app_env'] !== 'dev') && + php_sapi_name() != 'cli-server' ? 'live' : 'dev' +); +$config['debug'] = ($config['env'] !== 'dev' ? false : true); +$config['debug_ips'] = ['::1', '127.0.0.1']; /* | Send errors to this email address. | | * Core will only send error emails when debug is turned off. -| * Emails are sent using php's mail function, if you intend to use this feature, make sure your system is configured to be able to send emails. +| * Emails are sent using php's mail function, if you intend to use this feature, +| make sure your system is configured to be able to send emails. */ $config['debug_email'] = null; @@ -50,17 +51,17 @@ |-------------------------------------------------------------------------- */ -$config['request_uri'] = & $_SERVER['REQUEST_URI']; +$config['request_uri'] = & $_SERVER['REQUEST_URI']; $config['query_string'] = & $_SERVER['QUERY_STRING']; -$config['script_name'] = & $_SERVER['SCRIPT_NAME']; -$config['client_ip'] = & $_SERVER['REMOTE_ADDR']; +$config['script_name'] = & $_SERVER['SCRIPT_NAME']; +$config['client_ip'] = & $_SERVER['REMOTE_ADDR']; /* |-------------------------------------------------------------------------- | Uris | | URL prefixes can be useful when for example identifying ajax requests, -| they will be stored in config variable and can be checked with router::hasPrefix('ajax') === true +| they will be stored in config variable and can be checked with Router::hasPrefix('ajax') === true | they must be in correct sequence. For example, if url is /ajax/test/en/open/29, where ajax and test is prefixes, | then array should look something like this - ['ajax', 'test']. In this case /test/en/open/29 will also work. |-------------------------------------------------------------------------- @@ -72,20 +73,20 @@ | Autoload | | Place filenames without ".php" extension here to autoload various files and classes -| To auto-load files from other projects as well from system, use ['db' => 'system'] +| Possible formats: Application/Module/Filename, Module/Filename, Filename (only to load global config) |-------------------------------------------------------------------------- */ $config['autoload_configs'] = []; -$config['autoload_models'] = []; -$config['autoload_helpers'] = ['system']; +$config['autoload_helpers'] = ['Defaults/Bootstrap']; /* |-------------------------------------------------------------------------- | Hooks | -| Currently only "before controller" hook is supported and will be called right before including controller file. -| It passes three parametrs as references - $file, $class and $mehthod, meaning callback can override current controller. +| Currently only "before controller" hook is supported and will be called right +| before including controller file. It passes three parametrs as references - $file, +| $class and $method, meaning callback can override current controller. |-------------------------------------------------------------------------- */ diff --git a/application/config/routing.php b/Application/Config/Routing.php similarity index 87% rename from application/config/routing.php rename to Application/Config/Routing.php index 658c23a..8e414bd 100644 --- a/application/config/routing.php +++ b/Application/Config/Routing.php @@ -4,7 +4,7 @@ |-------------------------------------------------------------------------- | Routing | -| Each next item overrides current one +| Each next item overrides last one | Format: 'regular expression'[without starting slash] => 'new URL' | Leave '' for default controller |-------------------------------------------------------------------------- @@ -13,7 +13,7 @@ $config['routing'] = [ // Default Controller and Method names - '' => 'home/index', + '' => 'Defaults/Welcome/index', // Rest of the routing # '^([0-9]+)$' => 'orders/details/$1' # Example rewrite: http://example.com/1234 -> http://example.com/orders/details/1234 diff --git a/application/cache/.gitkeep b/Application/Files/.gitkeep similarity index 100% rename from application/cache/.gitkeep rename to Application/Files/.gitkeep diff --git a/application/controllers/test/test1.php b/Application/Modules/Defaults/Controllers/Test/Test1.php similarity index 62% rename from application/controllers/test/test1.php rename to Application/Modules/Defaults/Controllers/Test/Test1.php index ff78586..1c99797 100644 --- a/application/controllers/test/test1.php +++ b/Application/Modules/Defaults/Controllers/Test/Test1.php @@ -1,8 +1,8 @@ value] as second parameter, to get variables available in your view - load::view('home/index.html'); + self::render('index.html'); + + // Or call Load::view('Defaults/Views/index.html'); } /** @@ -59,6 +65,6 @@ public static function index($param1 = null, $param2 = null) */ public static function help() { - load::view('home/help.html'); + Load::view('Defaults/Views/help.html'); } } diff --git a/Application/Modules/Defaults/Helpers/Bootstrap.php b/Application/Modules/Defaults/Helpers/Bootstrap.php new file mode 100644 index 0000000..96575c9 --- /dev/null +++ b/Application/Modules/Defaults/Helpers/Bootstrap.php @@ -0,0 +1,38 @@ + diff --git a/application/views/home/index.html b/Application/Modules/Defaults/Views/index.html similarity index 64% rename from application/views/home/index.html rename to Application/Modules/Defaults/Views/index.html index fbdd921..867582f 100644 --- a/application/views/home/index.html +++ b/Application/Modules/Defaults/Views/index.html @@ -1,11 +1,12 @@ -{% extends "layout.html" %} +{% extends "Defaults/Views/layout.html" %} {% block content %}

Welcome!

This is your first page.

- Help page
+ Help page
+ {% if config.debug %} * Turning off debug mode will hide help navigation item. {% endif %} diff --git a/application/views/layout.html b/Application/Modules/Defaults/Views/layout.html similarity index 59% rename from application/views/layout.html rename to Application/Modules/Defaults/Views/layout.html index 868c420..cf90c82 100644 --- a/application/views/layout.html +++ b/Application/Modules/Defaults/Views/layout.html @@ -9,8 +9,13 @@ StaticPHP Framework - - + {% if config.debug %} + + + {% else %} + + + {% endif %} {% block headers %}{% endblock %} @@ -24,9 +29,9 @@ @@ -37,8 +42,12 @@ {% block content %}{% endblock%} - - + {% if config.debug %} + + + {% else %} + + {% endif %} {% block scripts %}{% endblock%} diff --git a/application/public/.htaccess b/Application/Public/.htaccess similarity index 86% rename from application/public/.htaccess rename to Application/Public/.htaccess index 835f2ad..daf5ef1 100644 --- a/application/public/.htaccess +++ b/Application/Public/.htaccess @@ -7,7 +7,7 @@ ## Avoid opening config RewriteCond %{REQUEST_FILENAME} -f - RewriteRule ^config/.*$ index.php/$1 [L] + RewriteRule ^Config/.*$ index.php/$1 [L] # RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f diff --git a/application/files/.gitkeep b/Application/Public/assets/base/css/.gitkeep similarity index 100% rename from application/files/.gitkeep rename to Application/Public/assets/base/css/.gitkeep diff --git a/application/public/assets/home/style.css b/Application/Public/assets/base/css/style.css similarity index 100% rename from application/public/assets/home/style.css rename to Application/Public/assets/base/css/style.css diff --git a/application/models/.gitkeep b/Application/Public/assets/base/js/.gitkeep similarity index 100% rename from application/models/.gitkeep rename to Application/Public/assets/base/js/.gitkeep diff --git a/Application/Public/assets/min/css/style.min.css b/Application/Public/assets/min/css/style.min.css new file mode 100644 index 0000000..96a82f0 --- /dev/null +++ b/Application/Public/assets/min/css/style.min.css @@ -0,0 +1 @@ +footer.page-footer{background:#F1F1F1;padding:20px 25px;margin-top:100px} \ No newline at end of file diff --git a/Application/Public/assets/min/js/main.min.js b/Application/Public/assets/min/js/main.min.js new file mode 100644 index 0000000..e40be55 --- /dev/null +++ b/Application/Public/assets/min/js/main.min.js @@ -0,0 +1,8 @@ +(function(global,factory){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){var deletedIds=[];var slice=deletedIds.slice;var concat=deletedIds.concat;var push=deletedIds.push;var indexOf=deletedIds.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var support={};var version="1.11.3",jQuery=function(selector,context){return new jQuery.fn.init(selector,context)},rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi,fcamelCase=function(all,letter){return letter.toUpperCase()};jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,selector:"",length:0,toArray:function(){return slice.call(this)},get:function(num){return num!=null?num<0?this[num+this.length]:this[num]:slice.call(this)},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);ret.prevObject=this;ret.context=this.context;return ret},each:function(callback,args){return jQuery.each(this,callback,args)},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&&j=0},isEmptyObject:function(obj){var name;for(name in obj){return false}return true},isPlainObject:function(obj){var key;if(!obj||jQuery.type(obj)!=="object"||obj.nodeType||jQuery.isWindow(obj)){return false}try{if(obj.constructor&&!hasOwn.call(obj,"constructor")&&!hasOwn.call(obj.constructor.prototype,"isPrototypeOf")){return false}}catch(e){return false}if(support.ownLast){for(key in obj){return hasOwn.call(obj,key)}}for(key in obj){}return key===undefined||hasOwn.call(obj,key)},type:function(obj){if(obj==null){return obj+""}return typeof obj==="object"||typeof obj==="function"?class2type[toString.call(obj)]||"object":typeof obj},globalEval:function(data){if(data&&jQuery.trim(data)){(window.execScript||function(data){window["eval"].call(window,data)})(data)}},camelCase:function(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()},each:function(obj,callback,args){var value,i=0,length=obj.length,isArray=isArraylike(obj);if(args){if(isArray){for(;i0&&length-1 in obj}var Sizzle=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},MAX_NEGATIVE=1<<31,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("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),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=/[+~]/,rescape=/'|\\/g,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)},unloadHandler=function(){setDocument()};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 match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];nodeType=context.nodeType;if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results}if(!seed&&documentIsHTML){if(nodeType!==11&&(match=rquickExpr.exec(selector))){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.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){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType!==1&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){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 div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);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 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,parent,doc=node?node.ownerDocument||node:preferredDoc;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;parent=doc.defaultView;if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",unloadHandler,false)}else if(parent.attachEvent){parent.attachEvent("onunload",unloadHandler)}}documentIsHTML=!isXML(doc);support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName);support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];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["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(documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){docElem.appendChild(div).innerHTML=""+"";if(div.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}if(!div.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[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===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||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===doc?-1:b===doc?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 doc};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&&(!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.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,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;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){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&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){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[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:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===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}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,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"&&support.getById&&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,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(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.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(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.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.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;var rneedsContext=jQuery.expr.match.needsContext;var rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>|)$/;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"){if(risSimple.test(qualifier)){return jQuery.filter(qualifier,elements,not)}qualifier=jQuery.filter(qualifier,elements)}return jQuery.grep(elements,function(elem){return jQuery.inArray(elem,qualifier)>=0!==not})}jQuery.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")"}return elems.length===1&&elem.nodeType===1?jQuery.find.matchesSelector(elem,expr)?[elem]:[]:jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType===1}))};jQuery.fn.extend({find:function(selector){var i,ret=[],self=this,len=self.length;if(typeof selector!=="string"){return this.pushStack(jQuery(selector).filter(function(){for(i=0;i1?jQuery.unique(ret):ret);ret.selector=this.selector?this.selector+" "+selector:selector;return 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,document=window.document,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,init=jQuery.fn.init=function(selector,context){var match,elem;if(!selector){return this}if(typeof selector==="string"){if(selector.charAt(0)==="<"&&selector.charAt(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&&elem.parentNode){if(elem.id!==match[2]){return rootjQuery.find(selector)}this.length=1;this[0]=elem}this.context=document;this.selector=selector;return this}}else if(!context||context.jquery){return(context||rootjQuery).find(selector)}else{return this.constructor(context).find(selector)}}else if(selector.nodeType){this.context=this[0]=selector;this.length=1;return this}else if(jQuery.isFunction(selector)){return typeof rootjQuery.ready!=="undefined"?rootjQuery.ready(selector):selector(jQuery)}if(selector.selector!==undefined){this.selector=selector.selector;this.context=selector.context}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.extend({dir:function(elem,dir,until){var matched=[],cur=elem[dir];while(cur&&cur.nodeType!==9&&(until===undefined||cur.nodeType!==1||!jQuery(cur).is(until))){if(cur.nodeType===1){matched.push(cur)}cur=cur[dir]}return matched},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){r.push(n)}}return r}});jQuery.fn.extend({has:function(target){var i,targets=jQuery(target,this),len=targets.length;return this.filter(function(){for(i=0;i-1:cur.nodeType===1&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break}}}return this.pushStack(matched.length>1?jQuery.unique(matched):matched)},index:function(elem){if(!elem){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1}if(typeof elem==="string"){return jQuery.inArray(this[0],jQuery(elem))}return jQuery.inArray(elem.jquery?elem[0]:elem,this)},add:function(selector,context){return this.pushStack(jQuery.unique(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){do{cur=cur[dir]}while(cur&&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 jQuery.dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return jQuery.dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return jQuery.dir(elem,"nextSibling")},prevAll:function(elem){return jQuery.dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return jQuery.dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return jQuery.dir(elem,"previousSibling",until)},siblings:function(elem){return jQuery.sibling((elem.parentNode||{}).firstChild,elem)},children:function(elem){return jQuery.sibling(elem.firstChild)},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until}if(selector&&typeof selector==="string"){ret=jQuery.filter(selector,ret)}if(this.length>1){if(!guaranteedUnique[name]){ret=jQuery.unique(ret)}if(rparentsprev.test(name)){ret=ret.reverse()}}return this.pushStack(ret)}});var rnotwhite=/\S+/g;var optionsCache={};function createOptions(options){var object=optionsCache[options]={};jQuery.each(options.match(rnotwhite)||[],function(_,flag){object[flag]=true});return object}jQuery.Callbacks=function(options){options=typeof options==="string"?optionsCache[options]||createOptions(options):jQuery.extend({},options);var firing,memory,fired,firingLength,firingIndex,firingStart,list=[],stack=!options.once&&[],fire=function(data){memory=options.memory&&data;fired=true;firingIndex=firingStart||0;firingStart=0;firingLength=list.length;firing=true;for(;list&&firingIndex-1){list.splice(index,1);if(firing){if(index<=firingLength){firingLength--}if(index<=firingIndex){firingIndex--}}}})}return this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:!!(list&&list.length)},empty:function(){list=[];firingLength=0;return this},disable:function(){list=stack=memory=undefined;return this},disabled:function(){return!list},lock:function(){stack=undefined;if(!memory){self.disable()}return this},locked:function(){return!stack},fireWith:function(context,args){if(list&&(!fired||stack)){args=args||[];args=[context,args.slice?args.slice():args];if(firing){stack.push(args)}else{fire(args)}}return this},fire:function(){self.fireWith(this,arguments);return this},fired:function(){return!!fired}};return self};jQuery.extend({Deferred:function(func){var tuples=[["resolve","done",jQuery.Callbacks("once memory"),"resolved"],["reject","fail",jQuery.Callbacks("once memory"),"rejected"],["notify","progress",jQuery.Callbacks("memory")]],state="pending",promise={state:function(){return state},always:function(){deferred.done(arguments).fail(arguments);return this},then:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=jQuery.isFunction(fns[i])&&fns[i];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&jQuery.isFunction(returned.promise)){returned.promise().done(newDefer.resolve).fail(newDefer.reject).progress(newDefer.notify)}else{newDefer[tuple[0]+"With"](this===promise?newDefer.promise():this,fn?[returned]:arguments)}})});fns=null}).promise()},promise:function(obj){return obj!=null?jQuery.extend(obj,promise):promise}},deferred={};promise.pipe=promise.then;jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[3];promise[tuple[1]]=list.add;if(stateString){list.add(function(){state=stateString},tuples[i^1][2].disable,tuples[2][2].lock)}deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?promise:this,arguments);return this};deferred[tuple[0]+"With"]=list.fireWith});promise.promise(deferred);if(func){func.call(deferred,deferred)}return deferred},when:function(subordinate){var i=0,resolveValues=slice.call(arguments),length=resolveValues.length,remaining=length!==1||subordinate&&jQuery.isFunction(subordinate.promise)?length:0,deferred=remaining===1?subordinate:jQuery.Deferred(),updateFunc=function(i,contexts,values){return function(value){contexts[i]=this;values[i]=arguments.length>1?slice.call(arguments):value;if(values===progressValues){deferred.notifyWith(contexts,values)}else if(!--remaining){deferred.resolveWith(contexts,values)}}},progressValues,progressContexts,resolveContexts;if(length>1){progressValues=new Array(length);progressContexts=new Array(length);resolveContexts=new Array(length);for(;i0){return}readyList.resolveWith(document,[jQuery]);if(jQuery.fn.triggerHandler){jQuery(document).triggerHandler("ready");jQuery(document).off("ready")}}});function detach(){if(document.addEventListener){document.removeEventListener("DOMContentLoaded",completed,false);window.removeEventListener("load",completed,false)}else{document.detachEvent("onreadystatechange",completed);window.detachEvent("onload",completed)}}function completed(){if(document.addEventListener||event.type==="load"||document.readyState==="complete"){detach();jQuery.ready()}}jQuery.ready.promise=function(obj){if(!readyList){readyList=jQuery.Deferred();if(document.readyState==="complete"){setTimeout(jQuery.ready)}else if(document.addEventListener){document.addEventListener("DOMContentLoaded",completed,false);window.addEventListener("load",completed,false)}else{document.attachEvent("onreadystatechange",completed);window.attachEvent("onload",completed);var top=false;try{top=window.frameElement==null&&document.documentElement}catch(e){}if(top&&top.doScroll){(function doScrollCheck(){if(!jQuery.isReady){try{top.doScroll("left")}catch(e){return setTimeout(doScrollCheck,50)}detach();jQuery.ready()}})()}}}return readyList.promise(obj)};var strundefined=typeof undefined;var i;for(i in jQuery(support)){break}support.ownLast=i!=="0";support.inlineBlockNeedsLayout=false;jQuery(function(){var val,div,body,container;body=document.getElementsByTagName("body")[0];if(!body||!body.style){return}div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);if(typeof div.style.zoom!==strundefined){div.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";support.inlineBlockNeedsLayout=val=div.offsetWidth===3;if(val){body.style.zoom=1}}body.removeChild(container)});(function(){var div=document.createElement("div");if(support.deleteExpando==null){support.deleteExpando=true;try{delete div.test}catch(e){support.deleteExpando=false}}div=null})();jQuery.acceptData=function(elem){var noData=jQuery.noData[(elem.nodeName+" ").toLowerCase()],nodeType=+elem.nodeType||1;return nodeType!==1&&nodeType!==9?false:!noData||noData!==true&&elem.getAttribute("classid")===noData};var rbrace=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/([A-Z])/g;function dataAttr(elem,key,data){if(data===undefined&&elem.nodeType===1){var name="data-"+key.replace(rmultiDash,"-$1").toLowerCase();data=elem.getAttribute(name);if(typeof data==="string"){try{data=data==="true"?true:data==="false"?false:data==="null"?null:+data+""===data?+data:rbrace.test(data)?jQuery.parseJSON(data):data}catch(e){}jQuery.data(elem,key,data)}else{data=undefined}}return data}function isEmptyDataObject(obj){var name;for(name in obj){if(name==="data"&&jQuery.isEmptyObject(obj[name])){continue}if(name!=="toJSON"){return false}}return true}function internalData(elem,name,data,pvt){if(!jQuery.acceptData(elem)){return}var ret,thisCache,internalKey=jQuery.expando,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[internalKey]:elem[internalKey]&&internalKey;if((!id||!cache[id]||!pvt&&!cache[id].data)&&data===undefined&&typeof name==="string"){return}if(!id){if(isNode){id=elem[internalKey]=deletedIds.pop()||jQuery.guid++}else{id=internalKey}}if(!cache[id]){cache[id]=isNode?{}:{toJSON:jQuery.noop}}if(typeof name==="object"||typeof name==="function"){if(pvt){cache[id]=jQuery.extend(cache[id],name)}else{cache[id].data=jQuery.extend(cache[id].data,name)}}thisCache=cache[id];if(!pvt){if(!thisCache.data){thisCache.data={}}thisCache=thisCache.data}if(data!==undefined){thisCache[jQuery.camelCase(name)]=data}if(typeof name==="string"){ret=thisCache[name];if(ret==null){ret=thisCache[jQuery.camelCase(name)]}}else{ret=thisCache}return ret}function internalRemoveData(elem,name,pvt){if(!jQuery.acceptData(elem)){return}var thisCache,i,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[jQuery.expando]:jQuery.expando;if(!cache[id]){return}if(name){thisCache=pvt?cache[id]:cache[id].data;if(thisCache){if(!jQuery.isArray(name)){if(name in thisCache){name=[name]}else{name=jQuery.camelCase(name);if(name in thisCache){name=[name]}else{name=name.split(" ")}}}else{name=name.concat(jQuery.map(name,jQuery.camelCase))}i=name.length;while(i--){delete thisCache[name[i]]}if(pvt?!isEmptyDataObject(thisCache):!jQuery.isEmptyObject(thisCache)){return}}}if(!pvt){delete cache[id].data;if(!isEmptyDataObject(cache[id])){return}}if(isNode){jQuery.cleanData([elem],true)}else if(support.deleteExpando||cache!=cache.window){delete cache[id]}else{cache[id]=null}}jQuery.extend({cache:{},noData:{"applet ":true,"embed ":true,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(elem){elem=elem.nodeType?jQuery.cache[elem[jQuery.expando]]:elem[jQuery.expando];return!!elem&&!isEmptyDataObject(elem)},data:function(elem,name,data){return internalData(elem,name,data)},removeData:function(elem,name){return internalRemoveData(elem,name)},_data:function(elem,name,data){return internalData(elem,name,data,true)},_removeData:function(elem,name){return internalRemoveData(elem,name,true)}});jQuery.fn.extend({data:function(key,value){var i,name,data,elem=this[0],attrs=elem&&elem.attributes;if(key===undefined){if(this.length){data=jQuery.data(elem);if(elem.nodeType===1&&!jQuery._data(elem,"parsedAttrs")){i=attrs.length;while(i--){if(attrs[i]){name=attrs[i].name;if(name.indexOf("data-")===0){name=jQuery.camelCase(name.slice(5));dataAttr(elem,name,data[name])}}}jQuery._data(elem,"parsedAttrs",true)}}return data}if(typeof key==="object"){return this.each(function(){jQuery.data(this,key)})}return arguments.length>1?this.each(function(){jQuery.data(this,key,value)}):elem?dataAttr(elem,key,jQuery.data(elem,key)):undefined},removeData:function(key){return this.each(function(){jQuery.removeData(this,key)})}});jQuery.extend({queue:function(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=jQuery._data(elem,type);if(data){if(!queue||jQuery.isArray(data)){queue=jQuery._data(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 jQuery._data(elem,key)||jQuery._data(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){jQuery._removeData(elem,type+"queue");jQuery._removeData(elem,key)})})}});jQuery.fn.extend({queue:function(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--}if(arguments.length
a";support.leadingWhitespace=div.firstChild.nodeType===3;support.tbody=!div.getElementsByTagName("tbody").length;support.htmlSerialize=!!div.getElementsByTagName("link").length;support.html5Clone=document.createElement("nav").cloneNode(true).outerHTML!=="<:nav>";input.type="checkbox";input.checked=true;fragment.appendChild(input);support.appendChecked=input.checked;div.innerHTML="";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue;fragment.appendChild(div);div.innerHTML="";support.checkClone=div.cloneNode(true).cloneNode(true).lastChild.checked;support.noCloneEvent=true;if(div.attachEvent){div.attachEvent("onclick",function(){support.noCloneEvent=false});div.cloneNode(true).click()}if(support.deleteExpando==null){support.deleteExpando=true;try{delete div.test}catch(e){support.deleteExpando=false}}})();(function(){var i,eventName,div=document.createElement("div");for(i in{submit:true,change:true,focusin:true}){eventName="on"+i;if(!(support[i+"Bubbles"]=eventName in window)){div.setAttribute(eventName,"t");support[i+"Bubbles"]=div.attributes[eventName].expando===false}}div=null})();var rformElems=/^(?:input|select|textarea)$/i,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rtypenamespace=/^([^.]*)(?:\.(.+)|)$/;function returnTrue(){return true}function returnFalse(){return false}function safeActiveElement(){try{return document.activeElement}catch(err){}}jQuery.event={global:{},add:function(elem,types,handler,data,selector){var tmp,events,t,handleObjIn,special,eventHandle,handleObj,handlers,type,namespaces,origType,elemData=jQuery._data(elem);if(!elemData){return}if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.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!==strundefined&&(!e||jQuery.event.triggered!==e.type)?jQuery.event.dispatch.apply(eventHandle.elem,arguments):undefined};eventHandle.elem=elem}types=(types||"").match(rnotwhite)||[""];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,false)}else if(elem.attachEvent){elem.attachEvent("on"+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}elem=null},remove:function(elem,types,handler,selector,mappedTypes){var j,handleObj,tmp,origCount,t,events,special,handlers,type,namespaces,origType,elemData=jQuery.hasData(elem)&&jQuery._data(elem);if(!elemData||!(events=elemData.events)){return}types=(types||"").match(rnotwhite)||[""];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)){delete elemData.handle;jQuery._removeData(elem,"events")}},trigger:function(event,data,elem,onlyHandlers){var handle,ontype,cur,bubbleType,special,tmp,i,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(".")>=0){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.namespace_re=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=(jQuery._data(cur,"events")||{})[event.type]&&jQuery._data(cur,"handle");if(handle){handle.apply(cur,data)}handle=ontype&&cur[ontype];if(handle&&handle.apply&&jQuery.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)&&jQuery.acceptData(elem)){if(ontype&&elem[type]&&!jQuery.isWindow(elem)){tmp=elem[ontype];if(tmp){elem[ontype]=null}jQuery.event.triggered=type;try{elem[type]()}catch(e){}jQuery.event.triggered=undefined;if(tmp){elem[ontype]=tmp}}}}return event.result},dispatch:function(event){event=jQuery.event.fix(event);var i,ret,handleObj,matched,j,handlerQueue=[],args=slice.call(arguments),handlers=(jQuery._data(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};args[0]=event;event.delegateTarget=this;if(special.preDispatch&&special.preDispatch.call(this,event)===false){return}handlerQueue=jQuery.event.handlers.call(this,event,handlers);i=0;while((matched=handlerQueue[i++])&&!event.isPropagationStopped()){event.currentTarget=matched.elem;j=0;while((handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped()){if(!event.namespace_re||event.namespace_re.test(handleObj.namespace)){event.handleObj=handleObj;event.data=handleObj.data;ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args); +if(ret!==undefined){if((event.result=ret)===false){event.preventDefault();event.stopPropagation()}}}}}if(special.postDispatch){special.postDispatch.call(this,event)}return event.result},handlers:function(event,handlers){var sel,handleObj,matches,i,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&(!event.button||event.type!=="click")){for(;cur!=this;cur=cur.parentNode||this){if(cur.nodeType===1&&(cur.disabled!==true||event.type!=="click")){matches=[];for(i=0;i=0:jQuery.find(sel,this,null,[cur]).length}if(matches[sel]){matches.push(handleObj)}}if(matches.length){handlerQueue.push({elem:cur,handlers:matches})}}}}if(delegateCount]","i"),rleadingWhitespace=/^\s+/,rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,rtagName=/<([\w:]+)/,rtbody=/\s*$/g,wrapMap={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:support.htmlSerialize?[0,"",""]:[1,"X
","
"]},safeFragment=createSafeFragment(document),fragmentDiv=safeFragment.appendChild(document.createElement("div"));wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;function getAll(context,tag){var elems,elem,i=0,found=typeof context.getElementsByTagName!==strundefined?context.getElementsByTagName(tag||"*"):typeof context.querySelectorAll!==strundefined?context.querySelectorAll(tag||"*"):undefined;if(!found){for(found=[],elems=context.childNodes||context;(elem=elems[i])!=null;i++){if(!tag||jQuery.nodeName(elem,tag)){found.push(elem)}else{jQuery.merge(found,getAll(elem,tag))}}}return tag===undefined||tag&&jQuery.nodeName(context,tag)?jQuery.merge([context],found):found}function fixDefaultChecked(elem){if(rcheckableType.test(elem.type)){elem.defaultChecked=elem.checked}}function manipulationTarget(elem,content){return jQuery.nodeName(elem,"table")&&jQuery.nodeName(content.nodeType!==11?content:content.firstChild,"tr")?elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody")):elem}function disableScript(elem){elem.type=(jQuery.find.attr(elem,"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 setGlobalEval(elems,refElements){var elem,i=0;for(;(elem=elems[i])!=null;i++){jQuery._data(elem,"globalEval",!refElements||jQuery._data(refElements[i],"globalEval"))}}function cloneCopyEvent(src,dest){if(dest.nodeType!==1||!jQuery.hasData(src)){return}var type,i,l,oldData=jQuery._data(src),curData=jQuery._data(dest,oldData),events=oldData.events;if(events){delete curData.handle;curData.events={};for(type in events){for(i=0,l=events[type].length;i")){clone=elem.cloneNode(true)}else{fragmentDiv.innerHTML=elem.outerHTML;fragmentDiv.removeChild(clone=fragmentDiv.firstChild)}if((!support.noCloneEvent||!support.noCloneChecked)&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){destElements=getAll(clone);srcElements=getAll(elem);for(i=0;(node=srcElements[i])!=null;++i){if(destElements[i]){fixCloneNodeIssues(node,destElements[i])}}}if(dataAndEvents){if(deepDataAndEvents){srcElements=srcElements||getAll(elem);destElements=destElements||getAll(clone);for(i=0;(node=srcElements[i])!=null;i++){cloneCopyEvent(node,destElements[i])}}else{cloneCopyEvent(elem,clone)}}destElements=getAll(clone,"script");if(destElements.length>0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"))}destElements=srcElements=node=null;return clone},buildFragment:function(elems,context,scripts,selection){var j,elem,contains,tmp,tag,tbody,wrap,l=elems.length,safe=createSafeFragment(context),nodes=[],i=0;for(;i")+wrap[2];j=wrap[0];while(j--){tmp=tmp.lastChild}if(!support.leadingWhitespace&&rleadingWhitespace.test(elem)){nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0]))}if(!support.tbody){elem=tag==="table"&&!rtbody.test(elem)?tmp.firstChild:wrap[1]===""&&!rtbody.test(elem)?tmp:0;j=elem&&elem.childNodes.length;while(j--){if(jQuery.nodeName(tbody=elem.childNodes[j],"tbody")&&!tbody.childNodes.length){elem.removeChild(tbody)}}}jQuery.merge(nodes,tmp.childNodes);tmp.textContent="";while(tmp.firstChild){tmp.removeChild(tmp.firstChild)}tmp=safe.lastChild}}}if(tmp){safe.removeChild(tmp)}if(!support.appendChecked){jQuery.grep(getAll(nodes,"input"),fixDefaultChecked)}i=0;while(elem=nodes[i++]){if(selection&&jQuery.inArray(elem,selection)!==-1){continue}contains=jQuery.contains(elem.ownerDocument,elem);tmp=getAll(safe.appendChild(elem),"script");if(contains){setGlobalEval(tmp)}if(scripts){j=0;while(elem=tmp[j++]){if(rscriptType.test(elem.type||"")){scripts.push(elem)}}}}tmp=null;return safe},cleanData:function(elems,acceptData){var elem,type,id,data,i=0,internalKey=jQuery.expando,cache=jQuery.cache,deleteExpando=support.deleteExpando,special=jQuery.event.special;for(;(elem=elems[i])!=null;i++){if(acceptData||jQuery.acceptData(elem)){id=elem[internalKey];data=id&&cache[id];if(data){if(data.events){for(type in data.events){if(special[type]){jQuery.event.remove(elem,type)}else{jQuery.removeEvent(elem,type,data.handle)}}}if(cache[id]){delete cache[id];if(deleteExpando){delete elem[internalKey]}else if(typeof elem.removeAttribute!==strundefined){elem.removeAttribute(internalKey)}else{elem[internalKey]=null}deletedIds.push(id)}}}}}});jQuery.fn.extend({text:function(value){return access(this,function(value){return value===undefined?jQuery.text(this):this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(value))},null,value,arguments.length)},append:function(){return this.domManip(arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem)}})},prepend:function(){return this.domManip(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 this.domManip(arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this)}})},after:function(){return this.domManip(arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling)}})},remove:function(selector,keepData){var elem,elems=selector?jQuery.filter(selector,this):this,i=0;for(;(elem=elems[i])!=null;i++){if(!keepData&&elem.nodeType===1){jQuery.cleanData(getAll(elem))}if(elem.parentNode){if(keepData&&jQuery.contains(elem.ownerDocument,elem)){setGlobalEval(getAll(elem,"script"))}elem.parentNode.removeChild(elem)}}return this},empty:function(){var elem,i=0;for(;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false))}while(elem.firstChild){elem.removeChild(elem.firstChild)}if(elem.options&&jQuery.nodeName(elem,"select")){elem.options.length=0}}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){return elem.nodeType===1?elem.innerHTML.replace(rinlinejQuery,""):undefined}if(typeof value==="string"&&!rnoInnerhtml.test(value)&&(support.htmlSerialize||!rnoshimcache.test(value))&&(support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=value.replace(rxhtmlTag,"<$1>");try{for(;i1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value)){return this.each(function(index){var self=set.eq(index);if(isFunction){args[0]=value.call(this,index,self.html())}self.domManip(args,callback)})}if(l){fragment=jQuery.buildFragment(args,this[0].ownerDocument,false,this);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first}if(first){scripts=jQuery.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;for(;i")).appendTo(doc.documentElement);doc=(iframe[0].contentWindow||iframe[0].contentDocument).document;doc.write();doc.close();display=actualDisplay(nodeName,doc);iframe.detach()}elemdisplay[nodeName]=display}return display}(function(){var shrinkWrapBlocksVal;support.shrinkWrapBlocks=function(){if(shrinkWrapBlocksVal!=null){return shrinkWrapBlocksVal}shrinkWrapBlocksVal=false;var div,body,container;body=document.getElementsByTagName("body")[0];if(!body||!body.style){return}div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);if(typeof div.style.zoom!==strundefined){div.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;"+"box-sizing:content-box;display:block;margin:0;border:0;"+"padding:1px;width:1px;zoom:1";div.appendChild(document.createElement("div")).style.width="5px";shrinkWrapBlocksVal=div.offsetWidth!==3}body.removeChild(container);return shrinkWrapBlocksVal}})();var rmargin=/^margin/;var rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i");var getStyles,curCSS,rposition=/^(top|right|bottom|left)$/;if(window.getComputedStyle){getStyles=function(elem){if(elem.ownerDocument.defaultView.opener){return elem.ownerDocument.defaultView.getComputedStyle(elem,null)}return window.getComputedStyle(elem,null)};curCSS=function(elem,name,computed){var width,minWidth,maxWidth,ret,style=elem.style;computed=computed||getStyles(elem);ret=computed?computed.getPropertyValue(name)||computed[name]:undefined;if(computed){if(ret===""&&!jQuery.contains(elem.ownerDocument,elem)){ret=jQuery.style(elem,name)}if(rnumnonpx.test(ret)&&rmargin.test(name)){width=style.width;minWidth=style.minWidth;maxWidth=style.maxWidth;style.minWidth=style.maxWidth=style.width=ret;ret=computed.width;style.width=width;style.minWidth=minWidth;style.maxWidth=maxWidth}}return ret===undefined?ret:ret+""}}else if(document.documentElement.currentStyle){getStyles=function(elem){return elem.currentStyle};curCSS=function(elem,name,computed){var left,rs,rsLeft,ret,style=elem.style;computed=computed||getStyles(elem);ret=computed?computed[name]:undefined;if(ret==null&&style&&style[name]){ret=style[name]}if(rnumnonpx.test(ret)&&!rposition.test(name)){left=style.left;rs=elem.runtimeStyle;rsLeft=rs&&rs.left;if(rsLeft){rs.left=elem.currentStyle.left}style.left=name==="fontSize"?"1em":ret;ret=style.pixelLeft+"px";style.left=left;if(rsLeft){rs.left=rsLeft}}return ret===undefined?ret:ret+""||"auto"}}function addGetHookIf(conditionFn,hookFn){return{get:function(){var condition=conditionFn();if(condition==null){return}if(condition){delete this.get;return}return(this.get=hookFn).apply(this,arguments)}}}(function(){var div,style,a,pixelPositionVal,boxSizingReliableVal,reliableHiddenOffsetsVal,reliableMarginRightVal;div=document.createElement("div");div.innerHTML="
a";a=div.getElementsByTagName("a")[0];style=a&&a.style;if(!style){return}style.cssText="float:left;opacity:.5";support.opacity=style.opacity==="0.5";support.cssFloat=!!style.cssFloat;div.style.backgroundClip="content-box";div.cloneNode(true).style.backgroundClip="";support.clearCloneStyle=div.style.backgroundClip==="content-box";support.boxSizing=style.boxSizing===""||style.MozBoxSizing===""||style.WebkitBoxSizing==="";jQuery.extend(support,{reliableHiddenOffsets:function(){if(reliableHiddenOffsetsVal==null){computeStyleTests()}return reliableHiddenOffsetsVal},boxSizingReliable:function(){if(boxSizingReliableVal==null){computeStyleTests()}return boxSizingReliableVal},pixelPosition:function(){if(pixelPositionVal==null){computeStyleTests()}return pixelPositionVal},reliableMarginRight:function(){if(reliableMarginRightVal==null){computeStyleTests()}return reliableMarginRightVal}});function computeStyleTests(){var div,body,container,contents;body=document.getElementsByTagName("body")[0];if(!body||!body.style){return}div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);div.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;"+"box-sizing:border-box;display:block;margin-top:1%;top:1%;"+"border:1px;padding:1px;width:4px;position:absolute";pixelPositionVal=boxSizingReliableVal=false;reliableMarginRightVal=true;if(window.getComputedStyle){pixelPositionVal=(window.getComputedStyle(div,null)||{}).top!=="1%";boxSizingReliableVal=(window.getComputedStyle(div,null)||{width:"4px"}).width==="4px";contents=div.appendChild(document.createElement("div"));contents.style.cssText=div.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;"+"box-sizing:content-box;display:block;margin:0;border:0;padding:0";contents.style.marginRight=contents.style.width="0";div.style.width="1px";reliableMarginRightVal=!parseFloat((window.getComputedStyle(contents,null)||{}).marginRight);div.removeChild(contents)}div.innerHTML="
t
";contents=div.getElementsByTagName("td");contents[0].style.cssText="margin:0;border:0;padding:0;display:none";reliableHiddenOffsetsVal=contents[0].offsetHeight===0;if(reliableHiddenOffsetsVal){contents[0].style.display="";contents[1].style.display="none";reliableHiddenOffsetsVal=contents[0].offsetHeight===0}body.removeChild(container)}})();jQuery.swap=function(elem,options,callback,args){var ret,name,old={};for(name in options){old[name]=elem.style[name];elem.style[name]=options[name]}ret=callback.apply(elem,args||[]);for(name in options){elem.style[name]=old[name]}return ret};var ralpha=/alpha\([^)]*\)/i,ropacity=/opacity\s*=\s*([^)]*)/,rdisplayswap=/^(none|table(?!-c[ea]).+)/,rnumsplit=new RegExp("^("+pnum+")(.*)$","i"),rrelNum=new RegExp("^([+-])=("+pnum+")","i"),cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"},cssPrefixes=["Webkit","O","Moz","ms"];function vendorPropName(style,name){if(name in style){return name}var capName=name.charAt(0).toUpperCase()+name.slice(1),origName=name,i=cssPrefixes.length;while(i--){name=cssPrefixes[i]+capName;if(name in style){return name}}return origName}function showHide(elements,show){var display,elem,hidden,values=[],index=0,length=elements.length;for(;index=1||value==="")&&jQuery.trim(filter.replace(ralpha,""))===""&&style.removeAttribute){style.removeAttribute("filter");if(value===""||currentStyle&&!currentStyle.filter){return}}style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):filter+" "+opacity}}}jQuery.cssHooks.marginRight=addGetHookIf(support.reliableMarginRight,function(elem,computed){if(computed){return jQuery.swap(elem,{display:"inline-block"},curCSS,[elem,"marginRight"])}});jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){var i=0,expanded={},parts=typeof value==="string"?value.split(" "):[value];for(;i<4;i++){expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0]}return expanded}};if(!rmargin.test(prefix)){jQuery.cssHooks[prefix+suffix].set=setPositiveNumber}});jQuery.fn.extend({css:function(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(jQuery.isArray(name)){styles=getStyles(elem);len=name.length;for(;i1)},show:function(){return showHide(this,true)},hide:function(){return showHide(this)},toggle:function(state){if(typeof state==="boolean"){return state?this.show():this.hide()}return this.each(function(){if(isHidden(this)){jQuery(this).show()}else{jQuery(this).hide()}})}});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||"swing";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[tween.prop]!=null&&(!tween.elem.style||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.style&&(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}};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var fxNow,timerId,rfxtypes=/^(?:toggle|show|hide)$/,rfxnum=new RegExp("^(?:([+-])=|)("+pnum+")([a-z%]*)$","i"),rrun=/queueHooks$/,animationPrefilters=[defaultPrefilter],tweeners={"*":[function(prop,value){var tween=this.createTween(prop,value),target=tween.cur(),parts=rfxnum.exec(value),unit=parts&&parts[3]||(jQuery.cssNumber[prop]?"":"px"),start=(jQuery.cssNumber[prop]||unit!=="px"&&+target)&&rfxnum.exec(jQuery.css(tween.elem,prop)),scale=1,maxIterations=20;if(start&&start[3]!==unit){unit=unit||start[3];parts=parts||[];start=+target||1;do{scale=scale||".5";start=start/scale;jQuery.style(tween.elem,prop,start+unit)}while(scale!==(scale=tween.cur()/target)&&scale!==1&&--maxIterations)}if(parts){start=tween.start=+start||+target||0;tween.unit=unit;tween.end=parts[1]?start+(parts[1]+1)*parts[2]:+parts[2]}return tween}]};function createFxNow(){setTimeout(function(){fxNow=undefined});return fxNow=jQuery.now()}function genFx(type,includeWidth){var which,attrs={height:type},i=0;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=(tweeners[prop]||[]).concat(tweeners["*"]),index=0,length=collection.length;for(;index
a";a=div.getElementsByTagName("a")[0];select=document.createElement("select");opt=select.appendChild(document.createElement("option"));input=div.getElementsByTagName("input")[0];a.style.cssText="top:1px";support.getSetAttribute=div.className!=="t";support.style=/top/.test(a.getAttribute("style"));support.hrefNormalized=a.getAttribute("href")==="/a";support.checkOn=!!input.value;support.optSelected=opt.selected;support.enctype=!!document.createElement("form").enctype;select.disabled=true;support.optDisabled=!opt.disabled;input=document.createElement("input");input.setAttribute("value","");support.input=input.getAttribute("value")==="";input.value="t";input.setAttribute("type","radio");support.radioValue=input.value==="t"})();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;return typeof ret==="string"?ret.replace(rreturn,""):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:jQuery.trim(jQuery.text(elem))}},select:{get:function(elem){var value,option,options=elem.options,index=elem.selectedIndex,one=elem.type==="select-one"||index<0,values=one?null:[],max=one?index+1:options.length,i=index<0?max:one?index:0;for(;i=0){try{option.selected=optionSet=true}catch(_){option.scrollHeight}}else{option.selected=false}}if(!optionSet){elem.selectedIndex=-1}return options}}}});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)>=0}}};if(!support.checkOn){jQuery.valHooks[this].get=function(elem){return elem.getAttribute("value")===null?"on":elem.value}}});var nodeHook,boolHook,attrHandle=jQuery.expr.attrHandle,ruseDefault=/^(?:checked|selected)$/i,getSetAttribute=support.getSetAttribute,getSetInput=support.input;jQuery.fn.extend({attr:function(name,value){return access(this,jQuery.attr,name,value,arguments.length>1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})}});jQuery.extend({attr:function(elem,name,value){var hooks,ret,nType=elem.nodeType;if(!elem||nType===3||nType===8||nType===2){return}if(typeof elem.getAttribute===strundefined){return jQuery.prop(elem,name,value)}if(nType!==1||!jQuery.isXMLDoc(elem)){name=name.toLowerCase();hooks=jQuery.attrHooks[name]||(jQuery.expr.match.bool.test(name)?boolHook:nodeHook)}if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name)}else if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}else{elem.setAttribute(name,value+"");return value}}else if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}else{ret=jQuery.find.attr(elem,name);return ret==null?undefined:ret}},removeAttr:function(elem,value){var name,propName,i=0,attrNames=value&&value.match(rnotwhite);if(attrNames&&elem.nodeType===1){while(name=attrNames[i++]){propName=jQuery.propFix[name]||name;if(jQuery.expr.match.bool.test(name)){if(getSetInput&&getSetAttribute||!ruseDefault.test(name)){elem[propName]=false}else{elem[jQuery.camelCase("default-"+name)]=elem[propName]=false}}else{jQuery.attr(elem,name,"")}elem.removeAttribute(getSetAttribute?name:propName)}}},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}}}}});boolHook={set:function(elem,value,name){if(value===false){jQuery.removeAttr(elem,name)}else if(getSetInput&&getSetAttribute||!ruseDefault.test(name)){elem.setAttribute(!getSetAttribute&&jQuery.propFix[name]||name,name)}else{elem[jQuery.camelCase("default-"+name)]=elem[name]=true}return name}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(i,name){var getter=attrHandle[name]||jQuery.find.attr;attrHandle[name]=getSetInput&&getSetAttribute||!ruseDefault.test(name)?function(elem,name,isXML){var ret,handle;if(!isXML){handle=attrHandle[name];attrHandle[name]=ret;ret=getter(elem,name,isXML)!=null?name.toLowerCase():null;attrHandle[name]=handle}return ret}:function(elem,name,isXML){if(!isXML){return elem[jQuery.camelCase("default-"+name)]?name.toLowerCase():null}}});if(!getSetInput||!getSetAttribute){jQuery.attrHooks.value={set:function(elem,value,name){if(jQuery.nodeName(elem,"input")){elem.defaultValue=value}else{return nodeHook&&nodeHook.set(elem,value,name)}}}}if(!getSetAttribute){nodeHook={set:function(elem,value,name){var ret=elem.getAttributeNode(name);if(!ret){elem.setAttributeNode(ret=elem.ownerDocument.createAttribute(name))}ret.value=value+="";if(name==="value"||value===elem.getAttribute(name)){return value}}};attrHandle.id=attrHandle.name=attrHandle.coords=function(elem,name,isXML){var ret;if(!isXML){return(ret=elem.getAttributeNode(name))&&ret.value!==""?ret.value:null}};jQuery.valHooks.button={get:function(elem,name){var ret=elem.getAttributeNode(name);if(ret&&ret.specified){return ret.value}},set:nodeHook.set};jQuery.attrHooks.contenteditable={set:function(elem,value,name){nodeHook.set(elem,value===""?false:value,name)}};jQuery.each(["width","height"],function(i,name){jQuery.attrHooks[name]={set:function(elem,value){if(value===""){elem.setAttribute(name,"auto");return value}}}})}if(!support.style){jQuery.attrHooks.style={get:function(elem){return elem.style.cssText||undefined},set:function(elem,value){return elem.style.cssText=value+""}}}var rfocusable=/^(?:input|select|textarea|button|object)$/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){name=jQuery.propFix[name]||name;return this.each(function(){try{this[name]=undefined;delete this[name]}catch(e){}})}});jQuery.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(elem,name,value){var ret,hooks,notxml,nType=elem.nodeType;if(!elem||nType===3||nType===8||nType===2){return}notxml=nType!==1||!jQuery.isXMLDoc(elem);if(notxml){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name]}if(value!==undefined){return hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined?ret:elem[name]=value}else{return hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null?ret:elem[name]}},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");return tabindex?parseInt(tabindex,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:-1}}}});if(!support.hrefNormalized){jQuery.each(["href","src"],function(i,name){jQuery.propHooks[name]={get:function(elem){return elem.getAttribute(name,4)}}})}if(!support.optSelected){jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex}}return null}}}jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this});if(!support.enctype){jQuery.propFix.enctype="encoding"}var rclass=/[\t\r\n\f]/g;jQuery.fn.extend({addClass:function(value){var classes,elem,cur,clazz,j,finalValue,i=0,len=this.length,proceed=typeof value==="string"&&value;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,this.className))})}if(proceed){classes=(value||"").match(rnotwhite)||[];for(;i=0){cur=cur.replace(" "+clazz+" "," ")}}finalValue=value?jQuery.trim(cur):"";if(elem.className!==finalValue){elem.className=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,this.className,stateVal),stateVal)})}return this.each(function(){if(type==="string"){var className,i=0,self=jQuery(this),classNames=value.match(rnotwhite)||[];while(className=classNames[i++]){if(self.hasClass(className)){self.removeClass(className)}else{self.addClass(className)}}}else if(type===strundefined||type==="boolean"){if(this.className){jQuery._data(this,"__className__",this.className)}this.className=this.className||value===false?"":jQuery._data(this,"__className__")||""}})},hasClass:function(selector){var className=" "+selector+" ",i=0,l=this.length;for(;i=0){return true}}return false}});jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup error 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)},bind:function(types,data,fn){return this.on(types,null,data,fn)},unbind:function(types,fn){return this.off(types,null,fn)},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn)},undelegate:function(selector,types,fn){return arguments.length===1?this.off(selector,"**"):this.off(types,selector||"**",fn)}});var nonce=jQuery.now();var rquery=/\?/;var rvalidtokens=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;jQuery.parseJSON=function(data){if(window.JSON&&window.JSON.parse){return window.JSON.parse(data+"")}var requireNonComma,depth=null,str=jQuery.trim(data+"");return str&&!jQuery.trim(str.replace(rvalidtokens,function(token,comma,open,close){if(requireNonComma&&comma){depth=0}if(depth===0){return token}requireNonComma=open||comma;depth+=!close-!open;return""}))?Function("return "+str)():jQuery.error("Invalid JSON: "+data)};jQuery.parseXML=function(data){var xml,tmp;if(!data||typeof data!=="string"){return null}try{if(window.DOMParser){tmp=new DOMParser;xml=tmp.parseFromString(data,"text/xml")}else{xml=new ActiveXObject("Microsoft.XMLDOM");xml.async="false";xml.loadXML(data)}}catch(e){xml=undefined}if(!xml||!xml.documentElement||xml.getElementsByTagName("parsererror").length){jQuery.error("Invalid XML: "+data)}return xml};var ajaxLocParts,ajaxLocation,rhash=/#.*$/,rts=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,rurl=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,prefilters={},transports={},allTypes="*/".concat("*");try{ajaxLocation=location.href}catch(e){ajaxLocation=document.createElement("a");ajaxLocation.href="";ajaxLocation=ajaxLocation.href}ajaxLocParts=rurl.exec(ajaxLocation.toLowerCase())||[];function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*"}var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnotwhite)||[];if(jQuery.isFunction(func)){while(dataType=dataTypes[i++]){if(dataType.charAt(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 deep,key,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 firstDataType,ct,finalDataType,type,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:ajaxLocation,type:"GET",isLocal:rlocalProtocol.test(ajaxLocParts[1]),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:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":jQuery.parseJSON,"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 parts,i,cacheURL,responseHeadersString,timeoutTimer,fireGlobals,transport,responseHeaders,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={},state=0,strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(state===2){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 state===2?responseHeadersString:null},setRequestHeader:function(name,value){var lname=name.toLowerCase();if(!state){name=requestHeadersNames[lname]=requestHeadersNames[lname]||name;requestHeaders[name]=value}return this},overrideMimeType:function(type){if(!state){s.mimeType=type}return this},statusCode:function(map){var code;if(map){if(state<2){for(code in map){statusCode[code]=[statusCode[code],map[code]]}}else{jqXHR.always(map[jqXHR.status])}}return this},abort:function(statusText){var finalText=statusText||strAbort;if(transport){transport.abort(finalText)}done(0,finalText);return this}};deferred.promise(jqXHR).complete=completeDeferred.add;jqXHR.success=jqXHR.done;jqXHR.error=jqXHR.fail;s.url=((url||s.url||ajaxLocation)+"").replace(rhash,"").replace(rprotocol,ajaxLocParts[1]+"//");s.type=options.method||options.type||s.method||s.type;s.dataTypes=jQuery.trim(s.dataType||"*").toLowerCase().match(rnotwhite)||[""];if(s.crossDomain==null){parts=rurl.exec(s.url.toLowerCase());s.crossDomain=!!(parts&&(parts[1]!==ajaxLocParts[1]||parts[2]!==ajaxLocParts[2]||(parts[3]||(parts[1]==="http:"?"80":"443"))!==(ajaxLocParts[3]||(ajaxLocParts[1]==="http:"?"80":"443"))))}if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional)}inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(state===2){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;if(!s.hasContent){if(s.data){cacheURL=s.url+=(rquery.test(cacheURL)?"&":"?")+s.data;delete s.data}if(s.cache===false){s.url=rts.test(cacheURL)?cacheURL.replace(rts,"$1_="+nonce++):cacheURL+(rquery.test(cacheURL)?"&":"?")+"_="+nonce++}}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||state===2)){return jqXHR.abort()}strAbort="abort";for(i in{success:1,error:1,complete:1}){jqXHR[i](s[i])}transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport")}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s])}if(s.async&&s.timeout>0){timeoutTimer=setTimeout(function(){jqXHR.abort("timeout")},s.timeout)}try{state=1;transport.send(requestHeaders,done)}catch(e){if(state<2){done(-1,e)}else{throw e}}}function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;if(state===2){return}state=2;if(timeoutTimer){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({url:url,type:method,dataType:type,data:data,success:callback})}});jQuery._evalUrl=function(url){return jQuery.ajax({url:url,type:"GET",dataType:"script",async:false,global:false,"throws":true})};jQuery.fn.extend({wrapAll:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapAll(html.call(this,i))})}if(this[0]){var 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.firstChild&&elem.firstChild.nodeType===1){elem=elem.firstChild}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(){return this.parent().each(function(){if(!jQuery.nodeName(this,"body")){jQuery(this).replaceWith(this.childNodes)}}).end()}});jQuery.expr.filters.hidden=function(elem){return elem.offsetWidth<=0&&elem.offsetHeight<=0||!support.reliableHiddenOffsets()&&(elem.style&&elem.style.display||jQuery.css(elem,"display"))==="none"};jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem)};var r20=/%20/g,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"?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,value){value=jQuery.isFunction(value)?value():value==null?"":value;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value)};if(traditional===undefined){traditional=jQuery.ajaxSettings&&jQuery.ajaxSettings.traditional}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("&").replace(r20,"+")};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();return val==null?null:jQuery.isArray(val)?jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}):{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}});jQuery.ajaxSettings.xhr=window.ActiveXObject!==undefined?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&createStandardXHR()||createActiveXHR()}:createStandardXHR;var xhrId=0,xhrCallbacks={},xhrSupported=jQuery.ajaxSettings.xhr();if(window.attachEvent){window.attachEvent("onunload",function(){for(var key in xhrCallbacks){xhrCallbacks[key](undefined,true)}})}support.cors=!!xhrSupported&&"withCredentials"in xhrSupported;xhrSupported=support.ajax=!!xhrSupported;if(xhrSupported){jQuery.ajaxTransport(function(options){if(!options.crossDomain||support.cors){var callback;return{send:function(headers,complete){var i,xhr=options.xhr(),id=++xhrId;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){if(headers[i]!==undefined){xhr.setRequestHeader(i,headers[i]+"")}}xhr.send(options.hasContent&&options.data||null);callback=function(_,isAbort){var status,statusText,responses;if(callback&&(isAbort||xhr.readyState===4)){delete xhrCallbacks[id];callback=undefined;xhr.onreadystatechange=jQuery.noop;if(isAbort){if(xhr.readyState!==4){xhr.abort()}}else{responses={};status=xhr.status;if(typeof xhr.responseText==="string"){responses.text=xhr.responseText}try{statusText=xhr.statusText}catch(e){statusText=""}if(!status&&options.isLocal&&!options.crossDomain){status=responses.text?200:404}else if(status===1223){status=204}}}if(responses){complete(status,statusText,responses,xhr.getAllResponseHeaders())}};if(!options.async){callback()}else if(xhr.readyState===4){setTimeout(callback)}else{xhr.onreadystatechange=xhrCallbacks[id]=callback}},abort:function(){if(callback){callback(undefined,true)}}}}})}function createStandardXHR(){try{return new window.XMLHttpRequest}catch(e){}}function createActiveXHR(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},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";s.global=false}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,head=document.head||jQuery("head")[0]||document.documentElement;return{send:function(_,callback){script=document.createElement("script");script.async=true;if(s.scriptCharset){script.charset=s.scriptCharset}script.src=s.url;script.onload=script.onreadystatechange=function(_,isAbort){if(isAbort||!script.readyState||/loaded|complete/.test(script.readyState)){script.onload=script.onreadystatechange=null;if(script.parentNode){script.parentNode.removeChild(script)}script=null;if(!isAbort){callback(200,"success")}}};head.insertBefore(script,head.firstChild)},abort:function(){if(script){script.onload(undefined,true)}}}}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||jQuery.expando+"_"+nonce++;this[callback]=true;return callback}});jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=s.jsonp!==false&&(rjsonp.test(s.url)?"url":typeof s.data==="string"&&!(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&rjsonp.test(s.data)&&"data");if(jsonProp||s.dataTypes[0]==="jsonp"){callbackName=s.jsonpCallback=jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback;if(jsonProp){s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName)}else if(s.jsonp!==false){s.url+=(rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName}s.converters["script json"]=function(){if(!responseContainer){jQuery.error(callbackName+" was not called")}return responseContainer[0]};s.dataTypes[0]="json";overwritten=window[callbackName];window[callbackName]=function(){responseContainer=arguments};jqXHR.always(function(){window[callbackName]=overwritten;if(s[callbackName]){s.jsonpCallback=originalSettings.jsonpCallback;oldCallbacks.push(callbackName)}if(responseContainer&&jQuery.isFunction(overwritten)){overwritten(responseContainer[0])}responseContainer=overwritten=undefined});return"script"}});jQuery.parseHTML=function(data,context,keepScripts){if(!data||typeof data!=="string"){return null}if(typeof context==="boolean"){keepScripts=context;context=false}context=context||document;var parsed=rsingleTag.exec(data),scripts=!keepScripts&&[];if(parsed){return[context.createElement(parsed[1])]}parsed=jQuery.buildFragment([data],context,scripts);if(scripts&&scripts.length){jQuery(scripts).remove()}return jQuery.merge([],parsed.childNodes)};var _load=jQuery.fn.load;jQuery.fn.load=function(url,params,callback){if(typeof url!=="string"&&_load){return _load.apply(this,arguments)}var selector,response,type,self=this,off=url.indexOf(" ");if(off>=0){selector=jQuery.trim(url.slice(off,url.length));url=url.slice(0,off)}if(jQuery.isFunction(params)){callback=params;params=undefined}else if(params&&typeof params==="object"){type="POST"}if(self.length>0){jQuery.ajax({url:url,type:type,dataType:"html",data:params}).done(function(responseText){response=arguments;self.html(selector?jQuery("
").append(jQuery.parseHTML(responseText)).find(selector):responseText)}).complete(callback&&function(jqXHR,status){self.each(callback,response||[jqXHR.responseText,status,jqXHR])})}return this};jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,type){jQuery.fn[type]=function(fn){return this.on(type,fn)}});jQuery.expr.filters.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem}).length};var docElem=window.document.documentElement;function getWindow(elem){return jQuery.isWindow(elem)?elem:elem.nodeType===9?elem.defaultView||elem.parentWindow:false}jQuery.offset={setOffset:function(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,calculatePosition,position=jQuery.css(elem,"position"),curElem=jQuery(elem),props={};if(position==="static"){elem.style.position="relative"}curOffset=curElem.offset();curCSSTop=jQuery.css(elem,"top");curCSSLeft=jQuery.css(elem,"left");calculatePosition=(position==="absolute"||position==="fixed")&&jQuery.inArray("auto",[curCSSTop,curCSSLeft])>-1;if(calculatePosition){curPosition=curElem.position();curTop=curPosition.top;curLeft=curPosition.left}else{curTop=parseFloat(curCSSTop)||0;curLeft=parseFloat(curCSSLeft)||0}if(jQuery.isFunction(options)){options=options.call(elem,i,curOffset)}if(options.top!=null){props.top=options.top-curOffset.top+curTop}if(options.left!=null){props.left=options.left-curOffset.left+curLeft}if("using"in options){options.using.call(elem,props)}else{curElem.css(props)}}};jQuery.fn.extend({offset:function(options){if(arguments.length){return options===undefined?this:this.each(function(i){jQuery.offset.setOffset(this,options,i)})}var docElem,win,box={top:0,left:0},elem=this[0],doc=elem&&elem.ownerDocument;if(!doc){return}docElem=doc.documentElement;if(!jQuery.contains(docElem,elem)){return box}if(typeof elem.getBoundingClientRect!==strundefined){box=elem.getBoundingClientRect()}win=getWindow(doc);return{top:box.top+(win.pageYOffset||docElem.scrollTop)-(docElem.clientTop||0),left:box.left+(win.pageXOffset||docElem.scrollLeft)-(docElem.clientLeft||0)}},position:function(){if(!this[0]){return}var offsetParent,offset,parentOffset={top:0,left:0},elem=this[0];if(jQuery.css(elem,"position")==="fixed"){offset=elem.getBoundingClientRect()}else{offsetParent=this.offsetParent();offset=this.offset();if(!jQuery.nodeName(offsetParent[0],"html")){parentOffset=offsetParent.offset()}parentOffset.top+=jQuery.css(offsetParent[0],"borderTopWidth",true);parentOffset.left+=jQuery.css(offsetParent[0],"borderLeftWidth",true)}return{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",true),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",true)}},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent||docElem;while(offsetParent&&(!jQuery.nodeName(offsetParent,"html")&&jQuery.css(offsetParent,"position")==="static")){offsetParent=offsetParent.offsetParent}return offsetParent||docElem})}});jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top=/Y/.test(prop);jQuery.fn[method]=function(val){return access(this,function(elem,method,val){var win=getWindow(elem);if(val===undefined){return win?prop in win?win[prop]:win.document.documentElement[method]:elem[method]}if(win){win.scrollTo(!top?val:jQuery(win).scrollLeft(),top?val:jQuery(win).scrollTop())}else{elem[method]=val}},method,val,arguments.length,null)}});jQuery.each(["top","left"],function(i,prop){jQuery.cssHooks[prop]=addGetHookIf(support.pixelPosition,function(elem,computed){if(computed){computed=curCSS(elem,prop);return rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed}})});jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||typeof margin!=="boolean"),extra=defaultExtra||(margin===true||value===true?"margin":"border");return access(this,function(elem,type,value){var doc;if(jQuery.isWindow(elem)){return elem.document.documentElement["client"+name]}if(elem.nodeType===9){doc=elem.documentElement;return Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name])}return value===undefined?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra)},type,chainable?margin:undefined,chainable,null)}})});jQuery.fn.size=function(){return this.length};jQuery.fn.andSelf=jQuery.fn.addBack;if(typeof define==="function"&&define.amd){define("jquery",[],function(){return jQuery})}var _jQuery=window.jQuery,_$=window.$;jQuery.noConflict=function(deep){if(window.$===jQuery){window.$=_$}if(deep&&window.jQuery===jQuery){window.jQuery=_jQuery}return jQuery};if(typeof noGlobal===strundefined){window.jQuery=window.$=jQuery}return jQuery});if(typeof jQuery==="undefined"){throw new Error("Bootstrap's JavaScript requires jQuery")}+function($){"use strict";var version=$.fn.jquery.split(" ")[0].split(".");if(version[0]<2&&version[1]<9||version[0]==1&&version[1]==9&&version[2]<1){throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}}(jQuery);+function($){"use strict";function transitionEnd(){var el=document.createElement("bootstrap");var transEndEventNames={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var name in transEndEventNames){if(el.style[name]!==undefined){return{end:transEndEventNames[name]}}}return false}$.fn.emulateTransitionEnd=function(duration){var called=false;var $el=this;$(this).one("bsTransitionEnd",function(){called=true});var callback=function(){if(!called)$($el).trigger($.support.transition.end)};setTimeout(callback,duration);return this};$(function(){$.support.transition=transitionEnd();if(!$.support.transition)return;$.event.special.bsTransitionEnd={bindType:$.support.transition.end,delegateType:$.support.transition.end,handle:function(e){if($(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}}})}(jQuery);+function($){"use strict";var dismiss='[data-dismiss="alert"]';var Alert=function(el){$(el).on("click",dismiss,this.close)};Alert.VERSION="3.3.5";Alert.TRANSITION_DURATION=150;Alert.prototype.close=function(e){var $this=$(this);var selector=$this.attr("data-target");if(!selector){selector=$this.attr("href");selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,"")}var $parent=$(selector);if(e)e.preventDefault();if(!$parent.length){$parent=$this.closest(".alert")}$parent.trigger(e=$.Event("close.bs.alert"));if(e.isDefaultPrevented())return;$parent.removeClass("in");function removeElement(){$parent.detach().trigger("closed.bs.alert").remove()}$.support.transition&&$parent.hasClass("fade")?$parent.one("bsTransitionEnd",removeElement).emulateTransitionEnd(Alert.TRANSITION_DURATION):removeElement()};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.alert");if(!data)$this.data("bs.alert",data=new Alert(this));if(typeof option=="string")data[option].call($this)})}var old=$.fn.alert;$.fn.alert=Plugin;$.fn.alert.Constructor=Alert;$.fn.alert.noConflict=function(){$.fn.alert=old;return this};$(document).on("click.bs.alert.data-api",dismiss,Alert.prototype.close)}(jQuery);+function($){"use strict";var Button=function(element,options){this.$element=$(element);this.options=$.extend({},Button.DEFAULTS,options);this.isLoading=false};Button.VERSION="3.3.5";Button.DEFAULTS={loadingText:"loading..."};Button.prototype.setState=function(state){var d="disabled";var $el=this.$element;var val=$el.is("input")?"val":"html";var data=$el.data();state+="Text";if(data.resetText==null)$el.data("resetText",$el[val]());setTimeout($.proxy(function(){$el[val](data[state]==null?this.options[state]:data[state]);if(state=="loadingText"){this.isLoading=true;$el.addClass(d).attr(d,d)}else if(this.isLoading){this.isLoading=false;$el.removeClass(d).removeAttr(d)}},this),0)};Button.prototype.toggle=function(){var changed=true;var $parent=this.$element.closest('[data-toggle="buttons"]');if($parent.length){var $input=this.$element.find("input");if($input.prop("type")=="radio"){if($input.prop("checked"))changed=false;$parent.find(".active").removeClass("active");this.$element.addClass("active")}else if($input.prop("type")=="checkbox"){if($input.prop("checked")!==this.$element.hasClass("active"))changed=false;this.$element.toggleClass("active")}$input.prop("checked",this.$element.hasClass("active"));if(changed)$input.trigger("change")}else{this.$element.attr("aria-pressed",!this.$element.hasClass("active"));this.$element.toggleClass("active")}};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.button");var options=typeof option=="object"&&option;if(!data)$this.data("bs.button",data=new Button(this,options));if(option=="toggle")data.toggle();else if(option)data.setState(option)})}var old=$.fn.button;$.fn.button=Plugin;$.fn.button.Constructor=Button;$.fn.button.noConflict=function(){$.fn.button=old;return this};$(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(e){var $btn=$(e.target);if(!$btn.hasClass("btn"))$btn=$btn.closest(".btn");Plugin.call($btn,"toggle");if(!($(e.target).is('input[type="radio"]')||$(e.target).is('input[type="checkbox"]')))e.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){$(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery);+function($){"use strict";var Carousel=function(element,options){this.$element=$(element);this.$indicators=this.$element.find(".carousel-indicators");this.options=options;this.paused=null;this.sliding=null;this.interval=null;this.$active=null;this.$items=null;this.options.keyboard&&this.$element.on("keydown.bs.carousel",$.proxy(this.keydown,this));this.options.pause=="hover"&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",$.proxy(this.pause,this)).on("mouseleave.bs.carousel",$.proxy(this.cycle,this))};Carousel.VERSION="3.3.5";Carousel.TRANSITION_DURATION=600;Carousel.DEFAULTS={interval:5e3,pause:"hover",wrap:true,keyboard:true};Carousel.prototype.keydown=function(e){if(/input|textarea/i.test(e.target.tagName))return;switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()};Carousel.prototype.cycle=function(e){e||(this.paused=false);this.interval&&clearInterval(this.interval);this.options.interval&&!this.paused&&(this.interval=setInterval($.proxy(this.next,this),this.options.interval));return this};Carousel.prototype.getItemIndex=function(item){this.$items=item.parent().children(".item");return this.$items.index(item||this.$active)};Carousel.prototype.getItemForDirection=function(direction,active){var activeIndex=this.getItemIndex(active);var willWrap=direction=="prev"&&activeIndex===0||direction=="next"&&activeIndex==this.$items.length-1;if(willWrap&&!this.options.wrap)return active;var delta=direction=="prev"?-1:1;var itemIndex=(activeIndex+delta)%this.$items.length;return this.$items.eq(itemIndex)};Carousel.prototype.to=function(pos){var that=this;var activeIndex=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(pos>this.$items.length-1||pos<0)return;if(this.sliding)return this.$element.one("slid.bs.carousel",function(){that.to(pos)});if(activeIndex==pos)return this.pause().cycle();return this.slide(pos>activeIndex?"next":"prev",this.$items.eq(pos))};Carousel.prototype.pause=function(e){e||(this.paused=true);if(this.$element.find(".next, .prev").length&&$.support.transition){this.$element.trigger($.support.transition.end);this.cycle(true)}this.interval=clearInterval(this.interval);return this};Carousel.prototype.next=function(){if(this.sliding)return;return this.slide("next")};Carousel.prototype.prev=function(){if(this.sliding)return;return this.slide("prev")};Carousel.prototype.slide=function(type,next){var $active=this.$element.find(".item.active");var $next=next||this.getItemForDirection(type,$active);var isCycling=this.interval;var direction=type=="next"?"left":"right";var that=this;if($next.hasClass("active"))return this.sliding=false;var relatedTarget=$next[0];var slideEvent=$.Event("slide.bs.carousel",{relatedTarget:relatedTarget,direction:direction});this.$element.trigger(slideEvent);if(slideEvent.isDefaultPrevented())return;this.sliding=true;isCycling&&this.pause();if(this.$indicators.length){this.$indicators.find(".active").removeClass("active");var $nextIndicator=$(this.$indicators.children()[this.getItemIndex($next)]);$nextIndicator&&$nextIndicator.addClass("active")}var slidEvent=$.Event("slid.bs.carousel",{relatedTarget:relatedTarget,direction:direction});if($.support.transition&&this.$element.hasClass("slide")){$next.addClass(type);$next[0].offsetWidth;$active.addClass(direction);$next.addClass(direction);$active.one("bsTransitionEnd",function(){$next.removeClass([type,direction].join(" ")).addClass("active");$active.removeClass(["active",direction].join(" "));that.sliding=false;setTimeout(function(){that.$element.trigger(slidEvent)},0)}).emulateTransitionEnd(Carousel.TRANSITION_DURATION)}else{$active.removeClass("active");$next.addClass("active");this.sliding=false;this.$element.trigger(slidEvent)}isCycling&&this.cycle();return this};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.carousel");var options=$.extend({},Carousel.DEFAULTS,$this.data(),typeof option=="object"&&option);var action=typeof option=="string"?option:options.slide;if(!data)$this.data("bs.carousel",data=new Carousel(this,options));if(typeof option=="number")data.to(option);else if(action)data[action]();else if(options.interval)data.pause().cycle()})}var old=$.fn.carousel;$.fn.carousel=Plugin;$.fn.carousel.Constructor=Carousel;$.fn.carousel.noConflict=function(){$.fn.carousel=old;return this};var clickHandler=function(e){var href;var $this=$(this);var $target=$($this.attr("data-target")||(href=$this.attr("href"))&&href.replace(/.*(?=#[^\s]+$)/,""));if(!$target.hasClass("carousel"))return;var options=$.extend({},$target.data(),$this.data());var slideIndex=$this.attr("data-slide-to");if(slideIndex)options.interval=false;Plugin.call($target,options);if(slideIndex){$target.data("bs.carousel").to(slideIndex)}e.preventDefault()};$(document).on("click.bs.carousel.data-api","[data-slide]",clickHandler).on("click.bs.carousel.data-api","[data-slide-to]",clickHandler);$(window).on("load",function(){$('[data-ride="carousel"]').each(function(){var $carousel=$(this);Plugin.call($carousel,$carousel.data())})})}(jQuery);+function($){"use strict";var Collapse=function(element,options){this.$element=$(element);this.options=$.extend({},Collapse.DEFAULTS,options);this.$trigger=$('[data-toggle="collapse"][href="#'+element.id+'"],'+'[data-toggle="collapse"][data-target="#'+element.id+'"]');this.transitioning=null;if(this.options.parent){this.$parent=this.getParent()}else{this.addAriaAndCollapsedClass(this.$element,this.$trigger)}if(this.options.toggle)this.toggle()};Collapse.VERSION="3.3.5";Collapse.TRANSITION_DURATION=350;Collapse.DEFAULTS={toggle:true};Collapse.prototype.dimension=function(){var hasWidth=this.$element.hasClass("width");return hasWidth?"width":"height"};Collapse.prototype.show=function(){if(this.transitioning||this.$element.hasClass("in"))return;var activesData;var actives=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(actives&&actives.length){activesData=actives.data("bs.collapse");if(activesData&&activesData.transitioning)return}var startEvent=$.Event("show.bs.collapse");this.$element.trigger(startEvent);if(startEvent.isDefaultPrevented())return;if(actives&&actives.length){Plugin.call(actives,"hide");activesData||actives.data("bs.collapse",null)}var dimension=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[dimension](0).attr("aria-expanded",true);this.$trigger.removeClass("collapsed").attr("aria-expanded",true);this.transitioning=1;var complete=function(){this.$element.removeClass("collapsing").addClass("collapse in")[dimension]("");this.transitioning=0;this.$element.trigger("shown.bs.collapse")};if(!$.support.transition)return complete.call(this);var scrollSize=$.camelCase(["scroll",dimension].join("-"));this.$element.one("bsTransitionEnd",$.proxy(complete,this)).emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])};Collapse.prototype.hide=function(){if(this.transitioning||!this.$element.hasClass("in"))return;var startEvent=$.Event("hide.bs.collapse");this.$element.trigger(startEvent);if(startEvent.isDefaultPrevented())return;var dimension=this.dimension();this.$element[dimension](this.$element[dimension]())[0].offsetHeight;this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",false);this.$trigger.addClass("collapsed").attr("aria-expanded",false);this.transitioning=1;var complete=function(){this.transitioning=0;this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!$.support.transition)return complete.call(this);this.$element[dimension](0).one("bsTransitionEnd",$.proxy(complete,this)).emulateTransitionEnd(Collapse.TRANSITION_DURATION)};Collapse.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};Collapse.prototype.getParent=function(){return $(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each($.proxy(function(i,element){ +var $element=$(element);this.addAriaAndCollapsedClass(getTargetFromTrigger($element),$element)},this)).end()};Collapse.prototype.addAriaAndCollapsedClass=function($element,$trigger){var isOpen=$element.hasClass("in");$element.attr("aria-expanded",isOpen);$trigger.toggleClass("collapsed",!isOpen).attr("aria-expanded",isOpen)};function getTargetFromTrigger($trigger){var href;var target=$trigger.attr("data-target")||(href=$trigger.attr("href"))&&href.replace(/.*(?=#[^\s]+$)/,"");return $(target)}function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.collapse");var options=$.extend({},Collapse.DEFAULTS,$this.data(),typeof option=="object"&&option);if(!data&&options.toggle&&/show|hide/.test(option))options.toggle=false;if(!data)$this.data("bs.collapse",data=new Collapse(this,options));if(typeof option=="string")data[option]()})}var old=$.fn.collapse;$.fn.collapse=Plugin;$.fn.collapse.Constructor=Collapse;$.fn.collapse.noConflict=function(){$.fn.collapse=old;return this};$(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(e){var $this=$(this);if(!$this.attr("data-target"))e.preventDefault();var $target=getTargetFromTrigger($this);var data=$target.data("bs.collapse");var option=data?"toggle":$this.data();Plugin.call($target,option)})}(jQuery);+function($){"use strict";var backdrop=".dropdown-backdrop";var toggle='[data-toggle="dropdown"]';var Dropdown=function(element){$(element).on("click.bs.dropdown",this.toggle)};Dropdown.VERSION="3.3.5";function getParent($this){var selector=$this.attr("data-target");if(!selector){selector=$this.attr("href");selector=selector&&/#[A-Za-z]/.test(selector)&&selector.replace(/.*(?=#[^\s]*$)/,"")}var $parent=selector&&$(selector);return $parent&&$parent.length?$parent:$this.parent()}function clearMenus(e){if(e&&e.which===3)return;$(backdrop).remove();$(toggle).each(function(){var $this=$(this);var $parent=getParent($this);var relatedTarget={relatedTarget:this};if(!$parent.hasClass("open"))return;if(e&&e.type=="click"&&/input|textarea/i.test(e.target.tagName)&&$.contains($parent[0],e.target))return;$parent.trigger(e=$.Event("hide.bs.dropdown",relatedTarget));if(e.isDefaultPrevented())return;$this.attr("aria-expanded","false");$parent.removeClass("open").trigger("hidden.bs.dropdown",relatedTarget)})}Dropdown.prototype.toggle=function(e){var $this=$(this);if($this.is(".disabled, :disabled"))return;var $parent=getParent($this);var isActive=$parent.hasClass("open");clearMenus();if(!isActive){if("ontouchstart"in document.documentElement&&!$parent.closest(".navbar-nav").length){$(document.createElement("div")).addClass("dropdown-backdrop").insertAfter($(this)).on("click",clearMenus)}var relatedTarget={relatedTarget:this};$parent.trigger(e=$.Event("show.bs.dropdown",relatedTarget));if(e.isDefaultPrevented())return;$this.trigger("focus").attr("aria-expanded","true");$parent.toggleClass("open").trigger("shown.bs.dropdown",relatedTarget)}return false};Dropdown.prototype.keydown=function(e){if(!/(38|40|27|32)/.test(e.which)||/input|textarea/i.test(e.target.tagName))return;var $this=$(this);e.preventDefault();e.stopPropagation();if($this.is(".disabled, :disabled"))return;var $parent=getParent($this);var isActive=$parent.hasClass("open");if(!isActive&&e.which!=27||isActive&&e.which==27){if(e.which==27)$parent.find(toggle).trigger("focus");return $this.trigger("click")}var desc=" li:not(.disabled):visible a";var $items=$parent.find(".dropdown-menu"+desc);if(!$items.length)return;var index=$items.index(e.target);if(e.which==38&&index>0)index--;if(e.which==40&&index<$items.length-1)index++;if(!~index)index=0;$items.eq(index).trigger("focus")};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.dropdown");if(!data)$this.data("bs.dropdown",data=new Dropdown(this));if(typeof option=="string")data[option].call($this)})}var old=$.fn.dropdown;$.fn.dropdown=Plugin;$.fn.dropdown.Constructor=Dropdown;$.fn.dropdown.noConflict=function(){$.fn.dropdown=old;return this};$(document).on("click.bs.dropdown.data-api",clearMenus).on("click.bs.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",toggle,Dropdown.prototype.toggle).on("keydown.bs.dropdown.data-api",toggle,Dropdown.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",Dropdown.prototype.keydown)}(jQuery);+function($){"use strict";var Modal=function(element,options){this.options=options;this.$body=$(document.body);this.$element=$(element);this.$dialog=this.$element.find(".modal-dialog");this.$backdrop=null;this.isShown=null;this.originalBodyPad=null;this.scrollbarWidth=0;this.ignoreBackdropClick=false;if(this.options.remote){this.$element.find(".modal-content").load(this.options.remote,$.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))}};Modal.VERSION="3.3.5";Modal.TRANSITION_DURATION=300;Modal.BACKDROP_TRANSITION_DURATION=150;Modal.DEFAULTS={backdrop:true,keyboard:true,show:true};Modal.prototype.toggle=function(_relatedTarget){return this.isShown?this.hide():this.show(_relatedTarget)};Modal.prototype.show=function(_relatedTarget){var that=this;var e=$.Event("show.bs.modal",{relatedTarget:_relatedTarget});this.$element.trigger(e);if(this.isShown||e.isDefaultPrevented())return;this.isShown=true;this.checkScrollbar();this.setScrollbar();this.$body.addClass("modal-open");this.escape();this.resize();this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',$.proxy(this.hide,this));this.$dialog.on("mousedown.dismiss.bs.modal",function(){that.$element.one("mouseup.dismiss.bs.modal",function(e){if($(e.target).is(that.$element))that.ignoreBackdropClick=true})});this.backdrop(function(){var transition=$.support.transition&&that.$element.hasClass("fade");if(!that.$element.parent().length){that.$element.appendTo(that.$body)}that.$element.show().scrollTop(0);that.adjustDialog();if(transition){that.$element[0].offsetWidth}that.$element.addClass("in");that.enforceFocus();var e=$.Event("shown.bs.modal",{relatedTarget:_relatedTarget});transition?that.$dialog.one("bsTransitionEnd",function(){that.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(Modal.TRANSITION_DURATION):that.$element.trigger("focus").trigger(e)})};Modal.prototype.hide=function(e){if(e)e.preventDefault();e=$.Event("hide.bs.modal");this.$element.trigger(e);if(!this.isShown||e.isDefaultPrevented())return;this.isShown=false;this.escape();this.resize();$(document).off("focusin.bs.modal");this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal");this.$dialog.off("mousedown.dismiss.bs.modal");$.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",$.proxy(this.hideModal,this)).emulateTransitionEnd(Modal.TRANSITION_DURATION):this.hideModal()};Modal.prototype.enforceFocus=function(){$(document).off("focusin.bs.modal").on("focusin.bs.modal",$.proxy(function(e){if(this.$element[0]!==e.target&&!this.$element.has(e.target).length){this.$element.trigger("focus")}},this))};Modal.prototype.escape=function(){if(this.isShown&&this.options.keyboard){this.$element.on("keydown.dismiss.bs.modal",$.proxy(function(e){e.which==27&&this.hide()},this))}else if(!this.isShown){this.$element.off("keydown.dismiss.bs.modal")}};Modal.prototype.resize=function(){if(this.isShown){$(window).on("resize.bs.modal",$.proxy(this.handleUpdate,this))}else{$(window).off("resize.bs.modal")}};Modal.prototype.hideModal=function(){var that=this;this.$element.hide();this.backdrop(function(){that.$body.removeClass("modal-open");that.resetAdjustments();that.resetScrollbar();that.$element.trigger("hidden.bs.modal")})};Modal.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove();this.$backdrop=null};Modal.prototype.backdrop=function(callback){var that=this;var animate=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var doAnimate=$.support.transition&&animate;this.$backdrop=$(document.createElement("div")).addClass("modal-backdrop "+animate).appendTo(this.$body);this.$element.on("click.dismiss.bs.modal",$.proxy(function(e){if(this.ignoreBackdropClick){this.ignoreBackdropClick=false;return}if(e.target!==e.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus():this.hide()},this));if(doAnimate)this.$backdrop[0].offsetWidth;this.$backdrop.addClass("in");if(!callback)return;doAnimate?this.$backdrop.one("bsTransitionEnd",callback).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION):callback()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var callbackRemove=function(){that.removeBackdrop();callback&&callback()};$.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",callbackRemove).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION):callbackRemove()}else if(callback){callback()}};Modal.prototype.handleUpdate=function(){this.adjustDialog()};Modal.prototype.adjustDialog=function(){var modalIsOverflowing=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&modalIsOverflowing?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!modalIsOverflowing?this.scrollbarWidth:""})};Modal.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})};Modal.prototype.checkScrollbar=function(){var fullWindowWidth=window.innerWidth;if(!fullWindowWidth){var documentElementRect=document.documentElement.getBoundingClientRect();fullWindowWidth=documentElementRect.right-Math.abs(documentElementRect.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:false,container:false,viewport:{selector:"body",padding:0}};Tooltip.prototype.init=function(type,element,options){this.enabled=true;this.type=type;this.$element=$(element);this.options=this.getOptions(options);this.$viewport=this.options.viewport&&$($.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport);this.inState={click:false,hover:false,focus:false};if(this.$element[0]instanceof document.constructor&&!this.options.selector){throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!")}var triggers=this.options.trigger.split(" ");for(var i=triggers.length;i--;){var trigger=triggers[i];if(trigger=="click"){this.$element.on("click."+this.type,this.options.selector,$.proxy(this.toggle,this))}else if(trigger!="manual"){var eventIn=trigger=="hover"?"mouseenter":"focusin";var eventOut=trigger=="hover"?"mouseleave":"focusout";this.$element.on(eventIn+"."+this.type,this.options.selector,$.proxy(this.enter,this));this.$element.on(eventOut+"."+this.type,this.options.selector,$.proxy(this.leave,this))}}this.options.selector?this._options=$.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()};Tooltip.prototype.getDefaults=function(){return Tooltip.DEFAULTS};Tooltip.prototype.getOptions=function(options){options=$.extend({},this.getDefaults(),this.$element.data(),options);if(options.delay&&typeof options.delay=="number"){options.delay={show:options.delay,hide:options.delay}}return options};Tooltip.prototype.getDelegateOptions=function(){var options={};var defaults=this.getDefaults();this._options&&$.each(this._options,function(key,value){if(defaults[key]!=value)options[key]=value});return options};Tooltip.prototype.enter=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget).data("bs."+this.type);if(!self){self=new this.constructor(obj.currentTarget,this.getDelegateOptions());$(obj.currentTarget).data("bs."+this.type,self)}if(obj instanceof $.Event){self.inState[obj.type=="focusin"?"focus":"hover"]=true}if(self.tip().hasClass("in")||self.hoverState=="in"){self.hoverState="in";return}clearTimeout(self.timeout);self.hoverState="in";if(!self.options.delay||!self.options.delay.show)return self.show();self.timeout=setTimeout(function(){if(self.hoverState=="in")self.show()},self.options.delay.show)};Tooltip.prototype.isInStateTrue=function(){for(var key in this.inState){if(this.inState[key])return true}return false};Tooltip.prototype.leave=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget).data("bs."+this.type);if(!self){self=new this.constructor(obj.currentTarget,this.getDelegateOptions());$(obj.currentTarget).data("bs."+this.type,self)}if(obj instanceof $.Event){self.inState[obj.type=="focusout"?"focus":"hover"]=false}if(self.isInStateTrue())return;clearTimeout(self.timeout);self.hoverState="out";if(!self.options.delay||!self.options.delay.hide)return self.hide();self.timeout=setTimeout(function(){if(self.hoverState=="out")self.hide()},self.options.delay.hide)};Tooltip.prototype.show=function(){var e=$.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var inDom=$.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!inDom)return;var that=this;var $tip=this.tip();var tipId=this.getUID(this.type);this.setContent();$tip.attr("id",tipId);this.$element.attr("aria-describedby",tipId);if(this.options.animation)$tip.addClass("fade");var placement=typeof this.options.placement=="function"?this.options.placement.call(this,$tip[0],this.$element[0]):this.options.placement;var autoToken=/\s?auto?\s?/i;var autoPlace=autoToken.test(placement);if(autoPlace)placement=placement.replace(autoToken,"")||"top";$tip.detach().css({top:0,left:0,display:"block"}).addClass(placement).data("bs."+this.type,this);this.options.container?$tip.appendTo(this.options.container):$tip.insertAfter(this.$element);this.$element.trigger("inserted.bs."+this.type);var pos=this.getPosition();var actualWidth=$tip[0].offsetWidth;var actualHeight=$tip[0].offsetHeight;if(autoPlace){var orgPlacement=placement;var viewportDim=this.getPosition(this.$viewport);placement=placement=="bottom"&&pos.bottom+actualHeight>viewportDim.bottom?"top":placement=="top"&&pos.top-actualHeightviewportDim.width?"left":placement=="left"&&pos.left-actualWidthviewportDimensions.top+viewportDimensions.height){delta.top=viewportDimensions.top+viewportDimensions.height-bottomEdgeOffset}}else{var leftEdgeOffset=pos.left-viewportPadding;var rightEdgeOffset=pos.left+viewportPadding+actualWidth;if(leftEdgeOffsetviewportDimensions.right){delta.left=viewportDimensions.left+viewportDimensions.width-rightEdgeOffset}}return delta};Tooltip.prototype.getTitle=function(){var title;var $e=this.$element;var o=this.options;title=$e.attr("data-original-title")||(typeof o.title=="function"?o.title.call($e[0]):o.title);return title};Tooltip.prototype.getUID=function(prefix){do prefix+=~~(Math.random()*1e6);while(document.getElementById(prefix));return prefix};Tooltip.prototype.tip=function(){if(!this.$tip){this.$tip=$(this.options.template);if(this.$tip.length!=1){throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!")}}return this.$tip};Tooltip.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")};Tooltip.prototype.enable=function(){this.enabled=true};Tooltip.prototype.disable=function(){this.enabled=false};Tooltip.prototype.toggleEnabled=function(){this.enabled=!this.enabled};Tooltip.prototype.toggle=function(e){var self=this;if(e){self=$(e.currentTarget).data("bs."+this.type);if(!self){self=new this.constructor(e.currentTarget,this.getDelegateOptions());$(e.currentTarget).data("bs."+this.type,self)}}if(e){self.inState.click=!self.inState.click;if(self.isInStateTrue())self.enter(self);else self.leave(self)}else{self.tip().hasClass("in")?self.leave(self):self.enter(self)}};Tooltip.prototype.destroy=function(){var that=this;clearTimeout(this.timeout);this.hide(function(){that.$element.off("."+that.type).removeData("bs."+that.type);if(that.$tip){that.$tip.detach()}that.$tip=null;that.$arrow=null;that.$viewport=null})};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.tooltip");var options=typeof option=="object"&&option;if(!data&&/destroy|hide/.test(option))return;if(!data)$this.data("bs.tooltip",data=new Tooltip(this,options));if(typeof option=="string")data[option]()})}var old=$.fn.tooltip;$.fn.tooltip=Plugin;$.fn.tooltip.Constructor=Tooltip;$.fn.tooltip.noConflict=function(){$.fn.tooltip=old;return this}}(jQuery);+function($){"use strict";var Popover=function(element,options){this.init("popover",element,options)};if(!$.fn.tooltip)throw new Error("Popover requires tooltip.js");Popover.VERSION="3.3.5";Popover.DEFAULTS=$.extend({},$.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''});Popover.prototype=$.extend({},$.fn.tooltip.Constructor.prototype);Popover.prototype.constructor=Popover;Popover.prototype.getDefaults=function(){return Popover.DEFAULTS};Popover.prototype.setContent=function(){var $tip=this.tip();var title=this.getTitle();var content=this.getContent();$tip.find(".popover-title")[this.options.html?"html":"text"](title);$tip.find(".popover-content").children().detach().end()[this.options.html?typeof content=="string"?"html":"append":"text"](content);$tip.removeClass("fade top bottom left right in");if(!$tip.find(".popover-title").html())$tip.find(".popover-title").hide()};Popover.prototype.hasContent=function(){return this.getTitle()||this.getContent()};Popover.prototype.getContent=function(){var $e=this.$element;var o=this.options;return $e.attr("data-content")||(typeof o.content=="function"?o.content.call($e[0]):o.content)};Popover.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.popover");var options=typeof option=="object"&&option;if(!data&&/destroy|hide/.test(option))return;if(!data)$this.data("bs.popover",data=new Popover(this,options));if(typeof option=="string")data[option]()})}var old=$.fn.popover;$.fn.popover=Plugin;$.fn.popover.Constructor=Popover;$.fn.popover.noConflict=function(){$.fn.popover=old;return this}}(jQuery);+function($){"use strict";function ScrollSpy(element,options){this.$body=$(document.body);this.$scrollElement=$(element).is(document.body)?$(window):$(element);this.options=$.extend({},ScrollSpy.DEFAULTS,options);this.selector=(this.options.target||"")+" .nav li > a";this.offsets=[];this.targets=[];this.activeTarget=null;this.scrollHeight=0;this.$scrollElement.on("scroll.bs.scrollspy",$.proxy(this.process,this));this.refresh();this.process()}ScrollSpy.VERSION="3.3.5";ScrollSpy.DEFAULTS={offset:10};ScrollSpy.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)};ScrollSpy.prototype.refresh=function(){var that=this;var offsetMethod="offset";var offsetBase=0;this.offsets=[];this.targets=[];this.scrollHeight=this.getScrollHeight();if(!$.isWindow(this.$scrollElement[0])){offsetMethod="position";offsetBase=this.$scrollElement.scrollTop()}this.$body.find(this.selector).map(function(){var $el=$(this);var href=$el.data("target")||$el.attr("href");var $href=/^#./.test(href)&&$(href);return $href&&$href.length&&$href.is(":visible")&&[[$href[offsetMethod]().top+offsetBase,href]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){that.offsets.push(this[0]);that.targets.push(this[1])})};ScrollSpy.prototype.process=function(){var scrollTop=this.$scrollElement.scrollTop()+this.options.offset;var scrollHeight=this.getScrollHeight();var maxScroll=this.options.offset+scrollHeight-this.$scrollElement.height();var offsets=this.offsets;var targets=this.targets;var activeTarget=this.activeTarget;var i;if(this.scrollHeight!=scrollHeight){this.refresh()}if(scrollTop>=maxScroll){return activeTarget!=(i=targets[targets.length-1])&&this.activate(i)}if(activeTarget&&scrollTop=offsets[i]&&(offsets[i+1]===undefined||scrollTop .active");var transition=callback&&$.support.transition&&($active.length&&$active.hasClass("fade")||!!container.find("> .fade").length);function next(){$active.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",false);element.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",true);if(transition){element[0].offsetWidth;element.addClass("in")}else{element.removeClass("fade")}if(element.parent(".dropdown-menu").length){element.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",true)}callback&&callback()}$active.length&&transition?$active.one("bsTransitionEnd",next).emulateTransitionEnd(Tab.TRANSITION_DURATION):next();$active.removeClass("in")};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.tab");if(!data)$this.data("bs.tab",data=new Tab(this));if(typeof option=="string")data[option]()})}var old=$.fn.tab;$.fn.tab=Plugin;$.fn.tab.Constructor=Tab;$.fn.tab.noConflict=function(){$.fn.tab=old;return this};var clickHandler=function(e){e.preventDefault();Plugin.call($(this),"show")};$(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',clickHandler).on("click.bs.tab.data-api",'[data-toggle="pill"]',clickHandler)}(jQuery);+function($){"use strict";var Affix=function(element,options){this.options=$.extend({},Affix.DEFAULTS,options);this.$target=$(this.options.target).on("scroll.bs.affix.data-api",$.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",$.proxy(this.checkPositionWithEventLoop,this));this.$element=$(element);this.affixed=null;this.unpin=null;this.pinnedOffset=null;this.checkPosition()};Affix.VERSION="3.3.5";Affix.RESET="affix affix-top affix-bottom";Affix.DEFAULTS={offset:0,target:window};Affix.prototype.getState=function(scrollHeight,height,offsetTop,offsetBottom){var scrollTop=this.$target.scrollTop();var position=this.$element.offset();var targetHeight=this.$target.height();if(offsetTop!=null&&this.affixed=="top")return scrollTop=scrollHeight-offsetBottom)return"bottom";return false};Affix.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(Affix.RESET).addClass("affix");var scrollTop=this.$target.scrollTop();var position=this.$element.offset(); +return this.pinnedOffset=position.top-scrollTop};Affix.prototype.checkPositionWithEventLoop=function(){setTimeout($.proxy(this.checkPosition,this),1)};Affix.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var height=this.$element.height();var offset=this.options.offset;var offsetTop=offset.top;var offsetBottom=offset.bottom;var scrollHeight=Math.max($(document).height(),$(document.body).height());if(typeof offset!="object")offsetBottom=offsetTop=offset;if(typeof offsetTop=="function")offsetTop=offset.top(this.$element);if(typeof offsetBottom=="function")offsetBottom=offset.bottom(this.$element);var affix=this.getState(scrollHeight,height,offsetTop,offsetBottom);if(this.affixed!=affix){if(this.unpin!=null)this.$element.css("top","");var affixType="affix"+(affix?"-"+affix:"");var e=$.Event(affixType+".bs.affix");this.$element.trigger(e);if(e.isDefaultPrevented())return;this.affixed=affix;this.unpin=affix=="bottom"?this.getPinnedOffset():null;this.$element.removeClass(Affix.RESET).addClass(affixType).trigger(affixType.replace("affix","affixed")+".bs.affix")}if(affix=="bottom"){this.$element.offset({top:scrollHeight-height-offsetBottom})}};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data("bs.affix");var options=typeof option=="object"&&option;if(!data)$this.data("bs.affix",data=new Affix(this,options));if(typeof option=="string")data[option]()})}var old=$.fn.affix;$.fn.affix=Plugin;$.fn.affix.Constructor=Affix;$.fn.affix.noConflict=function(){$.fn.affix=old;return this};$(window).on("load",function(){$('[data-spy="affix"]').each(function(){var $spy=$(this);var data=$spy.data();data.offset=data.offset||{};if(data.offsetBottom!=null)data.offset.bottom=data.offsetBottom;if(data.offsetTop!=null)data.offset.top=data.offsetTop;Plugin.call($spy,data)})})}(jQuery); +//# sourceMappingURL=/assets/min/js/main.min.js.map \ No newline at end of file diff --git a/Application/Public/assets/min/js/main.min.js.map b/Application/Public/assets/min/js/main.min.js.map new file mode 100644 index 0000000..b17e79e --- /dev/null +++ b/Application/Public/assets/min/js/main.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"/srv/sites/4apps.lv/staticphp/Application/Public/assets/min/js/main.min.js","sources":["assets/vendor/jquery/jquery.js","assets/vendor/bootstrap/js/bootstrap.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","deletedIds","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","src","copyIsArray","copy","name","options","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","parseFloat","isEmptyObject","key","nodeType","e","ownLast","globalEval","data","trim","execScript","camelCase","string","nodeName","toLowerCase","value","isArraylike","text","makeArray","arr","results","Object","inArray","max","second","grep","invert","callbackInverse","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","els","seed","match","m","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","parentNode","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","div","createElement","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","is","rootjQuery","charAt","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","until","sibling","n","r","targets","closest","l","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","contentWindow","reverse","rnotwhite","optionsCache","createOptions","object","flag","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","stack","once","fire","stopOnFalse","disable","remove","lock","locked","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","body","setTimeout","triggerHandler","off","detach","removeEventListener","completed","detachEvent","event","readyState","frameElement","doScroll","doScrollCheck","strundefined","inlineBlockNeedsLayout","container","style","cssText","zoom","offsetWidth","deleteExpando","acceptData","noData","rbrace","rmultiDash","dataAttr","parseJSON","isEmptyDataObject","internalData","pvt","thisCache","internalKey","isNode","toJSON","internalRemoveData","cleanData","applet ","embed ","object ","hasData","removeData","_data","_removeData","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","cssExpand","isHidden","el","css","access","chainable","emptyGet","raw","bulk","rcheckableType","fragment","createDocumentFragment","leadingWhitespace","tbody","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","types","events","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","prop","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","props","srcElement","metaKey","original","which","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","createSafeFragment","nodeNames","safeFrag","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","getAll","found","fixDefaultChecked","defaultChecked","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultSelected","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","actualDisplay","display","getDefaultComputedStyle","defaultDisplay","write","close","shrinkWrapBlocksVal","shrinkWrapBlocks","width","rmargin","rnumnonpx","getStyles","curCSS","rposition","getComputedStyle","opener","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","addGetHookIf","conditionFn","hookFn","condition","pixelPositionVal","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","opacity","cssFloat","backgroundClip","clearCloneStyle","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","computeStyleTests","boxSizingReliable","pixelPosition","reliableMarginRight","marginRight","offsetHeight","swap","ralpha","ropacity","rdisplayswap","rnumsplit","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","showHide","show","hidden","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","cssHooks","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","unit","propHooks","run","percent","eased","duration","step","tween","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","defaultPrefilter","tweeners","*","createTween","scale","maxIterations","createFxNow","genFx","includeWidth","height","animation","collection","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","Animation","properties","stopped","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","ActiveXObject","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","status","abort","statusText","finalText","success","method","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","createStandardXHR","createActiveXHR","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","XMLHttpRequest","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","transitionEnd","transEndEventNames","WebkitTransition","MozTransition","OTransition","transition","emulateTransitionEnd","called","$el","bsTransitionEnd","dismiss","Alert","VERSION","TRANSITION_DURATION","$this","$parent","removeElement","Plugin","alert","Constructor","Button","element","$element","DEFAULTS","isLoading","loadingText","setState","d","resetText","changed","$input","$btn","Carousel","$indicators","paused","sliding","$active","$items","keyboard","keydown","pause","cycle","tagName","getItemIndex","item","getItemForDirection","direction","activeIndex","willWrap","delta","itemIndex","that","slide","$next","isCycling","slideEvent","$nextIndicator","slidEvent","action","carousel","clickHandler","$target","slideIndex","$carousel","Collapse","$trigger","transitioning","getParent","addAriaAndCollapsedClass","dimension","hasWidth","activesData","actives","startEvent","scrollSize","getTargetFromTrigger","isOpen","collapse","backdrop","Dropdown","clearMenus","isActive","desc","dropdown","Modal","$body","$dialog","$backdrop","isShown","originalBodyPad","scrollbarWidth","ignoreBackdropClick","remote","BACKDROP_TRANSITION_DURATION","_relatedTarget","checkScrollbar","setScrollbar","escape","resize","adjustDialog","enforceFocus","hideModal","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","modalIsOverflowing","clientHeight","paddingLeft","bodyIsOverflowing","paddingRight","fullWindowWidth","innerWidth","documentElementRect","right","abs","clientWidth","measureScrollbar","bodyPad","scrollDiv","modal","showEvent","Tooltip","hoverState","inState","placement","template","title","viewport","getOptions","$viewport","triggers","eventIn","eventOut","enter","leave","_options","fixTitle","getDefaults","getDelegateOptions","defaults","tip","isInStateTrue","inDom","$tip","tipId","getUID","setContent","autoToken","autoPlace","getPosition","actualWidth","actualHeight","orgPlacement","viewportDim","bottom","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","marginTop","marginLeft","isNaN","round","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","arrow","getTitle","$e","isBody","elRect","elOffset","scroll","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","o","$arrow","enable","toggleEnabled","destroy","tooltip","Popover","getContent","popover","ScrollSpy","$scrollElement","offsets","activeTarget","process","refresh","getScrollHeight","offsetMethod","offsetBase","$href","maxScroll","activate","clear","scrollspy","$spy","Tab","$ul","$previous","hideEvent","tab","Affix","checkPosition","checkPositionWithEventLoop","affixed","unpin","pinnedOffset","RESET","getState","offsetTop","offsetBottom","targetHeight","initializing","colliderTop","colliderHeight","getPinnedOffset","affix","affixType"],"mappings":"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","sourceRoot":"/"} \ No newline at end of file diff --git a/Application/Public/index.php b/Application/Public/index.php new file mode 100644 index 0000000..0c980cd --- /dev/null +++ b/Application/Public/index.php @@ -0,0 +1,12 @@ + sql). +* Make cache class for memcached and redis. +* Fix issue with $controller_url not being set when default route from Routes.php config file is loaded. +* Look for a way to extend a view from same directory as the view extending it. E.g. {% extends "layout.html" %} instead of {% extends "Defaults/Views/layout.html" %} + + +## History + +####v0.9 +* √ Added various small helper functions, take a look in System/Modules/Core/Helpers/Other.php +* √ Rewritten framework for more modular structure + * Links like - /module/my-controller/my-method are now turned into Application/Modules/Module/MyController.php::myMethod($params) +* √ PSR-0 or PSR-4 autoloading schema + * All folder names and file names are now named using StudlyCaps + * We are not using in front of autoloading classes to avoid long includes (e.g. "use" parameters), which could be useful if more than one application is run with same instance, but for now we are skipping this. +* √ Added core controller + * If used, controller now have access to self::$controller_url and self::$method_url, very useful for migrating controllers to other urls and for controller copying. + * self::render('path_to_view.html') will automatically look into module's Views directory + * self::write($params) will echo json encoded string if $params is an array +* √ Json reponse has been used very often so far, maybe we should make some kind of output filtering method that outputs content based on output type? + * If an array is returned from a controller method, its turned into a json encoded string and is sent back to the browser +* √ Put helpers under namespaces? + * No, functions should be in global scope +* √ Decide to go with Reflection Api or not. + * Yes for Reflection Api +* √ Css and js minifying - git hooks, also css and js versioning. + * Added minify.py under Scripts, this also makes javascript source maps + * Added all the stuff related to this in default views + * Added git pre-commit hook that can check whether css, js file was modified and based on that execute minify.py + * Added git post-receive hook that can check whether css or js file was modified and base on that increase css or js version by calling a url with wget +* √ Script to clear Twig cache. Also a git hook? + * Added a git post-receive script that can check whether any html file was modified, and if was, can clear twig cache + + +####v0.8 +* √ Should database run all queries in beginTransaction .. commit .. rollback mode? + * Not for now, by default we are running connections in persistent mode, which can cause issues with transactions. +* √ Update one of the project currently using StaticPHP to get the idea of whether we are not missing any required variable to be available globally in view files. +* √ Choose documentation parser. + * apigen for now. +* √ Check whether form validation helper still works and how it applies to Twig. + * Works now and can be registered with twig by running \models\fv::twig_register(); +* √ Pages helper should register it self with Twig once loadded and if Twig is available. + * Nop, pagination html can be passed in the view in variable. +* √ Change all include to require, so that we don't expose StaticPHP to any security issues by doing something that can't be done. +* √ Update StaticPHP start page. * √ Add filesystem helpers to core \load class. * √ Logger interface through core\load class. * √ Go through core router class and make sure there are no redundant methods. * √ Rename all class methods in camelCase format to comply with php-fip standards. Also possibly filenames. * √ Check whether url prefixes are working. * √ Check before_controller hook. - -####v1.1 -* Unit testing. -* Css and js minifying - git hooks, also css and js versioning. -* Script to clear Twig cache. Also a git hook? -* Json reponse has been used very often so far, maybe we should make some kind of output filtering method that outputs content based on output type? -* Rewrite all sessions classes into one by adding an option to choose from session backend to use, possibly allowing to use multiple backends (e.g. memcached -> sql). -* Make cache class for memcached and redis. diff --git a/Scripts/git_post_receive.sh b/Scripts/git_post_receive.sh new file mode 100755 index 0000000..d598faa --- /dev/null +++ b/Scripts/git_post_receive.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +read oldrev newrev refname + +# Find base paths +BASE_PATH=$(dirname $(readlink -f "$0"))/.. +BASE_PATH="`cd $BASE_PATH;pwd`" +APP_PATH="$BASE_PATH/Application" +PUBLIC_PATH="$APP_PATH/Public" + +# Git stuff +COMMIT="$oldrev..$newrev" +GIT_DIR='.git' + + + +# Reset git +cd $BASE_PATH +git reset --hard + + + +# Update css version +# if [ $(git diff-tree -r --name-only --no-commit-id $COMMIT | grep \\.css | wc -l) -gt 0 ]; then +# echo "*Css file(s) modified, updating css version.. " +# +# curl -s http://127.0.0.1/settings/increase-css-version +# +# echo " Done" +# echo +# fi + + + +# Update js version +# if [ $(git diff-tree -r --name-only --no-commit-id $COMMIT | grep \\.js | wc -l) -gt 0 ]; then +# echo "*Js file(s) modified, updating js version.. " +# +# curl -s http://127.0.0.1/settings/increase-js-version +# +# echo " Done" +# echo +# fi + + + +# Clear twig cache +# if [ $(git diff-tree -r --name-only --no-commit-id $COMMIT | grep \\.html | wc -l) -gt 0 ]; then +# echo "*Html file(s) modified, clearing twig cache.. " +# +# rm -r $APP_PATH/Cache/* +# fi + + + +# Run composer update +# if [ $(git diff-tree -r --name-only --no-commit-id $COMMIT | grep composer.json | wc -l) -gt 0 ] || [ $(git diff-tree -r --name-only --no-commit-id $COMMIT | grep composer.lock | wc -l) -gt 0 ]; then +# echo "*Composer component(-s) modified, running \"composer update\".. " +# composer update +# fi diff --git a/Scripts/git_pre_commit.sh b/Scripts/git_pre_commit.sh new file mode 100755 index 0000000..bd92785 --- /dev/null +++ b/Scripts/git_pre_commit.sh @@ -0,0 +1,130 @@ +#!/bin/sh + +PLATFORM=`uname` + +# Find base path +BASE_PATH=$(dirname $(readlink -f "$0"))/.. +BASE_PATH="`cd $BASE_PATH;pwd`" + +# Git stuff +COMMIT="HEAD" +LOCAL_BRANCH="`git name-rev --name-only HEAD`" +TRACKING_REMOTE="`git config branch.$LOCAL_BRANCH.remote`" +TRACKING_BRANCH="$TRACKING_REMOTE/$LOCAL_BRANCH" + + + +# Test non-ascii filenames +echo "*Testing non-ascii filenames.. " +if [ $(git diff --cached --name-only --diff-filter=A -z $COMMIT | LC_ALL=C tr -d '[ -~]\0' | wc -c) -gt 0 ]; then + echo "Error: Attempt to add a non-ascii file name." + echo + echo "This can cause problems if you want to work" + echo "with people on other platforms." + echo + echo "To be portable it is advisable to rename the file ..." + echo + exit 1 +fi +echo " Done" +echo + + + +# Test for whitespace errors +echo "*Testing for whitespace errors.. " +git diff-index --cached --check $COMMIT -- +if [ "$?" != "0" ]; then + echo "!!! ERROR !!!" + exit 1 +fi +echo " Done" +echo + + + +# Test for most common debug symbols +#echo "*Testing for debug symbols.. " +#if [ "$(git diff --cached $COMMIT | grep -P 'print_r|console\\.log')" != "" ]; then +# echo "!!! ERROR !!!" +# echo "$(git diff --cached $COMMIT | grep -P 'print_r|console\\.log')" +# exit 1 +#fi +#echo " Done" +#echo + + + +# Trying to compile all php files +if [ $(git diff-index --cached --name-only --diff-filter=ACMR $COMMIT | grep \\.php | wc -l) -gt 0 ]; then + echo "*PHP file(-s) changed, running lint.." + + for file in $(git diff-index --cached --name-only --diff-filter=ACMR $COMMIT | grep \\.php); do + php -l $file > /dev/null + + if [ "$?" != "0" ]; then + echo "!!! ERROR: $COMMIT $file" + exit 1 + fi + done + + echo " Done" + echo +fi + + + +# Compile css, js +if [ $(git diff-index --cached --name-only $COMMIT | grep \\.css | wc -l) -gt 0 ] || [ $(git diff-index --cached --name-only $COMMIT | grep \\.js | wc -l) -gt 0 ]; then + echo "*CSS or JS file(s) modified, compressing.. " + $BASE_PATH/Scripts/minify.py + + if [ "$?" != "0" ]; then + echo + echo "Something went wrong while trying to minify css or javascript.." + echo + exit 1 + fi + + echo " Done" + echo +fi + + + +# Dump sql schema +#echo "*Dumping database schema .. " +#if [ "$PLATFORM" = "Linux" ]; then +# sudo -u postgres pg_dump --schema-only --no-owner pm > "$BASE_PATH/Application/Files/db_schema.sql" +#elif [ "$PLATFORM" = "FreeBSD" ]; then +# sudo -u pgsql pg_dump --schema-only --no-owner --no-privileges pm > "$BASE_PATH/Application/Files/db_schema.sql" +#fi + +#git add "$BASE_PATH/Application/Files/db_schema.sql" +#echo " Done" +#echo + + + +# Check git remote changes +if [ "$TRACKING_REMOTE" != "" ]; then + echo "*Checking git remote changes.. " + + git fetch > /dev/null + git merge --no-commit --no-ff --quiet $TRACKING_BRANCH > /dev/null 2>&1 + + if [ "$?" != "0" ]; then + echo + echo "Remote repository has some new updates that conflicts with your changes. Stash your files first, then do 'git merge $TRACKING_BRANCH' and then apply stash by 'git stash pop'" + echo + exit 1 + fi + + echo " Done" + echo + + echo "*Merging latest remote changes.. " + git merge $TRACKING_BRANCH --no-edit --quiet + echo " Done" + echo +fi diff --git a/Scripts/minify.py b/Scripts/minify.py new file mode 100755 index 0000000..f96d206 --- /dev/null +++ b/Scripts/minify.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 + +""" +Css, Js file minification script. Also creates source maps for javascript files. + +Requirements: + + CSS: + pip install cssmin + + JS: + Look here for installation instructions: https://github.com/mishoo/UglifyJS2 + +""" + +import os +import sys +import shutil +import subprocess + +BASE_PATH = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) +PUBLIC_PATH = BASE_PATH+'/Application/Public' + + +MIN_CLEAN_BEFORE = [ + "Application/Public/assets/min/" +] + + +MIN_COPY_FILES = { + "Application/Public/assets/min/": [ + ] +} + +MIN_CSS = { + "Application/Public/assets/min/css/style.min.css": [ + "Application/Public/assets/base/css/style.css" + ] +} + +MIN_JS = { + "Application/Public/assets/min/js/main.min.js": [ + "Application/Public/assets/vendor/jquery/jquery.js", + "Application/Public/assets/vendor/bootstrap/js/bootstrap.js" + ] +} + +# Open /dev/null +devnull = open(os.devnull, 'w') + + +# Define some functions +def fullPath(path): + if path.startswith('/'): + return path + else: + return BASE_PATH+'/'+path + + +def call(command, stdout=devnull, stdin=None, shell=False): + return_code = 0 + + try: + return_code = subprocess.call(command, stdin=stdin, stdout=stdout, stderr=devnull, shell=shell) + except Exception as e: + pass + + if return_code != 0: + print("Error executing command: \"%s\"" % " ".join(command)) + sys.exit(-1) + + +# CHECK FOR FILE EXISTANCE +errors = [] +for to_file,paths in MIN_JS.items(): + #os.path.exists(to_path) == False: + for filePath in paths: + if not os.path.exists(fullPath(filePath)): + errors.append(filePath) + +for to_file,paths in MIN_CSS.items(): + for filePath in paths: + if not os.path.exists(fullPath(filePath)): + errors.append(filePath) + +if len(errors) > 0: + print("Missing files:") + print(errors) + sys.exit(-1) + + +# CLEAN UP +for path in MIN_CLEAN_BEFORE: + path = fullPath(path) + if os.path.exists(path): + subprocess.call(['rm', '-rf', path]) + + +# COPY FILES +for to_path,paths in MIN_COPY_FILES.items(): + to_path = fullPath(to_path) + if os.path.exists(to_path) == False: + os.makedirs(to_path) + + for path in paths: + path = fullPath(path) + call(['cp', '-rf', path, to_path]) + + # Add to git + call(['git', 'add', to_path]) + + +# MINIFY CSS +for to_file,paths in MIN_CSS.items(): + if len(paths) == 0: + break; + + to_path = fullPath(os.path.dirname(to_file)) + if os.path.exists(to_path) == False: + os.makedirs(to_path) + + # Make all full paths + paths = [fullPath(x) for x in paths] + + # Clone paths and append cat command + cmd = paths[:] + cmd.insert(0, 'cat') + + # Cat all files into single tmp file + f = open(to_file+'.tmp', 'w') + call(cmd, stdout=f) + f.close(); + + # Call cssmin and redirect output to min-file + f = open(to_file, 'w') + call(['cssmin'], stdin=open(to_file+'.tmp', 'r'), stdout=f) + f.close(); + + # Remove tmp file + os.remove(to_file+'.tmp') + + # Add to git + call(['git', 'add', to_file]) + + +# MINIFY JS +for to_file,paths in MIN_JS.items(): + if len(paths) == 0: + break; + + to_file = fullPath(to_file) + map_file = to_file + '.map' + map_url = map_file.replace(PUBLIC_PATH, '') + to_path = os.path.dirname(to_file) + + # Make destination dir + if os.path.exists(to_path) == False: + os.makedirs(to_path) + + # Make all full paths + paths = [fullPath(x) for x in paths] + + # Clone paths and append cat command + cmd = [ + 'uglifyjs', + '--source-map', map_file, + '--source-map-url', map_url, + '--source-map-root', '/', + '--prefix', str(len(PUBLIC_PATH.split('/'))-1), + '--output', to_file, + '--lint' + ] + cmd += paths + call(cmd) + + # Add to git + call(['git', 'add', to_file, map_file]) + + +# Close /dev/null +devnull.close() diff --git a/system/config/db.php b/System/Config/Db.php similarity index 100% rename from system/config/db.php rename to System/Config/Db.php diff --git a/system/files/table_sessions_mysql.sql b/System/Files/table_sessions_mysql.sql similarity index 100% rename from system/files/table_sessions_mysql.sql rename to System/Files/table_sessions_mysql.sql diff --git a/system/files/table_sessions_postgres.sql b/System/Files/table_sessions_postgres.sql similarity index 100% rename from system/files/table_sessions_postgres.sql rename to System/Files/table_sessions_postgres.sql diff --git a/System/Modules/Core/Controllers/Controller.php b/System/Modules/Core/Controllers/Controller.php new file mode 100644 index 0000000..6dbacc6 --- /dev/null +++ b/System/Modules/Core/Controllers/Controller.php @@ -0,0 +1,66 @@ + $item) { + $views[$key] = Router::$module.DS.'Views'.DS.$item; + } + Load::view($views); + } + + + /** + * Write $contents to the output. Arrays are jsonified. + */ + public static function write($contents) + { + if (is_array($contents)) { + echo json_encode($contents); + } else { + echo $contents; + } + } +} diff --git a/system/core/bootstrap.php b/System/Modules/Core/Helpers/Bootstrap.php similarity index 66% rename from system/core/bootstrap.php rename to System/Modules/Core/Helpers/Bootstrap.php index 13bebb6..c712104 100644 --- a/system/core/bootstrap.php +++ b/System/Modules/Core/Helpers/Bootstrap.php @@ -1,7 +1,9 @@ config/config.php file. + * If debug mode is on, sends formatted error to browser, otherwise sends error email, if debug email is provided in Config/Config.php file. * * @access public * @param Exception|ErrorException|mixed $exception @@ -81,12 +93,12 @@ function sp_error_shutdown_handler() */ function sp_exception_handler($exception) { - if ($exception instanceof \core\RouterException) { - if (!empty(load::$config['debug'])) { - router::error('500', 'Internal Server Error', $exception->getMessage()); + if ($exception instanceof RouterException) { + if (!empty(Load::$config['debug'])) { + Router::error('500', 'Internal Server Error', $exception->getMessage()); } else { - router::error('404', 'Not Found'); + Router::error('404', 'Not Found'); } } @@ -94,7 +106,7 @@ function sp_exception_handler($exception) http_response_code(500); } - if (!empty(load::$config['debug'])) { + if (!empty(Load::$config['debug'])) { echo sp_format_exception($exception); } else { sp_send_error_email($exception); @@ -111,8 +123,8 @@ function sp_exception_handler($exception) */ function sp_send_error_email($e) { - if (!empty(load::$config['debug_email'])) { - mail(load::$config['debug_email'], 'PHP ERROR: "'.$_SERVER['HTTP_HOST'].'"', sp_format_exception($e, true), "Content-Type: text/html; charset=utf-8"); + if (!empty(Load::$config['debug_email'])) { + mail(Load::$config['debug_email'], 'PHP ERROR: "'.$_SERVER['HTTP_HOST'].'"', sp_format_exception($e, true), "Content-Type: text/html; charset=utf-8"); } } @@ -147,70 +159,73 @@ function sp_format_exception($e, $full = false) } // Register error handlers -set_error_handler('sp_error_handler', (!empty(load::$config['debug']) ? E_ALL : E_ALL & ~E_DEPRECATED & ~E_STRICT)); +set_error_handler('sp_error_handler', (!empty(Load::$config['debug']) ? E_ALL : E_ALL & ~E_DEPRECATED & ~E_STRICT)); set_exception_handler('sp_exception_handler'); register_shutdown_function('sp_error_shutdown_handler'); // Load twig -if (is_file(BASE_PATH.'vendor/twig/twig/lib/Twig/Autoloader.php') !== true) { +if (is_file(BASE_PATH.'Vendor/twig/twig/lib/Twig/Autoloader.php') !== true) { throw new Exception('Twig Not Found! If you installed StaticPHP manually, not using composer, please see README.md to where to place the twig library.'); } -require BASE_PATH.'vendor/twig/twig/lib/Twig/Autoloader.php'; +require BASE_PATH.'Vendor/twig/twig/lib/Twig/Autoloader.php'; Twig_Autoloader::register(); -load::$config['view_loader'] = new Twig_Loader_Filesystem(APP_PATH.'views'); -load::$config['view_engine'] = new Twig_Environment(load::$config['view_loader'], array( - 'cache' => APP_PATH.'cache', - 'debug' => load::$config['debug'], +Load::$config['view_loader'] = new Twig_Loader_Filesystem([APP_MODULES_PATH, SYS_MODULES_PATH.'Core/Views']); +Load::$config['view_engine'] = new Twig_Environment(Load::$config['view_loader'], array( + 'cache' => APP_PATH.'Cache/Views/', + 'debug' => Load::$config['debug'], )); // Register default filters and functions // Site url filter $filter = new Twig_SimpleFilter('siteUrl', function ($url = null) { - return router::siteUrl($url); + return Router::siteUrl($url); }); -load::$config['view_engine']->addFilter($filter); +Load::$config['view_engine']->addFilter($filter); // Site url function $function = new Twig_SimpleFunction('siteUrl', function ($url = null) { - return router::siteUrl($url); + return Router::siteUrl($url); }); -load::$config['view_engine']->addFunction($function); +Load::$config['view_engine']->addFunction($function); // Start timer function $function = new Twig_SimpleFunction('startTimer', function () { - load::startTimer(); + Load::startTimer(); }); -load::$config['view_engine']->addFunction($function); +Load::$config['view_engine']->addFunction($function); // Stop timer function $function = new Twig_SimpleFunction('stopTimer', function ($name) { - load::stopTimer($name); + Load::stopTimer($name); }); -load::$config['view_engine']->addFunction($function); +Load::$config['view_engine']->addFunction($function); // Mark time function $function = new Twig_SimpleFunction('markTime', function ($name) { - load::markTime($name); + Load::markTime($name); }); -load::$config['view_engine']->addFunction($function); +Load::$config['view_engine']->addFunction($function); // Debug output function $function = new Twig_SimpleFunction('debugOutput', function () { - return load::debugOutput(); + return Load::debugOutput(); }); -load::$config['view_engine']->addFunction($function); - -// Autoload models -if (!empty(load::$config['autoload_models'])) { - load::model(load::$config['autoload_models']); -} +Load::$config['view_engine']->addFunction($function); // Autoload helpers -if (!empty(load::$config['autoload_helpers'])) { - load::helper(load::$config['autoload_helpers']); +if (!empty(Load::$config['autoload_helpers'])) { + foreach (Load::$config['autoload_helpers'] as $item) { + $tmp = explode('/', $item); + $count = count($tmp); + if ($count == 3) { + Load::helper($tmp[2], $tmp[1], $tmp[0]); + } elseif ($count == 2) { + Load::helper($tmp[1], $tmp[0]); + } + } } // Init router -router::init(); +Router::init(); diff --git a/system/helpers/html.php b/System/Modules/Core/Helpers/Html.php similarity index 93% rename from system/helpers/html.php rename to System/Modules/Core/Helpers/Html.php index b57c4a1..09b4a04 100644 --- a/system/helpers/html.php +++ b/System/Modules/Core/Helpers/Html.php @@ -1,7 +1,5 @@ ' : ''); @@ -118,13 +116,13 @@ function dropdown($items, $selected = null, $addons = null, $add_empty = false, } // Set value for inputs -function set_input_value($value) +function html_set_input_value($value) { return str_replace('"', '"', $value); } // Set selected for html select element -function set_selected(&$current, $needle) +function html_set_selected(&$current, $needle) { // Check in the array if (is_array($current)) { @@ -136,7 +134,7 @@ function set_selected(&$current, $needle) } // Set checked for html checbox elements -function set_checked(&$current, $needle) +function html_set_checked(&$current, $needle) { // Check in the array if (is_array($current)) { diff --git a/System/Modules/Core/Helpers/Other.php b/System/Modules/Core/Helpers/Other.php new file mode 100644 index 0000000..fedab97 --- /dev/null +++ b/System/Modules/Core/Helpers/Other.php @@ -0,0 +1,155 @@ + 'pgsql:host=localhost;dbname=', * 'username' => 'username', * 'password' => 'password', @@ -53,11 +55,11 @@ public static function init($config = null, $name = 'default') { // Check if there is such configuration if (empty($config)) { - if (empty(\core\load::$config['db']['pdo'][$name])) { + if (empty(Load::$config['db']['pdo'][$name])) { return false; } - $config = \core\load::$config['db']['pdo'][$name]; + $config = Load::$config['db']['pdo'][$name]; } // Don't make a new connection if there is one connected with the name @@ -89,8 +91,8 @@ public static function init($config = null, $name = 'default') * * Should be used for insert and update queries, but also can be used as iterator for select queries. * - * @example models\db::query('INSERT INTO posts (title) VALUES (?)', ['New post title'], 'pgsql1'); - * @example $query = models\db::query('SELECT * FROM posts', null, 'pgsql1');
+ * @example models\Db::query('INSERT INTO posts (title) VALUES (?)', ['New post title'], 'pgsql1'); + * @example $query = models\Db::query('SELECT * FROM posts', null, 'pgsql1');
* foreach ($query as $item)
* {
* // Do something with the $item
@@ -116,14 +118,14 @@ public static function query($query, $data = null, $name = 'default') // Do request if (!empty(self::$db_links[$name]['config']['debug'])) { - \core\load::startTimer(); + Load::startTimer(); } self::$last_statement = $db_link->prepare($query); self::$last_statement->execute((array) $data); if (!empty(self::$db_links[$name]['config']['debug'])) { - \core\load::stopTimer($query.' ['.implode(', ', (array) $data).']'); + Load::stopTimer($query.' ['.implode(', ', (array) $data).']'); } // Return last statement @@ -133,7 +135,7 @@ public static function query($query, $data = null, $name = 'default') /** * Fetch one row of query. Useful if you need only one record returned. * - * @example models\db::fetch('SELECT * FROM posts WHERE id = ?', [$post_id], 'pgsql1'); + * @example models\Db::fetch('SELECT * FROM posts WHERE id = ?', [$post_id], 'pgsql1'); * @access public * @static * @param string $query @@ -164,7 +166,7 @@ public static function fetchAll($query, $data = [], $name = 'default') /** * Make insert sql string and exeute it from associative array of data.. * - * @example models\db::insert('posts', ['title' => 'Different title', '!active' => 1]); + * @example models\Db::insert('posts', ['title' => 'Different title', '!active' => 1]); * will make and execute query: INSERT INTO posts (title, active) VALUES ('Different title', 1). * @access public * @static @@ -197,7 +199,7 @@ public static function insert($table, $data, $name = 'default') /** * Make update sql string and exeute it from associative array of data. * - * @example models\db::update('posts', ['title' => 'Different title', '!active' => 1], ['id' => $post_id]); + * @example models\Db::update('posts', ['title' => 'Different title', '!active' => 1], ['id' => $post_id]); * will make and execute query: UPDATE posts SET title = 'Different title', active = 1 WHERE id = 2. * @access public * @static @@ -251,11 +253,11 @@ public static function update($table, $data, $where, $name = 'default') * * Turns off autocommit mode. While autocommit mode is turned off, * changes made to the database via the PDO object instance are not - * committed until you end the transaction by calling db::commit(). - * Calling db::rollBack() will roll back all changes to the database + * committed until you end the transaction by calling Db::commit(). + * Calling Db::rollBack() will roll back all changes to the database * and return the connection to autocommit mode. * - * @see db::commit() + * @see Db::commit() * @access public * @static * @param string $name (default: 'default') diff --git a/system/models/fv.php b/System/Modules/Core/Models/Fv.php similarity index 90% rename from system/models/fv.php rename to System/Modules/Core/Models/Fv.php index b8da493..09d2fd7 100644 --- a/system/models/fv.php +++ b/System/Modules/Core/Models/Fv.php @@ -4,8 +4,8 @@ Form Validation class Simple usage: - fv::init($_POST); - fv::addRules([ + Fv::init($_POST); + Fv::addRules([ 'email' => [ 'valid' => ['required', 'email'], 'filter' => ['trim'], @@ -13,24 +13,26 @@ ]); // This will print out all errors - if (fv::validate() == false) + if (Fv::validate() == false) { - print_r(fv::$errors_all); + print_r(Fv::$errors_all); } // And html code, this will output first error for "email" field - +
// Another usage -
/>
+
/>
// And even this one -
/>
+
/>
*/ -namespace models; +namespace Core\Models; + +use Core\Models\Load; class fv { @@ -192,9 +194,9 @@ public static function getError($name) protected static function callFunc($func, $args = null) { // Check for callable function - if (method_exists('\models\fv', $func)) + if (method_exists('\\system\\modules\\core\\models\\fv', $func)) { - $call = ['\models\fv', $func]; + $call = ['\\system\\modules\\core\\models\\fv', $func]; } elseif (function_exists($func)) { @@ -541,52 +543,52 @@ public static function twig_register() { // Register filters $filter = new \Twig_SimpleFilter('fvPlain', function ($value, $valid = '') { - return \models\fv::setPlain($value); + return \system\modules\core\models\Fv::setPlain($value); }); - \core\load::$config['view_engine']->addFilter($filter); + Load::$config['view_engine']->addFilter($filter); $filter = new \Twig_SimpleFilter('fvFriendly', function ($value) { - return \models\fv::setFriendly($value); + return \system\modules\core\models\Fv::setFriendly($value); }); - \core\load::$config['view_engine']->addFilter($filter); + Load::$config['view_engine']->addFilter($filter); $filter = new \Twig_SimpleFilter('fvXSS', function ($value, $valid = '') { - return \models\fv::xss($value); + return \system\modules\core\models\Fv::xss($value); }); - \core\load::$config['view_engine']->addFilter($filter); + Load::$config['view_engine']->addFilter($filter); // Register form functions $function = new \Twig_SimpleFunction('fvHasError', function ($value) { - return \models\fv::hasError($value); + return \system\modules\core\models\Fv::hasError($value); }); - \core\load::$config['view_engine']->addFunction($function); + Load::$config['view_engine']->addFunction($function); $function = new \Twig_SimpleFunction('fvError', function ($value) { - return \models\fv::getError($value); + return \system\modules\core\models\Fv::getError($value); }); - \core\load::$config['view_engine']->addFunction($function); + Load::$config['view_engine']->addFunction($function); // Register helper functions $function = new \Twig_SimpleFunction('fvInputValue', function ($value) { - return \models\fv::setInputValue($value); + return \system\modules\core\models\Fv::setInputValue($value); }); - \core\load::$config['view_engine']->addFunction($function); + Load::$config['view_engine']->addFunction($function); $function = new \Twig_SimpleFunction('fvSelected', function ($value, $test = '') { - return \models\fv::setSelected($value, $test); + return \system\modules\core\models\Fv::setSelected($value, $test); }); - \core\load::$config['view_engine']->addFunction($function); + Load::$config['view_engine']->addFunction($function); $function = new \Twig_SimpleFunction('fvChecked', function ($value) { - return \models\fv::setChecked($value); + return \system\modules\core\models\Fv::setChecked($value); }); - \core\load::$config['view_engine']->addFunction($function); + Load::$config['view_engine']->addFunction($function); $function = new \Twig_SimpleFunction('fvValue', function ($value) { - return \models\fv::setValue($value); + return \system\modules\core\models\Fv::setValue($value); }); - \core\load::$config['view_engine']->addFunction($function); + Load::$config['view_engine']->addFunction($function); } } diff --git a/system/core/load.php b/System/Modules/Core/Models/Load.php similarity index 86% rename from system/core/load.php rename to System/Modules/Core/Models/Load.php index af7f63d..7e492a4 100644 --- a/system/core/load.php +++ b/System/Modules/Core/Models/Load.php @@ -1,7 +1,7 @@ $name) { @@ -330,15 +330,25 @@ public static function config($files, $project = null) $project1 = $name; $name = $key; } - require(empty($project1) ? APP_PATH : BASE_PATH.$project1.DS).'config'.DS.$name.'.php'; + + $file = ''; + if (!empty($module)) { + $file = (empty($project1) ? APP_MODULES_PATH : BASE_PATH.$project1.DS.'Modules'.DS); + $file .= $module.DS; + } else { + $file = (empty($project1) ? APP_PATH : BASE_PATH.$project1.DS); + } + $file .= 'Config'.DS.$name.'.php'; + + require($file); } } /** * Load controller files. * - * Load controller files from current application's controller directory (APP_PATH/controllers) or - * from other application by providing name in $project parameter. + * Load controller files from current application's $module/controllers directory or + * from other $project/$module/controllers by providing $project name. * * @access public * @static @@ -346,7 +356,7 @@ public static function config($files, $project = null) * @param string|null $project (default: null) * @return void */ - public static function controller($files, $project = null) + public static function controller($files, $module, $project = null) { foreach ((array) $files as $key => $name) { $project1 = $project; @@ -354,15 +364,15 @@ public static function controller($files, $project = null) $project1 = $name; $name = $key; } - require(empty($project1) ? APP_PATH : BASE_PATH.$project1.DS).'controllers'.DS.$name.'.php'; + require((empty($project1) ? APP_MODULES_PATH : BASE_PATH.$project1.DS.'Modules'.DS).'Controllers'.DS.$name.'.php'); } } /** * Load model files. * - * Load model files from current application's model directory (APP_PATH/models) or - * from other application by providing name in $project parameter. + * Load model files from current application's $module/models directory or + * from other $project/$module/models by providing $project name. * * @access public * @static @@ -370,7 +380,7 @@ public static function controller($files, $project = null) * @param string|null $project (default: null) * @return void */ - public static function model($files, $project = null) + public static function model($files, $module, $project = null) { foreach ((array) $files as $key => $name) { $project1 = $project; @@ -378,15 +388,15 @@ public static function model($files, $project = null) $project1 = $name; $name = $key; } - require(empty($project1) ? APP_PATH : BASE_PATH.$project1.DS).'models'.DS.$name.'.php'; + require((empty($project1) ? APP_MODULES_PATH : BASE_PATH.$project1.DS.'Modules'.DS).'Models'.DS.$name.'.php'); } } /** * Load helper files. * - * Load helper files from current application's helper directory (APP_PATH/helpers) or - * from other application by providing name in $project parameter. + * Load helper files from current application's $module/helpers directory or + * from other $project/$module/helpers by providing $project name. * * @access public * @static @@ -394,7 +404,7 @@ public static function model($files, $project = null) * @param string|null $project (default: null) * @return void */ - public static function helper($files, $project = null) + public static function helper($files, $module, $project = null) { foreach ((array) $files as $key => $name) { $project1 = $project; @@ -402,7 +412,8 @@ public static function helper($files, $project = null) $project1 = $name; $name = $key; } - require(empty($project1) ? APP_PATH : BASE_PATH.$project1.DS).'helpers'.DS.$name.'.php'; + + require((empty($project1) ? APP_MODULES_PATH : BASE_PATH.$project1.DS.'Modules'.DS).$module.DS.'Helpers'.DS.$name.'.php'); } } @@ -430,19 +441,19 @@ public static function view($files, &$data = [], $return = false) // Add default view data if (empty($globals_added)) { - load::$config['view_engine']->addGlobal('base_url', router::$base_url); - load::$config['view_engine']->addGlobal('config', self::$config); - load::$config['view_engine']->addGlobal('namespace', router::$namespace); - load::$config['view_engine']->addGlobal('class', router::$class); - load::$config['view_engine']->addGlobal('method', router::$method); - load::$config['view_engine']->addGlobal('segments', router::$segments); + Load::$config['view_engine']->addGlobal('config', self::$config); + Load::$config['view_engine']->addGlobal('base_url', Router::$base_url); + Load::$config['view_engine']->addGlobal('namespace', Router::$namespace); + Load::$config['view_engine']->addGlobal('class', Router::$class); + Load::$config['view_engine']->addGlobal('method', Router::$method); + Load::$config['view_engine']->addGlobal('segments', Router::$segments); $globals_added = true; } // Load view data $contents = ''; foreach ((array) $files as $key => $file) { - $contents .= load::$config['view_engine']->render($file, (array) $data); + $contents .= Load::$config['view_engine']->render($file, (array) $data); } // Output or return view data @@ -661,13 +672,13 @@ public static function log($level, $message, array $context = array()) /** * Generate debug output. * - * @see load::emergency() - * @see load::alert() - * @see load::critical() - * @see load::error() - * @see load::warning() - * @see load::notice() - * @see load::info() + * @see Load::emergency() + * @see Load::alert() + * @see Load::critical() + * @see Load::error() + * @see Load::warning() + * @see Load::notice() + * @see Load::info() * @access public * @static * @return string Returns formatted html string of debug information, including timers, but also custom messages logged using logger interface. @@ -711,20 +722,26 @@ public static function debugOutput() } // Autoload function -spl_autoload_register(function ($classname) { - $classname = str_replace('\\', DS, $classname); - $classname = ltrim($classname, DS); - - if (is_file(APP_PATH.$classname.'.php')) { - require APP_PATH.$classname.'.php'; - } elseif (is_file(SYS_PATH.$classname.'.php')) { - require SYS_PATH.$classname.'.php'; - } else { - $classname = dirname($classname); - if (is_file(APP_PATH.$classname.'.php')) { +spl_autoload_register( + function ($classname) { + $classname = str_replace('\\', DS, $classname); + $classname = ltrim($classname, DS); + + if (is_file(APP_MODULES_PATH.$classname.'.php')) { + require APP_MODULES_PATH.$classname.'.php'; + } + elseif (is_file(APP_PATH.$classname.'.php')) { require APP_PATH.$classname.'.php'; - } elseif (is_file(SYS_PATH.$classname.'.php')) { + } + elseif (is_file(SYS_MODULES_PATH.$classname.'.php')) { + require SYS_MODULES_PATH.$classname.'.php'; + } + elseif (is_file(SYS_PATH.$classname.'.php')) { require SYS_PATH.$classname.'.php'; } - } -}, true, true); + elseif (is_file(BASE_PATH.$classname.'.php')) { + require BASE_PATH.$classname.'.php'; + } + }, + true +); diff --git a/system/models/pages.php b/System/Modules/Core/Models/Pages.php similarity index 98% rename from system/models/pages.php rename to System/Modules/Core/Models/Pages.php index 25e1848..1fd2af7 100644 --- a/system/models/pages.php +++ b/System/Modules/Core/Models/Pages.php @@ -1,8 +1,8 @@ $segment = (isset(router::$segments[1])) ? router::$segments[1] : false), - * you can use this method like this: $segment = router::segment(1);. + * $segment = (isset(Router::$segments[1])) ? Router::$segments[1] : false), + * you can use this method like this: $segment = Router::segment(1);. * @access public * @static * @param int $index @@ -280,15 +316,14 @@ public static function error($error_code, $error_string = '', $description = '') { header('HTTP/1.0 '.$error_code.' '.$error_string); $data = ['description' => $description]; - load::view("errors/E{$error_code}.html", $data); + Load::view("Errors/E{$error_code}.html", $data); exit; } - /** * Ease sending JSON response back to browser * - * @example Call function: router::jsonResponse($json_data); add some data: $json_data['xx'] = 1; + * @example Call function: Router::jsonResponse($json_data); add some data: $json_data['xx'] = 1; * and on the end of script execution the $json_data array will be sent to client along with * content-type:text/javascript header. * @access public @@ -327,6 +362,7 @@ public static function jsonResponse(&$json_data) } } + /* |-------------------------------------------------------------------------- | Class helper methods @@ -356,6 +392,7 @@ protected static function makePathString($path) * An array of string objects: *
    *
  • 'method' - method to be called
  • + *
  • 'module' - module where class resides
  • *
  • 'class' - class where to call this method from
  • *
  • 'file' - file where this class is from
  • *
@@ -365,25 +402,49 @@ protected static function urlToFile($url) // Explode $url $tmp = explode('/', $url); + if (count($tmp) < 3) { + return false; + } + // Get class, method and file from $url - $data['method'] = array_pop($tmp); - $data['class'] = end($tmp); - $data['file'] = implode('/', $tmp); + $data['module'] = array_shift($tmp); + $data['method'] = array_pop($tmp); + $data['class'] = end($tmp); + $data['file'] = $data['module'] . '/Controllers/' . implode('/', $tmp); + $data['namespace'] = $data['module'] . '\\Controllers\\'; return $data; } /** - * Fix method names to allow "-" in urls. + * Turn urls into namespace compatible strings + * Example: module/controller/method-name -> Module/Controller/MethodName * * @access protected * @static * @param string $method * @return string */ - protected static function fixMethodName($method) + protected static function urlToNamescape($url) { - return lcfirst(implode('', array_map('ucfirst', explode('-', $method)))); + return implode('', array_map('ucfirst', explode('-', $url))); + } + + /** + * Reverse namespace compatible name to url + * Example: Module/Controller/MethodName -> module/controller/method-name + * + * @access protected + * @static + * @param string $method + * @return string + */ + protected static function namespaceToUrl($namespace) + { + $url = preg_replace('/(?router::splitSegments();, router::findController() and router::loadController() methods. + * This method calls Router::splitSegments();, Router::findController() and Router::loadController() methods. * * @access public * @static @@ -424,9 +485,9 @@ public static function splitSegments($force = false) } // Get some config variables - $uri = load::$config['request_uri']; - $script_path = trim(dirname(load::$config['script_name']), '/'); - self::$base_url = load::$config['base_url']; + $uri = Load::$config['request_uri']; + $script_path = trim(dirname(Load::$config['script_name']), '/'); + self::$base_url = Load::$config['base_url']; // Set some variables if (empty(self::$base_url) && !empty($_SERVER['HTTP_HOST'])) { @@ -445,29 +506,34 @@ public static function splitSegments($force = false) $uri = trim(empty($script_path) ? $uri : str_replace('/'.$script_path, '', $uri), '/'); $uri = preg_replace('/\?.*/', '', $uri); - // Check config routing array + // Clear query string + $query_string = str_replace($uri, '', Load::$config['query_string']); + $query_string = trim($query_string, '/&?'); + + // Check url against our routing array from configuration $uri_tmp = $uri; - foreach (load::$config['routing'] as $key => &$item) { + foreach (Load::$config['routing'] as $key => &$item) { if (!empty($key) && !empty($item)) { $key = str_replace('#', '\\#', $key); $tmp = preg_replace('#'.$key.'#', $item, $uri); if ($tmp !== $uri) { + self::$segments_requested_url = $uri; self::$segments_requested = explode('/', $uri); $uri_tmp = $tmp; } } } - $uri = $uri_tmp; // Set segments_full_url - self::$segments_full_url = $uri.(empty(load::$config['query_string']) ? '' : '?'.load::$config['query_string']); + $uri = $uri_tmp; + self::$segments_full_url = $uri.(empty($query_string) ? '' : '?'.$query_string); // Explode segments self::$segments = (empty($uri) ? [] : explode('/', $uri)); self::$segments = array_map('rawurldecode', self::$segments); // Get URL prefixes - foreach (load::$config['url_prefixes'] as &$item) { + foreach (Load::$config['url_prefixes'] as &$item) { if (isset(self::$segments[0]) && self::$segments[0] == $item) { array_shift(self::$segments); self::$prefixes[$item] = $item; @@ -488,6 +554,7 @@ public static function splitSegments($force = false) define('BASE_URL', self::$base_url); } + /* |-------------------------------------------------------------------------- | Controller loading @@ -495,70 +562,107 @@ public static function splitSegments($force = false) */ /** - * Finds controller for current request, by segments and config/routing.php. + * Looks in segments array for module/controller/method * * @access public * @static * @return void */ - public static function findController() + public static function findControllerInSegments() { - // Get default controller, class and method - $tmp = self::urlToFile(load::$config['routing']['']); + // Fix segment names to translate "-" in url's to camelCase + $segments = array_map(['\\Core\\Models\\Router', 'urlToNamescape'], self::$segments); - // Set default class and method - self::$namespace = '\\controllers\\'; - self::$class = $tmp['class']; - self::$method = $tmp['method']; + // First one in segments is always a module + $module = array_shift($segments); // Controller and method count, this number is needed because of subdirectory controllers and possibility to have and have not method provided - $count = 0; - - // Fix segment names to translate "-" in url's to camelCase - $segments = array_map(['\\core\\router', 'fixMethodName'], self::$segments); + $count = count($segments); + // Namespace always starts with a module + self::$namespace = '\\'.$module.'\\Controllers\\'; - if (count($segments) === 0) { - // Defaults - self::$file = $tmp['file']; - } - else { - // Look for controller, class and method in segments - $count = count($segments); - foreach ($segments as $one) { - if (preg_match('/^[a-zA-Z][a-zA-Z0-9-_]*$/', $segments[$count - 1]) == false) { - $count -= 1; - continue; + // Look for controller, class and method in segments + foreach ($segments as $one) { + if (preg_match('/^[a-zA-Z][a-zA-Z0-9-_]*$/', $segments[$count - 1]) == false) { + $count -= 1; + continue; + } + $slice = array_slice($segments, 0, $count); + $filename = implode(DS, $slice); + $path_to_file = APP_MODULES_PATH.$module.'/Controllers'.DS.$filename.'.php'; + + if (is_file($path_to_file)) { + $namespace = array_slice($segments, 0, $count - 1); + if (!empty($namespace)) { + self::$namespace .= implode('\\', $namespace) . '\\'; } - $slice = array_slice($segments, 0, $count); - $filename = implode(DS, $slice); - $path_to_file = APP_PATH.'controllers'.DS.$filename.'.php'; - - if (is_file($path_to_file)) { - $namespace = array_slice($segments, 0, $count - 1); - if (!empty($namespace)) { - self::$namespace .= implode('\\', $namespace) . '\\'; - } - self::$class = $segments[$count - 1]; - self::$file = implode(DS, $slice); + self::$module = $module; + self::$class = $segments[$count - 1]; + self::$file = $module.'/Controllers/'.implode(DS, $slice); - if (count($segments) > $count) { - self::$method = $segments[$count]; - } - break; + if (count($segments) > $count) { + self::$method = lcfirst($segments[$count]); } - $count -= 1; + // Set url to the method + self::$method_url = self::$module.'/'.implode(DS, $slice).'/'.self::$method; + self::$method_url = self::namespaceToUrl(self::$method_url); + + break; } - // Method also must be removed from the segments array - $count += 1; + $count -= 1; } if ($count > 0) { + // Method also must be removed from the segments array + $count += 1; + // Remove controller and method from segments array_splice(self::$segments, 0, $count); + self::$segments_url = implode('/', self::$segments); + } + } + + /** + * Finds controller for current request, by segments and Config/Routing.php. + * + * @access public + * @static + * @return void + */ + public static function findController() + { + // Get default controller, class and method + $tmp = self::urlToFile(Load::$config['routing']['']); + if ($tmp === false) { + throw new RouterException( + "Error in default routing configuration. Should be: module/class/method, instead found: ". + Load::$config['routing'][''] + ); + } + + // Set default class and method + self::$namespace = $tmp['namespace']; + self::$module = $tmp['module']; + self::$class = $tmp['class']; + self::$method = $tmp['method']; + + if (count(self::$segments) === 0) { + // Defaults + self::$file = $tmp['file']; + } + else { + // Look for controller, class and method in segments + self::findControllerInSegments(); + + if (empty(self::$file)) { + // See whether there is a default controller after last segment + self::$segments[] = self::$class; + self::findControllerInSegments(); + } } } @@ -574,32 +678,37 @@ public static function findController() * @param string &$method (default: null) * @return void */ - protected static function loadController($file = null, $namespace = null, $class = null, &$method = null) + protected static function loadController($file = null, $module = null, $namespace = null, $class = null, &$method = null) { - // Load current file if empty $file parameter + // Load current file if $file parameter is empty if (empty($file)) { - $file = APP_PATH.'controllers'.DS.self::$file.'.php'; + $file = APP_MODULES_PATH.self::$file.'.php'; } - // Load current namespace if empty $namespace parameter + // Load current module if $module parameter is empty if (empty($namespace)) { $namespace = self::$namespace; } - // Load current class if empty $class parameter + // Load current namespace if $namespace parameter is empty + if (empty($namespace)) { + $namespace = self::$namespace; + } + + // Load current class if $class parameter is empty if (empty($class)) { $class = self::$class; } - // Load current method if empty $method parameter + // Load current method if $method parameter is empty if (empty($method)) { $method = self::$method; } // Load pre controller hook - if (!empty(load::$config['before_controller'])) { - foreach (load::$config['before_controller'] as $tmp) { - call_user_func_array($tmp, [&$file, &$class, &$method]); + if (!empty(Load::$config['before_controller'])) { + foreach (Load::$config['before_controller'] as $tmp) { + call_user_func_array($tmp, [&$file, &$module, &$class, &$method]); } } @@ -630,7 +739,14 @@ protected static function loadController($file = null, $namespace = null, $class } // Call __callStatic elseif ($ref->hasMethod('__callStatic') === true) { - $method_response = $ref->getMethod('__callStatic')->invoke(null, $method, self::$segments); + $pad_args = (int)$ref->getStaticPropertyValue('pad_call_static_parameters', 0); + if ($pad_args > 0) { + $arguments = array_pad(self::$segments, $pad_args, null); + } else { + $arguments = self::$segments; + } + + $method_response = $ref->getMethod('__callStatic')->invoke(null, $method, $arguments); } // Error - method not found else { @@ -664,8 +780,16 @@ protected static function loadController($file = null, $namespace = null, $class } } + // Call desctructor method + if ($ref->hasMethod('destruct') === true) { + $response = $ref->getMethod('destruct')->invokeArgs(null, []); + } } else { - throw new RouterException('Controller file was not found: '.$file); + $msg = 'Controller file for path: "'.self::$segments_full_url.'" was not found'; + if (empty(self::$segments_full_url)) { + $msg = 'Default controller was not found: "'.Load::$config['routing'][''].'"'; + } + throw new RouterException($msg); } } } diff --git a/system/models/sessions.php b/System/Modules/Core/Models/Sessions.php similarity index 96% rename from system/models/sessions.php rename to System/Modules/Core/Models/Sessions.php index e65069a..20f6b06 100644 --- a/system/models/sessions.php +++ b/System/Modules/Core/Models/Sessions.php @@ -8,9 +8,9 @@ |-------------------------------------------------------------------------- */ -namespace models; +namespace Core\Models; -class sessions +class Sessions { public $prefix = null; public $expire = null; @@ -97,7 +97,7 @@ public function destroy($id) public function gc($max) { - db::query('DELETE FROM "sessions" WHERE "expires" <= ?', (time() - $max)); + Db::query('DELETE FROM "sessions" WHERE "expires" <= ?', (time() - $max)); return true; } diff --git a/system/models/sessions_apc.php b/System/Modules/Core/Models/SessionsApc.php similarity index 94% rename from system/models/sessions_apc.php rename to System/Modules/Core/Models/SessionsApc.php index 7b288f3..4a378f8 100644 --- a/system/models/sessions_apc.php +++ b/System/Modules/Core/Models/SessionsApc.php @@ -8,9 +8,9 @@ |-------------------------------------------------------------------------- */ -namespace models; +namespace Core\models; -class sessions_apc extends sessions +class SessionsApc extends Sessions { private $db_link = false; diff --git a/system/models/sessions_memcached.php b/System/Modules/Core/Models/SessionsMemcached.php similarity index 94% rename from system/models/sessions_memcached.php rename to System/Modules/Core/Models/SessionsMemcached.php index 0612544..0fef1cd 100644 --- a/system/models/sessions_memcached.php +++ b/System/Modules/Core/Models/SessionsMemcached.php @@ -8,9 +8,9 @@ |-------------------------------------------------------------------------- */ -namespace models; +namespace Core\Models; -class sessions_memcached extends sessions +class SessionsMemcached extends Sessions { private $memcached = null; private $db_link = false; diff --git a/system/models/sessions_mongodb.php b/System/Modules/Core/Models/SessionsMongoDb.php similarity index 98% rename from system/models/sessions_mongodb.php rename to System/Modules/Core/Models/SessionsMongoDb.php index c064334..61805a5 100644 --- a/system/models/sessions_mongodb.php +++ b/System/Modules/Core/Models/SessionsMongoDb.php @@ -6,9 +6,9 @@ |-------------------------------------------------------------------------- */ -namespace models; +namespace Core\Models; -class sessions_mongodb +class SessionsMongoDb { private $st = null; // session table private $data = null; diff --git a/System/Modules/Core/Views/Errors/E400.html b/System/Modules/Core/Views/Errors/E400.html new file mode 100644 index 0000000..16d33bf --- /dev/null +++ b/System/Modules/Core/Views/Errors/E400.html @@ -0,0 +1,26 @@ + + + + + + + + 400 Bad Request + + + + +
+


+

400 Bad Request

+

{{ description|raw }}

+
+ + + \ No newline at end of file diff --git a/application/views/errors/E403.html b/System/Modules/Core/Views/Errors/E403.html similarity index 61% rename from application/views/errors/E403.html rename to System/Modules/Core/Views/Errors/E403.html index 0a1819e..02e023e 100644 --- a/application/views/errors/E403.html +++ b/System/Modules/Core/Views/Errors/E403.html @@ -8,12 +8,19 @@ 403 Forbidden -



403 Forbidden

+

{{ description|raw }}

+ \ No newline at end of file diff --git a/application/views/errors/E404.html b/System/Modules/Core/Views/Errors/E404.html similarity index 61% rename from application/views/errors/E404.html rename to System/Modules/Core/Views/Errors/E404.html index be754c8..c056ac4 100644 --- a/application/views/errors/E404.html +++ b/System/Modules/Core/Views/Errors/E404.html @@ -8,12 +8,19 @@ 404 Not Found -



404 Not Found

+

{{ description|raw }}

+ \ No newline at end of file diff --git a/application/views/errors/E500.html b/System/Modules/Core/Views/Errors/E500.html similarity index 90% rename from application/views/errors/E500.html rename to System/Modules/Core/Views/Errors/E500.html index 1273ffa..4a3147e 100644 --- a/application/views/errors/E500.html +++ b/System/Modules/Core/Views/Errors/E500.html @@ -8,13 +8,12 @@ 500 Internal Server Error -



500 Internal Server Error

-

{{ description }}

+

{{ description|raw }}