diff --git a/README.rst b/README.rst index 8c9ac1da5..d7ea484ce 100644 --- a/README.rst +++ b/README.rst @@ -58,3 +58,26 @@ And now you are ready to start the webserver:: Setting the environment variables is needed when developing on a PC. Open your browser and point to http://localhost:8888/. + +UI Development +--- + +To manage tooling, the use of `asdf` is required. Asdf is a version manager that allows you to easily install and manage multiple versions of different tools, such as Node.js. This is particularly useful when working on projects that require specific versions of tools. + +To get started with asdf, you need to install it on your system. You can find installation instructions for your specific operating system on the asdf website. + +The UI is built using Vite and React. To start the development server, first ensure that you have the required dependencies installed:: + +Install the required tools:: + + $ (cd src; asdf plugin-add nodejs pnpm; asdf install) + +Install the required packages:: + + $ (cd src; pnpm install) + +Then start the development server:: + + $ (cd src; pnpm dev) + +This will start a development server on http://localhost:5173. The server will automatically reload when you make changes to the source code. \ No newline at end of file diff --git a/html/allguis.html b/html/allguis.html deleted file mode 100644 index 662d7d0eb..000000000 --- a/html/allguis.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - MOD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
- -
- - - - diff --git a/html/assets/index-BCKxSgB_.js b/html/assets/index-BCKxSgB_.js new file mode 100644 index 000000000..0b55f4f25 --- /dev/null +++ b/html/assets/index-BCKxSgB_.js @@ -0,0 +1,40 @@ +(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const u of o.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function t(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=t(l);fetch(l.href,o)}})();var Bi={exports:{}},br={},Hi={exports:{}},L={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Yt=Symbol.for("react.element"),tc=Symbol.for("react.portal"),rc=Symbol.for("react.fragment"),lc=Symbol.for("react.strict_mode"),oc=Symbol.for("react.profiler"),uc=Symbol.for("react.provider"),ic=Symbol.for("react.context"),sc=Symbol.for("react.forward_ref"),ac=Symbol.for("react.suspense"),cc=Symbol.for("react.memo"),fc=Symbol.for("react.lazy"),Mu=Symbol.iterator;function dc(e){return e===null||typeof e!="object"?null:(e=Mu&&e[Mu]||e["@@iterator"],typeof e=="function"?e:null)}var Wi={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Qi=Object.assign,Ki={};function lt(e,n,t){this.props=e,this.context=n,this.refs=Ki,this.updater=t||Wi}lt.prototype.isReactComponent={};lt.prototype.setState=function(e,n){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,n,"setState")};lt.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Yi(){}Yi.prototype=lt.prototype;function Uo(e,n,t){this.props=e,this.context=n,this.refs=Ki,this.updater=t||Wi}var $o=Uo.prototype=new Yi;$o.constructor=Uo;Qi($o,lt.prototype);$o.isPureReactComponent=!0;var Du=Array.isArray,Xi=Object.prototype.hasOwnProperty,Vo={current:null},Gi={key:!0,ref:!0,__self:!0,__source:!0};function Zi(e,n,t){var r,l={},o=null,u=null;if(n!=null)for(r in n.ref!==void 0&&(u=n.ref),n.key!==void 0&&(o=""+n.key),n)Xi.call(n,r)&&!Gi.hasOwnProperty(r)&&(l[r]=n[r]);var i=arguments.length-2;if(i===1)l.children=t;else if(1>>1,X=C[H];if(0>>1;Hl(gl,z))ynl(bt,gl)?(C[H]=bt,C[yn]=z,H=yn):(C[H]=gl,C[hn]=z,H=hn);else if(ynl(bt,z))C[H]=bt,C[yn]=z,H=yn;else break e}}return P}function l(C,P){var z=C.sortIndex-P.sortIndex;return z!==0?z:C.id-P.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var u=Date,i=u.now();e.unstable_now=function(){return u.now()-i}}var s=[],c=[],v=1,m=null,p=3,g=!1,w=!1,S=!1,j=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,a=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(C){for(var P=t(c);P!==null;){if(P.callback===null)r(c);else if(P.startTime<=C)r(c),P.sortIndex=P.expirationTime,n(s,P);else break;P=t(c)}}function h(C){if(S=!1,d(C),!w)if(t(s)!==null)w=!0,hl(E);else{var P=t(c);P!==null&&yl(h,P.startTime-C)}}function E(C,P){w=!1,S&&(S=!1,f(N),N=-1),g=!0;var z=p;try{for(d(P),m=t(s);m!==null&&(!(m.expirationTime>P)||C&&!Ne());){var H=m.callback;if(typeof H=="function"){m.callback=null,p=m.priorityLevel;var X=H(m.expirationTime<=P);P=e.unstable_now(),typeof X=="function"?m.callback=X:m===t(s)&&r(s),d(P)}else r(s);m=t(s)}if(m!==null)var qt=!0;else{var hn=t(c);hn!==null&&yl(h,hn.startTime-P),qt=!1}return qt}finally{m=null,p=z,g=!1}}var _=!1,x=null,N=-1,B=5,T=-1;function Ne(){return!(e.unstable_now()-TC||125H?(C.sortIndex=z,n(c,C),t(s)===null&&C===t(c)&&(S?(f(N),N=-1):S=!0,yl(h,z-H))):(C.sortIndex=X,n(s,C),w||g||(w=!0,hl(E))),C},e.unstable_shouldYield=Ne,e.unstable_wrapCallback=function(C){var P=p;return function(){var z=p;p=P;try{return C.apply(this,arguments)}finally{p=z}}}})(ns);es.exports=ns;var Cc=es.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var _c=el,ye=Cc;function y(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ql=Object.prototype.hasOwnProperty,xc=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,ju={},Fu={};function Nc(e){return Ql.call(Fu,e)?!0:Ql.call(ju,e)?!1:xc.test(e)?Fu[e]=!0:(ju[e]=!0,!1)}function Pc(e,n,t,r){if(t!==null&&t.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return r?!1:t!==null?!t.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function zc(e,n,t,r){if(n===null||typeof n>"u"||Pc(e,n,t,r))return!0;if(r)return!1;if(t!==null)switch(t.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function se(e,n,t,r,l,o,u){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=o,this.removeEmptyString=u}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){b[e]=new se(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];b[n]=new se(n,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){b[e]=new se(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){b[e]=new se(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){b[e]=new se(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){b[e]=new se(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){b[e]=new se(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){b[e]=new se(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){b[e]=new se(e,5,!1,e.toLowerCase(),null,!1,!1)});var Bo=/[\-:]([a-z])/g;function Ho(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(Bo,Ho);b[n]=new se(n,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(Bo,Ho);b[n]=new se(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(Bo,Ho);b[n]=new se(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){b[e]=new se(e,1,!1,e.toLowerCase(),null,!1,!1)});b.xlinkHref=new se("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){b[e]=new se(e,1,!1,e.toLowerCase(),null,!0,!0)});function Wo(e,n,t,r){var l=b.hasOwnProperty(n)?b[n]:null;(l!==null?l.type!==0:r||!(2i||l[u]!==o[i]){var s=` +`+l[u].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=u&&0<=i);break}}}finally{kl=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?yt(e):""}function Lc(e){switch(e.tag){case 5:return yt(e.type);case 16:return yt("Lazy");case 13:return yt("Suspense");case 19:return yt("SuspenseList");case 0:case 2:case 15:return e=El(e.type,!1),e;case 11:return e=El(e.type.render,!1),e;case 1:return e=El(e.type,!0),e;default:return""}}function Gl(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Dn:return"Fragment";case Mn:return"Portal";case Kl:return"Profiler";case Qo:return"StrictMode";case Yl:return"Suspense";case Xl:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ls:return(e.displayName||"Context")+".Consumer";case rs:return(e._context.displayName||"Context")+".Provider";case Ko:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Yo:return n=e.displayName||null,n!==null?n:Gl(e.type)||"Memo";case Ze:n=e._payload,e=e._init;try{return Gl(e(n))}catch{}}return null}function Tc(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Gl(n);case 8:return n===Qo?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function fn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function us(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function Rc(e){var n=us(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),r=""+e[n];if(!e.hasOwnProperty(n)&&typeof t<"u"&&typeof t.get=="function"&&typeof t.set=="function"){var l=t.get,o=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return l.call(this)},set:function(u){r=""+u,o.call(this,u)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function tr(e){e._valueTracker||(e._valueTracker=Rc(e))}function is(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r="";return e&&(r=us(e)?e.checked?"true":"false":e.value),e=r,e!==t?(n.setValue(e),!0):!1}function Lr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Zl(e,n){var t=n.checked;return V({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??e._wrapperState.initialChecked})}function $u(e,n){var t=n.defaultValue==null?"":n.defaultValue,r=n.checked!=null?n.checked:n.defaultChecked;t=fn(n.value!=null?n.value:t),e._wrapperState={initialChecked:r,initialValue:t,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function ss(e,n){n=n.checked,n!=null&&Wo(e,"checked",n,!1)}function Jl(e,n){ss(e,n);var t=fn(n.value),r=n.type;if(t!=null)r==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?ql(e,n.type,t):n.hasOwnProperty("defaultValue")&&ql(e,n.type,fn(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Vu(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var r=n.type;if(!(r!=="submit"&&r!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}t=e.name,t!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,t!==""&&(e.name=t)}function ql(e,n,t){(n!=="number"||Lr(e.ownerDocument)!==e)&&(t==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}var gt=Array.isArray;function Qn(e,n,t,r){if(e=e.options,n){n={};for(var l=0;l"+n.valueOf().toString()+"",n=rr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Rt(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&t.nodeType===3){t.nodeValue=n;return}}e.textContent=n}var kt={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Oc=["Webkit","ms","Moz","O"];Object.keys(kt).forEach(function(e){Oc.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),kt[n]=kt[e]})});function ds(e,n,t){return n==null||typeof n=="boolean"||n===""?"":t||typeof n!="number"||n===0||kt.hasOwnProperty(e)&&kt[e]?(""+n).trim():n+"px"}function ps(e,n){e=e.style;for(var t in n)if(n.hasOwnProperty(t)){var r=t.indexOf("--")===0,l=ds(t,n[t],r);t==="float"&&(t="cssFloat"),r?e.setProperty(t,l):e[t]=l}}var Mc=V({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function no(e,n){if(n){if(Mc[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(y(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(y(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(y(61))}if(n.style!=null&&typeof n.style!="object")throw Error(y(62))}}function to(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ro=null;function Xo(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var lo=null,Kn=null,Yn=null;function Hu(e){if(e=Zt(e)){if(typeof lo!="function")throw Error(y(280));var n=e.stateNode;n&&(n=ol(n),lo(e.stateNode,e.type,n))}}function ms(e){Kn?Yn?Yn.push(e):Yn=[e]:Kn=e}function vs(){if(Kn){var e=Kn,n=Yn;if(Yn=Kn=null,Hu(e),n)for(e=0;e>>=0,e===0?32:31-(Wc(e)/Qc|0)|0}var lr=64,or=4194304;function wt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Mr(e,n){var t=e.pendingLanes;if(t===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,u=t&268435455;if(u!==0){var i=u&~l;i!==0?r=wt(i):(o&=u,o!==0&&(r=wt(o)))}else u=t&~l,u!==0?r=wt(u):o!==0&&(r=wt(o));if(r===0)return 0;if(n!==0&&n!==r&&!(n&l)&&(l=r&-r,o=n&-n,l>=o||l===16&&(o&4194240)!==0))return n;if(r&4&&(r|=t&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function Xt(e,n,t){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Re(n),e[n]=t}function Gc(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Ct),qu=" ",bu=!1;function Is(e,n){switch(e){case"keyup":return _f.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function js(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var In=!1;function Nf(e,n){switch(e){case"compositionend":return js(n);case"keypress":return n.which!==32?null:(bu=!0,qu);case"textInput":return e=n.data,e===qu&&bu?null:e;default:return null}}function Pf(e,n){if(In)return e==="compositionend"||!tu&&Is(e,n)?(e=Ms(),Sr=bo=en=null,In=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:t,offset:n-e};e=r}e:{for(;t;){if(t.nextSibling){t=t.nextSibling;break e}t=t.parentNode}t=void 0}t=ri(t)}}function Vs(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Vs(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function As(){for(var e=window,n=Lr();n instanceof e.HTMLIFrameElement;){try{var t=typeof n.contentWindow.location.href=="string"}catch{t=!1}if(t)e=n.contentWindow;else break;n=Lr(e.document)}return n}function ru(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function jf(e){var n=As(),t=e.focusedElem,r=e.selectionRange;if(n!==t&&t&&t.ownerDocument&&Vs(t.ownerDocument.documentElement,t)){if(r!==null&&ru(t)){if(n=r.start,e=r.end,e===void 0&&(e=n),"selectionStart"in t)t.selectionStart=n,t.selectionEnd=Math.min(e,t.value.length);else if(e=(n=t.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var l=t.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=li(t,o);var u=li(t,r);l&&u&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&(n=n.createRange(),n.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(n),e.extend(u.node,u.offset)):(n.setEnd(u.node,u.offset),e.addRange(n)))}}for(n=[],e=t;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof t.focus=="function"&&t.focus(),t=0;t=document.documentMode,jn=null,co=null,xt=null,fo=!1;function oi(e,n,t){var r=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;fo||jn==null||jn!==Lr(r)||(r=jn,"selectionStart"in r&&ru(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),xt&&Ft(xt,r)||(xt=r,r=jr(co,"onSelect"),0$n||(e.current=go[$n],go[$n]=null,$n--)}function M(e,n){$n++,go[$n]=e.current,e.current=n}var dn={},re=mn(dn),fe=mn(!1),xn=dn;function qn(e,n){var t=e.type.contextTypes;if(!t)return dn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in t)l[o]=n[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=l),l}function de(e){return e=e.childContextTypes,e!=null}function Ur(){I(fe),I(re)}function di(e,n,t){if(re.current!==dn)throw Error(y(168));M(re,n),M(fe,t)}function Zs(e,n,t){var r=e.stateNode;if(n=n.childContextTypes,typeof r.getChildContext!="function")return t;r=r.getChildContext();for(var l in r)if(!(l in n))throw Error(y(108,Tc(e)||"Unknown",l));return V({},t,r)}function $r(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||dn,xn=re.current,M(re,e),M(fe,fe.current),!0}function pi(e,n,t){var r=e.stateNode;if(!r)throw Error(y(169));t?(e=Zs(e,n,xn),r.__reactInternalMemoizedMergedChildContext=e,I(fe),I(re),M(re,e)):I(fe),M(fe,t)}var Ve=null,ul=!1,jl=!1;function Js(e){Ve===null?Ve=[e]:Ve.push(e)}function Xf(e){ul=!0,Js(e)}function vn(){if(!jl&&Ve!==null){jl=!0;var e=0,n=O;try{var t=Ve;for(O=1;e>=u,l-=u,Ae=1<<32-Re(n)+l|t<N?(B=x,x=null):B=x.sibling;var T=p(f,x,d[N],h);if(T===null){x===null&&(x=B);break}e&&x&&T.alternate===null&&n(f,x),a=o(T,a,N),_===null?E=T:_.sibling=T,_=T,x=B}if(N===d.length)return t(f,x),F&&gn(f,N),E;if(x===null){for(;NN?(B=x,x=null):B=x.sibling;var Ne=p(f,x,T.value,h);if(Ne===null){x===null&&(x=B);break}e&&x&&Ne.alternate===null&&n(f,x),a=o(Ne,a,N),_===null?E=Ne:_.sibling=Ne,_=Ne,x=B}if(T.done)return t(f,x),F&&gn(f,N),E;if(x===null){for(;!T.done;N++,T=d.next())T=m(f,T.value,h),T!==null&&(a=o(T,a,N),_===null?E=T:_.sibling=T,_=T);return F&&gn(f,N),E}for(x=r(f,x);!T.done;N++,T=d.next())T=g(x,f,N,T.value,h),T!==null&&(e&&T.alternate!==null&&x.delete(T.key===null?N:T.key),a=o(T,a,N),_===null?E=T:_.sibling=T,_=T);return e&&x.forEach(function(it){return n(f,it)}),F&&gn(f,N),E}function j(f,a,d,h){if(typeof d=="object"&&d!==null&&d.type===Dn&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case nr:e:{for(var E=d.key,_=a;_!==null;){if(_.key===E){if(E=d.type,E===Dn){if(_.tag===7){t(f,_.sibling),a=l(_,d.props.children),a.return=f,f=a;break e}}else if(_.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Ze&&hi(E)===_.type){t(f,_.sibling),a=l(_,d.props),a.ref=mt(f,_,d),a.return=f,f=a;break e}t(f,_);break}else n(f,_);_=_.sibling}d.type===Dn?(a=_n(d.props.children,f.mode,h,d.key),a.return=f,f=a):(h=zr(d.type,d.key,d.props,null,f.mode,h),h.ref=mt(f,a,d),h.return=f,f=h)}return u(f);case Mn:e:{for(_=d.key;a!==null;){if(a.key===_)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){t(f,a.sibling),a=l(a,d.children||[]),a.return=f,f=a;break e}else{t(f,a);break}else n(f,a);a=a.sibling}a=Wl(d,f.mode,h),a.return=f,f=a}return u(f);case Ze:return _=d._init,j(f,a,_(d._payload),h)}if(gt(d))return w(f,a,d,h);if(at(d))return S(f,a,d,h);dr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,a!==null&&a.tag===6?(t(f,a.sibling),a=l(a,d),a.return=f,f=a):(t(f,a),a=Hl(d,f.mode,h),a.return=f,f=a),u(f)):t(f,a)}return j}var et=na(!0),ta=na(!1),Br=mn(null),Hr=null,Bn=null,iu=null;function su(){iu=Bn=Hr=null}function au(e){var n=Br.current;I(Br),e._currentValue=n}function ko(e,n,t){for(;e!==null;){var r=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,r!==null&&(r.childLanes|=n)):r!==null&&(r.childLanes&n)!==n&&(r.childLanes|=n),e===t)break;e=e.return}}function Gn(e,n){Hr=e,iu=Bn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&n&&(ce=!0),e.firstContext=null)}function _e(e){var n=e._currentValue;if(iu!==e)if(e={context:e,memoizedValue:n,next:null},Bn===null){if(Hr===null)throw Error(y(308));Bn=e,Hr.dependencies={lanes:0,firstContext:e}}else Bn=Bn.next=e;return n}var kn=null;function cu(e){kn===null?kn=[e]:kn.push(e)}function ra(e,n,t,r){var l=n.interleaved;return l===null?(t.next=t,cu(n)):(t.next=l.next,l.next=t),n.interleaved=t,Ke(e,r)}function Ke(e,n){e.lanes|=n;var t=e.alternate;for(t!==null&&(t.lanes|=n),t=e,e=e.return;e!==null;)e.childLanes|=n,t=e.alternate,t!==null&&(t.childLanes|=n),t=e,e=e.return;return t.tag===3?t.stateNode:null}var Je=!1;function fu(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function la(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function He(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function un(e,n,t){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,R&2){var l=r.pending;return l===null?n.next=n:(n.next=l.next,l.next=n),r.pending=n,Ke(e,t)}return l=r.interleaved,l===null?(n.next=n,cu(r)):(n.next=l.next,l.next=n),r.interleaved=n,Ke(e,t)}function Er(e,n,t){if(n=n.updateQueue,n!==null&&(n=n.shared,(t&4194240)!==0)){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,Zo(e,t)}}function yi(e,n){var t=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,t===r)){var l=null,o=null;if(t=t.firstBaseUpdate,t!==null){do{var u={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};o===null?l=o=u:o=o.next=u,t=t.next}while(t!==null);o===null?l=o=n:o=o.next=n}else l=o=n;t={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=t;return}e=t.lastBaseUpdate,e===null?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}function Wr(e,n,t,r){var l=e.updateQueue;Je=!1;var o=l.firstBaseUpdate,u=l.lastBaseUpdate,i=l.shared.pending;if(i!==null){l.shared.pending=null;var s=i,c=s.next;s.next=null,u===null?o=c:u.next=c,u=s;var v=e.alternate;v!==null&&(v=v.updateQueue,i=v.lastBaseUpdate,i!==u&&(i===null?v.firstBaseUpdate=c:i.next=c,v.lastBaseUpdate=s))}if(o!==null){var m=l.baseState;u=0,v=c=s=null,i=o;do{var p=i.lane,g=i.eventTime;if((r&p)===p){v!==null&&(v=v.next={eventTime:g,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var w=e,S=i;switch(p=n,g=t,S.tag){case 1:if(w=S.payload,typeof w=="function"){m=w.call(g,m,p);break e}m=w;break e;case 3:w.flags=w.flags&-65537|128;case 0:if(w=S.payload,p=typeof w=="function"?w.call(g,m,p):w,p==null)break e;m=V({},m,p);break e;case 2:Je=!0}}i.callback!==null&&i.lane!==0&&(e.flags|=64,p=l.effects,p===null?l.effects=[i]:p.push(i))}else g={eventTime:g,lane:p,tag:i.tag,payload:i.payload,callback:i.callback,next:null},v===null?(c=v=g,s=m):v=v.next=g,u|=p;if(i=i.next,i===null){if(i=l.shared.pending,i===null)break;p=i,i=p.next,p.next=null,l.lastBaseUpdate=p,l.shared.pending=null}}while(!0);if(v===null&&(s=m),l.baseState=s,l.firstBaseUpdate=c,l.lastBaseUpdate=v,n=l.shared.interleaved,n!==null){l=n;do u|=l.lane,l=l.next;while(l!==n)}else o===null&&(l.shared.lanes=0);zn|=u,e.lanes=u,e.memoizedState=m}}function gi(e,n,t){if(e=n.effects,n.effects=null,e!==null)for(n=0;nt?t:4,e(!0);var r=Ul.transition;Ul.transition={};try{e(!1),n()}finally{O=t,Ul.transition=r}}function ka(){return xe().memoizedState}function qf(e,n,t){var r=an(e);if(t={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null},Ea(e))Ca(n,t);else if(t=ra(e,n,t,r),t!==null){var l=ue();Oe(t,e,r,l),_a(t,n,r)}}function bf(e,n,t){var r=an(e),l={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null};if(Ea(e))Ca(n,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=n.lastRenderedReducer,o!==null))try{var u=n.lastRenderedState,i=o(u,t);if(l.hasEagerState=!0,l.eagerState=i,Me(i,u)){var s=n.interleaved;s===null?(l.next=l,cu(n)):(l.next=s.next,s.next=l),n.interleaved=l;return}}catch{}finally{}t=ra(e,n,l,r),t!==null&&(l=ue(),Oe(t,e,r,l),_a(t,n,r))}}function Ea(e){var n=e.alternate;return e===$||n!==null&&n===$}function Ca(e,n){Nt=Kr=!0;var t=e.pending;t===null?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function _a(e,n,t){if(t&4194240){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,Zo(e,t)}}var Yr={readContext:_e,useCallback:ee,useContext:ee,useEffect:ee,useImperativeHandle:ee,useInsertionEffect:ee,useLayoutEffect:ee,useMemo:ee,useReducer:ee,useRef:ee,useState:ee,useDebugValue:ee,useDeferredValue:ee,useTransition:ee,useMutableSource:ee,useSyncExternalStore:ee,useId:ee,unstable_isNewReconciler:!1},ed={readContext:_e,useCallback:function(e,n){return Ie().memoizedState=[e,n===void 0?null:n],e},useContext:_e,useEffect:Si,useImperativeHandle:function(e,n,t){return t=t!=null?t.concat([e]):null,_r(4194308,4,ha.bind(null,n,e),t)},useLayoutEffect:function(e,n){return _r(4194308,4,e,n)},useInsertionEffect:function(e,n){return _r(4,2,e,n)},useMemo:function(e,n){var t=Ie();return n=n===void 0?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Ie();return n=t!==void 0?t(n):n,r.memoizedState=r.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},r.queue=e,e=e.dispatch=qf.bind(null,$,e),[r.memoizedState,e]},useRef:function(e){var n=Ie();return e={current:e},n.memoizedState=e},useState:wi,useDebugValue:wu,useDeferredValue:function(e){return Ie().memoizedState=e},useTransition:function(){var e=wi(!1),n=e[0];return e=Jf.bind(null,e[1]),Ie().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,t){var r=$,l=Ie();if(F){if(t===void 0)throw Error(y(407));t=t()}else{if(t=n(),Z===null)throw Error(y(349));Pn&30||sa(r,n,t)}l.memoizedState=t;var o={value:t,getSnapshot:n};return l.queue=o,Si(ca.bind(null,r,o,e),[e]),r.flags|=2048,Qt(9,aa.bind(null,r,o,t,n),void 0,null),t},useId:function(){var e=Ie(),n=Z.identifierPrefix;if(F){var t=Be,r=Ae;t=(r&~(1<<32-Re(r)-1)).toString(32)+t,n=":"+n+"R"+t,t=Ht++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(t,{is:r.is}):(e=u.createElement(t),t==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,t),e[je]=n,e[Vt]=r,Da(e,n,!1,!1),n.stateNode=e;e:{switch(u=to(t,r),t){case"dialog":D("cancel",e),D("close",e),l=r;break;case"iframe":case"object":case"embed":D("load",e),l=r;break;case"video":case"audio":for(l=0;lrt&&(n.flags|=128,r=!0,vt(o,!1),n.lanes=4194304)}else{if(!r)if(e=Qr(u),e!==null){if(n.flags|=128,r=!0,t=e.updateQueue,t!==null&&(n.updateQueue=t,n.flags|=4),vt(o,!0),o.tail===null&&o.tailMode==="hidden"&&!u.alternate&&!F)return ne(n),null}else 2*W()-o.renderingStartTime>rt&&t!==1073741824&&(n.flags|=128,r=!0,vt(o,!1),n.lanes=4194304);o.isBackwards?(u.sibling=n.child,n.child=u):(t=o.last,t!==null?t.sibling=u:n.child=u,o.last=u)}return o.tail!==null?(n=o.tail,o.rendering=n,o.tail=n.sibling,o.renderingStartTime=W(),n.sibling=null,t=U.current,M(U,r?t&1|2:t&1),n):(ne(n),null);case 22:case 23:return xu(),r=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(n.flags|=8192),r&&n.mode&1?me&1073741824&&(ne(n),n.subtreeFlags&6&&(n.flags|=8192)):ne(n),null;case 24:return null;case 25:return null}throw Error(y(156,n.tag))}function sd(e,n){switch(ou(n),n.tag){case 1:return de(n.type)&&Ur(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return nt(),I(fe),I(re),mu(),e=n.flags,e&65536&&!(e&128)?(n.flags=e&-65537|128,n):null;case 5:return pu(n),null;case 13:if(I(U),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(y(340));bn()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return I(U),null;case 4:return nt(),null;case 10:return au(n.type._context),null;case 22:case 23:return xu(),null;case 24:return null;default:return null}}var mr=!1,te=!1,ad=typeof WeakSet=="function"?WeakSet:Set,k=null;function Hn(e,n){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(r){A(e,n,r)}else t.current=null}function To(e,n,t){try{t()}catch(r){A(e,n,r)}}var Ri=!1;function cd(e,n){if(po=Dr,e=As(),ru(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var r=t.getSelection&&t.getSelection();if(r&&r.rangeCount!==0){t=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{t.nodeType,o.nodeType}catch{t=null;break e}var u=0,i=-1,s=-1,c=0,v=0,m=e,p=null;n:for(;;){for(var g;m!==t||l!==0&&m.nodeType!==3||(i=u+l),m!==o||r!==0&&m.nodeType!==3||(s=u+r),m.nodeType===3&&(u+=m.nodeValue.length),(g=m.firstChild)!==null;)p=m,m=g;for(;;){if(m===e)break n;if(p===t&&++c===l&&(i=u),p===o&&++v===r&&(s=u),(g=m.nextSibling)!==null)break;m=p,p=m.parentNode}m=g}t=i===-1||s===-1?null:{start:i,end:s}}else t=null}t=t||{start:0,end:0}}else t=null;for(mo={focusedElem:e,selectionRange:t},Dr=!1,k=n;k!==null;)if(n=k,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,k=e;else for(;k!==null;){n=k;try{var w=n.alternate;if(n.flags&1024)switch(n.tag){case 0:case 11:case 15:break;case 1:if(w!==null){var S=w.memoizedProps,j=w.memoizedState,f=n.stateNode,a=f.getSnapshotBeforeUpdate(n.elementType===n.type?S:ze(n.type,S),j);f.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=n.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(y(163))}}catch(h){A(n,n.return,h)}if(e=n.sibling,e!==null){e.return=n.return,k=e;break}k=n.return}return w=Ri,Ri=!1,w}function Pt(e,n,t){var r=n.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&To(n,t,o)}l=l.next}while(l!==r)}}function al(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function Ro(e){var n=e.ref;if(n!==null){var t=e.stateNode;switch(e.tag){case 5:e=t;break;default:e=t}typeof n=="function"?n(e):n.current=e}}function Fa(e){var n=e.alternate;n!==null&&(e.alternate=null,Fa(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[je],delete n[Vt],delete n[yo],delete n[Kf],delete n[Yf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Ua(e){return e.tag===5||e.tag===3||e.tag===4}function Oi(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ua(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Oo(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.nodeType===8?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(t.nodeType===8?(n=t.parentNode,n.insertBefore(e,t)):(n=t,n.appendChild(e)),t=t._reactRootContainer,t!=null||n.onclick!==null||(n.onclick=Fr));else if(r!==4&&(e=e.child,e!==null))for(Oo(e,n,t),e=e.sibling;e!==null;)Oo(e,n,t),e=e.sibling}function Mo(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Mo(e,n,t),e=e.sibling;e!==null;)Mo(e,n,t),e=e.sibling}var J=null,Le=!1;function Ge(e,n,t){for(t=t.child;t!==null;)$a(e,n,t),t=t.sibling}function $a(e,n,t){if(Fe&&typeof Fe.onCommitFiberUnmount=="function")try{Fe.onCommitFiberUnmount(nl,t)}catch{}switch(t.tag){case 5:te||Hn(t,n);case 6:var r=J,l=Le;J=null,Ge(e,n,t),J=r,Le=l,J!==null&&(Le?(e=J,t=t.stateNode,e.nodeType===8?e.parentNode.removeChild(t):e.removeChild(t)):J.removeChild(t.stateNode));break;case 18:J!==null&&(Le?(e=J,t=t.stateNode,e.nodeType===8?Il(e.parentNode,t):e.nodeType===1&&Il(e,t),It(e)):Il(J,t.stateNode));break;case 4:r=J,l=Le,J=t.stateNode.containerInfo,Le=!0,Ge(e,n,t),J=r,Le=l;break;case 0:case 11:case 14:case 15:if(!te&&(r=t.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,u=o.destroy;o=o.tag,u!==void 0&&(o&2||o&4)&&To(t,n,u),l=l.next}while(l!==r)}Ge(e,n,t);break;case 1:if(!te&&(Hn(t,n),r=t.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=t.memoizedProps,r.state=t.memoizedState,r.componentWillUnmount()}catch(i){A(t,n,i)}Ge(e,n,t);break;case 21:Ge(e,n,t);break;case 22:t.mode&1?(te=(r=te)||t.memoizedState!==null,Ge(e,n,t),te=r):Ge(e,n,t);break;default:Ge(e,n,t)}}function Mi(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var t=e.stateNode;t===null&&(t=e.stateNode=new ad),n.forEach(function(r){var l=wd.bind(null,e,r);t.has(r)||(t.add(r),r.then(l,l))})}}function Pe(e,n){var t=n.deletions;if(t!==null)for(var r=0;rl&&(l=u),r&=~o}if(r=l,r=W()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*dd(r/1960))-r,10e?16:e,nn===null)var r=!1;else{if(e=nn,nn=null,Zr=0,R&6)throw Error(y(331));var l=R;for(R|=4,k=e.current;k!==null;){var o=k,u=o.child;if(k.flags&16){var i=o.deletions;if(i!==null){for(var s=0;sW()-Cu?Cn(e,0):Eu|=t),pe(e,n)}function Ya(e,n){n===0&&(e.mode&1?(n=or,or<<=1,!(or&130023424)&&(or=4194304)):n=1);var t=ue();e=Ke(e,n),e!==null&&(Xt(e,n,t),pe(e,t))}function gd(e){var n=e.memoizedState,t=0;n!==null&&(t=n.retryLane),Ya(e,t)}function wd(e,n){var t=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(t=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(y(314))}r!==null&&r.delete(n),Ya(e,t)}var Xa;Xa=function(e,n,t){if(e!==null)if(e.memoizedProps!==n.pendingProps||fe.current)ce=!0;else{if(!(e.lanes&t)&&!(n.flags&128))return ce=!1,ud(e,n,t);ce=!!(e.flags&131072)}else ce=!1,F&&n.flags&1048576&&qs(n,Ar,n.index);switch(n.lanes=0,n.tag){case 2:var r=n.type;xr(e,n),e=n.pendingProps;var l=qn(n,re.current);Gn(n,t),l=hu(null,n,r,e,l,t);var o=yu();return n.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,de(r)?(o=!0,$r(n)):o=!1,n.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,fu(n),l.updater=sl,n.stateNode=l,l._reactInternals=n,Co(n,r,e,t),n=No(null,n,r,!0,o,t)):(n.tag=0,F&&o&&lu(n),oe(null,n,l,t),n=n.child),n;case 16:r=n.elementType;e:{switch(xr(e,n),e=n.pendingProps,l=r._init,r=l(r._payload),n.type=r,l=n.tag=kd(r),e=ze(r,e),l){case 0:n=xo(null,n,r,e,t);break e;case 1:n=zi(null,n,r,e,t);break e;case 11:n=Ni(null,n,r,e,t);break e;case 14:n=Pi(null,n,r,ze(r.type,e),t);break e}throw Error(y(306,r,""))}return n;case 0:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),xo(e,n,r,l,t);case 1:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),zi(e,n,r,l,t);case 3:e:{if(Ra(n),e===null)throw Error(y(387));r=n.pendingProps,o=n.memoizedState,l=o.element,la(e,n),Wr(n,r,null,t);var u=n.memoizedState;if(r=u.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:u.cache,pendingSuspenseBoundaries:u.pendingSuspenseBoundaries,transitions:u.transitions},n.updateQueue.baseState=o,n.memoizedState=o,n.flags&256){l=tt(Error(y(423)),n),n=Li(e,n,r,t,l);break e}else if(r!==l){l=tt(Error(y(424)),n),n=Li(e,n,r,t,l);break e}else for(ve=on(n.stateNode.containerInfo.firstChild),he=n,F=!0,Te=null,t=ta(n,null,r,t),n.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(bn(),r===l){n=Ye(e,n,t);break e}oe(e,n,r,t)}n=n.child}return n;case 5:return oa(n),e===null&&So(n),r=n.type,l=n.pendingProps,o=e!==null?e.memoizedProps:null,u=l.children,vo(r,l)?u=null:o!==null&&vo(r,o)&&(n.flags|=32),Ta(e,n),oe(e,n,u,t),n.child;case 6:return e===null&&So(n),null;case 13:return Oa(e,n,t);case 4:return du(n,n.stateNode.containerInfo),r=n.pendingProps,e===null?n.child=et(n,null,r,t):oe(e,n,r,t),n.child;case 11:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),Ni(e,n,r,l,t);case 7:return oe(e,n,n.pendingProps,t),n.child;case 8:return oe(e,n,n.pendingProps.children,t),n.child;case 12:return oe(e,n,n.pendingProps.children,t),n.child;case 10:e:{if(r=n.type._context,l=n.pendingProps,o=n.memoizedProps,u=l.value,M(Br,r._currentValue),r._currentValue=u,o!==null)if(Me(o.value,u)){if(o.children===l.children&&!fe.current){n=Ye(e,n,t);break e}}else for(o=n.child,o!==null&&(o.return=n);o!==null;){var i=o.dependencies;if(i!==null){u=o.child;for(var s=i.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=He(-1,t&-t),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var v=c.pending;v===null?s.next=s:(s.next=v.next,v.next=s),c.pending=s}}o.lanes|=t,s=o.alternate,s!==null&&(s.lanes|=t),ko(o.return,t,n),i.lanes|=t;break}s=s.next}}else if(o.tag===10)u=o.type===n.type?null:o.child;else if(o.tag===18){if(u=o.return,u===null)throw Error(y(341));u.lanes|=t,i=u.alternate,i!==null&&(i.lanes|=t),ko(u,t,n),u=o.sibling}else u=o.child;if(u!==null)u.return=o;else for(u=o;u!==null;){if(u===n){u=null;break}if(o=u.sibling,o!==null){o.return=u.return,u=o;break}u=u.return}o=u}oe(e,n,l.children,t),n=n.child}return n;case 9:return l=n.type,r=n.pendingProps.children,Gn(n,t),l=_e(l),r=r(l),n.flags|=1,oe(e,n,r,t),n.child;case 14:return r=n.type,l=ze(r,n.pendingProps),l=ze(r.type,l),Pi(e,n,r,l,t);case 15:return za(e,n,n.type,n.pendingProps,t);case 17:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),xr(e,n),n.tag=1,de(r)?(e=!0,$r(n)):e=!1,Gn(n,t),xa(n,r,l),Co(n,r,l,t),No(null,n,r,!0,e,t);case 19:return Ma(e,n,t);case 22:return La(e,n,t)}throw Error(y(156,n.tag))};function Ga(e,n){return Es(e,n)}function Sd(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ee(e,n,t,r){return new Sd(e,n,t,r)}function Pu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function kd(e){if(typeof e=="function")return Pu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ko)return 11;if(e===Yo)return 14}return 2}function cn(e,n){var t=e.alternate;return t===null?(t=Ee(e.tag,n,e.key,e.mode),t.elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=e.flags&14680064,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function zr(e,n,t,r,l,o){var u=2;if(r=e,typeof e=="function")Pu(e)&&(u=1);else if(typeof e=="string")u=5;else e:switch(e){case Dn:return _n(t.children,l,o,n);case Qo:u=8,l|=8;break;case Kl:return e=Ee(12,t,n,l|2),e.elementType=Kl,e.lanes=o,e;case Yl:return e=Ee(13,t,n,l),e.elementType=Yl,e.lanes=o,e;case Xl:return e=Ee(19,t,n,l),e.elementType=Xl,e.lanes=o,e;case os:return fl(t,l,o,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case rs:u=10;break e;case ls:u=9;break e;case Ko:u=11;break e;case Yo:u=14;break e;case Ze:u=16,r=null;break e}throw Error(y(130,e==null?e:typeof e,""))}return n=Ee(u,t,n,l),n.elementType=e,n.type=r,n.lanes=o,n}function _n(e,n,t,r){return e=Ee(7,e,r,n),e.lanes=t,e}function fl(e,n,t,r){return e=Ee(22,e,r,n),e.elementType=os,e.lanes=t,e.stateNode={isHidden:!1},e}function Hl(e,n,t){return e=Ee(6,e,null,n),e.lanes=t,e}function Wl(e,n,t){return n=Ee(4,e.children!==null?e.children:[],e.key,n),n.lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Ed(e,n,t,r,l){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=_l(0),this.expirationTimes=_l(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=_l(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function zu(e,n,t,r,l,o,u,i,s){return e=new Ed(e,n,t,i,s),n===1?(n=1,o===!0&&(n|=8)):n=0,o=Ee(3,null,null,n),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},fu(o),e}function Cd(e,n,t){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(ba)}catch(e){console.error(e)}}ba(),bi.exports=ge;var zd=bi.exports,ec,Ai=zd;ec=Ai.createRoot,Ai.hydrateRoot;const Ld="/assets/react-CHdo91hT.svg",Td="/vite.svg";function Rd(){const[e,n]=el.useState(0);return alert("hello"),le.jsxs(le.Fragment,{children:[le.jsxs("div",{children:[le.jsx("a",{href:"https://vitejs.dev",target:"_blank",children:le.jsx("img",{src:Td,className:"logo",alt:"Vite logo"})}),le.jsx("a",{href:"https://react.dev",target:"_blank",children:le.jsx("img",{src:Ld,className:"logo react",alt:"React logo"})})]}),le.jsx("h1",{children:"Vite + React Testings"}),le.jsxs("div",{className:"card",children:[le.jsxs("button",{onClick:()=>n(t=>t+1),children:["count is ",e]}),le.jsxs("p",{children:["Edit ",le.jsx("code",{children:"src/App.tsx"})," and save to test HMR"]})]}),le.jsx("p",{className:"read-the-docs",children:"Click on the Vite and React logos to learn more"})]})}ec(document.getElementById("root")).render(le.jsx(el.StrictMode,{children:le.jsx(Rd,{})})); diff --git a/html/assets/index-DiwrgTda.css b/html/assets/index-DiwrgTda.css new file mode 100644 index 000000000..7704ff608 --- /dev/null +++ b/html/assets/index-DiwrgTda.css @@ -0,0 +1 @@ +#root{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}.logo{height:6em;padding:1.5em;will-change:filter;transition:filter .3s}.logo:hover{filter:drop-shadow(0 0 2em #646cffaa)}.logo.react:hover{filter:drop-shadow(0 0 2em #61dafbaa)}@keyframes logo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion: no-preference){a:nth-of-type(2) .logo{animation:logo-spin infinite 20s linear}}.card{padding:2em}.read-the-docs{color:#888}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}} diff --git a/html/assets/index-irUF1Uvy.js b/html/assets/index-irUF1Uvy.js new file mode 100644 index 000000000..9b93580f4 --- /dev/null +++ b/html/assets/index-irUF1Uvy.js @@ -0,0 +1,40 @@ +(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function t(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=t(l);fetch(l.href,o)}})();var Bu={exports:{}},br={},Hu={exports:{}},L={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Yt=Symbol.for("react.element"),tc=Symbol.for("react.portal"),rc=Symbol.for("react.fragment"),lc=Symbol.for("react.strict_mode"),oc=Symbol.for("react.profiler"),ic=Symbol.for("react.provider"),uc=Symbol.for("react.context"),sc=Symbol.for("react.forward_ref"),ac=Symbol.for("react.suspense"),cc=Symbol.for("react.memo"),fc=Symbol.for("react.lazy"),Mi=Symbol.iterator;function dc(e){return e===null||typeof e!="object"?null:(e=Mi&&e[Mi]||e["@@iterator"],typeof e=="function"?e:null)}var Wu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Qu=Object.assign,Ku={};function lt(e,n,t){this.props=e,this.context=n,this.refs=Ku,this.updater=t||Wu}lt.prototype.isReactComponent={};lt.prototype.setState=function(e,n){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,n,"setState")};lt.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Yu(){}Yu.prototype=lt.prototype;function Uo(e,n,t){this.props=e,this.context=n,this.refs=Ku,this.updater=t||Wu}var $o=Uo.prototype=new Yu;$o.constructor=Uo;Qu($o,lt.prototype);$o.isPureReactComponent=!0;var Di=Array.isArray,Xu=Object.prototype.hasOwnProperty,Ao={current:null},Gu={key:!0,ref:!0,__self:!0,__source:!0};function Zu(e,n,t){var r,l={},o=null,i=null;if(n!=null)for(r in n.ref!==void 0&&(i=n.ref),n.key!==void 0&&(o=""+n.key),n)Xu.call(n,r)&&!Gu.hasOwnProperty(r)&&(l[r]=n[r]);var u=arguments.length-2;if(u===1)l.children=t;else if(1>>1,X=x[H];if(0>>1;Hl(gl,z))ynl(bt,gl)?(x[H]=bt,x[yn]=z,H=yn):(x[H]=gl,x[vn]=z,H=vn);else if(ynl(bt,z))x[H]=bt,x[yn]=z,H=yn;else break e}}return P}function l(x,P){var z=x.sortIndex-P.sortIndex;return z!==0?z:x.id-P.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,u=i.now();e.unstable_now=function(){return i.now()-u}}var s=[],c=[],h=1,m=null,p=3,g=!1,w=!1,k=!1,F=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,a=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(x){for(var P=t(c);P!==null;){if(P.callback===null)r(c);else if(P.startTime<=x)r(c),P.sortIndex=P.expirationTime,n(s,P);else break;P=t(c)}}function v(x){if(k=!1,d(x),!w)if(t(s)!==null)w=!0,vl(E);else{var P=t(c);P!==null&&yl(v,P.startTime-x)}}function E(x,P){w=!1,k&&(k=!1,f(N),N=-1),g=!0;var z=p;try{for(d(P),m=t(s);m!==null&&(!(m.expirationTime>P)||x&&!Ne());){var H=m.callback;if(typeof H=="function"){m.callback=null,p=m.priorityLevel;var X=H(m.expirationTime<=P);P=e.unstable_now(),typeof X=="function"?m.callback=X:m===t(s)&&r(s),d(P)}else r(s);m=t(s)}if(m!==null)var qt=!0;else{var vn=t(c);vn!==null&&yl(v,vn.startTime-P),qt=!1}return qt}finally{m=null,p=z,g=!1}}var C=!1,_=null,N=-1,B=5,T=-1;function Ne(){return!(e.unstable_now()-Tx||125H?(x.sortIndex=z,n(c,x),t(s)===null&&x===t(c)&&(k?(f(N),N=-1):k=!0,yl(v,z-H))):(x.sortIndex=X,n(s,x),w||g||(w=!0,vl(E))),x},e.unstable_shouldYield=Ne,e.unstable_wrapCallback=function(x){var P=p;return function(){var z=p;p=P;try{return x.apply(this,arguments)}finally{p=z}}}})(ns);es.exports=ns;var xc=es.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Cc=el,ye=xc;function y(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ql=Object.prototype.hasOwnProperty,_c=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Fi={},ji={};function Nc(e){return Ql.call(ji,e)?!0:Ql.call(Fi,e)?!1:_c.test(e)?ji[e]=!0:(Fi[e]=!0,!1)}function Pc(e,n,t,r){if(t!==null&&t.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return r?!1:t!==null?!t.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function zc(e,n,t,r){if(n===null||typeof n>"u"||Pc(e,n,t,r))return!0;if(r)return!1;if(t!==null)switch(t.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function se(e,n,t,r,l,o,i){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=o,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){b[e]=new se(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];b[n]=new se(n,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){b[e]=new se(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){b[e]=new se(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){b[e]=new se(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){b[e]=new se(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){b[e]=new se(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){b[e]=new se(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){b[e]=new se(e,5,!1,e.toLowerCase(),null,!1,!1)});var Bo=/[\-:]([a-z])/g;function Ho(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(Bo,Ho);b[n]=new se(n,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(Bo,Ho);b[n]=new se(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(Bo,Ho);b[n]=new se(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){b[e]=new se(e,1,!1,e.toLowerCase(),null,!1,!1)});b.xlinkHref=new se("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){b[e]=new se(e,1,!1,e.toLowerCase(),null,!0,!0)});function Wo(e,n,t,r){var l=b.hasOwnProperty(n)?b[n]:null;(l!==null?l.type!==0:r||!(2u||l[i]!==o[u]){var s=` +`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{Sl=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?yt(e):""}function Lc(e){switch(e.tag){case 5:return yt(e.type);case 16:return yt("Lazy");case 13:return yt("Suspense");case 19:return yt("SuspenseList");case 0:case 2:case 15:return e=El(e.type,!1),e;case 11:return e=El(e.type.render,!1),e;case 1:return e=El(e.type,!0),e;default:return""}}function Gl(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Dn:return"Fragment";case Mn:return"Portal";case Kl:return"Profiler";case Qo:return"StrictMode";case Yl:return"Suspense";case Xl:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ls:return(e.displayName||"Context")+".Consumer";case rs:return(e._context.displayName||"Context")+".Provider";case Ko:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Yo:return n=e.displayName||null,n!==null?n:Gl(e.type)||"Memo";case Ze:n=e._payload,e=e._init;try{return Gl(e(n))}catch{}}return null}function Tc(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Gl(n);case 8:return n===Qo?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function fn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function is(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function Rc(e){var n=is(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),r=""+e[n];if(!e.hasOwnProperty(n)&&typeof t<"u"&&typeof t.get=="function"&&typeof t.set=="function"){var l=t.get,o=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function tr(e){e._valueTracker||(e._valueTracker=Rc(e))}function us(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r="";return e&&(r=is(e)?e.checked?"true":"false":e.value),e=r,e!==t?(n.setValue(e),!0):!1}function Lr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Zl(e,n){var t=n.checked;return A({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??e._wrapperState.initialChecked})}function $i(e,n){var t=n.defaultValue==null?"":n.defaultValue,r=n.checked!=null?n.checked:n.defaultChecked;t=fn(n.value!=null?n.value:t),e._wrapperState={initialChecked:r,initialValue:t,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function ss(e,n){n=n.checked,n!=null&&Wo(e,"checked",n,!1)}function Jl(e,n){ss(e,n);var t=fn(n.value),r=n.type;if(t!=null)r==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?ql(e,n.type,t):n.hasOwnProperty("defaultValue")&&ql(e,n.type,fn(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Ai(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var r=n.type;if(!(r!=="submit"&&r!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}t=e.name,t!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,t!==""&&(e.name=t)}function ql(e,n,t){(n!=="number"||Lr(e.ownerDocument)!==e)&&(t==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}var gt=Array.isArray;function Qn(e,n,t,r){if(e=e.options,n){n={};for(var l=0;l"+n.valueOf().toString()+"",n=rr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Rt(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&t.nodeType===3){t.nodeValue=n;return}}e.textContent=n}var St={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Oc=["Webkit","ms","Moz","O"];Object.keys(St).forEach(function(e){Oc.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),St[n]=St[e]})});function ds(e,n,t){return n==null||typeof n=="boolean"||n===""?"":t||typeof n!="number"||n===0||St.hasOwnProperty(e)&&St[e]?(""+n).trim():n+"px"}function ps(e,n){e=e.style;for(var t in n)if(n.hasOwnProperty(t)){var r=t.indexOf("--")===0,l=ds(t,n[t],r);t==="float"&&(t="cssFloat"),r?e.setProperty(t,l):e[t]=l}}var Mc=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function no(e,n){if(n){if(Mc[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(y(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(y(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(y(61))}if(n.style!=null&&typeof n.style!="object")throw Error(y(62))}}function to(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ro=null;function Xo(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var lo=null,Kn=null,Yn=null;function Hi(e){if(e=Zt(e)){if(typeof lo!="function")throw Error(y(280));var n=e.stateNode;n&&(n=ol(n),lo(e.stateNode,e.type,n))}}function ms(e){Kn?Yn?Yn.push(e):Yn=[e]:Kn=e}function hs(){if(Kn){var e=Kn,n=Yn;if(Yn=Kn=null,Hi(e),n)for(e=0;e>>=0,e===0?32:31-(Wc(e)/Qc|0)|0}var lr=64,or=4194304;function wt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Mr(e,n){var t=e.pendingLanes;if(t===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=t&268435455;if(i!==0){var u=i&~l;u!==0?r=wt(u):(o&=i,o!==0&&(r=wt(o)))}else i=t&~l,i!==0?r=wt(i):o!==0&&(r=wt(o));if(r===0)return 0;if(n!==0&&n!==r&&!(n&l)&&(l=r&-r,o=n&-n,l>=o||l===16&&(o&4194240)!==0))return n;if(r&4&&(r|=t&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function Xt(e,n,t){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Re(n),e[n]=t}function Gc(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=xt),qi=" ",bi=!1;function Is(e,n){switch(e){case"keyup":return Cf.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Fs(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var In=!1;function Nf(e,n){switch(e){case"compositionend":return Fs(n);case"keypress":return n.which!==32?null:(bi=!0,qi);case"textInput":return e=n.data,e===qi&&bi?null:e;default:return null}}function Pf(e,n){if(In)return e==="compositionend"||!ti&&Is(e,n)?(e=Ms(),kr=bo=en=null,In=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:t,offset:n-e};e=r}e:{for(;t;){if(t.nextSibling){t=t.nextSibling;break e}t=t.parentNode}t=void 0}t=ru(t)}}function As(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?As(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Vs(){for(var e=window,n=Lr();n instanceof e.HTMLIFrameElement;){try{var t=typeof n.contentWindow.location.href=="string"}catch{t=!1}if(t)e=n.contentWindow;else break;n=Lr(e.document)}return n}function ri(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function Ff(e){var n=Vs(),t=e.focusedElem,r=e.selectionRange;if(n!==t&&t&&t.ownerDocument&&As(t.ownerDocument.documentElement,t)){if(r!==null&&ri(t)){if(n=r.start,e=r.end,e===void 0&&(e=n),"selectionStart"in t)t.selectionStart=n,t.selectionEnd=Math.min(e,t.value.length);else if(e=(n=t.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var l=t.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=lu(t,o);var i=lu(t,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(n=n.createRange(),n.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(n),e.extend(i.node,i.offset)):(n.setEnd(i.node,i.offset),e.addRange(n)))}}for(n=[],e=t;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof t.focus=="function"&&t.focus(),t=0;t=document.documentMode,Fn=null,co=null,_t=null,fo=!1;function ou(e,n,t){var r=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;fo||Fn==null||Fn!==Lr(r)||(r=Fn,"selectionStart"in r&&ri(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),_t&&jt(_t,r)||(_t=r,r=Fr(co,"onSelect"),0$n||(e.current=go[$n],go[$n]=null,$n--)}function M(e,n){$n++,go[$n]=e.current,e.current=n}var dn={},re=mn(dn),fe=mn(!1),_n=dn;function qn(e,n){var t=e.type.contextTypes;if(!t)return dn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in t)l[o]=n[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=l),l}function de(e){return e=e.childContextTypes,e!=null}function Ur(){I(fe),I(re)}function du(e,n,t){if(re.current!==dn)throw Error(y(168));M(re,n),M(fe,t)}function Zs(e,n,t){var r=e.stateNode;if(n=n.childContextTypes,typeof r.getChildContext!="function")return t;r=r.getChildContext();for(var l in r)if(!(l in n))throw Error(y(108,Tc(e)||"Unknown",l));return A({},t,r)}function $r(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||dn,_n=re.current,M(re,e),M(fe,fe.current),!0}function pu(e,n,t){var r=e.stateNode;if(!r)throw Error(y(169));t?(e=Zs(e,n,_n),r.__reactInternalMemoizedMergedChildContext=e,I(fe),I(re),M(re,e)):I(fe),M(fe,t)}var Ae=null,il=!1,Fl=!1;function Js(e){Ae===null?Ae=[e]:Ae.push(e)}function Xf(e){il=!0,Js(e)}function hn(){if(!Fl&&Ae!==null){Fl=!0;var e=0,n=O;try{var t=Ae;for(O=1;e>=i,l-=i,Ve=1<<32-Re(n)+l|t<N?(B=_,_=null):B=_.sibling;var T=p(f,_,d[N],v);if(T===null){_===null&&(_=B);break}e&&_&&T.alternate===null&&n(f,_),a=o(T,a,N),C===null?E=T:C.sibling=T,C=T,_=B}if(N===d.length)return t(f,_),j&&gn(f,N),E;if(_===null){for(;NN?(B=_,_=null):B=_.sibling;var Ne=p(f,_,T.value,v);if(Ne===null){_===null&&(_=B);break}e&&_&&Ne.alternate===null&&n(f,_),a=o(Ne,a,N),C===null?E=Ne:C.sibling=Ne,C=Ne,_=B}if(T.done)return t(f,_),j&&gn(f,N),E;if(_===null){for(;!T.done;N++,T=d.next())T=m(f,T.value,v),T!==null&&(a=o(T,a,N),C===null?E=T:C.sibling=T,C=T);return j&&gn(f,N),E}for(_=r(f,_);!T.done;N++,T=d.next())T=g(_,f,N,T.value,v),T!==null&&(e&&T.alternate!==null&&_.delete(T.key===null?N:T.key),a=o(T,a,N),C===null?E=T:C.sibling=T,C=T);return e&&_.forEach(function(ut){return n(f,ut)}),j&&gn(f,N),E}function F(f,a,d,v){if(typeof d=="object"&&d!==null&&d.type===Dn&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case nr:e:{for(var E=d.key,C=a;C!==null;){if(C.key===E){if(E=d.type,E===Dn){if(C.tag===7){t(f,C.sibling),a=l(C,d.props.children),a.return=f,f=a;break e}}else if(C.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Ze&&vu(E)===C.type){t(f,C.sibling),a=l(C,d.props),a.ref=mt(f,C,d),a.return=f,f=a;break e}t(f,C);break}else n(f,C);C=C.sibling}d.type===Dn?(a=Cn(d.props.children,f.mode,v,d.key),a.return=f,f=a):(v=zr(d.type,d.key,d.props,null,f.mode,v),v.ref=mt(f,a,d),v.return=f,f=v)}return i(f);case Mn:e:{for(C=d.key;a!==null;){if(a.key===C)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){t(f,a.sibling),a=l(a,d.children||[]),a.return=f,f=a;break e}else{t(f,a);break}else n(f,a);a=a.sibling}a=Wl(d,f.mode,v),a.return=f,f=a}return i(f);case Ze:return C=d._init,F(f,a,C(d._payload),v)}if(gt(d))return w(f,a,d,v);if(at(d))return k(f,a,d,v);dr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,a!==null&&a.tag===6?(t(f,a.sibling),a=l(a,d),a.return=f,f=a):(t(f,a),a=Hl(d,f.mode,v),a.return=f,f=a),i(f)):t(f,a)}return F}var et=na(!0),ta=na(!1),Br=mn(null),Hr=null,Bn=null,ui=null;function si(){ui=Bn=Hr=null}function ai(e){var n=Br.current;I(Br),e._currentValue=n}function So(e,n,t){for(;e!==null;){var r=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,r!==null&&(r.childLanes|=n)):r!==null&&(r.childLanes&n)!==n&&(r.childLanes|=n),e===t)break;e=e.return}}function Gn(e,n){Hr=e,ui=Bn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&n&&(ce=!0),e.firstContext=null)}function Ce(e){var n=e._currentValue;if(ui!==e)if(e={context:e,memoizedValue:n,next:null},Bn===null){if(Hr===null)throw Error(y(308));Bn=e,Hr.dependencies={lanes:0,firstContext:e}}else Bn=Bn.next=e;return n}var Sn=null;function ci(e){Sn===null?Sn=[e]:Sn.push(e)}function ra(e,n,t,r){var l=n.interleaved;return l===null?(t.next=t,ci(n)):(t.next=l.next,l.next=t),n.interleaved=t,Ke(e,r)}function Ke(e,n){e.lanes|=n;var t=e.alternate;for(t!==null&&(t.lanes|=n),t=e,e=e.return;e!==null;)e.childLanes|=n,t=e.alternate,t!==null&&(t.childLanes|=n),t=e,e=e.return;return t.tag===3?t.stateNode:null}var Je=!1;function fi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function la(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function He(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function un(e,n,t){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,R&2){var l=r.pending;return l===null?n.next=n:(n.next=l.next,l.next=n),r.pending=n,Ke(e,t)}return l=r.interleaved,l===null?(n.next=n,ci(r)):(n.next=l.next,l.next=n),r.interleaved=n,Ke(e,t)}function Er(e,n,t){if(n=n.updateQueue,n!==null&&(n=n.shared,(t&4194240)!==0)){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,Zo(e,t)}}function yu(e,n){var t=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,t===r)){var l=null,o=null;if(t=t.firstBaseUpdate,t!==null){do{var i={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};o===null?l=o=i:o=o.next=i,t=t.next}while(t!==null);o===null?l=o=n:o=o.next=n}else l=o=n;t={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=t;return}e=t.lastBaseUpdate,e===null?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}function Wr(e,n,t,r){var l=e.updateQueue;Je=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var s=u,c=s.next;s.next=null,i===null?o=c:i.next=c,i=s;var h=e.alternate;h!==null&&(h=h.updateQueue,u=h.lastBaseUpdate,u!==i&&(u===null?h.firstBaseUpdate=c:u.next=c,h.lastBaseUpdate=s))}if(o!==null){var m=l.baseState;i=0,h=c=s=null,u=o;do{var p=u.lane,g=u.eventTime;if((r&p)===p){h!==null&&(h=h.next={eventTime:g,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var w=e,k=u;switch(p=n,g=t,k.tag){case 1:if(w=k.payload,typeof w=="function"){m=w.call(g,m,p);break e}m=w;break e;case 3:w.flags=w.flags&-65537|128;case 0:if(w=k.payload,p=typeof w=="function"?w.call(g,m,p):w,p==null)break e;m=A({},m,p);break e;case 2:Je=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,p=l.effects,p===null?l.effects=[u]:p.push(u))}else g={eventTime:g,lane:p,tag:u.tag,payload:u.payload,callback:u.callback,next:null},h===null?(c=h=g,s=m):h=h.next=g,i|=p;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;p=u,u=p.next,p.next=null,l.lastBaseUpdate=p,l.shared.pending=null}}while(!0);if(h===null&&(s=m),l.baseState=s,l.firstBaseUpdate=c,l.lastBaseUpdate=h,n=l.shared.interleaved,n!==null){l=n;do i|=l.lane,l=l.next;while(l!==n)}else o===null&&(l.shared.lanes=0);zn|=i,e.lanes=i,e.memoizedState=m}}function gu(e,n,t){if(e=n.effects,n.effects=null,e!==null)for(n=0;nt?t:4,e(!0);var r=Ul.transition;Ul.transition={};try{e(!1),n()}finally{O=t,Ul.transition=r}}function Sa(){return _e().memoizedState}function qf(e,n,t){var r=an(e);if(t={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null},Ea(e))xa(n,t);else if(t=ra(e,n,t,r),t!==null){var l=ie();Oe(t,e,r,l),Ca(t,n,r)}}function bf(e,n,t){var r=an(e),l={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null};if(Ea(e))xa(n,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=n.lastRenderedReducer,o!==null))try{var i=n.lastRenderedState,u=o(i,t);if(l.hasEagerState=!0,l.eagerState=u,Me(u,i)){var s=n.interleaved;s===null?(l.next=l,ci(n)):(l.next=s.next,s.next=l),n.interleaved=l;return}}catch{}finally{}t=ra(e,n,l,r),t!==null&&(l=ie(),Oe(t,e,r,l),Ca(t,n,r))}}function Ea(e){var n=e.alternate;return e===$||n!==null&&n===$}function xa(e,n){Nt=Kr=!0;var t=e.pending;t===null?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function Ca(e,n,t){if(t&4194240){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,Zo(e,t)}}var Yr={readContext:Ce,useCallback:ee,useContext:ee,useEffect:ee,useImperativeHandle:ee,useInsertionEffect:ee,useLayoutEffect:ee,useMemo:ee,useReducer:ee,useRef:ee,useState:ee,useDebugValue:ee,useDeferredValue:ee,useTransition:ee,useMutableSource:ee,useSyncExternalStore:ee,useId:ee,unstable_isNewReconciler:!1},ed={readContext:Ce,useCallback:function(e,n){return Ie().memoizedState=[e,n===void 0?null:n],e},useContext:Ce,useEffect:ku,useImperativeHandle:function(e,n,t){return t=t!=null?t.concat([e]):null,Cr(4194308,4,va.bind(null,n,e),t)},useLayoutEffect:function(e,n){return Cr(4194308,4,e,n)},useInsertionEffect:function(e,n){return Cr(4,2,e,n)},useMemo:function(e,n){var t=Ie();return n=n===void 0?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Ie();return n=t!==void 0?t(n):n,r.memoizedState=r.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},r.queue=e,e=e.dispatch=qf.bind(null,$,e),[r.memoizedState,e]},useRef:function(e){var n=Ie();return e={current:e},n.memoizedState=e},useState:wu,useDebugValue:wi,useDeferredValue:function(e){return Ie().memoizedState=e},useTransition:function(){var e=wu(!1),n=e[0];return e=Jf.bind(null,e[1]),Ie().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,t){var r=$,l=Ie();if(j){if(t===void 0)throw Error(y(407));t=t()}else{if(t=n(),Z===null)throw Error(y(349));Pn&30||sa(r,n,t)}l.memoizedState=t;var o={value:t,getSnapshot:n};return l.queue=o,ku(ca.bind(null,r,o,e),[e]),r.flags|=2048,Qt(9,aa.bind(null,r,o,t,n),void 0,null),t},useId:function(){var e=Ie(),n=Z.identifierPrefix;if(j){var t=Be,r=Ve;t=(r&~(1<<32-Re(r)-1)).toString(32)+t,n=":"+n+"R"+t,t=Ht++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(t,{is:r.is}):(e=i.createElement(t),t==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,t),e[Fe]=n,e[At]=r,Da(e,n,!1,!1),n.stateNode=e;e:{switch(i=to(t,r),t){case"dialog":D("cancel",e),D("close",e),l=r;break;case"iframe":case"object":case"embed":D("load",e),l=r;break;case"video":case"audio":for(l=0;lrt&&(n.flags|=128,r=!0,ht(o,!1),n.lanes=4194304)}else{if(!r)if(e=Qr(i),e!==null){if(n.flags|=128,r=!0,t=e.updateQueue,t!==null&&(n.updateQueue=t,n.flags|=4),ht(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!j)return ne(n),null}else 2*W()-o.renderingStartTime>rt&&t!==1073741824&&(n.flags|=128,r=!0,ht(o,!1),n.lanes=4194304);o.isBackwards?(i.sibling=n.child,n.child=i):(t=o.last,t!==null?t.sibling=i:n.child=i,o.last=i)}return o.tail!==null?(n=o.tail,o.rendering=n,o.tail=n.sibling,o.renderingStartTime=W(),n.sibling=null,t=U.current,M(U,r?t&1|2:t&1),n):(ne(n),null);case 22:case 23:return _i(),r=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(n.flags|=8192),r&&n.mode&1?me&1073741824&&(ne(n),n.subtreeFlags&6&&(n.flags|=8192)):ne(n),null;case 24:return null;case 25:return null}throw Error(y(156,n.tag))}function sd(e,n){switch(oi(n),n.tag){case 1:return de(n.type)&&Ur(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return nt(),I(fe),I(re),mi(),e=n.flags,e&65536&&!(e&128)?(n.flags=e&-65537|128,n):null;case 5:return pi(n),null;case 13:if(I(U),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(y(340));bn()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return I(U),null;case 4:return nt(),null;case 10:return ai(n.type._context),null;case 22:case 23:return _i(),null;case 24:return null;default:return null}}var mr=!1,te=!1,ad=typeof WeakSet=="function"?WeakSet:Set,S=null;function Hn(e,n){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(r){V(e,n,r)}else t.current=null}function To(e,n,t){try{t()}catch(r){V(e,n,r)}}var Ru=!1;function cd(e,n){if(po=Dr,e=Vs(),ri(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var r=t.getSelection&&t.getSelection();if(r&&r.rangeCount!==0){t=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{t.nodeType,o.nodeType}catch{t=null;break e}var i=0,u=-1,s=-1,c=0,h=0,m=e,p=null;n:for(;;){for(var g;m!==t||l!==0&&m.nodeType!==3||(u=i+l),m!==o||r!==0&&m.nodeType!==3||(s=i+r),m.nodeType===3&&(i+=m.nodeValue.length),(g=m.firstChild)!==null;)p=m,m=g;for(;;){if(m===e)break n;if(p===t&&++c===l&&(u=i),p===o&&++h===r&&(s=i),(g=m.nextSibling)!==null)break;m=p,p=m.parentNode}m=g}t=u===-1||s===-1?null:{start:u,end:s}}else t=null}t=t||{start:0,end:0}}else t=null;for(mo={focusedElem:e,selectionRange:t},Dr=!1,S=n;S!==null;)if(n=S,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,S=e;else for(;S!==null;){n=S;try{var w=n.alternate;if(n.flags&1024)switch(n.tag){case 0:case 11:case 15:break;case 1:if(w!==null){var k=w.memoizedProps,F=w.memoizedState,f=n.stateNode,a=f.getSnapshotBeforeUpdate(n.elementType===n.type?k:ze(n.type,k),F);f.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=n.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(y(163))}}catch(v){V(n,n.return,v)}if(e=n.sibling,e!==null){e.return=n.return,S=e;break}S=n.return}return w=Ru,Ru=!1,w}function Pt(e,n,t){var r=n.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&To(n,t,o)}l=l.next}while(l!==r)}}function al(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function Ro(e){var n=e.ref;if(n!==null){var t=e.stateNode;switch(e.tag){case 5:e=t;break;default:e=t}typeof n=="function"?n(e):n.current=e}}function ja(e){var n=e.alternate;n!==null&&(e.alternate=null,ja(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[Fe],delete n[At],delete n[yo],delete n[Kf],delete n[Yf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Ua(e){return e.tag===5||e.tag===3||e.tag===4}function Ou(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ua(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Oo(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.nodeType===8?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(t.nodeType===8?(n=t.parentNode,n.insertBefore(e,t)):(n=t,n.appendChild(e)),t=t._reactRootContainer,t!=null||n.onclick!==null||(n.onclick=jr));else if(r!==4&&(e=e.child,e!==null))for(Oo(e,n,t),e=e.sibling;e!==null;)Oo(e,n,t),e=e.sibling}function Mo(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Mo(e,n,t),e=e.sibling;e!==null;)Mo(e,n,t),e=e.sibling}var J=null,Le=!1;function Ge(e,n,t){for(t=t.child;t!==null;)$a(e,n,t),t=t.sibling}function $a(e,n,t){if(je&&typeof je.onCommitFiberUnmount=="function")try{je.onCommitFiberUnmount(nl,t)}catch{}switch(t.tag){case 5:te||Hn(t,n);case 6:var r=J,l=Le;J=null,Ge(e,n,t),J=r,Le=l,J!==null&&(Le?(e=J,t=t.stateNode,e.nodeType===8?e.parentNode.removeChild(t):e.removeChild(t)):J.removeChild(t.stateNode));break;case 18:J!==null&&(Le?(e=J,t=t.stateNode,e.nodeType===8?Il(e.parentNode,t):e.nodeType===1&&Il(e,t),It(e)):Il(J,t.stateNode));break;case 4:r=J,l=Le,J=t.stateNode.containerInfo,Le=!0,Ge(e,n,t),J=r,Le=l;break;case 0:case 11:case 14:case 15:if(!te&&(r=t.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&To(t,n,i),l=l.next}while(l!==r)}Ge(e,n,t);break;case 1:if(!te&&(Hn(t,n),r=t.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=t.memoizedProps,r.state=t.memoizedState,r.componentWillUnmount()}catch(u){V(t,n,u)}Ge(e,n,t);break;case 21:Ge(e,n,t);break;case 22:t.mode&1?(te=(r=te)||t.memoizedState!==null,Ge(e,n,t),te=r):Ge(e,n,t);break;default:Ge(e,n,t)}}function Mu(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var t=e.stateNode;t===null&&(t=e.stateNode=new ad),n.forEach(function(r){var l=wd.bind(null,e,r);t.has(r)||(t.add(r),r.then(l,l))})}}function Pe(e,n){var t=n.deletions;if(t!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=W()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*dd(r/1960))-r,10e?16:e,nn===null)var r=!1;else{if(e=nn,nn=null,Zr=0,R&6)throw Error(y(331));var l=R;for(R|=4,S=e.current;S!==null;){var o=S,i=o.child;if(S.flags&16){var u=o.deletions;if(u!==null){for(var s=0;sW()-xi?xn(e,0):Ei|=t),pe(e,n)}function Ya(e,n){n===0&&(e.mode&1?(n=or,or<<=1,!(or&130023424)&&(or=4194304)):n=1);var t=ie();e=Ke(e,n),e!==null&&(Xt(e,n,t),pe(e,t))}function gd(e){var n=e.memoizedState,t=0;n!==null&&(t=n.retryLane),Ya(e,t)}function wd(e,n){var t=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(t=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(y(314))}r!==null&&r.delete(n),Ya(e,t)}var Xa;Xa=function(e,n,t){if(e!==null)if(e.memoizedProps!==n.pendingProps||fe.current)ce=!0;else{if(!(e.lanes&t)&&!(n.flags&128))return ce=!1,id(e,n,t);ce=!!(e.flags&131072)}else ce=!1,j&&n.flags&1048576&&qs(n,Vr,n.index);switch(n.lanes=0,n.tag){case 2:var r=n.type;_r(e,n),e=n.pendingProps;var l=qn(n,re.current);Gn(n,t),l=vi(null,n,r,e,l,t);var o=yi();return n.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,de(r)?(o=!0,$r(n)):o=!1,n.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,fi(n),l.updater=sl,n.stateNode=l,l._reactInternals=n,xo(n,r,e,t),n=No(null,n,r,!0,o,t)):(n.tag=0,j&&o&&li(n),oe(null,n,l,t),n=n.child),n;case 16:r=n.elementType;e:{switch(_r(e,n),e=n.pendingProps,l=r._init,r=l(r._payload),n.type=r,l=n.tag=Sd(r),e=ze(r,e),l){case 0:n=_o(null,n,r,e,t);break e;case 1:n=zu(null,n,r,e,t);break e;case 11:n=Nu(null,n,r,e,t);break e;case 14:n=Pu(null,n,r,ze(r.type,e),t);break e}throw Error(y(306,r,""))}return n;case 0:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),_o(e,n,r,l,t);case 1:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),zu(e,n,r,l,t);case 3:e:{if(Ra(n),e===null)throw Error(y(387));r=n.pendingProps,o=n.memoizedState,l=o.element,la(e,n),Wr(n,r,null,t);var i=n.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},n.updateQueue.baseState=o,n.memoizedState=o,n.flags&256){l=tt(Error(y(423)),n),n=Lu(e,n,r,t,l);break e}else if(r!==l){l=tt(Error(y(424)),n),n=Lu(e,n,r,t,l);break e}else for(he=on(n.stateNode.containerInfo.firstChild),ve=n,j=!0,Te=null,t=ta(n,null,r,t),n.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(bn(),r===l){n=Ye(e,n,t);break e}oe(e,n,r,t)}n=n.child}return n;case 5:return oa(n),e===null&&ko(n),r=n.type,l=n.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,ho(r,l)?i=null:o!==null&&ho(r,o)&&(n.flags|=32),Ta(e,n),oe(e,n,i,t),n.child;case 6:return e===null&&ko(n),null;case 13:return Oa(e,n,t);case 4:return di(n,n.stateNode.containerInfo),r=n.pendingProps,e===null?n.child=et(n,null,r,t):oe(e,n,r,t),n.child;case 11:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),Nu(e,n,r,l,t);case 7:return oe(e,n,n.pendingProps,t),n.child;case 8:return oe(e,n,n.pendingProps.children,t),n.child;case 12:return oe(e,n,n.pendingProps.children,t),n.child;case 10:e:{if(r=n.type._context,l=n.pendingProps,o=n.memoizedProps,i=l.value,M(Br,r._currentValue),r._currentValue=i,o!==null)if(Me(o.value,i)){if(o.children===l.children&&!fe.current){n=Ye(e,n,t);break e}}else for(o=n.child,o!==null&&(o.return=n);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=He(-1,t&-t),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var h=c.pending;h===null?s.next=s:(s.next=h.next,h.next=s),c.pending=s}}o.lanes|=t,s=o.alternate,s!==null&&(s.lanes|=t),So(o.return,t,n),u.lanes|=t;break}s=s.next}}else if(o.tag===10)i=o.type===n.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(y(341));i.lanes|=t,u=i.alternate,u!==null&&(u.lanes|=t),So(i,t,n),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===n){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}oe(e,n,l.children,t),n=n.child}return n;case 9:return l=n.type,r=n.pendingProps.children,Gn(n,t),l=Ce(l),r=r(l),n.flags|=1,oe(e,n,r,t),n.child;case 14:return r=n.type,l=ze(r,n.pendingProps),l=ze(r.type,l),Pu(e,n,r,l,t);case 15:return za(e,n,n.type,n.pendingProps,t);case 17:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),_r(e,n),n.tag=1,de(r)?(e=!0,$r(n)):e=!1,Gn(n,t),_a(n,r,l),xo(n,r,l,t),No(null,n,r,!0,e,t);case 19:return Ma(e,n,t);case 22:return La(e,n,t)}throw Error(y(156,n.tag))};function Ga(e,n){return Es(e,n)}function kd(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ee(e,n,t,r){return new kd(e,n,t,r)}function Pi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Sd(e){if(typeof e=="function")return Pi(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ko)return 11;if(e===Yo)return 14}return 2}function cn(e,n){var t=e.alternate;return t===null?(t=Ee(e.tag,n,e.key,e.mode),t.elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=e.flags&14680064,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function zr(e,n,t,r,l,o){var i=2;if(r=e,typeof e=="function")Pi(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Dn:return Cn(t.children,l,o,n);case Qo:i=8,l|=8;break;case Kl:return e=Ee(12,t,n,l|2),e.elementType=Kl,e.lanes=o,e;case Yl:return e=Ee(13,t,n,l),e.elementType=Yl,e.lanes=o,e;case Xl:return e=Ee(19,t,n,l),e.elementType=Xl,e.lanes=o,e;case os:return fl(t,l,o,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case rs:i=10;break e;case ls:i=9;break e;case Ko:i=11;break e;case Yo:i=14;break e;case Ze:i=16,r=null;break e}throw Error(y(130,e==null?e:typeof e,""))}return n=Ee(i,t,n,l),n.elementType=e,n.type=r,n.lanes=o,n}function Cn(e,n,t,r){return e=Ee(7,e,r,n),e.lanes=t,e}function fl(e,n,t,r){return e=Ee(22,e,r,n),e.elementType=os,e.lanes=t,e.stateNode={isHidden:!1},e}function Hl(e,n,t){return e=Ee(6,e,null,n),e.lanes=t,e}function Wl(e,n,t){return n=Ee(4,e.children!==null?e.children:[],e.key,n),n.lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Ed(e,n,t,r,l){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Cl(0),this.expirationTimes=Cl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Cl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function zi(e,n,t,r,l,o,i,u,s){return e=new Ed(e,n,t,u,s),n===1?(n=1,o===!0&&(n|=8)):n=0,o=Ee(3,null,null,n),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},fi(o),e}function xd(e,n,t){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(ba)}catch(e){console.error(e)}}ba(),bu.exports=ge;var zd=bu.exports,ec,Vu=zd;ec=Vu.createRoot,Vu.hydrateRoot;const Ld="/assets/react-CHdo91hT.svg",Td="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20aria-hidden='true'%20role='img'%20class='iconify%20iconify--logos'%20width='31.88'%20height='32'%20preserveAspectRatio='xMidYMid%20meet'%20viewBox='0%200%20256%20257'%3e%3cdefs%3e%3clinearGradient%20id='IconifyId1813088fe1fbc01fb466'%20x1='-.828%25'%20x2='57.636%25'%20y1='7.652%25'%20y2='78.411%25'%3e%3cstop%20offset='0%25'%20stop-color='%2341D1FF'%3e%3c/stop%3e%3cstop%20offset='100%25'%20stop-color='%23BD34FE'%3e%3c/stop%3e%3c/linearGradient%3e%3clinearGradient%20id='IconifyId1813088fe1fbc01fb467'%20x1='43.376%25'%20x2='50.316%25'%20y1='2.242%25'%20y2='89.03%25'%3e%3cstop%20offset='0%25'%20stop-color='%23FFEA83'%3e%3c/stop%3e%3cstop%20offset='8.333%25'%20stop-color='%23FFDD35'%3e%3c/stop%3e%3cstop%20offset='100%25'%20stop-color='%23FFA800'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20fill='url(%23IconifyId1813088fe1fbc01fb466)'%20d='M255.153%2037.938L134.897%20252.976c-2.483%204.44-8.862%204.466-11.382.048L.875%2037.958c-2.746-4.814%201.371-10.646%206.827-9.67l120.385%2021.517a6.537%206.537%200%200%200%202.322-.004l117.867-21.483c5.438-.991%209.574%204.796%206.877%209.62Z'%3e%3c/path%3e%3cpath%20fill='url(%23IconifyId1813088fe1fbc01fb467)'%20d='M185.432.063L96.44%2017.501a3.268%203.268%200%200%200-2.634%203.014l-5.474%2092.456a3.268%203.268%200%200%200%203.997%203.378l24.777-5.718c2.318-.535%204.413%201.507%203.936%203.838l-7.361%2036.047c-.495%202.426%201.782%204.5%204.151%203.78l15.304-4.649c2.372-.72%204.652%201.36%204.15%203.788l-11.698%2056.621c-.732%203.542%203.979%205.473%205.943%202.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505%204.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z'%3e%3c/path%3e%3c/svg%3e";function Rd(){const[e,n]=el.useState(0);return alert("hello"),le.jsxs(le.Fragment,{children:[le.jsxs("div",{children:[le.jsx("a",{href:"https://vitejs.dev",target:"_blank",children:le.jsx("img",{src:Td,className:"logo",alt:"Vite logo"})}),le.jsx("a",{href:"https://react.dev",target:"_blank",children:le.jsx("img",{src:Ld,className:"logo react",alt:"React logo"})})]}),le.jsx("h1",{children:"Vite + React Testings"}),le.jsxs("div",{className:"card",children:[le.jsxs("button",{onClick:()=>n(t=>t+1),children:["count is ",e]}),le.jsxs("p",{children:["Edit ",le.jsx("code",{children:"src/App.tsx"})," and save to test HMR"]})]}),le.jsx("p",{className:"read-the-docs",children:"Click on the Vite and React logos to learn more"})]})}ec(document.getElementById("root")).render(le.jsx(el.StrictMode,{children:le.jsx(Rd,{})})); diff --git a/html/assets/react-CHdo91hT.svg b/html/assets/react-CHdo91hT.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/html/assets/react-CHdo91hT.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/html/country_list.html b/html/country_list.html deleted file mode 100644 index acda11a8d..000000000 --- a/html/country_list.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/css/Gruntfile.js b/html/css/Gruntfile.js deleted file mode 100644 index f22dbde75..000000000 --- a/html/css/Gruntfile.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = function(grunt) { - grunt.loadNpmTasks('grunt-contrib-less'); - require('jit-grunt')(grunt); - - grunt.initConfig({ - less: { - development: { - options: { - compress: true, // change this when going to production - yuicompress: true, // change this when going to production - optimization: 2 - }, - files: { - "main.css": "less/main.less" // destination file and source file - } - } - }, - watch: { - styles: { - files: ['less/*.less'], // which files to watch - tasks: ['less'], - options: { - nospawn: true - } - } - } - }); - - grunt.registerTask('default', ['less', 'watch']); -}; diff --git a/html/css/bootstrap.css b/html/css/bootstrap.css deleted file mode 100644 index 3fe0429c8..000000000 --- a/html/css/bootstrap.css +++ /dev/null @@ -1,6795 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - margin: .67em 0; - font-size: 2em; -} -mark { - color: #000; - background: #ff0; -} -small { - font-size: 80%; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -.5em; -} -sub { - bottom: -.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - height: 0; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - margin: 0; - font: inherit; - color: inherit; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - padding: .35em .625em .75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} -legend { - padding: 0; - border: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\2a"; -} -.glyphicon-plus:before { - content: "\2b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333; - background-color: #fff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - display: inline-block; - max-width: 100%; - height: auto; - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - padding: .2em; - background-color: #fcf8e3; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover, -a.text-primary:focus { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - margin-left: -5px; - list-style: none; -} -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - -webkit-box-shadow: none; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -.row { - margin-right: -15px; - margin-left: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #ddd; -} -.table .table { - background-color: #fff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - display: table-column; - float: none; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - display: table-cell; - float: none; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - min-height: .01%; - overflow-x: auto; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); -} -.form-control::-moz-placeholder { - color: #999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999; -} -.form-control::-webkit-input-placeholder { - color: #999; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-top: 4px \9; - margin-left: -20px; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - min-height: 34px; - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 46px; - line-height: 46px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - padding-top: 7px; - margin-bottom: 0; - text-align: right; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 14.333333px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; - } -} -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333; - text-decoration: none; -} -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; - opacity: .65; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #fff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #fff; - background-color: #398439; - border-color: #255625; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #fff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #fff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #fff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - font-weight: normal; - color: #337ab7; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #262626; - text-decoration: none; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - background-color: #337ab7; - outline: 0; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - right: 0; - left: auto; -} -.dropdown-menu-left { - right: auto; - left: 0; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - display: table-cell; - float: none; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-right: 0; - padding-left: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eee; -} -.nav > li.disabled > a { - color: #777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eee #eee #ddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #fff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - -webkit-overflow-scrolling: touch; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-right: 0; - padding-left: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - height: 50px; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777; -} -.navbar-default .navbar-nav > li > a { - color: #777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #ddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #ddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555; - background-color: #e7e7e7; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777; -} -.navbar-default .navbar-link:hover { - color: #333; -} -.navbar-default .btn-link { - color: #777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; -} -.navbar-inverse { - background-color: #222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #fff; - background-color: #080808; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #fff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0"; -} -.breadcrumb > .active { - color: #777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 3; - color: #23527c; - background-color: #eee; - border-color: #ddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 2; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777; - cursor: not-allowed; - background-color: #fff; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: middle; - background-color: #777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #fff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border .2s ease-in-out; - -o-transition: border .2s ease-in-out; - transition: border .2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-right: auto; - margin-left: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); -} -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - -webkit-transition: width .6s ease; - -o-transition: width .6s ease; - transition: width .6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - overflow: hidden; - zoom: 1; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - padding-left: 0; - margin-bottom: 20px; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} -.list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - color: #555; - text-decoration: none; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - color: #777; - cursor: not-allowed; - background-color: #eee; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: 0 1px 1px rgba(0, 0, 0, .05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-right: 15px; - padding-left: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - margin-bottom: 0; - border: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #ddd; -} -.panel-default > .panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #ddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, .15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: .2; -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5; -} -button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.modal-open { - overflow: hidden; -} -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: 0; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0; -} -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5; -} -.modal-header { - min-height: 16.42857143px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-style: normal; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - filter: alpha(opacity=0); - opacity: 0; - - line-break: auto; -} -.tooltip.in { - filter: alpha(opacity=90); - opacity: .9; -} -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-left .tooltip-arrow { - right: 5px; - bottom: 0; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - font-style: normal; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - - line-break: auto; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - content: ""; - border-width: 10px; -} -.popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0; -} -.popover.top > .arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0; -} -.popover.right > .arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #fff; - border-left-width: 0; -} -.popover.bottom > .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, .25); -} -.popover.bottom > .arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #fff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, .25); -} -.popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: .6s ease-in-out left; - -o-transition: .6s ease-in-out left; - transition: .6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform .6s ease-in-out; - -o-transition: -o-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - left: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - left: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - left: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); - filter: alpha(opacity=50); - opacity: .5; -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control:hover, -.carousel-control:focus { - color: #fff; - text-decoration: none; - filter: alpha(opacity=90); - outline: 0; - opacity: .9; -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - margin-top: -10px; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - font-family: serif; - line-height: 1; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); - border: 1px solid #fff; - border-radius: 10px; -} -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff; -} -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -15px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -15px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-right: auto; - margin-left: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} - -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*# sourceMappingURL=bootstrap.css.map */ diff --git a/html/css/bootstrap.min.css b/html/css/bootstrap.min.css deleted file mode 100644 index d65c66b1b..000000000 --- a/html/css/bootstrap.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/html/css/bootstrap.min.css.old b/html/css/bootstrap.min.css.old deleted file mode 100755 index a5f2ca305..000000000 --- a/html/css/bootstrap.min.css.old +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.js/jquery-1.9.1.min.js-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover{color:#808080}.text-warning{color:#c09853}a.text-warning:hover{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover{color:#2d6987}.text-success{color:#468847}a.text-success:hover{color:#356635}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.warning td{background-color:#fcf8e3}.table tbody tr.info td{background-color:#d9edf7}.table-hover tbody tr.success:hover td{background-color:#d0e9c6}.table-hover tbody tr.error:hover td{background-color:#ebcccc}.table-hover tbody tr.warning:hover td{background-color:#faf2cc}.table-hover tbody tr.info:hover td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #bbb;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,0.15) rgba(0,0,0,0.15) rgba(0,0,0,0.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret{border-top-color:#555;border-bottom-color:#555}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media .pull-left{margin-right:10px}.media .pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/html/css/dashboard.css b/html/css/dashboard.css deleted file mode 100644 index 69355a513..000000000 --- a/html/css/dashboard.css +++ /dev/null @@ -1,1371 +0,0 @@ -/* = DASHBOARD -================================================ */ -#pedalboard { - bottom:0; - left:0; - position:absolute; - right:0; - top:0; -} - -#pedalboard-dashboard { - background:#111 url(../img/background.jpg) repeat; - background-size: auto 1200px; - position: absolute; - top: 45px; - left: 0; - bottom: 45px; - right: 0; -} - -#pedalboard-dashboard.dev_api:after { - content: "DEV API enabled"; - color: #555; - position: absolute; - top: 10px; - left: 10px; - font-size: 50px; -} - -#zoom-controllers { - position:absolute; - right:0px; - top:0px; - z-index:10; -} -#zoom-controllers > span { - display: inline-block; - background: transparent; - cursor:pointer; - display:block; - float:left; - height:45px; - width:45px; - background-position:center center; - background-repeat:no-repeat; - background-size:24px; - transition: all 0.33s; - opacity: 0.66; - margin: 0; - padding: 0; -} -#zoom-controllers > span:hover, -#zoom-controllers > span:active { - background-color:#000; - opacity: 1; -} -#zoom-controllers > span:first-child { - background-image:url(../img/icn-zoom-out.png); -} -#zoom-controllers > span:last-child { - background-image:url(../img/icn-zoom-in.png); -} - - -/* Pedalboard Info - Header */ -#pedalboard-info { - height:100%; - position: absolute; - left:45px; - right: 90px; - margin:0; - padding:0; - display: inline-block; -} - -#pedalboard-info > h1 { - max-width: calc(100% - 720px); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -#pedalboard-info .title { - color:#fff; - cursor:pointer; - display:block; - float:left; - height:36px; - font-size:18px; - font-weight:bold; - line-height:2; - margin-right:10px; - overflow:hidden; - position:relative; -} - - -#pedalboard-info .favorite { - background:url(../img/icn-favorite-off.png) no-repeat center center; - cursor:pointer; - float:left; - height:36px; - width:36px; -} - -#pedalboard-info .favorite.selected { - background:url(../img/icn-favorite-on.png) no-repeat center center; -} - -#pedalboard-info .settings { - background:url(../img/icn-settings.png) no-repeat center center; - cursor:pointer; - float:left; - height:36px; - width:36px; -} - -#pedalboard-info .settings.selected { - background-color:#444; -} - -#pedalboard-info .settings a, -#pedalboard-info .favorite a { - display:block; - height:36px; - text-align:center; - width:36px; -} - -#pedalboard-info .actions { - font-weight:bold; - position:absolute; - right:0; - top:0; - text-align:right; -} - -#pedalboard-info .actions > button { - margin-top:-25px; -} - -#pedalboard-info .actions .separator { - border-left:1px dotted #444; - display:inline-block; - height:100%; - margin:0 6px; -} - -/* Pedalboard Settings Window */ -#pedalboard-settings { - background:#444; - bottom:46px; - left:0; - padding:10px; - position:absolute; - right:0; - top:36px; - z-index:2; -} - -#pedalboard-settings h1 { - color:#fff; - font-size:24px; - line-height:1; - text-shadow:0 1px 3px #000; -} - -/* Share Pedalboard */ - -/*#pedalboard-sharing { - height:36px; - position:absolute; - right:0; - top:0; -} - -#pedalboard-sharing .button { - background:#222 url(../img/icn-share.png) no-repeat center center; - cursor:pointer; - height:36px; - width:64px; -} -*/ -#pedalboard-sharing .button:hover, #pedalboard-sharing .button.selected { - background-color:#444; -} - -#pedalboard-sharing-popup { - background:#444; - bottom:0; - padding:10px; - position:absolute; - left:0; - right:0; - top:36px; - z-index:3; -} - -#pedalboard-sharing-popup h1 { - color:#fff; - font-size:18px; - margin:0 0 10px 0; - padding:0; - text-shadow:0 1px 0 #000; -} - -#pedalboard-sharing-popup label { - color:#fff; - float:left; - font-size:11px; - font-weight:bold; - height:30px; - line-height:2.9; - margin-bottom:10px; - text-align:left; - text-shadow:0 1px 2px #000; - text-transform:uppercase; - width:85px; -} - -#pedalboard-sharing-popup textarea { - height:150px; - margin-bottom:10px; -} - -#pedalboard-sharing-popup .item-list { - color:#fff; - font-size:11px; - font-weight:bold; - list-style:none; - margin:6px 0 10px 84px; - padding:0; -} - -#pedalboard-sharing-popup .item-list .item { - background:#2b2b2b; - display:block; - float:left; - height:18px; - padding:3px 9px; -} - -#pedalboard-sharing-popup .submit { - text-align:right; -} - - - - -/* = CONNECTORS -================================================ */ - -/* AUDIO */ - -.mod-audio-output .mod-output-jack { - background-image: url(../img/audio-jack-nconnect.png); - background-repeat: no-repeat; - background-position: 0 0; - position: absolute; - width: 128px !important; - height: 56px; - cursor: pointer; - top: 0; -} -.mod-audio-output.output-connected .mod-output-jack { - background-image: url(../img/audio-jack.png); - background-size: 50%; - background-position: 100% 100%; - height: 70px; -} -.mod-audio-output .mod-output-jack.jack-connecting { - background-image: url(../img/audio-jack.png); - background-size: 100%; - height: 56px; -} - -.mod-audio-output { - background-image: url(../img/audio-output.png); - background-repeat: no-repeat; - position: absolute; - width: 87px; - height: 56px; - left: 0px; - z-index: 90; -} -.mod-audio-output.output-connecting { - background-image: url(../img/audio-output-connected.png); -} -.mod-audio-output.output-connected { - background-image: url(../img/audio-output-connected.png); -} - - -.mod-audio-input .mod-output-jack { - width: 128px !important; - height: 56px; - cursor: pointer; -} - -.mod-audio-input { - background-image: url(../img/audio-input.png); - background-repeat: no-repeat; - background-position: 50% 100%; - position: absolute; - width: 88px; - height: 56px; - right: 0px; - z-index: 90; -} -.mod-audio-input.input-connecting { - background-image: url(../img/audio-input-connecting.png); -} -.mod-audio-input.input-connecting-highlight { - background-image: url(../img/audio-input-connecting-highlight.png); -} -.mod-audio-input.input-connected:not(.expanded) { - background-image: url(../img/audio-input-connected.png); -} -.mod-audio-input.input-connected.input-connecting-highlight { - background-image: url(../img/audio-input-connected-highlight.png); -} -.mod-audio-input .mod-output-jack.jack-connecting { - background-image: url(../img/audio-jack.png); -} - -/* MIDI */ - - -.mod-midi-output .mod-output-jack { - background-image: url(../img/midi-jack-nconnect.png); - background-repeat: no-repeat; - background-position: 0 0; - position: absolute; - width: 78px !important; - height: 56px; - cursor: pointer; -} -.mod-midi-output.output-connected .mod-output-jack { - background-image: url(../img/midi-jack.png); - background-size: 50%; - background-position: 100% 100%; - height: 70px; -} -.mod-midi-output .mod-output-jack.jack-connecting { - background-image: url(../img/midi-jack.png); - background-size: 100%; - height: 56px; -} - -.mod-midi-output { - background-image: url(../img/midi-output.png); - background-repeat: no-repeat; - position: absolute; - width: 78px; - height: 56px; - left: 0px; - z-index: 90; -} -.mod-midi-output.output-connecting { - background-image: url(../img/midi-output-connected.png); -} -.mod-midi-output.output-connected { - background-image: url(../img/midi-output-connected.png); -} - - -.mod-midi-input .mod-output-jack { - width: 78px !important; - height: 56px; - cursor: pointer; -} - -.mod-midi-input { - background-image: url(../img/midi-input.png); - background-repeat: no-repeat; - background-position: 50% 100%; - position: absolute; - width: 76px; - height: 56px; - right: 0px; - z-index: 90; -} -.mod-midi-input.input-connecting { - background-image: url(../img/midi-input-connecting.png); -} -.mod-midi-input.input-connecting-highlight { - background-image: url(../img/midi-input-connecting-highlight.png); -} -.mod-midi-input.input-connected:not(.expanded) { - background-image: url(../img/midi-input-connected.png); -} -.mod-midi-input.input-connected.input-connecting-highlight { - background-image: url(../img/midi-input-connected-highlight.png); -} -.mod-midi-input .mod-output-jack.jack-connecting { - background-image: url(../img/midi-jack.png); -} - - -/* CV */ - - -.mod-cv-output .mod-output-jack { - background-image: url(../img/cv-jack-nconnect.png); - background-repeat: no-repeat; - background-position: 0 0; - position: absolute; - width: 80px !important; - height: 56px; - cursor: pointer; - top: 0; -} -.mod-cv-output.output-connected .mod-output-jack { - background-image: url(../img/cv-jack.png); - background-size: 50%; - background-position: 100% 100%; - height: 70px; -} -.mod-cv-output .mod-output-jack.jack-connecting { - background-image: url(../img/cv-jack.png); - background-size: 100%; - height: 56px; -} - -.mod-cv-output { - background-image: url(../img/cv-output.png); - background-repeat: no-repeat; - position: absolute; - width: 80px; - height: 56px; - left: 0px; - z-index: 90; -} -.mod-cv-output.output-connecting { - background-image: url(../img/cv-output-connected.png); -} -.mod-cv-output.output-connected { - background-image: url(../img/cv-output-connected.png); -} - - -.mod-cv-input .mod-output-jack { - width: 80px !important; - height: 56px; - cursor: pointer; -} - -.mod-cv-input { - background-image: url(../img/cv-input.png); - background-repeat: no-repeat; - background-position: 50% 100%; - position: absolute; - width: 80px; - height: 56px; - right: 0px; - z-index: 90; -} -.mod-cv-input.input-connecting { - background-image: url(../img/cv-input-connecting.png); -} -.mod-cv-input.input-connecting-highlight { - background-image: url(../img/cv-input-connecting-highlight.png); -} -.mod-cv-input.input-connected:not(.expanded) { - background-image: url(../img/cv-input-connected.png); -} -.mod-cv-input.input-connected.input-connecting-highlight { - background-image: url(../img/cv-input-connected-highlight.png); -} -.mod-cv-input .mod-output-jack.jack-connecting { - background-image: url(../img/cv-jack.png); -} - - -/* = PEDAL - dragging dummy icon -================================================ */ -.pedal.dummy { - padding-top: 16px; -} - -/* = PEDAL - JACK -================================================ */ -.pedal .jack-connected { - height:20px; - position:absolute; - width:100px; - z-index:-1; -} - -.pedal .pedal-input .mod-input .jack-connected { - left:0 !important; - position:absolute; - top:4px !important; -} - - -/* = CABLE -================================================ */ -svg .shadow { - fill: none; - stroke: rgba(0,0,0,0.66); - stroke-width: 10; - z-index: -1; - -webkit-transform: translateY(1px); - transform: translateY(1px); -} -svg .cable { - fill: none; - stroke: #81009A; - stroke-width: 7; - z-index: 0; -} -svg .light { - fill: none; - stroke: #B248B4; - stroke-width: 1.5; - z-index: 1; - -webkit-transform: translateY(1px); - transform: translateY(1px); -} - -.mod-midi svg .shadow { - stroke: rgba(0,0,0,0.66); -} -.mod-midi svg .cable { - stroke: #00546C; -} -.mod-midi svg .light { - stroke: #00A3C4; -} - -.mod-cv svg .shadow { - stroke: rgba(0,0,0,0.66); -} -.mod-cv svg .cable { - stroke: #B86743; -} -.mod-cv svg .light { - stroke: #E48E67; -} - -svg .connecting-shadow { fill: none; stroke: #077; stroke-width: 10; z-index: 1000; } -svg .connecting-cable { fill: none; stroke: #0AA; stroke-width: 8; z-index: 1000; } -svg .connecting-light { fill: none; stroke: #6FF; stroke-width: 1; z-index: 1001; -webkit-transform: translateY(2px); transform: translateY(2px); } - - -/* = PEDALBOARD - ADDRESSING -================================================ */ -.pedalboard-addressing { - background:#444; - bottom:0px; - color:white; - left:0; - overflow:hidden; - position:absolute; - right:0; - top:36px; - z-index:1000; -} - -.pedalboard-addressing header { - margin:0 0 9px 0; -} - -.pedalboard-addressing h1 { - color:#fff; - display:inline-block; - font-size:24px; -} - -.pedalboard-addressing .actuators { - bottom:47px; - left:0; - overflow:auto; - position:fixed; - top:37px; - width:200px; -} - -.pedalboard-addressing .actuators a { - color:white; - display:block; - padding:3px 9px; - text-decoration:none; -} - -.pedalboard-addressing .actuators ul { - list-style:none; - margin:0; - padding:0; -} - -.pedalboard-addressing .actuators ul li.title { - background:#222; - font-weight:bold; - padding:3px 9px; - text-transform:uppercase; -} - -.pedalboard-addressing .actuators ul li { - background:#333; - cursor:pointer; - line-height:2; - margin-bottom:1px; - padding:0; -} - -.pedalboard-addressing .actuators ul li.selected { - background:#444; -} - -.pedalboard-addressing .parameters { - background:#444; - bottom:0; - left:200px; - overflow:auto; - position:absolute; - right:0; - top:1px; -} - -.pedalboard-addressing .parameters .actuator { - border-color:#333; - border-style:solid; - border-width:0 0 2px 0; - margin-bottom:27px; -} - -.pedalboard-addressing .parameters .save { - margin-bottom:310px; -} - -.pedalboard-addressing .parameters th { - font-size:11px; - text-transform:uppercase; -} - -.pedalboard-addressing .parameters th, -.pedalboard-addressing .parameters td { - border-color:#333; - padding:6px 27px; -} - -.pedalboard-addressing .parameters th.order, -.pedalboard-addressing .parameters td.order { - padding:6px; - text-align:center; - width:30px; -} - -.pedalboard-addressing .parameters th.parameter, -.pedalboard-addressing .parameters td.parameter { - width:100%; -} - -.pedalboard-addressing .parameters th.move, -.pedalboard-addressing .parameters td.move { - padding:6px 0; - text-align:right; - width:24px; -} - -.pedalboard-addressing .parameters th.remove, -.pedalboard-addressing .parameters td.remove { - padding:6px 0; - text-align:right; - width:24px; -} - -.pedalboard-addressing .parameters td.move span { - background-image:url(../img/move.png); - background-position:left center; - background-repeat:no-repeat; - cursor:pointer; - display:block; - height:22px; - margin:-1px 6px 0 0; - width:24px; -} - -.pedalboard-addressing .parameters td.remove:hover span { - background-position:right center; -} - -.pedalboard-addressing .parameters td.remove span { - background-image:url(../img/icn-remove-bank.png); - background-position:left center; - background-repeat:no-repeat; - cursor:pointer; - display:block; - height:22px; - margin:-1px 6px 0 0; - width:24px; -} - -.pedalboard-addressing .parameters td.move:hover span { - background-position:right center; -} - - -/* SAVE POP-UP */ -.save-popup { - background:rgba(0,0,0,.75); - bottom:0; - left:0; - position:absolute; - right:0; - top:0; - z-index:1001; -} - -.save-popup .box { - background:white; - left:50%; - margin:-150px -168px; - padding:18px; - position:absolute; - top:50%; - width:300px; -} - -.save-popup h1 { - font-size:18px; - line-height:1; - margin:0 0 18px 0; - padding:0; - text-transform:uppercase; -} - - -.save-popup .actions { - border-color:#ddd; - border-style:solid; - border-width:1px 0 0 0; - margin:9px 0 0 0; - padding:18px 0 0 0; - text-align:right; -} - -.save-popup:not(#midi-ports-window) label { - display:inline-block; - float:left; - line-height:2; - width:96px; -} - -.save-popup input[type="text"] { - width:190px; -} - - -#midi-ports-window .mod-box { - width:500px; - margin:-150px -280px; -} -#midi-ports-list { - width:500px; -} -#midi-ports-window input { - vertical-align:text-top; - margin-right:3px; -} - - -#registration-form.mod-box { - width:329px; -} - -#registration-form.mod-box label { - width:125px; -} - -#registration-form.mod-box select { - width:204px; -} -#registration-form .error { - background:#f2dede; - border:1px solid #eed3d7; - color:#b94a48; - margin-bottom:18px; - padding:9px; -} - -/* SHARE WINDOW */ -.close-window { - position: absolute; - right: 15px; - top: 15px; - cursor: pointer; -} - -#share-window .box { - margin-left: -200px; - top: 200px; - width: 400px; -} - -#share-window form { - margin: 0 !important; -} - -#share-window #record-rec { - border-radius: 50% !important; - padding: 0 !important; - width: 75px; -} -#record-rec u { - border-radius: 50%; - width: 40px; - height: 40px; - margin: 16px auto; - display: block; - background: #d43f3a; - border: 4px solid white; -} -#share-window span.btn { - text-align: center; - color: white; - font-size: 40px; - line-height: 50px; - padding-top: 15px; - margin: 15px auto; - display: block; - width: 150px; - height: 75px; -} -#share-window .btn-large { - width:60%; - margin:5px auto 0 auto; - text-align: left; - white-space: normal; -} -#share-window .btn-large img{ - height: 20px; - float: right; -} -#share-window .fb { - background-color: #3b5998 !important; - border-color: transparent !important; -} -#share-window .tw { - background-color: #55acee !important; - color: white; -} -#share-window .tooltip { - transition: opacity 500ms; -} -#share-window .btn-group { - width: 100%; -} -#share-window input.share-url { - margin: 30px auto; - display: block; - width: 100% ; - border: 1px solid #e1e1e1; - padding-left: 5px; -} -#share-window input.share-url::selection { - background-color: #883996; - color: white; -} -#share-window h3 { - text-align: center; - margin-bottom: 1em; -} - -#share-window .form-control { - width: 585px; -} - -#share-window .form-control input { - width: 100%; -} - -.save-popup#share-window label { - width: 585px; -} - -#share-window .record #record-rec.recording { - background-color: red; - border-radius: 50px !important; -} - -#share-window .textcenter{ - width: 100%; - float: left; - margin: auto; -} -#share-window-wrapper { - height: 415px; -} -#share-window-bottom { - border-top: 1px solid #ddd; - display: block; - width: 100%; - padding-top: 10px; - float: left; -} - -/* -#share-window-bottom label { - background: url("../img/facebook-menu-sprite.png") no-repeat top right; - height: 36px; - width: 210px; - padding-top: 3px; - margin-bottom: -6px; -} - -#share-window-bottom input { - vertical-align: baseline; -} -*/ - -#fb-authorization-container { - float: left; - position: relative; - height: 30px; - width: 280px; -} -#fb-authorization-container iframe { - border: 0; - width: 280px; - height: 50px; - position: absolute; - top: 0; - left: 0; -} - -#share-window img.loading { - height: 66px; - left: 50%; - margin: -33px 0 0 -33px; - position: relative; - top: 50%; -} - -#share-window img.screenshot { - background-color: #292929; -} - - - - - - - - - -/* MOD LIST */ - - -.mod-list { - padding: 0; - margin: 0; -} -.mod-list-item { - padding: 0; - margin: 0; - list-style: none; -} -.mod-list-item:nth-child(even) { - background: #eee; -} -.mod-list-item:nth-child(odd) { - background: #fff; -} - - - - - -/* MOD BUTTON */ - -.mod-button { - transition: all 0.3s; - padding: 0.2em 0.5em; - display: inline-block; - color: white; - font-size: 16px; - cursor: pointer; - vertical-align: middle; - box-sizing: border-box; -} -.mod-button:hover { - -} -.mod-button-bar { - box-sizing: border-box; -} - -.mod-button, -.mod-button-bar { - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#333333), color-stop(100%,#222222)); - background: -webkit-linear-gradient(top, #333333 0%,#222222 100%); - background: linear-gradient(to bottom, #333333 0%,#222222 100%); - transition: background 0.3s; -} - -.mod-button:hover { - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#555555), color-stop(100%,#444444)); - background: -webkit-linear-gradient(top, #555555 0%,#444444 100%); - background: linear-gradient(to bottom, #555555 0%,#444444 100%); -} - -.mod-light .mod-button { -/* - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(238,238,238,1))); - background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(238,238,238,1) 100%); - background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(238,238,238,1) 100%); -*/ - background: transparent; - box-shadow: 0 0px 0px rgba(0, 0, 0, 0.0); - color: #666; -} -.mod-light .mod-button:hover { - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(221,221,221,1))); - background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(221,221,221,1) 100%); - background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(221,221,221,1) 100%); - box-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.66); - color: #000; -} -.mod-light .mod-button .mod-icon { - opacity: 0.5; - transition: opacity 0.3s; -} - -.mod-light .mod-button:hover .mod-icon { - opacity: 1; -} - -.mod-button.mod-confirm, -.mod-button.mod-confirm:hover { - opacity: 1; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a90329), color-stop(44%,#8f0222), color-stop(100%,#6d0019)); - background: -webkit-linear-gradient(top, #a90329 0%,#8f0222 44%,#6d0019 100%); - background: linear-gradient(to bottom, #a90329 0%,#8f0222 44%,#6d0019 100%); -} - - - - - -/* MOD POPOUT */ - -.mod-popout { - -} -.mod-popout .mod-popout-anchor { - position: absolute; - background-repeat: no-repeat; -} -.mod-popout .mod-popout-container { - background: #111; - border: 1px solid #AA0088; -} - -.mod-popout.mod-anchor-n { - -} -.mod-popout.mod-anchor-e { - -} -.mod-popout.mod-anchor-s { - -} -.mod-popout.mod-anchor-w { - -} -.mod-popout.mod-anchor-ne { - -} -.mod-popout.mod-anchor-se { - -} -.mod-popout.mod-anchor-sw { - -} -.mod-popout.mod-anchor-nw { - -} - - -.mod-popout.mod-anchor-n .mod-popout-anchor { - background-position: 50% 0; - background-image: url(../img/mod-popout-anchor-top.png); - -} -.mod-popout.mod-anchor-e .mod-popout-anchor { - background-position: 100% 50%; - background-image: url(../img/mod-popout-anchor-right.png); -} -.mod-popout.mod-anchor-s .mod-popout-anchor { - background-position: 50% 100%; - background-image: url(../img/mod-popout-anchor-bottom.png); -} -.mod-popout.mod-anchor-w .mod-popout-anchor { - background-position: 0 50%; - background-image: url(../img/mod-popout-anchor-left.png); -} -.mod-popout.mod-anchor-ne .mod-popout-anchor { - background-position: 100% 0; - background-image: url(../img/mod-popout-anchor-right.png); -} -.mod-popout.mod-anchor-se .mod-popout-anchor { - background-position: 100% 100%; - background-image: url(../img/mod-popout-anchor-right.png); -} -.mod-popout.mod-anchor-sw .mod-popout-anchor { - background-position: 0 100%; - background-image: url(../img/mod-popout-anchor-left.png); -} -.mod-popout.mod-anchor-nw .mod-popout-anchor { - background-position: 0 0; - background-image: url(../img/mod-popout-anchor-left.png); -} - - -.mod-popout.mod-anchor-n .mod-popout-content { - border-top-width: 1px; - margin-top: 10px; -} -.mod-popout.mod-anchor-e .mod-popout-content { - border-right-width: 1px; - margin-right: 10px; -} -.mod-popout.mod-anchor-s .mod-popout-content { - border-bottom-width: 1px; - margin-bottom: 10px; -} -.mod-popout.mod-anchor-w .mod-popout-content { - border-left-width: 1px; - margin-left: 10px; -} -.mod-popout.mod-anchor-ne .mod-popout-content { - border-right-width: 1px; - margin-right: 10px; -} -.mod-popout.mod-anchor-se .mod-popout-content { - border-right-width: 1px; - margin-right: 10px; -} -.mod-popout.mod-anchor-sw .mod-popout-content { - border-left-width: 1px; - margin-left: 10px; -} -.mod-popout.mod-anchor-nw .mod-popout-content { - border-left-width: 1px; - margin-left: 10px; -} - - -/* MOD ICON */ -/* icon definitions in img/icons/icons.css */ - -.mod-icon { - width: 32px; - height: 32px; - vertical-align: middle; - display: inline-block; - background-repeat: no-repeat; - background-position: 50% 50%; - background-size: contain; - opacity: 0.8; -} - - - - - -.mod-confirm .mod-icon { - background-image: url(../img/icons/36/confirm.png) !important; -} - - - - -.preset-manager { - position: absolute; - top: 10px; - left: 10px; - z-index: 1000; - transition: all 0.3s; -/* - pointer-events: none; - touch-callout: none; - user-select: none; - user-drag: none; - -webkit-pointer-events: none; - -webkit-touch-callout: none; - -webkit-user-select: none; - -webkit-user-drag: none; -*/ -} - -.preset-manager.active { - background: rgba(0, 0, 0, 0.5); -/* - pointer-events: auto; - touch-callout: auto; - user-select: auto; - user-drag: auto; - -webkit-pointer-events: auto; - -webkit-touch-callout: auto; - -webkit-user-select: auto; - -webkit-user-drag: auto; -*/ -} - -.preset-manager .preset-manager-entry { - background: none; - border: none; - color: white; - - opacity: 0.33; - - font-family: 'Ek Mukta', sans-serif; - font-weight: 100; - - font-size: 32px; - line-height: 48px; - height: 48px; - - box-sizing: border-box; - - box-shadow: none !important; - text-shadow: 0 2px 5px black; - - transition: all 0.3s; - - padding: 0; - margin: 0; - - outline: 0; - - width: auto; -/* - pointer-events: none; - touch-callout: none; - user-select: none; - user-drag: none; - -webkit-pointer-events: none; - -webkit-touch-callout: none; - -webkit-user-select: none; - -webkit-user-drag: none; -*/ -} -.preset-manager.active .preset-manager-entry { - opacity: 1; -/* - pointer-events: auto; - touch-callout: auto; - user-select: auto; - user-drag: auto; - -webkit-pointer-events: auto; - -webkit-touch-callout: auto; - -webkit-user-select: auto; - -webkit-user-drag: auto; -*/ -} - -.preset-manager > .mod-button-bind { - margin: 3px; -} - -.preset-manager .preset-manager-container { - overflow: hidden; - transition: opacity 0.3s; - display: none; - opacity: 0; - position: absolute; - top: 48px; - box-shadow: 0 4px 10px black; -} -.preset-manager.active .preset-manager-container { - opacity: 1; - display: block; -} - - -.preset-manager .mod-button-bar .mod-button { - width: 50%; - text-align: center; -} - -.preset-manager .mod-list { - max-height: 400px; - overflow-y: scroll; -} -.preset-manager .mod-list .mod-list-item { - height: 50px; - position: relative; - transition: height 0.3s; - overflow: hidden; -} -.preset-manager .mod-list .mod-list-item:hover { - background: #ddd; -} -.preset-manager .mod-list .preset-manager-preset-name { - font-size: 1.2em; - height: 50px; - line-height: 50px; - margin-right: 168px; - cursor: pointer; - white-space: nowrap; - padding: 0 5px; - box-sizing: border-box; -} -.preset-manager .mod-list .mod-list-item.editing .preset-manager-preset-name { - opacity: 0; -} - -.preset-manager .mod-list .preset-manager-preset-entry { - display: none; - font-size: 1.2em; - height: 50px; - line-height: 50px; - border: none; - padding: 0 5px; - box-sizing: border-box; - box-shadow: none; - background: transparent; - position: absolute; - top: 0; - left: 0; -} -.preset-manager .mod-list .mod-list-item.editing .preset-manager-preset-entry { - display: block; -} - - -.preset-manager .mod-list .preset-manager-preset-bindstate { - display: inline-block; -} - -.preset-manager .mod-list .mod-button { - position: absolute; - top: 3px; -} -.preset-manager .mod-list .mod-button.mod-button-remove { - right: 58px; -} -.preset-manager .mod-list .mod-button.mod-button-bind { - right: 3px; -} -.preset-manager .mod-list .mod-button.mod-button-edit { - right: 113px; -} - -/* = PEDALBOARD - SNAPSHOTS -================================================ */ -#pedal-presets-list { - background-color: inherit; -} -#pedal-presets-list-input { - z-index: 1; -} -#pedal-presets-list-input::selection { - background: #883996 !important; - color: white !important; -} - -@media only screen and (max-width: 1468px) { - #plugins-library .count { - display: none; - } -} -@media only screen and (max-width: 1140px) { - #effect-tab-Favorites { - display: none !important; - } -} diff --git a/html/css/fontello/LICENSE.txt b/html/css/fontello/LICENSE.txt deleted file mode 100644 index 952a62dee..000000000 --- a/html/css/fontello/LICENSE.txt +++ /dev/null @@ -1,30 +0,0 @@ -Font license info - - -## Font Awesome - - Copyright (C) 2016 by Dave Gandy - - Author: Dave Gandy - License: SIL () - Homepage: http://fortawesome.github.com/Font-Awesome/ - - -## Modern Pictograms - - Copyright (c) 2012 by John Caserta. All rights reserved. - - Author: John Caserta - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://thedesignoffice.org/project/modern-pictograms/ - - -## Entypo - - Copyright (C) 2012 by Daniel Bruce - - Author: Daniel Bruce - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://www.entypo.com - - diff --git a/html/css/fontello/README.txt b/html/css/fontello/README.txt deleted file mode 100644 index beaab3366..000000000 --- a/html/css/fontello/README.txt +++ /dev/null @@ -1,75 +0,0 @@ -This webfont is generated by http://fontello.com open source project. - - -================================================================================ -Please, note, that you should obey original font licenses, used to make this -webfont pack. Details available in LICENSE.txt file. - -- Usually, it's enough to publish content of LICENSE.txt file somewhere on your - site in "About" section. - -- If your project is open-source, usually, it will be ok to make LICENSE.txt - file publicly available in your repository. - -- Fonts, used in Fontello, don't require a clickable link on your site. - But any kind of additional authors crediting is welcome. -================================================================================ - - -Comments on archive content ---------------------------- - -- /font/* - fonts in different formats - -- /css/* - different kinds of css, for all situations. Should be ok with - twitter bootstrap. Also, you can skip style and assign icon classes - directly to text elements, if you don't mind about IE7. - -- demo.html - demo file, to show your webfont content - -- LICENSE.txt - license info about source fonts, used to build your one. - -- config.json - keeps your settings. You can import it back into fontello - anytime, to continue your work - - -Why so many CSS files ? ------------------------ - -Because we like to fit all your needs :) - -- basic file, .css - is usually enough, it contains @font-face - and character code definitions - -- *-ie7.css - if you need IE7 support, but still don't wish to put char codes - directly into html - -- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face - rules, but still wish to benefit from css generation. That can be very - convenient for automated asset build systems. When you need to update font - - no need to manually edit files, just override old version with archive - content. See fontello source code for examples. - -- *-embedded.css - basic css file, but with embedded WOFF font, to avoid - CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. - We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` - server headers. But if you ok with dirty hack - this file is for you. Note, - that data url moved to separate @font-face to avoid problems with - - - - - - - -
-

fontello font demo

- -
-
-
-
icon-th-large0xe800
-
icon-th0xe801
-
icon-cog0xe802
-
icon-trash0xe803
-
-
-
icon-back0xe804
-
icon-th-10xe805
-
icon-th-list0xe806
-
icon-th-list-10xe807
-
-
-
icon-info-circled0xe808
-
-
- - - \ No newline at end of file diff --git a/html/css/fontello/font/fontello.eot b/html/css/fontello/font/fontello.eot deleted file mode 100644 index 249b3ceaa..000000000 Binary files a/html/css/fontello/font/fontello.eot and /dev/null differ diff --git a/html/css/fontello/font/fontello.svg b/html/css/fontello/font/fontello.svg deleted file mode 100644 index f906ff1a3..000000000 --- a/html/css/fontello/font/fontello.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - -Copyright (C) 2019 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/html/css/fontello/font/fontello.ttf b/html/css/fontello/font/fontello.ttf deleted file mode 100644 index 72122520e..000000000 Binary files a/html/css/fontello/font/fontello.ttf and /dev/null differ diff --git a/html/css/fontello/font/fontello.woff b/html/css/fontello/font/fontello.woff deleted file mode 100644 index 7a386ceff..000000000 Binary files a/html/css/fontello/font/fontello.woff and /dev/null differ diff --git a/html/css/fontello/font/fontello.woff2 b/html/css/fontello/font/fontello.woff2 deleted file mode 100644 index 6f674ee67..000000000 Binary files a/html/css/fontello/font/fontello.woff2 and /dev/null differ diff --git a/html/css/fonts.css b/html/css/fonts.css deleted file mode 100644 index a056ac345..000000000 --- a/html/css/fonts.css +++ /dev/null @@ -1,59 +0,0 @@ -@font-face { - font-family: 'Ek Mukta'; - font-weight: 200; - font-style: normal; - font-display: swap; - src: url('../fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.eot'); - src: url('../fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.eot?#iefix') format('embedded-opentype'), - local('Ek Mukta ExtraLight'), - local('Ek-Mukta-200'), - url('../fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.woff2') format('woff2'), - url('../fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.woff') format('woff'), - url('../fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.ttf') format('truetype'), - url('../fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.svg#EkMukta') format('svg'); -} - -@font-face { - font-family: 'Ek Mukta'; - font-weight: 400; - font-style: normal; - font-display: swap; - src: url('../fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.eot'); - src: url('../fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.eot?#iefix') format('embedded-opentype'), - local('Ek Mukta'), - local('Ek-Mukta-regular'), - url('../fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.woff2') format('woff2'), - url('../fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.woff') format('woff'), - url('../fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.ttf') format('truetype'), - url('../fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.svg#EkMukta') format('svg'); -} - -@font-face { - font-family: 'Ek Mukta'; - font-weight: 600; - font-style: normal; - font-display: swap; - src: url('../fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.eot'); - src: url('../fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.eot?#iefix') format('embedded-opentype'), - local('Ek Mukta SemiBold'), - local('Ek-Mukta-600'), - url('../fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.woff2') format('woff2'), - url('../fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.woff') format('woff'), - url('../fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.ttf') format('truetype'), - url('../fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.svg#EkMukta') format('svg'); -} - -@font-face { - font-family: 'Ek Mukta'; - font-weight: 700; - font-style: normal; - font-display: swap; - src: url('../fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.eot'); - src: url('../fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.eot?#iefix') format('embedded-opentype'), - local('Ek Mukta Bold'), - local('Ek-Mukta-700'), - url('../fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.woff2') format('woff2'), - url('../fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.woff') format('woff'), - url('../fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.ttf') format('truetype'), - url('../fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.svg#EkMukta') format('svg'); -} diff --git a/html/css/less/addressings.less b/html/css/less/addressings.less deleted file mode 100644 index 259c19c0b..000000000 --- a/html/css/less/addressings.less +++ /dev/null @@ -1,228 +0,0 @@ -.mod-pedal-settings { - - .mod-address.addressed, .preset-btn-assign-all.addressed { - background-color: lighten(@brand-primary, 7.5%); - } -} - -.mod-pedal-settings-address { - - .mod-box { - - .form-container { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - - .btn.js-type, .btn.advanced-toggle { - border: solid @gray-dark 1px; - } - - .main-form-container { - width: 691px; - padding-right: 3px; - - label { - text-align: center; - } - - .btn.js-type { - - &.selected { - background-color: @gray-dark; - color: white; - } - } - - .group-strike { - display: flex; - flex-basis: 100%; - align-items: center; - color: black; - margin: 6px 0px; - - &:before, &:after { - content: ""; - flex-grow: 1; - background: black; - height: 3px; - font-size: 0; - line-height: 0; - } - &:before { - margin-right: 8px; - } - &:after { - margin-left: 8px; - } - } - - .hmi-table { - width: 100%; - - th:first-child { - background-color: @red; - } - - th:nth-child(2) { - background-color: @yellow; - } - - th:nth-child(3) { - background-color: @cyan; - } - - th:nth-child(4) { - background-color: @purple; - } - - th:nth-child(5) { - background-color: @orange; - } - - th:nth-child(6) { - background-color: @green; - } - - th:nth-child(7) { - background-color: @magenta; - } - - th:nth-child(8) { - background-color: @blue; - } - - th, td { - border: solid @gray-dark 1px; - text-align: center; - } - - td { - padding: 5px; - cursor: pointer; - - &.selected { - background-color: @brand-primary; - color: white; - box-shadow: 3px 3px 3px @gray-light; - } - - &.disabled { - cursor: auto; - color: @gray-light; - background-color: @gray-mid-light; - box-shadow: inset 0 0 3px @gray; - } - } - } - - .midi-custom-uri { - color: @brand-primary; - } - } - - .buttons-container { - padding-right: 3px; - padding-bottom: 18px; - } - - .advanced-container { - border-left: 1px solid @gray-lighter; - padding-left: 12px; - margin-left: 12px; - - .cv-op-mode { - - label { - width: 100% !important; - } - - .mod-controls { - width: 155px !important; - } - } - } - } - } -} - -.mod-cv-output { - - .output-cv-checkbox { - display: flex; - position: absolute; - top: 45px; - left: 15px; - - .checkbox-container { - position: relative; - padding-left: 45px; - cursor: pointer; - font-size: 22px; - height: 35px; - width: 35px; - - .checkmark { - position: absolute; - top: 0; - left: 0; - height: 35px; - width: 35px; - background-color: #eee; - - &:after { - content: ""; - position: absolute; - display: none; - left: 13px; - top: 7px; - width: 10px; - height: 17px; - border: solid white; - border-width: 0 4px 4px 0; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - } - } - - input[type=checkbox] { - position: absolute; - opacity: 0; - cursor: pointer; - z-index: 5; - width: 100%; - height: 100%; - top: 0; - left: 0; - - &:disabled { - cursor: not-allowed; - } - - &:checked ~ .checkmark { - background-color: @brand-primary; - - &:after { - display: block; - } - } - - &:disabled ~ .checkmark { - background-color: @gray-light; - } - - } - } - - input[type=text] { - font-size: 20px; - } - - ::selection { - background: @brand-primary !important; - color: white !important; - } - } -} diff --git a/html/css/less/banks.less b/html/css/less/banks.less deleted file mode 100644 index 0439de4d8..000000000 --- a/html/css/less/banks.less +++ /dev/null @@ -1,526 +0,0 @@ -#bank-library { -bottom: 45px; -left: 0; -overflow-x: hidden; -overflow-y: auto; -position: absolute; -right: 0; -top: 0; -z-index: 2; -.ui-draggable-dragging { - cursor: webkit-dragging !important -} -.mod-banks-drag-item { - .img { - display: block; - height: auto; - margin: 0 auto; - text-align: center; - width: 100%; - background: url(../img/background.jpg); - background-size: auto 100%; - background-position: center center; - box-shadow: inset 0 3px 6px black; - border: 1px solid #000; - } - .title { - display: block; - line-height: 32px; - font-weight: bold; - overflow: hidden; - position: relative; - padding-left: 5px; - } - background: @brand-warning; - color: white; - font-weight: bold; - z-index: 10000; - box-shadow: 0 5px 15px black; - opacity: 0.5; -} -span { - &.move { - background-image: url(../img/move.png); - background-position: left center; - background-repeat: no-repeat; - display: block; - float: left; - height: 32px; - left: 0; - cursor: move !important; - margin: -1px 6px 0 0; - width: 24px; - } - &.remove { - cursor: pointer; - float: right; - width: 32px; - height: 32px; - display: block; - background-image: url(../img/icons/25/delete.png); - background-repeat: no-repeat; - background-position: 50% 50%; - transition: background-color 0.33s; - &:hover { - background-color: @brand-warning; - } - } - &.title { - display: block; - float: left; - height: 32px; - overflow: hidden; - max-width: 70%; - white-space: nowrap - } -} -input::selection { - background: @brand-primary !important; - color: white -} - -.icon-add { - width: 1em; - height: 1em; - display: inline-block; - font-size: inherit; - vertical-align: baseline; - i { - position: absolute; - width: 1em; - margin-top: 0.3em; - border-top: 0.4em solid #888; - } - b { - position: absolute; - height: 1em; - margin-left: 0.3em; - border-left: 0.4em solid #888; - } -} -#bank-list { - left: 0; - list-style: none; - margin: 0; - padding: 0; - position: fixed; - bottom: 45px; - overflow-y: auto; - top: 45px; - width: 20%; - background: #2c2c2c; - > div { - &.add-bank { - color: #fff; - cursor: pointer; - padding-left: 5px; - line-height: 32px; - text-transform: uppercase; - transition: all 0.33s; - &:hover { - background: @brand-warning; - } - .icon-add { - display: inline-block; - width: 24px; - margin-right: 6px; - padding-left: 5px; - box-sizing: border-box; - } - } - &.selected span.move { - background-position: right center; - } - &.selected span.remove { - background-position: right center; - } - } - .edit-bank { - color: #555; - width: 100% !important; - height: 30px; - margin: 1px; - padding-left: 0.5em; - background-color: #fff; - background-image: none; - border: 0px solid #ccc; - border-radius: 0px; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out - } - div { - background: #222; - color: #888; - cursor: pointer; - font-weight: bold; - margin: 0 0 1px 0; - content: \002B; - position: relative; - transition: all 0.33s; - &.selected { - background: @brand-primary; - color: #fff; - } - &:hover { - background: #000; - } - &.selected:hover { - background: #600E6F; - } - } - .bank-item { - display: block; - background: #222; - color: #888; - line-height: 32px; - height: 32px; - cursor: pointer; - font-weight: bold; - margin: 0 0 1px 0; - padding-left: 5px; - position: relative; - .remove { - border-radius: 0; - } - } - .filter_ { - border-color: #111; - border-style: dotted; - border-width: 0 1px 0 0; - bottom: 46px; - left: 0; - padding-top: 18px; - position: fixed; - top: 0; - right: 0; - width: 240px; - overflow: auto; - h1 { - font-weight: 2em; - text-transform: uppercase; - font-weight: bold; - margin: 0 0 0 10px; - } - h2 { - color: white; - font-size: 15px; - text-transform: uppercase; - font-weight: bold; - margin-top: 1em; - margin-left: 10px; - } - .control-group { - float: left; - margin-right: 9px; - margin-left: 10px - } - .control-group label { - color: #fff; - display: inline-block; - font-size: 12px; - font-weight: bold; - } - .control-group select { - width: 50px; - } - >.form-group { - padding: 15px; - } - } - } -#bank-title { - background: #111; - left: 20%; - height: 92px; - margin: 0; - padding: 0; - position: fixed; - text-align: left; - top: 45px; - width: 50%; - h1 { - font-size: 2em; - padding: 0em; - max-height: 2em; - display: block; - margin: 0.5em 0.8em 0 0.8em; - padding-bottom: 0.2em; - color: white; - white-space: nowrap; - overflow: hidden; - } - form { - margin: 0 2em; - color: #666; - } - h2 { - margin: 4px 0 0 14px; - display: block; - text-transform: initial !Important; - color: white; - font-size: 12px; - line-height: 20px; - text-align: left; - } - small { - font-size: 10px; - color: #BBBBBB; - text-align: left; - display: block; - margin-left: 14px; - } - select { - display: block; - float: left; - height: 22px; - margin: 5px 2.5%; - width: 20%; - font-size: 10px; - } -} - -#bank-pedalboards { - background: #111; - bottom: 46px; - left: 20%; - list-style: none; - margin: 0; - overflow-x: hidden; - overflow-y: auto; - padding: 0 0 200px 0; - position: fixed; - top: 164px; - width: 50%; - > div { - margin: 0px 10px 20px 20px; - } - .pedalboard { - color: #fff; - cursor: -webkit-grab !important; - cursor: grab !important; - width: 100%; - transition: all 0.33s; - &:active { - cursor: -webkit-grabbing !important; - cursor: grabbing !important; - } - &:hover { - background-color: @brand-primary; - } - .info { - height: 32px; - padding-left: 5px; - background: rgba(255,255,255,0.07); - } - .title { - display: block; - line-height: 32px; - font-weight: bold; - overflow: hidden; - position: relative; - } - .img { - display: inline-block; - float: left; - height: auto; - margin: 0 9px 0 0; - text-align: center; - width: 100%; - background: url(../img/background.jpg); - background-size: auto 100%; - background-position: center center; - box-shadow: inset 0 3px 6px black; - border: 1px solid #000; - } - } - .mode { - border: none; - margin: 22px 0 18px 0; - text-align: center; - } -} -#bank-edit { - position: fixed; - display: block; - background: #111 url(../img/watermark.png) 100% 100% no-repeat; - width: 80%; - bottom: 45px; - top: 45px; - left: 20% -} -#bank-pedalboards-search { - bottom: 45px; - right: 0%; - overflow: auto; - position: fixed; - top: 0px; - width: 30%; - z-index: 6; - h2 { - text-transform: uppercase; - color: white; - font-size: 1.5em; - font-weight: bold; - float: left; - } - .box { - background: #111; - padding: 0; - box-sizing: border-box; - } - input { - width: 50%; - padding-left: 1em - } - .form-group { - - } - .remove { - display: none !important; - } - label { - color: #fff; - font-weight: bold; - text-transform: uppercase; - float: left; - line-height: 45px; - padding-left: 10px; - } - .control-group { - margin-bottom: 10px; - padding: 0 2%; - position: relative; - width: 29.3%; - } - input[type="search"] { - width: 50% !important; - float: right; - margin: 5px; - } - select { - width: 100%; - } - .input-clean { - background: #333; - color: #fff; - cursor: pointer; - font-size: 8px; - height: 18px; - left: auto !important; - position: absolute; - right: 8px !important; - text-align: center; - text-transform: uppercase; - top: 31px !important; - width: 18px; - border-radius: 100%; - } -} -} - - -// start old code - - -#bank-pedalboards-mode { - background: #333; - left: 30%; - height: 30px; - margin: 0; - padding: 20px 0 0 0; - position: absolute; - text-align: center; - top: 68px; - width: 45%; - .grid { - background: url(../img/icn-grid-list.png) no-repeat left bottom; - display: inline-block; - height: 14px; - width: 14px; - &.selected { - background-position: left top; - } - } - .list { - background: url(../img/icn-grid-list.png) no-repeat right bottom; - display: inline-block; - height: 14px; - width: 14px; - &.selected { - background-position: right top; - } - } -} - - -.pedalboard { - .addressings { - width: 100%; - .footswitch { - background: #2b2b2b url(../img/footswitch-free.png) no-repeat center top; - float: left; - height: 20px; - width: 25%; - } - .footswitch.addressed { - background: #2b2b2b url(../img/footswitch-addressed.png) no-repeat center top; - } - } -} - -#bank-pedalboards-result { - position: fixed; - bottom: 45px; - top: 45px; - overflow: auto; - width: 30%; - background: #111; - .pedalboard { - color: #fff; - background: rgba(255,255,255,0.07); - cursor: -webkit-grab; - cursor: grab; - margin: 0px 20px 20px 10px; - transition: all 0.33s; - &:active { - cursor: -webkit-grabbing !important; - cursor: grabbing !important; - } - &:hover { - background-color: @brand-primary; - } - .img { - display: block; - height: auto; - margin: 0 auto; - text-align: center; - width: 100%; - background: url(../img/background.jpg); - background-size: auto 100%; - background-position: center center; - box-shadow: inset 0 3px 6px black; - border: 1px solid #000; - img { - max-width: 100%; - } - } - .title { - display: block; - line-height: 32px; - font-weight: bold; - overflow: hidden; - position: relative; - padding-left: 5px; - } - .description { - display: block; - font-size: 11px; - height: 27px; - line-height: 1.5; - overflow: hidden; - } - } -} diff --git a/html/css/less/cloud_plugins.less b/html/css/less/cloud_plugins.less deleted file mode 100644 index 0da6c4dbe..000000000 --- a/html/css/less/cloud_plugins.less +++ /dev/null @@ -1,725 +0,0 @@ -#cloud-plugins-library { - background: #2c2c2c; - bottom: 45px; - left: 0; - overflow: auto; - position: fixed; - right: 0; - top: 0px; - z-index: 2; - h1 { - color: #fff; - display: inline-block; - font-size: 24px; - line-height: 35px; - margin: 0 0 18px 0; - padding: 0; - } - header { - .help { - background-image: url(../img/icn-help-16x16.png); - background-position: center center; - background-repeat: no-repeat; - display: inline-block; - height: 21px; - width: 21px; - } - .close { - opacity: 1; - position: absolute; - right: 10px; - top: 16px; - } - } - .filter { - bottom: 45px; - left: 0; - position: fixed; - top: 45px; - right: 0; - width: 240px; - overflow: auto; - h1 { - font-weight: 2em; - text-transform: uppercase; - font-weight: bold; - margin: 0 0 0 10px; - } - h2 { - color: white; - font-size: 15px; - text-transform: uppercase; - font-weight: bold; - margin-top: 1em; - margin-left: 10px; - } - .control-group { - .switch { - margin: 5px 0 5px 15px; - // width: 24rem; - position: relative; - width: 18rem; - height: 2.5rem; - font-size: 0; - - input { - position: absolute; - top: 0; - z-index: 2; - opacity: 0; - cursor: pointer; - height: 2.5rem; - width: 5rem; - left: 5.5rem; - margin: 0; - - &:checked { - z-index: 1; - } - - &:checked + label { - opacity: 1; - cursor: default; - } - - &:checked ~ .toggle-outside .toggle-inside { - left: 0.25rem; - background: @brand-primary; - } - - &:not(:checked) + label:hover { - opacity: 0.5; - } - } - - input ~ input:checked ~ .toggle-outside .toggle-inside { - left: 2.65rem; - background: #4a4a4a; - } - - label { - color: #fff; - opacity: 0.33; - transition: opacity 0.25s ease; - cursor: pointer; - font-size: 14px; - line-height: 3rem; - display: inline-block; - width: 5rem; - height: 100%; - margin: 0; - text-align: center; - - &:first-of-type { - text-align: left; - } - - &:last-of-type { - margin-left: 5.5rem; - } - } - - .toggle-outside { - height: 100%; - border-radius: 2rem; - padding: 0.25rem; - overflow: hidden; - transition: 0.25s ease all; - background: #fff; - opacity: 0.8; - position: absolute; - width: 5rem; - left: 5.5rem; - } - - .toggle-inside { - border-radius: 5rem; - background: #4a4a4a; - position: absolute; - transition: 0.25s ease all; - height: 2rem; - width: 2rem; - } - } - } - .control-group select { - width: 50px; - } - .control-group input[type='checkbox'] { - display: none; - +label { - cursor: pointer; - background: #222; - color: #fff; - display: block; - height: 32px; - line-height: 32px; - width: 100%; - margin-bottom: 1px; - padding-left: 15px; - border: 0px solid @brand-warning; - &:hover { - background: #000; - } - } - &:checked + label { - background: @brand-warning; - &:hover { - background: #600E6F; - } - } - } - >.form-group { - .input-clean { - margin-right: 8px !important; - } - } - .categories { - width: 100%; - margin: 0px 0 15px 0; - li { - display: block; - background: #222; - color: #888; - cursor: pointer; - font-weight: bold; - margin: 0 0 1px 0; - padding: 0 15px; - position: relative; - transition: all 0.33s; - line-height: 32px; - height: 32px; - span { - float: right - } - &.selected { - background: @brand-primary; - color: #fff; - } - &:hover { - background: #000; - } - &.selected:hover { - background: #600E6F; - } - } - } - } - } - .cloud-plugins { - @gradient1: rgba(17,17,17,0); - @gradient2: rgba(17,17,17,1); - @gradient3: fade(@gradient4, 0%); - @gradient4: #212121; - left: 240px; - position: fixed; - right: 0; - top: 45px; - bottom: 45px; - background: #111 url(../img/watermark.png) 100% 100% no-repeat; - overflow-y: auto; - .plugins-wrapper { - width: 100%; - } - .cloud-plugin { - color: #fff; - .make-xs-column(12); - .make-sm-column(6); - .make-md-column(6); - .make-lg-column(4); - height: 120px; - border: 5px solid #000; - padding: 0 !important; - background: rgba(255, 255, 255, 0.07); - transition: all 0.33s; - cursor: pointer; - &:hover { - background-color: black; - .description { - background: rgba(0, 0, 0, 0.8); - hr { - border-color: @brand-warning; - } - } - figure { - top: -5px; - } - div.demo-plugin { - opacity: 0; - } - span.price { - position: absolute; - top: 25px; - margin-left: 98px; - padding: 3px 0; - transform: rotate(0deg) scale(1.3); - width: 80px; - } - span.licensed { - position: absolute; - top: 25px; - margin-left: 98px; - padding: 3px 0; - transform: rotate(0deg) scale(1.3); - width: 113px; - text-align: center; - } - span.coming-soon { - position: absolute; - top: 25px; - margin-left: 98px; - padding: 3px 0; - transform: rotate(0deg) scale(1.3); - width: 113px; - text-align: center; - } - span.price-container { - margin-left: 170px; - width: 200px; - } - } - figure { - height: 100px; - position: absolute; - top: 10px; - left: 20px; - margin: 0; - transition: all 0.33s linear; - display: flex; - flex-direction: column; - justify-content: center; - } - figure img { - height: auto; - margin: 0 auto 3px; - width: auto; - pointer-events: none; - max-width: 256px; - max-height: 64px; - } - span.price { - transition: all 0.33s linear; - } - span.price-container { - transition: all 0.33s linear; - } - .cloud-plugin-border { - border: 1px solid #333; - width: 100%; - height: 100%; - } - .description { - .no_description { - color: rgba(255, 255, 255, 0.25); - } - transition: all 0.33s; - display: block; - line-height: 1.5; - overflow: hidden; - position:absolute; - top: 1px; - right: 1px; - bottom: 1px; - left: 80px; - background: rgba(33, 33, 33, 0.66); - hr { - transition: all 0.33s; - border: none; - border-bottom: 1px solid @brand-primary; - margin: 0; - position: absolute; - top: 50%; - left: 0; - width: calc(~'100% - 5px'); - } - .title { - display: block; - text-transform: uppercase; - font-weight: bold; - overflow: hidden; - padding: 8px 10px 1px 10px; - } - .author { - display: block; - padding: 1px 10px; - } - p { - position: absolute; - left: 10px; - right: 10px; - top: 75%; - transform: translateY(-50%); - height: 2.4em; - line-height: 1.25em; - overflow: hidden; - } - } - - .actions { - font-size: 11px; - font-weight: bold; - text-transform: uppercase; - } - .actions > span { - cursor: pointer; - } - .actions > span:hover { - text-decoration: underline; - } - .actions span.duplicate { - margin: 0 6px; - } - } - h2 { - margin-left: 23px; - font-size: 20px; - color: #cccccc; - } - h3 { - color: #cccccc; - } - .featured-plugins { - position: relative; - height: 360px; - width: 100%; - display: block; - &.double, &.single { - height: 490px !important; - .box { - transition: all 0s !important; - } - .carousel { - height: 485px !important; - .slick-list { - height: 485px !important; - } - } - } - &.double { - .box { - margin: 30px 80px !important; - } - } - &.single { - .box { - margin: 30px 30px !important; - } - } - .carousel { - position: absolute; - top: 0; - bottom: 0; - right: 90px; - left: 90px; - height: 380px !important; - .slick-list { - height: 380px !important; - } - .featured { - cursor: pointer; - margin-top: 40px; - .box { - padding: 4px; - border: 1px solid #737373; - height: 300px; - opacity: 0.4; - margin: 0 24px; - .inner-box { - border: 1px solid #444444; - text-align: center; - height: 290px; - .price-container { - position: absolute; - top: 0; - left: 0; - width: 90px; - height: 90px; - overflow: hidden; - color: #ffffff; - } - .price { - background-color: @brand-success; - border: 1px solid @brand-success; - &:before { - content: "€ "; - } - position: absolute; - top: 9px; - left: -30px; - padding: 3px 0; - transform: rotate(-45deg); - min-width: 108px; - text-align: center; - } - .licensed { - background-color: @brand-success; - border: 1px solid @brand-success; - &:before { - content: "PURCHASED"; - } - position: absolute; - top: 16px; - left: -30px; - padding: 3px 27px; - font-size: 12px; - transform: rotate(-45deg); - } - h2 { - color: #c3c3c3; - text-align: center; - } - .img-container { - height: 113px; - width: 100%; - img { - vertical-align: middle; - transition: all 500ms ease; - width: auto; - height: auto; - margin: auto; - display: block; - max-height: 113px; - padding: 0 20px; - max-width: 100%; - } - } - p { - color: #e0e0e0; - padding: 5px 5px 0 5px; - height: 59px; - } - button { - background-color: transparent; - color: #ff3838; - border: 1px solid #ff3838; - text-transform: uppercase; - padding: 8px 20px; - } - } - } - &.slick-center { - height: 390px; - .box { - opacity: 1; - transform: scale(1.2) translate(0,-0); - transition: all 500ms ease; - } - } - } - .slick-arrow { - &:before { - font-size: 60px; - } - width: 60px; - height: 60px; - top: 200px; - } - .slick-prev { - left: -70px !important; - } - .slick-next { - right: -70px !important; - } - } - } -} - -.plugin-container { - .status-container { - position: absolute; - top: 0; - left: 0; - right: 2px; - text-align: right; - padding-right: 2px; - } - .status { - padding: 1px 4px; - text-align: center; - text-transform: uppercase; - font-weight: bold; - font-size: 9px; - margin-left: 1px; - } - .status.installed { - border: 1px solid @brand-success; - background-color: @brand-success; - &:after { - content: "installed"; - } - } - .status.outdated { - border: 1px solid @brand-warning; - background-color: @brand-warning; - color: #212121; - &:after { - content: "new version"; - } - } - .price-container { - position: absolute; - top: 0; - left: 0; - width: 90px; - height: 90px; - overflow: hidden; - } - .price { - background-color: @brand-success; - border: 1px solid @brand-success; - &:before { - content: "€ "; - } - position: absolute; - top: 9px; - left: -25px; - padding: 3px 0; - transform: rotate(-45deg); - min-width: 108px; - text-align: center; - } - .licensed { - background-color: @brand-success; - border: 1px solid @brand-success; - &:before { - content: "PURCHASED"; - } - position: absolute; - top: 21px; - left: -30px; - padding: 3px 27px; - font-size: 14px; - transform: rotate(-45deg); - } - .coming-soon { - background-color: @brand-success; - border: 1px solid @brand-success; - &:before { - content: "TRIAL ONLY"; - } - position: absolute; - top: 26px; - left: -35px; - padding: 3px 27px; - font-size: 12px; - transform: rotate(-45deg); - width: 135px; - } - - .status.buildEnvironment { - border: 1px solid #FF2927; - background-color: #FF2927; - - &:after { - content: "local"; - } - - &.labs { - &:after { - content: "labs"; - } - } - - &.dev { - &:after { - content: "dev"; - } - } - - &.prod { - display: none; - &:after { - content: ""; - } - } - } - .demo { - border: 1px solid #FF2927; - background-color: #FF2927; - &:after { - content: "demo"; - } - } - .description-price-container { - position: absolute; - top: -17px; - left: -17px; - overflow: hidden; - height: 200px; - .description-price { - background-color: @brand-success; - border: 1px solid @brand-success; - &:before { - content: "€ "; - } - position: relative; - top: 34px; - left: -57px; - padding: 3px 0; - transform: rotate(-45deg); - min-width: 250px; - text-align: center; - font-size: 34px; - z-index: 11; - } - .description-licensed { - background-color: @brand-success; - border: 1px solid @brand-success; - &:before { - content: "PURCHASED"; - } - position: relative; - top: 50px; - left: -60px; - padding: 3px 0; - transform: rotate(-45deg); - min-width: 280px; - text-align: center; - font-size: 34px; - z-index: 1; - } - .description-coming-soon { - background-color: @brand-success; - border: 1px solid @brand-success; - &:before { - content: "TRIAL ONLY"; - } - position: relative; - top: 50px; - left: -70px; - padding: 3px 0; - transform: rotate(-45deg); - min-width: 280px; - text-align: center; - font-size: 26px; - z-index: 1; - } - } -} - -.buy-button { - margin-top: -20px; - position: relative; - iframe { - position: absolute; - top: -17px; - left: 0; - min-width: 115px; - z-index: 1; - } -} - -.shopify-fake-button { - position: absolute; - top: 3px; - left: 0; - z-index: 0; - background-color: #c224b0; - font-family: Arial; - font-size: 12px; - opacity: 0.25; - min-width: 115px; - min-height: 34px; - padding: 9px 15px; - text-align: center; -} diff --git a/html/css/less/file_manager.less b/html/css/less/file_manager.less deleted file mode 100644 index ad5fc28d6..000000000 --- a/html/css/less/file_manager.less +++ /dev/null @@ -1,25 +0,0 @@ -#file-manager-library { - background: #2c2c2c url(../img/watermark.png) 100% 100% no-repeat; - top: 0; - bottom: 46px; - left: 0; - right: 0; - overflow-x: hidden; - overflow-y: auto; - position: absolute; - z-index: 2; -} -#file-manager-wrapper { - display: flex; - position: fixed; - top: 45px; - bottom: 55px; - left: 2em; - right: 2em; - overflow: auto; - padding-top: 1%; -} -#file-manager-wrapper iframe { - flex: 1; - border: none; -} diff --git a/html/css/less/main.less b/html/css/less/main.less deleted file mode 100644 index 2e0eed41c..000000000 --- a/html/css/less/main.less +++ /dev/null @@ -1,1587 +0,0 @@ -/** - * This is the main application stylesheet. It should include or import all - * stylesheets used throughout the application as this is the only stylesheet in - * the Grunt configuration that is automatically processed. - */ - - -/** - * First, we include the Twitter Bootstrap LESS files. Only the ones used in the - * project should be imported as the rest are just wasting space. - */ -//@import '../assets/social-icons/css/social.css'; - -// Core variables and mixins -@import "../node_modules/bootstrap/less/variables.less"; -@import "../node_modules/bootstrap/less/mixins.less"; - -// Reset and dependencies -@import "../node_modules/bootstrap/less/normalize.less"; -@import "../node_modules/bootstrap/less/print.less"; -//@import "../node_modules/bootstrap/less/glyphicons.less"; - -// Core CSS -@import "../node_modules/bootstrap/less/scaffolding.less"; -@import "../node_modules/bootstrap/less/type.less"; -@import "../node_modules/bootstrap/less/code.less"; -@import "../node_modules/bootstrap/less/grid.less"; -@import "../node_modules/bootstrap/less/tables.less"; -@import "../node_modules/bootstrap/less/forms.less"; -@import "../node_modules/bootstrap/less/buttons.less"; - -// Components -@import "../node_modules/bootstrap/less/component-animations.less"; -@import "../node_modules/bootstrap/less/dropdowns.less"; -@import "../node_modules/bootstrap/less/button-groups.less"; -@import "../node_modules/bootstrap/less/input-groups.less"; -@import "../node_modules/bootstrap/less/navs.less"; -@import "../node_modules/bootstrap/less/navbar.less"; -@import "../node_modules/bootstrap/less/breadcrumbs.less"; -@import "../node_modules/bootstrap/less/pagination.less"; -@import "../node_modules/bootstrap/less/pager.less"; -@import "../node_modules/bootstrap/less/labels.less"; -@import "../node_modules/bootstrap/less/badges.less"; -@import "../node_modules/bootstrap/less/jumbotron.less"; -@import "../node_modules/bootstrap/less/thumbnails.less"; -@import "../node_modules/bootstrap/less/alerts.less"; -@import "../node_modules/bootstrap/less/progress-bars.less"; -@import "../node_modules/bootstrap/less/media.less"; -@import "../node_modules/bootstrap/less/list-group.less"; -@import "../node_modules/bootstrap/less/panels.less"; -@import "../node_modules/bootstrap/less/responsive-embed.less"; -@import "../node_modules/bootstrap/less/wells.less"; -@import "../node_modules/bootstrap/less/close.less"; - -// Components w/ JavaScript -// @import "../node_modules/bootstrap/less/modals.less"; -@import "../node_modules/bootstrap/less/tooltip.less"; -// @import "../node_modules/bootstrap/less/popovers.less"; -// @import "../node_modules/bootstrap/less/carousel.less"; - -// Utility classes -@import "../node_modules/bootstrap/less/utilities.less"; -@import "../node_modules/bootstrap/less/responsive-utilities.less"; - - -/** - * This is our main variables file. We must include it last so we can overwrite any variable - * definitions in our imported stylesheets. - */ - -@import 'variables.less'; -@import 'cloud_plugins.less'; -@import 'banks.less'; -@import 'file_manager.less'; -@import 'pedalboards.less'; -@import 'nprogress.less'; -@import 'addressings.less'; - - -/** - * Typography - */ - -@font-face { - font-family: 'cooper hewitt'; - src: url('../fonts/cooper/cooperhewitt-semibold-webfont.eot'); - src: url('../fonts/cooper/cooperhewitt-semibold-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/cooper/cooperhewitt-semibold-webfont.woff2') format('woff2'), - url('../fonts/cooper/cooperhewitt-semibold-webfont.woff') format('woff'), - url('../fonts/cooper/cooperhewitt-semibold-webfont.ttf') format('truetype'); - font-weight: 600; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: 'cooper hewitt'; - src: url('../fonts/cooper/cooperhewitt-light-webfont.eot'); - src: url('../fonts/cooper/cooperhewitt-light-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/cooper/cooperhewitt-light-webfont.woff2') format('woff2'), - url('../fonts/cooper/cooperhewitt-light-webfont.woff') format('woff'), - url('../fonts/cooper/cooperhewitt-light-webfont.ttf') format('truetype'); - font-weight: 300; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: 'cooper hewitt'; - src: url('../fonts/cooper/cooperhewitt-lightitalic-webfont.eot'); - src: url('../fonts/cooper/cooperhewitt-lightitalic-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/cooper/cooperhewitt-lightitalic-webfont.woff2') format('woff2'), - url('../fonts/cooper/cooperhewitt-lightitalic-webfont.woff') format('woff'), - url('../fonts/cooper/cooperhewitt-lightitalic-webfont.ttf') format('truetype'); - font-weight: 300; - font-style: italic; - font-display: swap; -} -@font-face { - font-family: 'cooper hewitt'; - src: url('../fonts/cooper/cooperhewitt-bookitalic-webfont.eot'); - src: url('../fonts/cooper/cooperhewitt-bookitalic-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/cooper/cooperhewitt-bookitalic-webfont.woff2') format('woff2'), - url('../fonts/cooper/cooperhewitt-bookitalic-webfont.woff') format('woff'), - url('../fonts/cooper/cooperhewitt-bookitalic-webfont.ttf') format('truetype'); - font-weight: 400; - font-style: italic; - font-display: swap; -} -@font-face { - font-family: 'cooper hewitt'; - src: url('../fonts/cooper/cooperhewitt-book-webfont.eot'); - src: url('../fonts/cooper/cooperhewitt-book-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/cooper/cooperhewitt-book-webfont.woff2') format('woff2'), - url('../fonts/cooper/cooperhewitt-book-webfont.woff') format('woff'), - url('../fonts/cooper/cooperhewitt-book-webfont.ttf') format('truetype'); - font-weight: 400; - font-style: normal; - font-display: swap; -} -* { - outline: 0 !important -} - -html, -body { - height: 100%; - overflow: hidden; -} - -body { - background: #111; - min-width: 1024px; - - // iOS/iPadOS device-specific styles - &.ios { - // prevent vertical inertia scrolling - position: fixed; - // set 980px min-width to match default virtual viewport width - min-width: 980px; - } -} - -* { - font-family: "cooper hewitt", Sans-serif !important; -} -.unpadded { - padding: 0 !important; -} -.unpadded-r { - padding: 0 0 0 7px; -} -.unpadded-l { - padding: 0 7px 0 0; -} - -.ui-draggable:active { - cursor: -webkit-grabbing !important; - cursor: grabbing !important; - } - - -.form-control { - width: 100% !important; -} -#wrapper { - bottom: 0; - left: 0; - min-width: 980px; - overflow: hidden; - position: absolute; - right: 0; - top: 0; -} - -hr.dotted { - border: 1px dotted #444; - margin: 2px 0 3px 0; -} -.preset-list { - width: 100%; - height: 200px !important -} -.input-clean { - &:after { - content: "×"; - content: "\00d7"; - font-size: 14px; - font-weight: bold; - } - background: #333; - color: #fff; - cursor: pointer; - height: 18px; - left: auto !important; - position: absolute; - right: 0; - margin-right: 18px !important; - text-align: center; - text-transform: uppercase; - margin-top: -26px !important; - width: 18px; - border-radius: 100%; -} -.form-control::selection { - background: @brand-primary !important; - color: white !important; - } -#notifications { - position: absolute; - top: 55px; - right: 0px; - width: 320px; - z-index: 100000; - > section { - border-radius: 0; - margin-bottom: 0 !important; - opacity: 0.96 ; - cursor: pointer; - } - .progressbar { - border: 0; - height: 8px; - overflow: hidden; - position: absolute; - left: 8px; - bottom: 0px; - width: 306px; - .progressbar-value { - background-color: rgba(136, 57, 150, 0.7); - height: 90%; - margin: 0px; - } - } -} - -#main-menu { - background: #111; - bottom: 0; - color: #fff; - height: 45px; - left: 0; - position: absolute; - right: 0; - z-index: 10; - > div { - cursor: pointer; - float: left; - &.icon { - height: 45px; - width: 45px; - } - &.icon > img { - margin: 5px 0 0 6px; - } - &.icon.selected { - background: #000; - } - &.icon > a { - display: block; - height: 45px; - width: 45px; - } - } - #mod-plugins { - background-image: url(../img/menu-icons-sprite.png?v=2); - background-position: -45px top; - background-repeat: no-repeat; - transition: all 0.33s; - &:hover { - background-color: #000; - background-position: -45px bottom; - } - &.selected { - background-color: #000; - background-position: -45px bottom; - } - } - #mod-cloud-plugins { - background-image: url(../img/menu-icons-sprite.png?v=2); - background-position: -315px top; - background-repeat: no-repeat; - transition: all 0.33s; - &:hover { - background-color: #000; - background-position: -315px bottom; - } - &.selected { - background-color: #000; - background-position: -315px bottom; - } - } - #mod-pedalboard { - background-image: url(../img/menu-icons-sprite.png?v=2); - background-position: -90px top; - background-repeat: no-repeat; - transition: all 0.33s; - &:hover { - background-color: #000; - background-position: -90px bottom; - } - &.selected { - background-color: #000; - background-position: -90px bottom; - } - } - #mod-bank { - background-image: url(../img/menu-icons-sprite.png?v=2); - background-position: -135px top; - background-repeat: no-repeat; - transition: all 0.33s; - &:hover { - background-color: #000; - background-position: -135px bottom; - } - &.selected { - background-color: #000; - background-position: -135px bottom; - } - } - #mod-file-manager { - background-image: url(../img/menu-icons-sprite.png?v=2); - background-position: -180px top; - background-repeat: no-repeat; - transition: all 0.33s; - &:hover { - background-color: #000; - background-position: -180px bottom; - } - &.selected { - background-color: #000; - background-position: -180px bottom; - } - } - #banks-saving { - margin: 21px 0 0 6px; - font-size: 10px; - color: #666; - display: none; - } - #mod-show-midi-port, #mod-transport-icon, .mod-bypass, - #mod-cpu, #mod-ram, #mod-xruns, #mod-buffersize, #mod-cpu-stats { - background-position: 8px 50%; - background-repeat: no-repeat; - padding-left: 40px; - padding-right: 12px; - color: #ffffff; - float: right; - font-size: 11px; - font-weight: bold; - line-height: 4.5; - text-transform: uppercase; - width: auto !important; - transition: all 0.33s; - &:hover { - background-color: #000; - } - &.selected { - background-color: #333; - } - } - #mod-show-midi-port { - background-image: url(../img/icons/25/midi.png); - } - #mod-transport-icon { - background-image: url(../img/icons/25/stop.png); - font-family: monospace; - width: 10.5em !important; - text-align: right; - &.playing { - background-image: url(../img/icons/25/transport.png); - } - } - .mod-bypass { - background-image: url(../img/icons/25/bypass.png); - &.bypassed { - background-color: @brand-primary; - } - } - - #mod-cpu, #mod-ram { - cursor: default; - width: 115px !important; - padding: 0 !important; - background: linear-gradient(to right, #1e5799 0%,#2989d8 69%,#ff6430 78%,#ff6430 93%,#c40000 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#c40000',GradientType=1 ); - } - #mod-cpu .progress-title { - background-image: url(../img/icons/25/cpu.png); - background-position: 0px 50%; - background-repeat: no-repeat; - padding-left: 30px; - } - #mod-ram .progress-title { - background-image: url(../img/icons/25/ram.png); - background-position: 0px 50%; - background-repeat: no-repeat; - padding-left: 30px; - } - #mod-xruns { - background-image: url(../img/icons/25/cpu.png); - width: 115px !important; - } - #mod-cpu-stats { - background-image: url(../img/icons/25/cpu.png); - width: 155px !important; - text-transform: none; - } - #mod-buffersize { - background-image: url(../img/icons/25/cpu.png); - width: 125px !important; - } - - .progress { - height: 45px; - margin-bottom: 0; - overflow: hidden; - float: right; - background-color: #111; - -webkit-transition: width 1s; /* Safari */ - transition: width 1s; - } - .progress .bar { - float: right; - background: #222 !important; - } - .progress-title { - position: absolute; - top: 0; - height: 45px; - margin: 0; - margin-left: 1em; - color: white; - } - - .status { - background-color: #111; - background-position: 3px 50%; - background-size: 36px; - background-repeat: no-repeat; - border-color: #2b2b2b; - border-style: solid; - border-width: 0 0 0 1px; - float: right; - } - - #mod-settings { - font-family: fontello !important; - font-size: 28px; - padding-top: 3px; - padding-left: 10px; - position: relative; - color: #fff; - opacity: 0.66; - cursor: pointer; - transition: all 0.33s; - &:after { - content: '\e802'; - } - &:hover { - opacity: 1; - } - } - - - #mod-update { - background-image: url(../img/icons/36/update.png); - &.uptodate { - background-image: url(../img/icons/36/ok.png); - } - } - - #mod-status { - background-image: url(../img/icons/36/disconnect.png); - &.online { - background-image: url(../img/icons/36/disconnect.png); - } - } - - #mod-devices { - background-image: url(../img/icons/36/control-chain.png); - } -} - -#cloud_install_all { - background-image: url(../img/icons/36/save.png); - float: right; - font-size: 21px; -} -#cloud_update_all { - background-image: url(../img/icons/36/update.png); - float: right; - font-size: 21px; -} - -/* TOP MENUS */ - -header#pedalboard-actions, -#bank-library header, -#cloud-plugins-library header, -#pedalboards-library header, -#file-manager-library header { - display: block; - left: 0; - height: 45px; - line-height: 45px; - position: fixed; - right: 0; - top: 0; - z-index: 5; - box-shadow:0 1px 10px rgba(0,0,0,0.1); - z-index:5; - background-color: #111; - background-position: 3px 50%; - background-size: 36px; - background-repeat: no-repeat; - background-image: url(../img/icons/36/mod.png); - padding-left: 45px; - .help { - background-image: url(../img/icn-help-16x16.png); - background-position: center center; - background-repeat: no-repeat; - display: inline-block; - height: 21px; - width: 21px; - } - .close { - opacity: 1; - position: absolute; - right: 10px; - top: 16px; - } - .drop-menu { - &:hover { - display: block; - } - position: absolute; - display: none; - list-style-type: none; - padding: 0; - background-color: rgba(0,0,0,0.8); - color: #999; - width: 150px; - li { - padding: 5px 20px; - &:hover { - color: white; - background-color: @brand-primary; - } - } - .sub-menu { - &:hover { - display: block; - } - display: none; - list-style-type: none; - padding: 0; - position: absolute; - left: 150px; - height: 14em; - overflow-y: auto; - overflow-x: hidden; - margin-top: -50px; - background-color: rgba(0,0,0,0.8); - width: 15em; - border-left: 3px solid #666; - } - } - .menu-trigger:hover { - +.drop-menu { - display: block; - } - } - .sub-menu-trigger:hover { - ul { - display: block; - } - } - button { - background-position: 8px 50%; - background-size: 25px; - background-repeat: no-repeat; - padding: 0 12px 0 40px; - background-color: transparent; - border: none; - height: 45px; - line-height: 45px; - opacity: 0.66; - color: white; - transition: all 0.33s; - &:hover, &.selected { - opacity: 1; - background-color: black; - } - &.js-save { - background-image: url(../img/icons/25/save.png); - } - &.js-save-as { - background-image: url(../img/icons/25/save.png); - } - &.js-preset { - background-image: url(../img/icons/36/presets.png); - background-size: 30px 30px; - } - &#js-preset-enabler { - &:hover, &.selected { - background-color: @brand-primary; - } - } - &.js-reset { - background-image: url(../img/icons/25/new.png); - &:hover, &.selected { - background-color: @brand-primary; - } - } - &.js-cv-addressing { - background-image: url(../img/icons/25/cv.png); - &:hover, &.selected { - background-color: @brand-primary; - } - } - &.js-cloud { - background-image: url(../img/icn-share.png); - background-size: 32px; - background-position: 5px center; - } - } - h1 { - font-weight: 2em; - text-transform: uppercase; - font-weight: normal; - color: #999; - display: inline-block; - font-size: 24px; - line-height: 49px; - height: 45px; - padding: 0; - } -} -header#pedalboard-actions { - box-shadow: 0 2px 12px black; -} -.tooltip { - background: white; - bottom: 50px; - height: auto; - padding: 7px; - position: absolute; - .text { - color: #222222; - font-weight: bold; - line-height: 1; - text-align: center; - } - .arrow { - border-bottom: 9px solid transparent; - border-left: 9px solid transparent; - border-right: 9px solid transparent; - border-top: 9px solid white; - height: 0; - position: absolute; - bottom: -18px; - right: 14px; - width: 0; - } -} - -#mod-devices-window, -#mod-upgrade { - background: white; - color: black; - font-size: 15px; - max-height: 350px; - overflow: auto; - position: absolute; - right: 10px; - bottom: 50px; - z-index: 100; - .progressbar-wrapper { - border: 1px solid #444444; - height: 20px; - width: 330px; - } - .progressbar { - background-color: #8888ff; - height: 18px; - } -} - -#mod-devices-window { - max-width: 600px; - min-width: 500px; -} - -#mod-upgrade { - max-width: 450px; - min-width: 350px; -} - -#mod-transport-window { - bottom: 48px; - right: 310px; - top: initial; - left: initial; - background: rgba(17, 17, 17, 0.9); - padding: 50px 40px 15px 40px; - z-index: 999; - .mod-midi-icon { - width: auto !important; - padding-left: 25px; - background-position: 5% 45% !important; - background-image: url(../img/icons/25/midi.png); - background-size: 15px; - background-repeat: no-repeat; - } -} - -#plugins-library { - bottom: 45px; - height: 166px; - left: 0; - position: absolute; - right: 0; - transition: all 0.33s; - transition: opacity 0.5s; - transition: height 0.5s; - &.folded { - height: 38px; - #plugins-library-settings-window { - bottom: 0px; - } - } - &.fade { - opacity: 0.2; - } - .fold { - cursor: pointer; - display: block !important; - float: right; - height: 36px; - position: absolute; - top: 0; - right: 0; - width: 36px; - background-color: rgba(17, 17, 17, 0.66); - background-image: url(../img/icons/25/pinned.png); - background-position: center center; - background-repeat: no-repeat; - } - .folded { - cursor: pointer; - display: block; - float: right; - height: 36px; - position: absolute; - top: 0; - right: 0; - width: 36px; - } - &.auto { - .fold { - background-image: url(../img/icons/25/autohide.png); - } - } - .settings { - background-color: rgba(17, 17, 17, 0.66); - background-image: url(../img/icn-search-white.png); - background-position: center center; - background-repeat: no-repeat; - cursor: pointer; - display: block; - height: 36px; - position: absolute; - right: 37px; - top: 0; - width: 36px; - } - #plugins-library-settings-window { - background-color: rgba(17, 17, 17, 0.66); - bottom: 130px; - color: #fff; - position: absolute; - right: 74px; - transition: bottom 0.5s; - h1 { - padding: 0; - } - form { - padding: 4px; - border: 0; - margin: 0; - } - label { - margin-right: 10px; - } - label.checkbox:last-child { - margin-right: 0; - } - .control-group { - position: relative; - } - input { - width: 120px; - height: 28px; - line-height: 28px; - padding: 0 6px; - outline: 0; - border: 0; - } - .input-clean { - position: absolute; - top: 50%; - right: 8px; - bottom: auto; - left: auto; - transform: translateY(-50%); - margin: 0 !important; - border-radius: 100%; - } - - } - ul { - list-style: none; - margin: 6px 73px 0 0; - overflow: hidden; - padding: 10px 0 0 0; - position: relative; - width: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - li { - background: rgba(17, 17, 17, 0.66); - color: #bbb; - cursor: pointer !important; - display: inline-block; - float: left; - font-size: 11px; - margin: 0 1px 0 0; - padding: 3px 11px; - text-shadow: 1px 1px 0 #000; - text-transform: uppercase; - border-top: solid 3px transparent; - transition-property: border-radius, color, margin-top, padding, border-top; - transition-duration: 0.33s; - &:hover { - margin-top: -6px; - padding: 6px 11px; - color: white; - } - } - li.selected { - color: white; - font-weight: bold; - margin-top: -6px; - padding: 6px 11px; - border-top: solid 3px @brand-primary; - } - } - &.scrolling { - .plugins-wrapper { - transition: all 0.1s !important; - } - } - #plugins-list { - background: rgba(17, 17, 17, 0.66); - height: 140px; - overflow: hidden; - position: relative; - width: 100%; - z-index: 1; - .nav { - background: url(../img/nav-left.png) 50% 50% no-repeat; - cursor: pointer; - position: absolute; - top: 0; - width: 50px; - height: 100%; - opacity: 0.66; - } - .nav:hover { - opacity: 1; - } - .nav-left { - left: 0; - } - .nav-right { - background: url(../img/nav-right.png) 50% 50% no-repeat; - right: 0; - } - #plugins-results { - bottom: 0; - left: 50px; - position: absolute; - overflow: hidden; - right: 50px; - top: 0; - } - .plugins-wrapper { - position: absolute; - display: inline-block; - white-space: nowrap; - transition: all 0.5s; - top: 120px; - left: 0; - opacity: 0; - &.selected { - top: 0; - opacity: 1; - } - } - .plugins-wrapper .plugin { - color: #fff; - font-size: 11px; - font-weight: bold; - height: 108px; - padding: 14px 12px 10px; - position: relative; - text-align: center; - display: inline-block; - } - .plugins-wrapper .plugin .thumb { - height: 67px; - cursor: pointer !important; - position: relative; - /* center thumbnail vertically */ - display: flex; - flex-direction: column; - justify-content: center; - &:active { - cursor: -webkit-grabbing !important; - cursor: grabbing !important; - } - } - .plugins-wrapper .plugin .thumb img { - height: auto; - margin: 0 auto 3px; - width: auto; - pointer-events: none; - max-width: 256px; - max-height: 64px; - } - .plugins-wrapper .plugin .status { - display: block; - height: 16px; - margin: 0 auto; - width: 16px; - } - .plugins-wrapper .plugin .status.demo { - display: inline-block; - width: auto; - height: auto; - margin: 0; - } - .plugins-wrapper .plugin .status.installed { - background-image: url(../img/icn-installed.png); - background-position: center center; - background-repeat: no-repeat; - } - .plugins-wrapper .plugin .status.outdated { - background-image: url(../img/icn-outdated.png); - background-position: center center; - background-repeat: no-repeat; - } - .plugins-wrapper .plugin .status.blocked { - background-image: url(../img/icn-blocked.png); - background-position: center center; - background-repeat: no-repeat; - } - .plugins-wrapper .plugin .author { - display: block; - line-height: 1.5; - } - .plugins-wrapper .plugin .title { - display: block; - line-height: 1.25; - } - .plugins-wrapper .plugin .rating { - background-image: url(../img/icn-rating.png); - background-position: center top; - background-repeat: no-repeat; - display: block; - height: 16px; - width: 132px; - } - .plugins-wrapper .plugin .rating.one { - background-position: center -15px; - } - .plugins-wrapper .plugin .rating.two { - background-position: center -30px; - } - .plugins-wrapper .plugin .rating.three { - background-position: center -45px; - } - .plugins-wrapper .plugin .rating.four { - background-position: center -60px; - } - .plugins-wrapper .plugin .rating.five { - background-position: center -75px; - } - .plugins-wrapper .plugin .downloads { - display: block; - } - .plugins-wrapper .plugin .demo-container { - position: absolute; - left: 0; - bottom: 3px; - right: 0; - text-align: center; - } - } - } - - .plugin-info { - background-color: rgba(20,20,20,.9); - bottom: 0; - color: #ccc; - left: 0; - overflow-y: scroll; - position: fixed; - right: 0; - top: 0px; - z-index: 40; - .box { - margin-top: 3em; - margin-bottom: 3em; - background-color: #111; - padding: 15px; - border: 2px solid #333; - .row-fluid { - position: relative; - } - } - .close { - color: #fff; - font-size: 12px; - font-weight: bold; - opacity: 1; - position: absolute; - right: 10px; - text-shadow: none; - text-transform: uppercase; - top: 10px; - } - .screenshot { - padding: 18px; - min-width: 3em; - min-height: 9em; - display: inline-block; - z-index: 0; - div.beta { - background-color: #FF2927; - font-family: "cooper hewitt", sans-serif; - font-weight: 700; - padding: 5px 10px; - color: white; - position: absolute; - top: 18px; - left: 30px; - font-size: 16px; - } - } - figure { - .make-md-column(4); - &:hover { - z-index: 10 !important; - } - } - .plugin-description { - .make-md-column(7); - height: 100%; - display: block; - position: a; - padding-left: 45px; - @gradient1: rgba(17,17,17,0.1); - @gradient2: rgba(17,17,17,1); - background: -moz-linear-gradient(left, @gradient1 1em, @gradient2 2em); - background: -webkit-gradient(linear, left top, right top, color-stop(1em, @gradient1), color-stop(2em, @gradient2)); - background: -webkit-linear-gradient(left, @gradient1 1em, @gradient2 2em); - background: -o-linear-gradient(left, @gradient1 1em, @gradient2 2em); - background: -ms-linear-gradient(left, @gradient1 1em, @gradient2 2em); - background: linear-gradient(to right, @gradient1 1em, @gradient2 2em); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffffff', endColorstr='#ffffff', GradientType=1); - >p { - font-size: 16px; - margin-bottom: 27px; - white-space: pre-wrap; - } - } - header { - padding: 18px 0 0; - h1 { - display: inline-block; - vertical-align: middle; - color: #fff; - font-size: 27px; - font-weight: bold; - line-height: 1; - margin: 0; - padding: 0; - } - h1 span { - font-size: 16px; - line-height: 1; - margin: 0; - padding: 0; - } - } - .version { - color: #ccc; - font-size: 12px; - font-weight: bold; - text-transform: uppercase; - span.bold { - color: #fff; - font-size: 14px; - } - button { - font-weight: bold; - margin-top: 6px; - text-transform: uppercase; - } - } - .rating { - background: url(../img/icn-rating.png) no-repeat -12px top; - display: inline-block; - height: 14px; - width: 84px; - &.one { - background: url(../img/icn-rating.png) no-repeat -12px -15px; - } - &.two { - background: url(../img/icn-rating.png) no-repeat -12px -30px; - } - &.three { - background: url(../img/icn-rating.png) no-repeat -12px -45px; - } - &.four { - background: url(../img/icn-rating.png) no-repeat -12px -60px; - } - &.five { - background: url(../img/icn-rating.png) no-repeat -12px -75px; - } - } - .rating-label { - color: #fff; - font-size: 12px; - font-weight: bold; - text-transform: uppercase; - } - .my-rate { - width: 15px; - height: 15px; - margin: 0; - padding: 0; - float: left; - cursor: pointer; - } - .plugin-specs { - text-align: center; - width: 100%; - border-color: #333; - th { - background: #333; - color: #fff; - border-color: #333; - text-align: center; - } - th:first-child { - } - th:last-child { - } - td { - border-color: #333; - &:first-child { - width: 40%; - } - &:not(first-child) { - width: 20%; - } - } - } - .comments-reviews { - border-top: 1px solid #333; - margin-top: 10px; - padding-top: 10px; - h1 { - color: #fff; - font-size: 21px; - line-height: 2; - margin: 0; - padding: 0; - } - } - .reviews { - border-bottom: 1px solid #333; - margin: 9px 0 18px 0; - padding: 9px 0 18px 0; - } - article { - &.review { - margin: 18px 0; - } - &.review h1 { - color: #fff; - font-size: 14px; - } - &.review h1 .rating { - margin-left: 6px; - } - &.review h1 .rating-label { - color: #ccc; - display: inline; - font-size: 12px; - font-weight: normal; - margin-left: 6px; - } - &.review .bar { - background: #333; - display: block; - height: 12px; - margin: 2px 6px 0; - position: relative; - width: 100px; - } - &.review .progress-bar { - background: #444; - bottom: 0; - display: block; - height: 10px; - left: 0; - margin: 1px; - position: absolute; - right: 0; - top: 0; - width: 50%; - } - &.review .rating-number { - display: block; - font-size: 12px; - margin-top: -1px; - } - &.comment { - border-top: 1px solid #333; - margin: 18px 0 0; - padding: 18px 0 0; - } - &.comment h1 { - color: #fff; - font-size: 16px; - line-height: 1; - } - &.comment h1 .date { - color: #ccc; - font-size: 12px; - font-weight: normal; - margin-left: 6px; - } - } - .comments { - margin: 18px 0; - padding: 18px 0; - button { - margin-top: 18px; - } - } - form { - &.comment-form { - border-top: 1px solid #333; - margin: 18px 0; - padding: 18px 0; - } - &.comment-form label { - font-size: 12px; - font-weight: bold; - text-transform: uppercase; - } - &.comment-form textarea { - height: 180px; - } - } - .favorite-button { - display: inline-block; - vertical-align: middle; - width: 30px; - height: 30px; - background: url(../img/icons/25/star-border.png) no-repeat center center; - cursor: pointer; - opacity: .5; - - &:hover { - opacity: .8; - } - - &.favorite { - opacity: 1; - background: url(../img/icons/25/star.png) no-repeat center center; - - &:hover { - opacity: 1; - } - } - } - .online-button-href { - display: inline-block; - margin-bottom: 10px; - } - .status.demo { - display: inline-block; - padding: 4px 8px; - margin: 2px 0; - font-size: 0.8em; - } -} - -.clearfix:after, -.container:after { - content: "\0020"; - display: block; - height: 0; - clear: both; - visibility: hidden; - overflow: hidden; -} - -.clearfix, -.container { - display: block; -} - -.clear { - clear: both; -} - -.blend { - opacity: 0.25; -} -.box { - padding: 10px; -} - -.alignleft { - float: left; -} - -.alignright { - float: right; -} - -.textcenter { - text-align: center; -} - -.textright { - text-align: right; -} - -.bottom { - margin-bottom: 0 !important; - padding-bottom: 0 !important; -} - -.left { - margin-left: 0 !important; - padding-left: 0 !important; -} - -.right { - margin-right: 0 !important; - padding-right: 0 !important; -} - -.top { - margin-top: 0 !important; - padding-top: 0 !important; -} - -.nobullets { - list-style: none; -} - -.mod-hidden { - display: none; -} -.mod-init-hidden { - opacity: 0; -} -::selection { - background: transparent; -} - -.mod-box { - background: white; - left: 50%; - margin: -150px -168px; - padding: 18px; - position: absolute; - top: 50%; - width: 300px; - &:not(#midi-ports-box) { - label { - display: inline-block; - float: left; - line-height: 2; - width: 96px; - } - } - .mod-controls { - float: left; - } - input[type="text"] { - width: 190px; - } - input[type="password"] { - width: 190px; - } -} - -.blocker { - background: rgba(17,17,17,.9); - color: white; - display: block; - position: fixed; - width: 100% !important; - height: 100% !important; - top: 0; - left: 0; - text-align: center; - z-index: 99999; - p { - position: absolute; - top: 50%; - width: 100%; - margin-top: 56px; - font-size: 24px; - } -} -.blocker.screen-disconnected { - background: rgba(17,17,17,.9) url(../img/icons/blocked.svg) 50% 50% no-repeat; - background-size: 100px 100px; - .button { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - margin-top: 120px; - } -} -.blocker.screen-updating { - -} -.blocker.screen-loading { - -} - -.plugin-wait { - background: url(../img/loading-effect.gif) no-repeat center center; - border: 1px solid #CCCCCC; -} - -.button { - background: @brand-primary; - color: white; - display: inline-block; - cursor: pointer; - line-height: 25px; - padding: 5px 15px; - transition: all 0.33s; - border: none; - &:hover { - background-color: @brand-warning; - box-shadow: 0 1px 5px black; - } -} -.button.icon { - padding-left: 40px; - background-position: 10px 50%; - background-repeat: no-repeat; - background-size: 25px; -} - -.drag-handle { - bottom: 0; - cursor: -webkit-grabbing !important; - cursor: grabbing !important; - left: 0; - position: absolute; - right: 0; - top: 0; - z-index: 20; -} - -.demo-plugin { - background: url("/img/trial.svg") no-repeat center center; - background-size: contain; - opacity: 0.4; - z-index: 11 !important; -} - -.demo-mask { - width: 100%; - height: 100%; - left: 0; - right: 0; - top: 0; - bottom: 0; - position: absolute; -} - -.demo-plugin-light { - opacity: 0.1 !important; -} - -.actions { - z-index: 20; -} - -@keyframes flashlight { - 0% { box-shadow: 0 0 0 transparent; } - 50% { box-shadow: 0 0 10px white; } - 100% { box-shadow: 0 0 0 transparent; } -} - - -.alert { - background: rgba(17, 17, 17, 0.9); - border-width: 0 0 0 6px; - border-color: @brand-primary; - color: white; - box-shadow: 0 3px 10px black; - .js-close { - color: white; - } - margin-top: 5px !important; -} -.alert-warning { - border-color: @brand-warning; -} -.alert-danger { - border-color: #c00; -} - -#go-back { - width: 200px; - text-align: left; - margin: 20px 0 0 0; - background: none; - border: none; - font-size: 15px; - padding: 5px; - color: #fff !important; - span { - &:before { - content: '\e804'; - } - font-family: fontello !important; - } - &:hover { - text-decoration: none; - } -} - -.unstable-warning { - float: left; - background-color: #ffebb1; - padding: 5px; - border-radius: 10px; -} diff --git a/html/css/less/nprogress.less b/html/css/less/nprogress.less deleted file mode 100644 index 1f46d6071..000000000 --- a/html/css/less/nprogress.less +++ /dev/null @@ -1,71 +0,0 @@ -/* Make clicks pass-through */ -#nprogress { - pointer-events: none; - z-index: 103100; - -} - -#nprogress .bar { - background: @brand-primary; - - position: fixed; - z-index: 103100; - top: 45px; - left: 0; - opacity: 0.5; - width: 100%; - height: 2px; -} - -/* Fancy blur effect */ -#nprogress .peg { - display: none; -} - -/* Remove these to get rid of the spinner */ -#nprogress .spinner { - display: none; - position: fixed; - z-index: 1031; - top: 45px; - right: 0; - background: rgba(0, 0, 0, 0.5); - padding: 6px; - box-sizing: border-box; - transform: translate(-50% -50%); -} - -#nprogress .spinner-icon { - width: 32px; - height: 32px; - box-sizing: border-box; - - border: solid 3px transparent; - border-top-color: rgba(242, 148, 70, 1); - border-left-color: rgba(242, 148, 70, .66); - border-bottom-color: rgba(242, 148, 70, .33); - - border-radius: 50%; - - -webkit-animation: nprogress-spinner 400ms linear infinite; - animation: nprogress-spinner 400ms linear infinite; -} - -.nprogress-custom-parent { - overflow: hidden; - position: relative; -} - -.nprogress-custom-parent #nprogress .spinner, -.nprogress-custom-parent #nprogress .bar { - position: absolute; -} - -@-webkit-keyframes nprogress-spinner { - 0% { -webkit-transform: rotate(0deg); } - 100% { -webkit-transform: rotate(360deg); } -} -@keyframes nprogress-spinner { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} diff --git a/html/css/less/pedalboards.less b/html/css/less/pedalboards.less deleted file mode 100644 index 19141ac17..000000000 --- a/html/css/less/pedalboards.less +++ /dev/null @@ -1,199 +0,0 @@ -#pedalboards-library { - background: #2c2c2c; - bottom: 45px; - left: 0; - overflow-x: hidden; - overflow-y: auto; - position: absolute; - right: 0; - top: 0; - z-index: 2; - h1 { - color: #fff; - display: inline-block; - font-size: 24px; - line-height: 35px; - margin: 0 0 18px 0; - padding: 0; - } - header { - .form-group { - display: inline-block; - float: right; - margin-top: 5px; - margin-right: 5px; - .form-control { - width: 200px !important; - } - .input-clean { - line-height: 20px; - margin-right: 12px !important; - } - } - .view-modes { - float: right; - margin-right: 12px; - cursor: pointer; - - .view-mode { - font-size: 130%; - - &.selected { - color: #fff; - } - } - } - } - .filter { - border-color: #111; - border-style: dotted; - border-width: 0 1px 0 0; - bottom: 45px; - left: 0; - position: fixed; - right: 0; - top: 45px; - width: 240px; - .control-group { - float: left; - margin-right: 9px; - } - .control-group label { - color: #fff; - display: inline-block; - font-size: 12px; - font-weight: bold; - width: 165px; - } - .control-group select { - width: 50px; - } - } - .pedalboards { - left: 0px; - position: fixed; - right: 0px; - top: 45px; - bottom: 45px; - overflow: auto; - background: #111 url(../img/watermark.png) 100% 100% no-repeat; - padding-top: 1%; - - .pedalboard { - color: #fff; - float: left; - margin: 0 0 1% 1%; - width: 18.8%; - position: relative; - background-color: transparent; - background-image: url(../img/background.jpg); - background-position: center center; - background-repeat: repeat; - background-size: auto 100%; - transition: all 0.33s; - cursor: pointer; - - &:hover { - .info { - background-color: @brand-primary; - } - } - .img { - box-shadow: inset 0 3px 6px black; - border: 1px solid #000; - display: block; - width: 100%; - height: 10vw; - overflow: hidden; - text-align: center; - background-image: url(../img/loading-pedalboard.gif); - background-position: center center; - background-repeat: no-repeat; - background-size: auto; - position: relative; - &.loaded { - background-size: contain; - } - &.broken { - background-image: url(../img/icons/broken_image.svg); - background-size: auto 50%; - } - } - &.broken { - .img::after { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 10; - background-color: rgba(17, 17, 17, 0.5); - background-image: url(../img/icons/broken_pedal.svg); - background-size: auto 50%; - background-repeat: no-repeat; - background-position: center; - } - } - .info { - background-color: #2c2c2c; - transition: background-color 0.33s; - } - .title { - display: block; - line-height: 32px; - font-weight: bold; - overflow: hidden; - position: relative; - height: 32px; - left: 5px; - width: calc(~'100% - 32px'); - text-overflow: ellipsis; - white-space: nowrap; - } - .description { - display: block; - font-size: 12px; - height: 36px; - line-height: 1.5; - overflow: hidden; - } - .actions { - font-weight: bold; - text-transform: uppercase; - position: absolute; - top: 0; - right: 0; - .js-remove { - width: 32px; - height: 32px; - background-image: url(../img/icons/25/delete.png); - background-repeat: no-repeat; - background-position: 50% 50%; - transition: background-color 0.33s; - &:hover { - background-color: @brand-warning; - } - } - } - .actions > span { - cursor: pointer; - &:hover { - text-decoration: underline; - } - &.duplicate { - margin: 0 6px; - } - } - } - - &.list-selected { - .pedalboard { - // width: 98%; - } - .img { - display: none; - } - } - } -} diff --git a/html/css/less/variables.less b/html/css/less/variables.less deleted file mode 100644 index e91acac7d..000000000 --- a/html/css/less/variables.less +++ /dev/null @@ -1,836 +0,0 @@ - - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -@gray-darker: lighten(#000, 13.5%); // #222 -@gray-dark: lighten(#000, 20%); // #333 -@gray: lighten(#000, 33.5%); // #555 -@gray-light: lighten(#000, 60%); // #999 -@gray-mid-light: lighten(#000, 85%); // #999 -@gray-lighter: lighten(#000, 93.5%); // #eee - -@brand-primary: #883996; -@brand-success: #883996; -@brand-info: #883996; -@brand-warning: #F29446; -@brand-danger: #d9534f; - - -//== Scaffolding -// -// ## Settings for some of the most global styles. - -//** Background color for ``. -@body-bg: #fff; -//** Global text color on ``. -@text-color: @gray-dark; - -//** Global textual link color. -@link-color: @brand-primary; -//** Link hover color set via `darken()` function. -@link-hover-color: darken(@link-color, 15%); - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; -@font-family-serif: Georgia, "Times New Roman", Times, serif; -//** Default monospace fonts for ``, ``, and `
`.
-@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
-@font-family-base:        @font-family-sans-serif;
-
-@font-size-base:          14px;
-@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
-@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
-
-@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
-@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
-@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
-@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
-@font-size-h5:            @font-size-base;
-@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
-
-//** Unit-less `line-height` for use in components like buttons.
-@line-height-base:        1.428571429; // 20/14
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
-
-//** By default, this inherits from the ``.
-@headings-font-family:    inherit;
-@headings-font-weight:    500;
-@headings-line-height:    1.1;
-@headings-color:          inherit;
-
-
-//-- Iconography
-//
-//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.
-
-@icon-font-path:          "../fonts/";
-@icon-font-name:          "glyphicons-halflings-regular";
-@icon-font-svg-id:        "glyphicons_halflingsregular";
-
-//== Components
-//
-//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
-
-@padding-base-vertical:     6px;
-@padding-base-horizontal:   12px;
-
-@padding-large-vertical:    10px;
-@padding-large-horizontal:  16px;
-
-@padding-small-vertical:    5px;
-@padding-small-horizontal:  10px;
-
-@padding-xs-vertical:       1px;
-@padding-xs-horizontal:     5px;
-
-@line-height-large:         1.33;
-@line-height-small:         1.5;
-
-@border-radius-base:        0px;
-@border-radius-large:       0px;
-@border-radius-small:       0px;
-
-//** Global color for active items (e.g., navs or dropdowns).
-@component-active-color:    #fff;
-//** Global background color for active items (e.g., navs or dropdowns).
-@component-active-bg:       @brand-primary;
-
-//** Width of the `border` for generating carets that indicator dropdowns.
-@caret-width-base:          4px;
-//** Carets increase slightly in size for larger components.
-@caret-width-large:         5px;
-
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for ``s and ``s.
-@table-cell-padding:            8px;
-//** Padding for cells in `.table-condensed`.
-@table-condensed-cell-padding:  5px;
-
-//** Default background color used for all tables.
-@table-bg:                      transparent;
-//** Background color used for `.table-striped`.
-@table-bg-accent:               #f9f9f9;
-//** Background color used for `.table-hover`.
-@table-bg-hover:                #f5f5f5;
-@table-bg-active:               @table-bg-hover;
-
-//** Border color for table and cell borders.
-@table-border-color:            #ddd;
-
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-@btn-font-weight:                normal;
-
-@btn-default-color:              #333;
-@btn-default-bg:                 #fff;
-@btn-default-border:             #ccc;
-
-@btn-primary-color:              #fff;
-@btn-primary-bg:                 @brand-primary;
-@btn-primary-border:             darken(@btn-primary-bg, 5%);
-
-@btn-success-color:              #fff;
-@btn-success-bg:                 @brand-success;
-@btn-success-border:             darken(@btn-success-bg, 5%);
-
-@btn-info-color:                 #fff;
-@btn-info-bg:                    @brand-info;
-@btn-info-border:                darken(@btn-info-bg, 5%);
-
-@btn-warning-color:              #fff;
-@btn-warning-bg:                 @brand-warning;
-@btn-warning-border:             darken(@btn-warning-bg, 5%);
-
-@btn-danger-color:               #fff;
-@btn-danger-bg:                  @brand-danger;
-@btn-danger-border:              darken(@btn-danger-bg, 5%);
-
-@btn-link-disabled-color:        @gray-light;
-
-
-//== Forms
-//
-//##
-
-//** `` background color
-@input-bg:                       #fff;
-//** `` background color
-@input-bg-disabled:              @gray-lighter;
-
-//** Text color for ``s
-@input-color:                    @gray;
-//** `` border color
-@input-border:                   #ccc;
-//** `` border radius
-@input-border-radius:            @border-radius-base;
-//** Border color for inputs on focus
-@input-border-focus:             #66afe9;
-
-//** Placeholder text color
-@input-color-placeholder:        @gray-light;
-
-//** Default `.form-control` height
-@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
-//** Large `.form-control` height
-@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
-//** Small `.form-control` height
-@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
-
-@legend-color:                   @gray-dark;
-@legend-border-color:            #e5e5e5;
-
-//** Background color for textual input addons
-@input-group-addon-bg:           @gray-lighter;
-//** Border color for textual input addons
-@input-group-addon-border-color: @input-border;
-
-
-//== Dropdowns
-//
-//## Dropdown menu container and contents.
-
-//** Background for the dropdown menu.
-@dropdown-bg:                    #fff;
-//** Dropdown menu `border-color`.
-@dropdown-border:                rgba(0,0,0,.15);
-//** Dropdown menu `border-color` **for IE8**.
-@dropdown-fallback-border:       #ccc;
-//** Divider color for between dropdown items.
-@dropdown-divider-bg:            #e5e5e5;
-
-//** Dropdown link text color.
-@dropdown-link-color:            @gray-dark;
-//** Hover color for dropdown links.
-@dropdown-link-hover-color:      darken(@gray-dark, 5%);
-//** Hover background for dropdown links.
-@dropdown-link-hover-bg:         #f5f5f5;
-
-//** Active dropdown menu item text color.
-@dropdown-link-active-color:     @component-active-color;
-//** Active dropdown menu item background color.
-@dropdown-link-active-bg:        @component-active-bg;
-
-//** Disabled dropdown menu item background color.
-@dropdown-link-disabled-color:   @gray-light;
-
-//** Text color for headers within dropdown menus.
-@dropdown-header-color:          @gray-light;
-
-// Note: Deprecated @dropdown-caret-color as of v3.1.0
-@dropdown-caret-color:           #000;
-
-
-//-- Z-index master list
-//
-// Warning: Avoid customizing these values. They're used for a bird's eye view
-// of components dependent on the z-axis and are designed to all work together.
-//
-// Note: These variables are not generated into the Customizer.
-
-@zindex-navbar:            1000;
-@zindex-dropdown:          1000;
-@zindex-popover:           1010;
-@zindex-tooltip:           1030;
-@zindex-navbar-fixed:      1030;
-@zindex-modal-background:  1040;
-@zindex-modal:             1050;
-
-
-//== Media queries breakpoints
-//
-//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
-
-// Extra small screen / phone
-// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1
-@screen-xs:                  480px;
-@screen-xs-min:              @screen-xs;
-@screen-phone:               @screen-xs-min;
-
-// Small screen / tablet
-// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1
-@screen-sm:                  768px;
-@screen-sm-min:              @screen-sm;
-@screen-tablet:              @screen-sm-min;
-
-// Medium screen / desktop
-// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1
-@screen-md:                  992px;
-@screen-md-min:              @screen-md;
-@screen-desktop:             @screen-md-min;
-
-// Large screen / wide desktop
-// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1
-@screen-lg:                  1240px;
-@screen-lg-min:              @screen-lg;
-@screen-lg-desktop:          @screen-lg-min;
-
-// So media queries don't overlap when required, provide a maximum
-@screen-xs-max:              (@screen-sm-min - 1);
-@screen-sm-max:              (@screen-md-min - 1);
-@screen-md-max:              (@screen-lg-min - 1);
-
-
-//== Grid system
-//
-//## Define your custom responsive grid.
-
-//** Number of columns in the grid.
-@grid-columns:              12;
-//** Padding between columns. Gets divided in half for the left and right.
-@grid-gutter-width:         30px;
-// Navbar collapse
-//** Point at which the navbar becomes uncollapsed.
-@grid-float-breakpoint:     @screen-sm-min;
-//** Point at which the navbar begins collapsing.
-@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
-
-
-//== Container sizes
-//
-//## Define the maximum width of `.container` for different screen sizes.
-
-// Small screen / tablet
-@container-tablet:             100%;
-//** For `@screen-sm-min` and up.
-@container-sm:                 @container-tablet;
-
-// Medium screen / desktop
-@container-desktop:            ((940px + @grid-gutter-width));
-//** For `@screen-md-min` and up.
-@container-md:                 @container-desktop;
-
-// Large screen / wide desktop
-@container-large-desktop:      ((1240px + @grid-gutter-width));
-//** For `@screen-lg-min` and up.
-@container-lg:                 @container-large-desktop;
-
-
-//== Navbar
-//
-//##
-
-// Basics of a navbar
-@navbar-height:                    50px;
-@navbar-margin-bottom:             @line-height-computed;
-@navbar-border-radius:             @border-radius-base;
-@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
-@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
-@navbar-collapse-max-height:       340px;
-
-@navbar-default-color:             #777;
-@navbar-default-bg:                #f8f8f8;
-@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
-
-// Navbar links
-@navbar-default-link-color:                #777;
-@navbar-default-link-hover-color:          #333;
-@navbar-default-link-hover-bg:             transparent;
-@navbar-default-link-active-color:         #555;
-@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
-@navbar-default-link-disabled-color:       #ccc;
-@navbar-default-link-disabled-bg:          transparent;
-
-// Navbar brand label
-@navbar-default-brand-color:               @navbar-default-link-color;
-@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
-@navbar-default-brand-hover-bg:            transparent;
-
-// Navbar toggle
-@navbar-default-toggle-hover-bg:           #ddd;
-@navbar-default-toggle-icon-bar-bg:        #888;
-@navbar-default-toggle-border-color:       #ddd;
-
-
-// Inverted navbar
-// Reset inverted navbar basics
-@navbar-inverse-color:                      @gray-light;
-@navbar-inverse-bg:                         #222;
-@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
-
-// Inverted navbar links
-@navbar-inverse-link-color:                 @gray-light;
-@navbar-inverse-link-hover-color:           #fff;
-@navbar-inverse-link-hover-bg:              transparent;
-@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
-@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
-@navbar-inverse-link-disabled-color:        #444;
-@navbar-inverse-link-disabled-bg:           transparent;
-
-// Inverted navbar brand label
-@navbar-inverse-brand-color:                @navbar-inverse-link-color;
-@navbar-inverse-brand-hover-color:          #fff;
-@navbar-inverse-brand-hover-bg:             transparent;
-
-// Inverted navbar toggle
-@navbar-inverse-toggle-hover-bg:            #333;
-@navbar-inverse-toggle-icon-bar-bg:         #fff;
-@navbar-inverse-toggle-border-color:        #333;
-
-
-//== Navs
-//
-//##
-
-//=== Shared nav styles
-@nav-link-padding:                          10px 15px;
-@nav-link-hover-bg:                         @gray-lighter;
-
-@nav-disabled-link-color:                   @gray-light;
-@nav-disabled-link-hover-color:             @gray-light;
-
-@nav-open-link-hover-color:                 #fff;
-
-//== Tabs
-@nav-tabs-border-color:                     #ddd;
-
-@nav-tabs-link-hover-border-color:          @gray-lighter;
-
-@nav-tabs-active-link-hover-bg:             @body-bg;
-@nav-tabs-active-link-hover-color:          @gray;
-@nav-tabs-active-link-hover-border-color:   #ddd;
-
-@nav-tabs-justified-link-border-color:            #ddd;
-@nav-tabs-justified-active-link-border-color:     @body-bg;
-
-//== Pills
-@nav-pills-border-radius:                   @border-radius-base;
-@nav-pills-active-link-hover-bg:            @component-active-bg;
-@nav-pills-active-link-hover-color:         @component-active-color;
-
-
-//== Pagination
-//
-//##
-
-@pagination-color:                     @link-color;
-@pagination-bg:                        #fff;
-@pagination-border:                    #ddd;
-
-@pagination-hover-color:               @link-hover-color;
-@pagination-hover-bg:                  @gray-lighter;
-@pagination-hover-border:              #ddd;
-
-@pagination-active-color:              #fff;
-@pagination-active-bg:                 @brand-primary;
-@pagination-active-border:             @brand-primary;
-
-@pagination-disabled-color:            @gray-light;
-@pagination-disabled-bg:               #fff;
-@pagination-disabled-border:           #ddd;
-
-
-//== Pager
-//
-//##
-
-@pager-bg:                             @pagination-bg;
-@pager-border:                         @pagination-border;
-@pager-border-radius:                  15px;
-
-@pager-hover-bg:                       @pagination-hover-bg;
-
-@pager-active-bg:                      @pagination-active-bg;
-@pager-active-color:                   @pagination-active-color;
-
-@pager-disabled-color:                 @pagination-disabled-color;
-
-
-//== Jumbotron
-//
-//##
-
-@jumbotron-padding:              30px;
-@jumbotron-color:                inherit;
-@jumbotron-bg:                   @gray-lighter;
-@jumbotron-heading-color:        inherit;
-@jumbotron-font-size:            ceil((@font-size-base * 1.5));
-
-
-//== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-
-@state-success-text:             #3c763d;
-@state-success-bg:               #dff0d8;
-@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
-
-@state-info-text:                #3A633D;
-@state-info-bg:                  #A6ECB1;
-@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
-
-@state-warning-text:             #fff;
-@state-warning-bg:               #F29446;
-@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
-
-@state-danger-text:              #a94442;
-@state-danger-bg:                #f2dede;
-@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
-
-
-//== Tooltips
-//
-//##
-
-//** Tooltip max width
-@tooltip-max-width:           200px;
-//** Tooltip text color
-@tooltip-color:               #fff;
-//** Tooltip background color
-@tooltip-bg:                  #000;
-@tooltip-opacity:             .9;
-
-//** Tooltip arrow width
-@tooltip-arrow-width:         5px;
-//** Tooltip arrow color
-@tooltip-arrow-color:         @tooltip-bg;
-
-
-//== Popovers
-//
-//##
-
-//** Popover body background color
-@popover-bg:                          #fff;
-//** Popover maximum width
-@popover-max-width:                   276px;
-//** Popover border color
-@popover-border-color:                rgba(0,0,0,.2);
-//** Popover fallback border color
-@popover-fallback-border-color:       #ccc;
-
-//** Popover title background color
-@popover-title-bg:                    darken(@popover-bg, 3%);
-
-//** Popover arrow width
-@popover-arrow-width:                 10px;
-//** Popover arrow color
-@popover-arrow-color:                 #fff;
-
-//** Popover outer arrow width
-@popover-arrow-outer-width:           (@popover-arrow-width + 1);
-//** Popover outer arrow color
-@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
-//** Popover outer arrow fallback color
-@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
-
-
-//== Labels
-//
-//##
-
-//** Default label background color
-@label-default-bg:            @gray-light;
-//** Primary label background color
-@label-primary-bg:            @brand-primary;
-//** Success label background color
-@label-success-bg:            @brand-success;
-//** Info label background color
-@label-info-bg:               @brand-info;
-//** Warning label background color
-@label-warning-bg:            @brand-warning;
-//** Danger label background color
-@label-danger-bg:             @brand-danger;
-
-//** Default label text color
-@label-color:                 #fff;
-//** Default text color of a linked label
-@label-link-hover-color:      #fff;
-
-
-//== Modals
-//
-//##
-
-//** Padding applied to the modal body
-@modal-inner-padding:         20px;
-
-//** Padding applied to the modal title
-@modal-title-padding:         15px;
-//** Modal title line-height
-@modal-title-line-height:     @line-height-base;
-
-//** Background color of modal content area
-@modal-content-bg:                             #fff;
-//** Modal content border color
-@modal-content-border-color:                   rgba(0,0,0,.2);
-//** Modal content border color **for IE8**
-@modal-content-fallback-border-color:          #999;
-
-//** Modal backdrop background color
-@modal-backdrop-bg:           #000;
-//** Modal backdrop opacity
-@modal-backdrop-opacity:      .5;
-//** Modal header border color
-@modal-header-border-color:   #e5e5e5;
-//** Modal footer border color
-@modal-footer-border-color:   @modal-header-border-color;
-
-@modal-lg:                    900px;
-@modal-md:                    600px;
-@modal-sm:                    300px;
-
-
-//== Alerts
-//
-//## Define alert colors, border radius, and padding.
-
-@alert-padding:               15px;
-@alert-border-radius:         @border-radius-base;
-@alert-link-font-weight:      bold;
-
-@alert-success-bg:            @state-success-bg;
-@alert-success-text:          @state-success-text;
-@alert-success-border:        @state-success-border;
-
-@alert-info-bg:               @state-info-bg;
-@alert-info-text:             @state-info-text;
-@alert-info-border:           @state-info-border;
-
-@alert-warning-bg:            @state-warning-bg;
-@alert-warning-text:          @state-warning-text;
-@alert-warning-border:        @state-warning-border;
-
-@alert-danger-bg:             @state-danger-bg;
-@alert-danger-text:           @state-danger-text;
-@alert-danger-border:         @state-danger-border;
-
-
-//== Progress bars
-//
-//##
-
-//** Background color of the whole progress component
-@progress-bg:                 #f5f5f5;
-//** Progress bar text color
-@progress-bar-color:          #fff;
-
-//** Default progress bar color
-@progress-bar-bg:             @brand-primary;
-//** Success progress bar color
-@progress-bar-success-bg:     @brand-success;
-//** Warning progress bar color
-@progress-bar-warning-bg:     @brand-warning;
-//** Danger progress bar color
-@progress-bar-danger-bg:      @brand-danger;
-//** Info progress bar color
-@progress-bar-info-bg:        @brand-info;
-
-
-//== List group
-//
-//##
-
-//** Background color on `.list-group-item`
-@list-group-bg:                 #fff;
-//** `.list-group-item` border color
-@list-group-border:             #ddd;
-//** List group border radius
-@list-group-border-radius:      @border-radius-base;
-
-//** Background color of single list elements on hover
-@list-group-hover-bg:           #f5f5f5;
-//** Text color of active list elements
-@list-group-active-color:       @component-active-color;
-//** Background color of active list elements
-@list-group-active-bg:          @component-active-bg;
-//** Border color of active list elements
-@list-group-active-border:      @list-group-active-bg;
-@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
-
-@list-group-link-color:         #555;
-@list-group-link-heading-color: #333;
-
-
-//== Panels
-//
-//##
-
-@panel-bg:                    #fff;
-@panel-body-padding:          15px;
-@panel-border-radius:         @border-radius-base;
-
-//** Border color for elements within panels
-@panel-inner-border:          #ddd;
-@panel-footer-bg:             #f5f5f5;
-
-@panel-default-text:          #999;
-@panel-default-border:        #444;
-@panel-default-heading-bg:    #444;
-
-@panel-primary-text:          #fff;
-@panel-primary-border:        @brand-primary;
-@panel-primary-heading-bg:    @brand-primary;
-
-@panel-success-text:          @state-success-text;
-@panel-success-border:        @state-success-border;
-@panel-success-heading-bg:    @state-success-bg;
-
-@panel-info-text:             @state-info-text;
-@panel-info-border:           @state-info-border;
-@panel-info-heading-bg:       @state-info-bg;
-
-@panel-warning-text:          @state-warning-text;
-@panel-warning-border:        @state-warning-border;
-@panel-warning-heading-bg:    @state-warning-bg;
-
-@panel-danger-text:           @state-danger-text;
-@panel-danger-border:         @state-danger-border;
-@panel-danger-heading-bg:     @state-danger-bg;
-
-
-//== Thumbnails
-//
-//##
-
-//** Padding around the thumbnail image
-@thumbnail-padding:           4px;
-//** Thumbnail background color
-@thumbnail-bg:                @body-bg;
-//** Thumbnail border color
-@thumbnail-border:            #ddd;
-//** Thumbnail border radius
-@thumbnail-border-radius:     @border-radius-base;
-
-//** Custom text color for thumbnail captions
-@thumbnail-caption-color:     @text-color;
-//** Padding around the thumbnail caption
-@thumbnail-caption-padding:   9px;
-
-
-//== Wells
-//
-//##
-
-@well-bg:                     #f5f5f5;
-@well-border:                 darken(@well-bg, 7%);
-
-
-//== Badges
-//
-//##
-
-@badge-color:                 #fff;
-//** Linked badge text color on hover
-@badge-link-hover-color:      #fff;
-@badge-bg:                    @gray-light;
-
-//** Badge text color in active nav link
-@badge-active-color:          @link-color;
-//** Badge background color in active nav link
-@badge-active-bg:             #fff;
-
-@badge-font-weight:           bold;
-@badge-line-height:           1;
-@badge-border-radius:         10px;
-
-
-//== Breadcrumbs
-//
-//##
-
-@breadcrumb-padding-vertical:   8px;
-@breadcrumb-padding-horizontal: 15px;
-//** Breadcrumb background color
-@breadcrumb-bg:                 #f5f5f5;
-//** Breadcrumb text color
-@breadcrumb-color:              #ccc;
-//** Text color of current page in the breadcrumb
-@breadcrumb-active-color:       @gray-light;
-//** Textual separator for between breadcrumb elements
-@breadcrumb-separator:          "/";
-
-
-//== Carousel
-//
-//##
-
-@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
-
-@carousel-control-color:                      #fff;
-@carousel-control-width:                      15%;
-@carousel-control-opacity:                    .5;
-@carousel-control-font-size:                  20px;
-
-@carousel-indicator-active-bg:                #fff;
-@carousel-indicator-border-color:             #fff;
-
-@carousel-caption-color:                      #fff;
-
-
-//== Close
-//
-//##
-
-@close-font-weight:           bold;
-@close-color:                 #000;
-@close-text-shadow:           0 1px 0 #fff;
-
-
-//== Code
-//
-//##
-
-@code-color:                  #c7254e;
-@code-bg:                     #f9f2f4;
-
-@kbd-color:                   #fff;
-@kbd-bg:                      #333;
-
-@pre-bg:                      #f5f5f5;
-@pre-color:                   @gray-dark;
-@pre-border-color:            #ccc;
-@pre-scrollable-max-height:   340px;
-
-
-//== Type
-//
-//##
-
-//** Text muted color
-@text-muted:                  @gray-light;
-//** Abbreviations and acronyms border color
-@abbr-border-color:           @gray-light;
-//** Headings small color
-@headings-small-color:        @gray-light;
-//** Blockquote small color
-@blockquote-small-color:      @gray-light;
-//** Blockquote font size
-@blockquote-font-size:        (@font-size-base * 1.25);
-//** Blockquote border color
-@blockquote-border-color:     @gray-lighter;
-//** Page header border color
-@page-header-border-color:    @gray-lighter;
-
-
-//== Miscellaneous
-//
-//##
-
-//** Horizontal line color.
-@hr-border:                   @gray-lighter;
-
-//** Horizontal offset for forms and lists.
-@component-offset-horizontal: 180px;
-
-// Pages background colors
-@red: lighten(#ff0000, 20%);
-@yellow: lighten(#ffff00, 20%);
-@cyan: lighten(#00ffff, 20%);
-@purple: lighten(#7f339f, 25%);
-@orange: lighten(#ee661f, 20%);
-@green: lighten(#00ff00, 20%);
-@magenta: lighten(#ff00ff, 20%);
-@blue: lighten(#0000ff, 25%);
diff --git a/html/css/main-preLess.css b/html/css/main-preLess.css
deleted file mode 100644
index 32116be91..000000000
--- a/html/css/main-preLess.css
+++ /dev/null
@@ -1,1598 +0,0 @@
-html, body {
-    height:100%;
-    overflow: hidden;
-}
-
-body {
-    background:#393939;
-    min-width:1024px;
-}
-
-* {
-    font-family: "cooper hewitt", Sans-serif !important;
-}
-#wrapper {
-    bottom:0;
-    left:0;
-    min-width:980px;
-    overflow:auto;
-    position:absolute;
-    right:0;
-    top:0;
-}
-
-/* = NOTIFICATIONS
-================================================ */
-#notifications {
-    position:absolute;
-    top:0;
-    width:100%;
-    z-index:100000;
-}
-
-#notifications > section {
-    border-radius:0;
-}
-
-#notifications .progressbar {
-    border:1px solid rgba(0,0,0,0.3);
-    height:18px;
-    overflow:hidden;
-    position:absolute;
-    right:40px;
-    top:10px;
-    width:250px;
-}
-
-#notifications .progressbar .progressbar-value {
-    background-color:rgba(0,0,0,0.3);
-    height:90%;
-    margin:1px;
-}
-
-/* = MAIN MENU (FOOTER)
-================================================ */
-#main-menu {
-    background:#111;
-    bottom:0;
-    color:#fff;
-    height:45px;
-    left:0;
-    position:absolute;
-    right:0;
-    z-index:10;
-}
-
-#main-menu > div {
-    cursor:pointer;
-    float:left;
-}
-
-#main-menu > div.icon {
-    border-right:1px solid #2b2b2b;
-    height:45px;
-    width:45px;
-}
-
-#main-menu > div.icon > img {
-    margin:5px 0 0 6px;
-}
-
-#main-menu > div.icon.selected {
-    background:#000;
-}
-
-#main-menu > div.icon > a {
-    display:block;
-    height:45px;
-    width:45px;
-}
-
-/* MOD - The Social Cloud */
-#main-menu #mod-social {
-    background-image:url(../img/menu-icons-sprite.png);
-    background-position:0 bottom;
-    background-repeat:no-repeat;
-}
-#main-menu #mod-social:hover,
-#main-menu #mod-social.selected {
-    background-color:#000;
-    background-position:0 top;
-}
-
-/* Effects */
-#main-menu #mod-plugins {
-    background-image:url(../img/menu-icons-sprite.png);
-    background-position:-45px bottom;
-    background-repeat:no-repeat;
-}
-#main-menu #mod-plugins:hover,
-#main-menu #mod-plugins.selected {
-    background-color:#000;
-    background-position:-45px top;
-}
-
-#main-menu #mod-cloud-plugins {
-    background-image:url(../img/menu-icons-sprite.png);
-    background-position:-315px bottom;
-    background-repeat:no-repeat;
-}
-#main-menu #mod-cloud-plugins:hover,
-#main-menu #mod-cloud-plugins.selected {
-    background-color:#000;
-    background-position:-315px top;
-}
-
-/* Pedalboards */
-#main-menu #mod-pedalboard {
-    background-image:url(../img/menu-icons-sprite.png);
-    background-position:-90px bottom;
-    background-repeat:no-repeat;
-}
-#main-menu #mod-pedalboard:hover,
-#main-menu #mod-pedalboard.selected {
-    background-color:#000;
-    background-position:-90px top;
-}
-
-/* Banks */
-#main-menu #mod-bank {
-    background-image:url(../img/menu-icons-sprite.png);
-    background-position:-135px bottom;
-    background-repeat:no-repeat;
-}
-#main-menu #mod-bank:hover,
-#main-menu #mod-bank.selected {
-    background-color:#000;
-    background-position:-135px top;
-}
-
-#main-menu #banks-saving {
-    margin: 21px 0 0 6px;
-    font-size: 10px;
-    color: #666;
-    display: none;
-}
-
-/* MOD - Settings */
-#main-menu #mod-update {
-    background-image:url(../img/menu-icons-sprite.png);
-    background-position:-180px bottom;
-    background-repeat:no-repeat;
-    border-color:#2b2b2b;
-    border-style:solid;
-    border-width:0 0 0 1px;
-    float:right;
-}
-#main-menu #mod-update.uptodate {
-    background-color:#000;
-    background-position:-180px top;
-}
-
-/* MOD - CPU */
-#main-menu #mod-cpu, #main-menu #mod-ram {
-    border-color:#2b2b2b;
-    border-style:solid;
-    border-width:0 0 0 1px;
-    color:rgb(47,47,47);
-    float:right;
-    font-size:11px;
-    font-weight:bold;
-    line-height:4.5;
-    cursor: default;
-    text-align:center;
-    text-transform:uppercase;
-    width:100px;
-}
-#main-menu #mod-cpu .progress, #main-menu #mod-ram .progress{
-    height: 45px;
-    margin-bottom: 0;
-    overflow: hidden;
-background: #1e5799; /* Old browsers */
-background: -moz-linear-gradient(left, #1e5799 0%, #2989d8 69%, #ff6430 78%, #ff6430 93%, #c40000 100%); /* FF3.6+ */
-background: -webkit-gradient(linear, left top, right top, color-stop(0%,#1e5799), color-stop(69%,#2989d8), color-stop(78%,#ff6430), color-stop(93%,#ff6430), color-stop(100%,#c40000)); /* Chrome,Safari4+ */
-background: -webkit-linear-gradient(left, #1e5799 0%,#2989d8 69%,#ff6430 78%,#ff6430 93%,#c40000 100%); /* Chrome10+,Safari5.1+ */
-background: -o-linear-gradient(left, #1e5799 0%,#2989d8 69%,#ff6430 78%,#ff6430 93%,#c40000 100%); /* Opera 11.10+ */
-background: -ms-linear-gradient(left, #1e5799 0%,#2989d8 69%,#ff6430 78%,#ff6430 93%,#c40000 100%); /* IE10+ */
-background: linear-gradient(to right, #1e5799 0%,#2989d8 69%,#ff6430 78%,#ff6430 93%,#c40000 100%); /* W3C */
-filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#c40000',GradientType=1 ); /* IE6-9 */    -we
-    -moz-border-radius: 4px;
-    border-radius: 0 !important;
-}
-    #main-menu #mod-cpu .progress .bar, #main-menu #mod-ram .progress .bar{
-        float: right;
-        background: #222 !important
-    }
-
-#main-menu #mod-cpu .progress-title, #main-menu #mod-ram .progress-title{
-    position: absolute;
-    top: 0;
-    height: 45px;
-    margin: 0;
-    margin-left: 1em;
-    color: white;
-}
-/* MOD - Bluetooth */
-#main-menu #mod-status {
-    background-image:url(../img/menu-icons-sprite.png);
-    background-position:-225px bottom;
-    background-repeat:no-repeat;
-    border-color:#2b2b2b;
-    border-style:solid;
-    border-width:0 0 0 1px;
-    float:right;
-}
-#main-menu #mod-status.online {
-    background-color:#000;
-    background-position:-225px top;
-}
-
-/* MOD - Cloud */
-#main-menu #mod-cloud {
-    background-image:url(../img/menu-icons-sprite.png);
-    background-position:-270px bottom;
-    background-repeat:no-repeat;
-    border-color:#2b2b2b;
-    border-style:solid;
-    border-width:0 0 0 1px;
-    float:right;
-}
-
-#main-menu #mod-cloud.logged,
-#main-menu #mod-cloud.online {
-    background-color:#000;
-    background-position:-270px top;
-}
-
-.tooltip {
-    background:white;
-    border-radius:3px;
-    bottom:50px;
-    height:auto;
-    padding:7px;
-    position:absolute;
-}
-
-.tooltip .text {
-    color:#222222;
-    font-weight:bold;
-    line-height:1;
-    text-align:center;
-}
-
-.tooltip .arrow {
-    border-bottom:9px solid transparent;
-    border-left:9px solid transparent;
-    border-right:9px solid transparent;
-    border-top:9px solid white;
-    height:0;
-    position:absolute;
-    bottom:-18px;
-    right:14px;
-    width:0;
-}
-
-
-
-/* = MOD UPGRADE SYSTEM
-================================================ */
-#mod-upgrade {
-    background:white;
-    border-radius:9px;
-    color:black;
-    font-size:12px;
-    max-height:350px;
-    max-width:450px;
-    min-width:350px;
-    overflow:auto;
-    position:absolute;
-    right:10px;
-    bottom:50px;
-    z-index:100;
-}
-
-#mod-upgrade .progressbar-wrapper {
-    border: 1px solid #444444;
-    border-radius: 3px;
-    height: 20px;
-    width: 330px;
-}
-
-#mod-upgrade .progressbar {
-    background-color: #8888ff;
-    height: 20px;
-}
-
-
-/* = PLUGINS LIBRARY
-================================================ */
-#plugins-library {
-    bottom:56px;
-    height:166px;
-    left:0;
-    position:absolute;
-    right:0;
-    transition: all 0.25s;
-}
-
-/* Fold/Unfold */
-#plugins-library.folded {
-    height:26px;
-}
-#plugins-library .fold,
-#plugins-library .folded {
-    cursor:pointer;
-    display:block;
-    float:right;
-    height:36px;
-    position:absolute;
-    top:0;
-    right:0;
-    width:36px;
-}
-#plugins-library .fold {
-    background-color:#000;
-    background-image:url(../img/icons/pinned.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-    display:block !important;
-}
-/*
-#plugins-library.folded .fold {
-    background-color:#000;
-    background-image:url(../img/nav-top.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-    display:block !important;
-}
-*/
-#plugins-library.auto .fold {
-    background-image:url(../img/icons/autohide.png);
-}
-
-/* Effects Filter Settings */
-#plugins-library .settings {
-    background-color:black;
-    background-image:url(../img/icn-search-white.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-    cursor:pointer;
-    display:block;
-    height:36px;
-    position:absolute;
-    right:37px;
-    top:0;
-    width:36px;
-}
-#plugins-library #plugins-library-settings-window {
-    background:#000;
-    bottom:167px;
-    color:#fff;
-    position:absolute;
-    right:0;
-}
-#plugins-library.folded #plugins-library-settings-window {
-    bottom:27px;
-}
-#plugins-library #plugins-library-settings-window h1 {
-    font-size:14px;
-    font-weight:bold;
-    line-height:1;
-    margin:0 0 10px;
-    padding:0;
-    text-transform:uppercase;
-}
-#plugins-library #plugins-library-settings-window form {
-    margin-bottom:0;
-}
-#plugins-library #plugins-library-settings-window label {
-    margin-right:10px;
-}
-#plugins-library #plugins-library-settings-window label.checkbox:last-child {
-    margin-right:0;
-}
-#plugins-library #plugins-library-settings-window .control-group {
-    position:relative;
-}
-#plugins-library #plugins-library-settings-window .input-clean {
-    background:#333;
-    border-radius:12px;
-    color:#fff;
-    cursor:pointer;
-    font-size:8px;
-    height:18px;
-    left:auto !important;
-    position:absolute;
-    right:13px !important;
-    text-align:center;
-    text-transform:uppercase;
-    top:31px !important;
-    width:18px;
-}
-
-/* Effects Categories */
-#plugins-library ul {
-    height:26px;
-    list-style:none;
-    margin:0 73px 0 0;
-    overflow:hidden;
-    padding:10px 0 0 0;
-    position:relative;
-    width:100%;
-}
-#plugins-library ul li {
-    background:#1b1b1b;
-    color:#fff;
-    cursor:pointer;
-    display:inline-block;
-    float:left;
-    font-size:11px;
-    margin:0 1px 0 0;
-    padding:3px 11px;
-    text-shadow:1px 1px 0 #000;
-    text-transform:uppercase;
-}
-#plugins-library ul li.selected {
-    background:#000;
-    border-radius:4px 4px 0 0;
-    font-weight:bold;
-    margin-top:-6px;
-    padding:6px 11px;
-}
-
-/* Effects List */
-#plugins-library #plugins-list {
-    background: rgba(0, 0, 0, 0.66);
-    height:140px;
-    overflow:hidden;
-    position:relative;
-    width:100%;
-}
-#plugins-library #plugins-list .nav {
-    background: rgba(0, 0, 0, 1) url(../img/nav-left.png) 50% 50% no-repeat;
-    cursor:pointer;
-    position:absolute;
-    top: 0;
-    width: 50px;
-    height: 100%;
-    opacity: 0.66;
-}
-#plugins-library #plugins-list .nav:hover {
-    opacity: 1;
-}
-#plugins-library #plugins-list .nav-left {
-    left: 0;
-}
-#plugins-library #plugins-list .nav-right {
-    background: rgba(0, 0, 0, 1) url(../img/nav-right.png) 50% 50% no-repeat;
-    right: 0;
-}
-
-#plugins-library #plugins-list #plugins-results {
-    bottom:0;
-    left:50px;
-    position:absolute;
-    overflow:hidden;
-    right:50px;
-    top:0;
-}
-
-#plugins-library #plugins-list .plugins-wrapper {
-    position:relative;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin {
-    color:#fff;
-    float:left;
-    font-size:11px;
-    font-weight:bold;
-    height:108px;
-    padding:14px 12px 10px;
-    position:relative;
-    text-align:center;
-}
-/* Effect Thumbnail and Status*/
-#plugins-library #plugins-list .plugins-wrapper .plugin .thumb {
-    height:67px;
-    position:relative;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .thumb img {
-    height:auto;
-    margin:0 auto 3px;
-    width:auto;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .status {
-    display:block;
-    height:16px;
-    margin:0 auto;
-    width:16px;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .status.installed {
-    background-image:url(../img/icn-installed.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .status.outdated {
-    background-image:url(../img/icn-outdated.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .status.blocked {
-    background-image:url(../img/icn-blocked.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-}
-/* Effect Author */
-#plugins-library #plugins-list .plugins-wrapper .plugin .author {
-    display:block;
-    line-height:1.5;
-}
-/* Effect Title */
-#plugins-library #plugins-list .plugins-wrapper .plugin .title {
-    display:block;
-    line-height:1.25;
-}
-/* Effect Rating */
-#plugins-library #plugins-list .plugins-wrapper .plugin .rating {
-    background-image:url(../img/icn-rating.png);
-    background-position:center top;
-    background-repeat:no-repeat;
-    display:block;
-    height:16px;
-    width:132px;
-}
-
-#plugins-library #plugins-list .plugins-wrapper .plugin .rating.one {
-    background-position:center -15px;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .rating.two {
-    background-position:center -30px;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .rating.three {
-    background-position:center -45px;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .rating.four {
-    background-position:center -60px;
-}
-#plugins-library #plugins-list .plugins-wrapper .plugin .rating.five {
-    background-position:center -75px;
-}
-/* Effect's Downloads Status */
-#plugins-library #plugins-list .plugins-wrapper .plugin .downloads {
-    display:block;
-}
-
-/* = PLUGIN INFO
-================================================ */
-.plugin-info {
-    background-color:rgba(20,20,20,.9);
-    bottom:0;
-    color:#ccc;
-    left:0;
-    overflow-y:scroll;
-    position:fixed;
-    right:0;
-    top:0px;
-    z-index:40;
-}
-
-.plugin-info .box {
-    background-color:#000;
-    border-radius:18px;
-    margin:27px auto;
-    width:90%;
-}
-
-.plugin-info .close {
-    color:#fff;
-    font-size:12px;
-    font-weight:bold;
-    opacity:1;
-    position:absolute;
-    right:10px;
-    text-shadow:none;
-    text-transform:uppercase;
-    top:10px;
-}
-
-.plugin-info .screenshot {
-    padding:18px 0 0;
-}
-
-.plugin-info header {
-    padding:18px 0 0;
-}
-
-.plugin-info header h1 {
-    color:#fff;
-    font-size:21px;
-    line-height:1;
-    margin:0;
-    padding:0;
-}
-
-.plugin-info header h1 span {
-    font-size:16px;
-    line-height:1;
-    margin:0;
-    padding:0;
-}
-
-.plugin-info .version {
-    color:#ccc;
-    font-size:12px;
-    font-weight:bold;
-    text-transform:uppercase;
-}
-
-.plugin-info .version span.bold {
-    color:#fff;
-    font-size:14px;
-}
-
-.plugin-info .version button {
-    font-weight:bold;
-    margin-top:6px;
-    text-transform:uppercase;
-}
-
-.plugin-info .rating {
-    background:url(../img/icn-rating.png) no-repeat -12px top;
-    display:inline-block;
-    height:14px;
-    width:84px;
-}
-.plugin-info .rating-label {
-    color:#fff;
-    font-size:12px;
-    font-weight:bold;
-    text-transform:uppercase;
-}
-.plugin-info .rating.one {
-    background:url(../img/icn-rating.png) no-repeat -12px -15px;
-}
-.plugin-info .rating.two {
-    background:url(../img/icn-rating.png) no-repeat -12px -30px;
-}
-.plugin-info .rating.three {
-    background:url(../img/icn-rating.png) no-repeat -12px -45px;
-}
-.plugin-info .rating.four {
-    background:url(../img/icn-rating.png) no-repeat -12px -60px;
-}
-.plugin-info .rating.five {
-    background:url(../img/icn-rating.png) no-repeat -12px -75px;
-}
-.plugin-info .my-rate {
-    width: 15px;
-    height: 15px;
-    margin: 0;
-    padding: 0;
-    float: left;
-    cursor: pointer;
-}
-
-.plugin-info .plugin-specs {
-    text-align:center;
-    width:100%;
-}
-
-.plugin-info .plugin-specs th {
-    background:#333;
-    color:#fff;
-}
-.plugin-info .plugin-specs th:first-child{
-    border-radius:4px 0 0 0;
-}
-
-.plugin-info .plugin-specs th:last-child{
-    border-radius:0 4px 0 0;
-}
-.plugin-info .plugin-specs {
-    border-color:#333;
-}
-.plugin-info .plugin-specs th,
-.plugin-info .plugin-specs td {
-    border-color:#333;
-}
-
-.plugin-info .comments-reviews {
-    border-top:1px solid #333;
-    margin-top:10px;
-    padding-top:10px;
-}
-.plugin-info .comments-reviews h1 {
-    color:#fff;
-    font-size:21px;
-    line-height:2;
-    margin:0;
-    padding:0;
-}
-
-.plugin-info .reviews {
-    border-bottom:1px solid #333;
-    margin:9px 0 18px 0;
-    padding:9px 0 18px 0;
-}
-
-.plugin-info article.review {
-    margin:18px 0;
-}
-
-.plugin-info article.review h1 {
-    color:#fff;
-    font-size:14px;
-}
-
-.plugin-info article.review h1 .rating {
-    margin-left:6px;
-}
-
-.plugin-info article.review h1 .rating-label {
-    color:#ccc;
-    display:inline;
-    font-size:12px;
-    font-weight:normal;
-    margin-left:6px;
-}
-
-.plugin-info article.review .bar {
-    background:#333;
-    display:block;
-    height:12px;
-    margin:2px 6px 0;
-    position:relative;
-    width:100px;
-}
-
-.plugin-info article.review .progress-bar {
-    background:#444;
-    bottom:0;
-    display:block;
-    height:10px;
-    left:0;
-    margin:1px;
-    position:absolute;
-    right:0;
-    top:0;
-    width:50%;
-}
-
-.plugin-info article.review .rating-number {
-    display:block;
-    font-size:12px;
-    margin-top:-1px;
-}
-
-.plugin-info .comments {
-    margin:18px 0;
-    padding:18px 0;
-}
-
-.plugin-info .comments button {
-    margin-top:18px;
-}
-
-.plugin-info article.comment {
-    border-top:1px solid #333;
-    margin:18px 0 0;
-    padding:18px 0 0;
-}
-
-.plugin-info article.comment h1 {
-    color:#fff;
-    font-size:16px;
-    line-height:1;
-}
-
-.plugin-info article.comment h1 .date {
-    color:#ccc;
-    font-size:12px;
-    font-weight:normal;
-    margin-left:6px;
-}
-
-.plugin-info form.comment-form {
-    border-top:1px solid #333;
-    margin:18px 0;
-    padding:18px 0;
-}
-
-.plugin-info form.comment-form label {
-    font-size:12px;
-    font-weight:bold;
-    text-transform:uppercase;
-}
-
-.plugin-info form.comment-form textarea {
-    height:180px;
-}
-
-/* = CLOUD PLUGINS LIBRARY
-================================================ */
-#cloud-plugins-library {
-    background:#000;
-    bottom:46px;
-    left:0;
-    overflow:auto;
-    position:absolute;
-    right:0;
-    top:68px;
-    z-index:2;
-}
-#cloud-plugins-library h1 {
-    color:#fff;
-    display:inline-block;
-    font-size:24px;
-    margin:0 0 18px 0;
-    padding:0;
-}
-#cloud-plugins-library header {
-    background-image:url(../img/header-pattern.png);
-    background-position:bottom center;
-    background-repeat:no-repeat;
-    display:block;
-    left:0;
-    padding:10px 10px 18px 10px;
-    position:fixed;
-    right:0;
-    top:0;
-    z-index:2;
-}
-#cloud-plugins-library header .help {
-    background-image:url(../img/icn-help-16x16.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-    display:inline-block;
-    height:21px;
-    width:21px;
-}
-#cloud-plugins-library header .close {
-    opacity:1;
-    position:absolute;
-    right:10px;
-    top:16px;
-}
-#cloud-plugins-library .filter {
-    border-color:#111;
-    border-style:dotted;
-    border-width:0 1px 0 0;
-    bottom:46px;
-    left:10px;
-    padding-top:18px;
-    position:fixed;
-    right:0;
-    top:68px;
-    width:240px;
-    overflow: hidden;
-}
-#cloud-plugins-library .filter .control-group {
-    float:left;
-    margin-right:9px;
-}
-#cloud-plugins-library .filter .control-group label {
-    color:#fff;
-    display:inline-block;
-    font-size:12px;
-    font-weight:bold;
-}
-
-#cloud-plugins-library .filter .control-group select {
-    width:50px;
-}
-#cloud-plugins-library .cloud-plugins {
-    left:252px;
-    position:absolute;
-    right:10px;
-}
-
-#cloud-plugins-library .categories {
-    width: 100%;
-    margin-left: 0px;
-    margin-right: 0px;
-}
-
-#cloud-plugins-library .categories li {
-    display: block;
-    background: #222;
-    color: #888;
-    cursor: pointer;
-    font-size: 12px;
-    font-weight: bold;
-    height: 20px;
-    margin: 0 0 1px 0;
-    padding: 10px 5px;
-    position: relative;
-}
-#cloud-plugins-library .categories li.selected {
-    background: transparent;
-}
-
-#cloud-plugins-library .categories li:hover {
-    background: #333;
-}
-
-#cloud-plugins-library .cloud-plugins .cloud-plugin {
-    color:#fff;
-    float:left;
-    padding: 10px 10px 10px 10px;
-    width:140px;
-    height: 120px;
-    text-align: center;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin:hover {
-    background-color: #212121;
-    cursor: pointer;
-}
-
-#cloud-plugins-library .cloud-plugins .cloud-plugin .thumb {
-    height: 60%;
-}
-
-#cloud-plugins-library .cloud-plugins .cloud-plugin .img {
-    background:#2b2b2b;
-    border-radius:4px;
-    display:block;
-    height:154px;
-    margin-bottom:9px;
-    width:100%;
-    height: 80px;
-    overflow: hidden;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin .img img {
-    cursor:pointer;
-    height:auto;
-    width:100%;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin .title {
-    display:block;
-    height:18px;
-    font-weight:bold;
-    overflow:hidden;
-    position:relative;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin .status {
-    display:block;
-    height:16px;
-    margin:0 auto;
-    width:16px;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin .status.installed {
-    background-image:url(../img/icn-installed.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin .status.outdated {
-    background-image:url(../img/icn-outdated.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin .status.blocked {
-    background-image:url(../img/icn-blocked.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin .description {
-    display:block;
-    font-size:12px;
-    height:52px;
-    line-height:1.5;
-    overflow:hidden;
-}
-#cloud-plugins-library .cloud-plugins .cloud-plugin .actions {
-    font-size:11px;
-    font-weight:bold;
-    text-transform:uppercase;
-}
-
-#cloud-plugins-library .cloud-plugins .cloud-plugin .actions > span {
-    cursor:pointer;
-}
-
-#cloud-plugins-library .cloud-plugins .cloud-plugin .actions > span:hover {
-    text-decoration:underline;
-}
-
-#cloud-plugins-library .cloud-plugins .cloud-plugin .actions span.duplicate {
-    margin:0 6px;
-}
-
-
-/* = PEDALBOARDS LIBRARY
-================================================ */
-#pedalboards-library {
-    background:#000;
-    bottom:46px;
-    left:0;
-    overflow:auto;
-    position:absolute;
-    right:0;
-    top:68px;
-    z-index:2;
-}
-#pedalboards-library h1 {
-    color:#fff;
-    display:inline-block;
-    font-size:24px;
-    margin:0 0 18px 0;
-    padding:0;
-}
-#pedalboards-library header {
-    background-image:url(../img/header-pattern.png);
-    background-position:bottom center;
-    background-repeat:no-repeat;
-    display:block;
-    left:0;
-    padding:10px 10px 18px 10px;
-    position:fixed;
-    right:0;
-    top:0;
-    z-index:2;
-}
-#pedalboards-library header .help {
-    background-image:url(../img/icn-help-16x16.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-    display:inline-block;
-    height:21px;
-    width:21px;
-}
-#pedalboards-library header .close {
-    opacity:1;
-    position:absolute;
-    right:10px;
-    top:16px;
-}
-#pedalboards-library .filter {
-    border-color:#111;
-    border-style:dotted;
-    border-width:0 1px 0 0;
-    bottom:46px;
-    left:10px;
-    padding-top:18px;
-    position:fixed;
-    right:0;
-    top:68px;
-    width:240px;
-}
-#pedalboards-library .filter .control-group {
-    float:left;
-    margin-right:9px;
-}
-#pedalboards-library .filter .control-group label {
-    color:#fff;
-    display:inline-block;
-    font-size:12px;
-    font-weight:bold;
-    width:165px;
-}
-#pedalboards-library .filter .control-group select {
-    width:50px;
-}
-#pedalboards-library .pedalboards {
-    left:252px;
-    position:absolute;
-    right:10px;
-}
-#pedalboards-library .pedalboards .pedalboard {
-    color:#fff;
-    float:left;
-    margin:0 0 20px 16px;
-    width:31%;
-}
-#pedalboards-library .pedalboards .pedalboard .img {
-    background:#2b2b2b;
-    border-radius:4px;
-    display:block;
-    height:154px;
-    margin-bottom:9px;
-    width:100%;
-    overflow: hidden;
-}
-#pedalboards-library .pedalboards .pedalboard .img img {
-    cursor:pointer;
-    height:auto;
-    width:100%;
-}
-#pedalboards-library .pedalboards .pedalboard .title {
-    display:block;
-    height:18px;
-    font-weight:bold;
-    overflow:hidden;
-    position:relative;
-}
-#pedalboards-library .pedalboards .pedalboard .description {
-    display:block;
-    font-size:12px;
-    height:36px;
-    line-height:1.5;
-    overflow:hidden;
-}
-#pedalboards-library .pedalboards .pedalboard .actions {
-    font-size:11px;
-    font-weight:bold;
-    text-transform:uppercase;
-}
-
-#pedalboards-library .pedalboards .pedalboard .actions > span {
-    cursor:pointer;
-}
-
-#pedalboards-library .pedalboards .pedalboard .actions > span:hover {
-    text-decoration:underline;
-}
-
-#pedalboards-library .pedalboards .pedalboard .actions span.duplicate {
-    margin:0 6px;
-}
-
-/* Bank Library */
-#bank-library {
-    background:#000;
-    bottom:46px;
-    left:0;
-    overflow:auto;
-    position:absolute;
-    right:0;
-    top:0;
-    z-index:2;
-}
-#bank-library h1 {
-    color:#fff;
-    display:inline-block;
-    font-size:24px;
-    margin:0 0 18px 0;
-    padding:0;
-}
-#bank-library header {
-    background-image:url(../img/header-pattern.png);
-    background-position:bottom center;
-    background-repeat:no-repeat;
-    display:block;
-    left:0;
-    padding:10px 10px 18px 10px;
-    position:fixed;
-    right:0;
-    top:0;
-    z-index:2;
-}
-#bank-library header .help {
-    background-image:url(../img/icn-help-16x16.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-    display:inline-block;
-    height:21px;
-    width:21px;
-}
-#bank-library header .close {
-    opacity:1;
-    position:absolute;
-    right:10px;
-    top:16px;
-}
-
-/* Banks List */
-#bank-list {
-    bottom:0;
-    left:0;
-    list-style:none;
-    margin:0;
-    padding:0;
-    position:absolute;
-    top:68px;
-    width:20%;
-}
-#bank-list div {
-    background:#222;
-    color:#888;
-    cursor:pointer;
-    font-size:12px;
-    font-weight:bold;
-    height:20px;
-    margin:0 0 1px 0;
-    padding:10px 5px;
-    position:relative;
-}
-#bank-list div.selected {
-    background:#333;
-    color:#fff;
-}
-
-/* Bank List - Add Bank */
-#bank-list > div.add-bank {
-    color:#fff;
-    cursor:pointer;
-    padding-left:35px;
-}
-
-/* Bank List - Move bank position */
-#bank-list span.move {
-    background-image:url(../img/move.png);
-    background-position:left center;
-    background-repeat:no-repeat;
-    display:block;
-    float:left;
-    height:22px;
-    left:0;
-    margin:-1px 6px 0 0;
-    position:absolute;
-    width:24px;
-}
-#bank-list > div.selected span.move {
-    background-position:right center;
-}
-
-/* Bank List - Remove bank */
-#bank-list span.remove {
-    background-image:url(../img/icn-remove-bank.png);
-    background-position:left center;
-    background-repeat:no-repeat;
-    display:block;
-    float:right;
-    height:22px;
-    margin:-1px 6px 0 0;
-    position:absolute;
-    right:0;
-    width:24px;
-}
-#bank-list > div.selected span.remove {
-    background-position:right center;
-}
-
-/* Bank List - Title */
-#bank-list span.title  {
-    height:22px;
-    left:26px;
-    overflow:hidden;
-    position:absolute;
-    right:26px;
-}
-
-/* Pedalboards in a bank */
-#bank-pedalboards-mode {
-    background:#333;
-    left:30%;
-    height:30px;
-    margin:0;
-    padding:20px 0 0 0;
-    position:absolute;
-    text-align:center;
-    top:68px;
-    width:45%;
-}
-#bank-title {
-    background:#333;
-    left:20%;
-    height:75px;
-    margin:0;
-    padding:0;
-    position:absolute;
-    text-align:center;
-    top:69px;
-    width:45%;
-}
-#bank-addressings h2 {
-    margin: 4px 0 0 14px;
-    display: block;
-    color: white;
-    font-size: 12px;
-    line-height: 20px;
-    text-align: left;
-}
-#bank-addressings small {
-    font-size: 10px;
-    color: #BBBBBB;
-    text-align: left;
-    display: block;
-    margin-left: 14px;
-}
-#bank-addressings select {
-    display: block;
-    float: left;
-    height: 22px;
-    margin: 5px 2.5%;
-    width: 20%;
-    font-size: 10px;
-}
-#bank-pedalboards {
-    background:#333;
-    bottom:46px;
-    left:20%;
-    list-style:none;
-    margin:0;
-    overflow:auto;
-    padding:0 0 200px 0;
-    position:fixed;
-    top:144px;
-    width:45%;
-}
-#bank-pedalboards > div {
-    margin:10px 10px 0 10px;
-    padding:10px 10px 0 10px;
-}
-#bank-pedalboards .pedalboard {
-    border-top:1px dotted #111;
-    color:#fff;
-    cursor:move;
-    padding-top:10px;
-    width:100%;
-}
-#bank-pedalboards .pedalboard .info {
-    margin-bottom:3px;
-}
-#bank-pedalboards .pedalboard .title {
-    display:block;
-    font-weight:bold;
-    margin-bottom:3px;
-    overflow:hidden;
-    position:relative;
-}
-#bank-pedalboards .pedalboard .img {
-    background:#2b2b2b;
-    border-radius:4px;
-    display:inline-block;
-    float:left;
-    height:auto;
-    margin:0 9px 0 0;
-    text-align:center;
-    width:100%;
-}
-
-.pedalboard .addressings {
-    width: 100%;
-}
-
-.pedalboard .addressings .footswitch {
-    background: #2b2b2b url(../img/footswitch-free.png) no-repeat center top;
-    float: left;
-    height: 20px;
-    width: 25%;
-}
-.pedalboard .addressings .footswitch.addressed {
-    background: #2b2b2b url(../img/footswitch-addressed.png) no-repeat center top;
-}
-
-#bank-pedalboards .mode {
-    border:none;
-    margin:22px 0 18px 0;
-    text-align:center;
-}
-#bank-pedalboards-mode .grid {
-    background:url(../img/icn-grid-list.png) no-repeat left bottom;
-    display:inline-block;
-    height:14px;
-    width:14px;
-}
-#bank-pedalboards-mode .grid.selected {
-    background-position:left top;
-}
-#bank-pedalboards-mode .list {
-    background:url(../img/icn-grid-list.png) no-repeat right bottom;
-    display:inline-block;
-    height:14px;
-    width:14px;
-}
-#bank-pedalboards-mode .list.selected {
-    background-position:right top;
-}
-
-/* Pedalboards search*/
-#bank-pedalboards-search {
-    bottom:46px;
-    left:65%;
-    overflow:auto;
-    position:fixed;
-    top:68px;
-    width:35%;
-}
-#bank-pedalboards-search label {
-    color:#fff;
-    font-size:11px;
-    font-weight:bold;
-    text-transform:uppercase;
-}
-#bank-pedalboards-search .control-group {
-    margin-bottom:10px;
-    padding:0 2%;
-    position:relative;
-    width:29.3%;
-}
-#bank-pedalboards-search input[type="search"] {
-    margin:auto 0;
-    padding-left:0;
-    padding-right:0;
-    width:100%;
-}
-#bank-pedalboards-search select {
-    width:100%;
-}
-#bank-pedalboards-search .input-clean {
-    background:#333;
-    border-radius:12px;
-    color:#fff;
-    cursor:pointer;
-    font-size:8px;
-    height:18px;
-    left:auto !important;
-    position:absolute;
-    right:8px !important;
-    text-align:center;
-    text-transform:uppercase;
-    top:31px !important;
-    width:18px;
-}
-
-/* Pedalboards search results - pedalboard */
-#bank-pedalboards-result .pedalboard {
-    border-top:1px dotted #444;
-    color:#fff;
-    cursor:move;
-    float:left;
-    margin:10px 2.5% 0;
-    padding:10px 0;
-    width:95%;
-}
-#bank-pedalboards-result .pedalboard .img {
-    background:#2b2b2b;
-    display:block;
-    height:auto;
-    margin:0 auto;
-    text-align:center;
-    width:100%;
-}
-#bank-pedalboards-result .pedalboard .title {
-    display:block;
-    height:18px;
-    font-size:12px;
-    font-weight:bold;
-    margin-bottom:10px;
-    overflow:hidden;
-    position:relative;
-}
-#bank-pedalboards-result .pedalboard .description {
-    display:block;
-    font-size:11px;
-    height:27px;
-    line-height:1.5;
-    overflow:hidden;
-}
-
-
-/* = Clearfix
-================================================ */
-.clearfix:after, .container:after {
-    content:"\0020";
-    display:block;
-    height:0;
-    clear:both;
-    visibility:hidden;
-    overflow:hidden;
-}
-.clearfix, .container {
-    display:block;
-}
-.clear {
-    clear:both;
-}
-
-.box {
-    padding:10px;
-}
-
-.alignleft {
-    float:left;
-}
-.alignright {
-    float:right;
-}
-
-.textcenter {
-    text-align:center;
-}
-.textright  {
-    text-align:right;
-}
-
-.bottom {
-    margin-bottom:0 !important;
-    padding-bottom:0 !important;
-}
-.left {
-    margin-left:0 !important;
-    padding-left:0 !important;
-}
-.right {
-    margin-right:0 !important;
-    padding-right:0 !important;
-}
-.top {
-    margin-top:0 !important;
-    padding-top:0 !important;
-}
-
-.nobullets {
-    list-style:none;
-}
-
-.mod-hidden {
-    display:none;
-}
-
-::selection {
-    background:transparent;
-}
-
-.mod-box {
-    background:white;
-    border-radius:9px;
-    left:50%;
-    margin:-150px -168px;
-    padding:18px;
-    position:absolute;
-    top:50%;
-    width:300px;
-}
-
-.mod-box label {
-    display:inline-block;
-    float:left;
-    line-height:2;
-    width:96px;
-}
-
-.mod-box .mod-controls {
-    float:left;
-}
-
-.mod-box input[type="text"],
-.mod-box input[type="password"] {
-    width:190px;
-}
-
-
-/* = NOTIFICATIONS
-================================================ */
-.screen-disconnected {
-    background:rgba(0,0,0,.9);
-    color:white;
-    display:table;
-    font-size:72px;
-    height:100% !important;
-    text-align:center;
-    z-index:10;
-}
-
-.screen-disconnected p {
-    display:table-cell;
-    vertical-align:middle;
-    line-height: 90px;
-}
-
-.plugin-wait {
-    background:url(../img/loading-effect.gif) no-repeat center center;
-    border: 1px solid #CCCCCC;
-    border-radius: 3px;
-}
-
-/* coisas que estão sendo reimplementadas */
-.drag-handle {
-    bottom:0;
-    cursor:move;
-    left:0;
-    position:absolute;
-    right:0;
-    top:0;
-    z-index:20;
-}
-
-.actions {
-    z-index:20;
-}
-
-
-/* ANIMATIONS
-===================================================*/
-@keyframes flashlight {
-    0%   { box-shadow: 0 0 0 transparent; }
-    50%  { box-shadow: 0 0 10px white; }
-    100% { box-shadow: 0 0 0 transparent; }
-}
diff --git a/html/css/main.css b/html/css/main.css
deleted file mode 100644
index 9b948034e..000000000
--- a/html/css/main.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{color:#000 !important;text-shadow:none !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#883996;text-decoration:none}a:hover,a:focus{color:#56245f;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:0}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:0;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#f29446}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#999}.text-primary{color:#883996}a.text-primary:hover,a.text-primary:focus{color:#662b71}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#3a633d}a.text-info:hover,a.text-info:focus{color:#274329}.text-warning{color:#fff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#883996}a.bg-primary:hover,a.bg-primary:focus{background-color:#662b71}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#a6ecb1}a.bg-info:hover,a.bg-info:focus{background-color:#7ce38c}.bg-warning{background-color:#f29446}a.bg-warning:hover,a.bg-warning:focus{background-color:#ef7816}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:""}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:0}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:0;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:0}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:100%}}@media (min-width:992px){.container{width:970px}}@media (min-width:1240px){.container{width:1270px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*="col-"]{padding-right:0;padding-left:0}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1240px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*="col-"]{position:static;display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#999;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#a6ecb1}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#91e89f}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#f29446}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#f0862e}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;appearance:none}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:0}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:0}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#fff}.has-warning .form-control{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-warning .input-group-addon{color:#fff;background-color:#f29446;border-color:#fff}.has-warning .form-control-feedback{color:#fff}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#883996;border-color:#773284}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#662b71;border-color:#230f27}.btn-primary:hover{color:#fff;background-color:#662b71;border-color:#4f2157}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#662b71;background-image:none;border-color:#4f2157}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#4f2157;border-color:#230f27}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#883996;border-color:#773284}.btn-primary .badge{color:#883996;background-color:#fff}.btn-success{color:#fff;background-color:#883996;border-color:#773284}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#662b71;border-color:#230f27}.btn-success:hover{color:#fff;background-color:#662b71;border-color:#4f2157}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#662b71;background-image:none;border-color:#4f2157}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#4f2157;border-color:#230f27}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#883996;border-color:#773284}.btn-success .badge{color:#883996;background-color:#fff}.btn-info{color:#fff;background-color:#883996;border-color:#773284}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#662b71;border-color:#230f27}.btn-info:hover{color:#fff;background-color:#662b71;border-color:#4f2157}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#662b71;background-image:none;border-color:#4f2157}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#4f2157;border-color:#230f27}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#883996;border-color:#773284}.btn-info .badge{color:#883996;background-color:#fff}.btn-warning{color:#fff;background-color:#f29446;border-color:#f0862e}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ef7816;border-color:#95490a}.btn-warning:hover{color:#fff;background-color:#ef7816;border-color:#d3680f}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ef7816;background-image:none;border-color:#d3680f}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d3680f;border-color:#95490a}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#f29446;border-color:#f0862e}.btn-warning .badge{color:#f29446;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#883996;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#56245f;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:0}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:0}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#883996;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:0}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:0}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:0}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:0}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#883996}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:0 0 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:0 0 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#883996}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:0 0 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:0}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:0}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#999}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:0}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#883996;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#56245f;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:0;border-bottom-right-radius:0}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;cursor:default;background-color:#883996;border-color:#883996}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:0;border-bottom-left-radius:0}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:0;border-bottom-right-radius:0}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:0;border-bottom-left-radius:0}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:0;border-bottom-right-radius:0}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#883996}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#662b71}.label-success{background-color:#883996}.label-success[href]:hover,.label-success[href]:focus{background-color:#662b71}.label-info{background-color:#883996}.label-info[href]:hover,.label-info[href]:focus{background-color:#662b71}.label-warning{background-color:#f29446}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ef7816}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#883996;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:0}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:0;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#883996}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:0}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#3a633d;background-color:#a6ecb1;border-color:#89e689}.alert-info hr{border-top-color:#75e174}.alert-info .alert-link{color:#274329}.alert-warning{color:#fff;background-color:#f29446;border-color:#f0662e}.alert-warning hr{border-top-color:#ef5416}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#883996;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#883996}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#883996}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f29446}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#999;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#999}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#883996;border-color:#883996}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#ddb7e4}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#3a633d;background-color:#a6ecb1}a.list-group-item-info,button.list-group-item-info{color:#3a633d}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#3a633d;background-color:#91e89f}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#3a633d;border-color:#3a633d}.list-group-item-warning{color:#fff;background-color:#f29446}a.list-group-item-warning,button.list-group-item-warning{color:#fff}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#fff;background-color:#f0862e}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#fff;border-color:#fff}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:-1px;border-top-right-radius:-1px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:-1px;border-top-right-radius:-1px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:-1px;border-top-right-radius:-1px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:-1px;border-top-right-radius:-1px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#444}.panel-default>.panel-heading{color:#999;background-color:#444;border-color:#444}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#444}.panel-default>.panel-heading .badge{color:#444;background-color:#999}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#444}.panel-primary{border-color:#883996}.panel-primary>.panel-heading{color:#fff;background-color:#883996;border-color:#883996}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#883996}.panel-primary>.panel-heading .badge{color:#883996;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#883996}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#89e689}.panel-info>.panel-heading{color:#3a633d;background-color:#a6ecb1;border-color:#89e689}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#89e689}.panel-info>.panel-heading .badge{color:#a6ecb1;background-color:#3a633d}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#89e689}.panel-warning{border-color:#f0662e}.panel-warning>.panel-heading{color:#fff;background-color:#f29446;border-color:#f0662e}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f0662e}.panel-warning>.panel-heading .badge{color:#f29446;background-color:#fff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f0662e}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:0}.well-sm{padding:9px;border-radius:0}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;appearance:none}.tooltip{position:absolute;z-index:1030;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:0}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.clearfix,.dl-horizontal dd,.container,.container-fluid,.row,.form-horizontal .form-group,.btn-toolbar,.btn-group-vertical>.btn-group,.nav,.navbar,.navbar-header,.navbar-collapse,.pager,.panel-body{display:block}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1239px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1239px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1239px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1239px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1240px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1240px){.visible-lg-block{display:block !important}}@media (min-width:1240px){.visible-lg-inline{display:inline !important}}@media (min-width:1240px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1239px){.hidden-md{display:none !important}}@media (min-width:1240px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}#cloud-plugins-library{background:#2c2c2c;bottom:45px;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2}#cloud-plugins-library h1{color:#fff;display:inline-block;font-size:24px;line-height:35px;margin:0 0 18px 0;padding:0}#cloud-plugins-library header .help{background-image:url(../img/icn-help-16x16.png);background-position:center center;background-repeat:no-repeat;display:inline-block;height:21px;width:21px}#cloud-plugins-library header .close{opacity:1;position:absolute;right:10px;top:16px}#cloud-plugins-library .filter{bottom:45px;left:0;position:fixed;top:45px;right:0;width:240px;overflow:auto}#cloud-plugins-library .filter h1{font-weight:2em;text-transform:uppercase;font-weight:bold;margin:0 0 0 10px}#cloud-plugins-library .filter h2{color:white;font-size:15px;text-transform:uppercase;font-weight:bold;margin-top:1em;margin-left:10px}#cloud-plugins-library .filter .control-group .switch{margin:5px 0 5px 15px;position:relative;width:18rem;height:2.5rem;font-size:0}#cloud-plugins-library .filter .control-group .switch input{position:absolute;top:0;z-index:2;opacity:0;cursor:pointer;height:2.5rem;width:5rem;left:5.5rem;margin:0}#cloud-plugins-library .filter .control-group .switch input:checked{z-index:1}#cloud-plugins-library .filter .control-group .switch input:checked+label{opacity:1;cursor:default}#cloud-plugins-library .filter .control-group .switch input:checked~.toggle-outside .toggle-inside{left:.25rem;background:#883996}#cloud-plugins-library .filter .control-group .switch input:not(:checked)+label:hover{opacity:.5}#cloud-plugins-library .filter .control-group .switch input~input:checked~.toggle-outside .toggle-inside{left:2.65rem;background:#4a4a4a}#cloud-plugins-library .filter .control-group .switch label{color:#fff;opacity:.33;transition:opacity .25s ease;cursor:pointer;font-size:14px;line-height:3rem;display:inline-block;width:5rem;height:100%;margin:0;text-align:center}#cloud-plugins-library .filter .control-group .switch label:first-of-type{text-align:left}#cloud-plugins-library .filter .control-group .switch label:last-of-type{margin-left:5.5rem}#cloud-plugins-library .filter .control-group .switch .toggle-outside{height:100%;border-radius:2rem;padding:.25rem;overflow:hidden;transition:.25s ease all;background:#fff;opacity:.8;position:absolute;width:5rem;left:5.5rem}#cloud-plugins-library .filter .control-group .switch .toggle-inside{border-radius:5rem;background:#4a4a4a;position:absolute;transition:.25s ease all;height:2rem;width:2rem}#cloud-plugins-library .filter .control-group select{width:50px}#cloud-plugins-library .filter .control-group input[type='checkbox']{display:none}#cloud-plugins-library .filter .control-group input[type='checkbox']+label{cursor:pointer;background:#222;color:#fff;display:block;height:32px;line-height:32px;width:100%;margin-bottom:1px;padding-left:15px;border:0 solid #f29446}#cloud-plugins-library .filter .control-group input[type='checkbox']+label:hover{background:#000}#cloud-plugins-library .filter .control-group input[type='checkbox']:checked+label{background:#f29446}#cloud-plugins-library .filter .control-group input[type='checkbox']:checked+label:hover{background:#600e6f}#cloud-plugins-library .filter>.form-group .input-clean{margin-right:8px !important}#cloud-plugins-library .filter .categories{width:100%;margin:0 0 15px 0}#cloud-plugins-library .filter .categories li{display:block;background:#222;color:#888;cursor:pointer;font-weight:bold;margin:0 0 1px 0;padding:0 15px;position:relative;transition:all .33s;line-height:32px;height:32px}#cloud-plugins-library .filter .categories li span{float:right}#cloud-plugins-library .filter .categories li.selected{background:#883996;color:#fff}#cloud-plugins-library .filter .categories li:hover{background:#000}#cloud-plugins-library .filter .categories li.selected:hover{background:#600e6f}.cloud-plugins{left:240px;position:fixed;right:0;top:45px;bottom:45px;background:#111 url(../img/watermark.png) 100% 100% no-repeat;overflow-y:auto}.cloud-plugins .plugins-wrapper{width:100%}.cloud-plugins .cloud-plugin{color:#fff;float:left;width:100%;position:relative;min-height:1px;padding-right:15px;padding-left:15px;height:120px;border:5px solid #000;padding:0 !important;background:rgba(255,255,255,0.07);transition:all .33s;cursor:pointer}@media (min-width:768px){.cloud-plugins .cloud-plugin{float:left;width:50%}}@media (min-width:992px){.cloud-plugins .cloud-plugin{float:left;width:50%}}@media (min-width:1240px){.cloud-plugins .cloud-plugin{float:left;width:33.33333333%}}.cloud-plugins .cloud-plugin:hover{background-color:black}.cloud-plugins .cloud-plugin:hover .description{background:rgba(0,0,0,0.8)}.cloud-plugins .cloud-plugin:hover .description hr{border-color:#f29446}.cloud-plugins .cloud-plugin:hover figure{top:-5px}.cloud-plugins .cloud-plugin:hover div.demo-plugin{opacity:0}.cloud-plugins .cloud-plugin:hover span.price{position:absolute;top:25px;margin-left:98px;padding:3px 0;transform:rotate(0deg) scale(1.3);width:80px}.cloud-plugins .cloud-plugin:hover span.licensed{position:absolute;top:25px;margin-left:98px;padding:3px 0;transform:rotate(0deg) scale(1.3);width:113px;text-align:center}.cloud-plugins .cloud-plugin:hover span.coming-soon{position:absolute;top:25px;margin-left:98px;padding:3px 0;transform:rotate(0deg) scale(1.3);width:113px;text-align:center}.cloud-plugins .cloud-plugin:hover span.price-container{margin-left:170px;width:200px}.cloud-plugins .cloud-plugin figure{height:100px;position:absolute;top:10px;left:20px;margin:0;transition:all .33s linear;display:flex;flex-direction:column;justify-content:center}.cloud-plugins .cloud-plugin figure img{height:auto;margin:0 auto 3px;width:auto;pointer-events:none;max-width:256px;max-height:64px}.cloud-plugins .cloud-plugin span.price{transition:all .33s linear}.cloud-plugins .cloud-plugin span.price-container{transition:all .33s linear}.cloud-plugins .cloud-plugin .cloud-plugin-border{border:1px solid #333;width:100%;height:100%}.cloud-plugins .cloud-plugin .description{transition:all .33s;display:block;line-height:1.5;overflow:hidden;position:absolute;top:1px;right:1px;bottom:1px;left:80px;background:rgba(33,33,33,0.66)}.cloud-plugins .cloud-plugin .description .no_description{color:rgba(255,255,255,0.25)}.cloud-plugins .cloud-plugin .description hr{transition:all .33s;border:none;border-bottom:1px solid #883996;margin:0;position:absolute;top:50%;left:0;width:calc(100% - 5px)}.cloud-plugins .cloud-plugin .description .title{display:block;text-transform:uppercase;font-weight:bold;overflow:hidden;padding:8px 10px 1px 10px}.cloud-plugins .cloud-plugin .description .author{display:block;padding:1px 10px}.cloud-plugins .cloud-plugin .description p{position:absolute;left:10px;right:10px;top:75%;transform:translateY(-50%);height:2.4em;line-height:1.25em;overflow:hidden}.cloud-plugins .cloud-plugin .actions{font-size:11px;font-weight:bold;text-transform:uppercase}.cloud-plugins .cloud-plugin .actions>span{cursor:pointer}.cloud-plugins .cloud-plugin .actions>span:hover{text-decoration:underline}.cloud-plugins .cloud-plugin .actions span.duplicate{margin:0 6px}.cloud-plugins h2{margin-left:23px;font-size:20px;color:#ccc}.cloud-plugins h3{color:#ccc}.cloud-plugins .featured-plugins{position:relative;height:360px;width:100%;display:block}.cloud-plugins .featured-plugins.double,.cloud-plugins .featured-plugins.single{height:490px !important}.cloud-plugins .featured-plugins.double .box,.cloud-plugins .featured-plugins.single .box{transition:all 0s !important}.cloud-plugins .featured-plugins.double .carousel,.cloud-plugins .featured-plugins.single .carousel{height:485px !important}.cloud-plugins .featured-plugins.double .carousel .slick-list,.cloud-plugins .featured-plugins.single .carousel .slick-list{height:485px !important}.cloud-plugins .featured-plugins.double .box{margin:30px 80px !important}.cloud-plugins .featured-plugins.single .box{margin:30px 30px !important}.cloud-plugins .featured-plugins .carousel{position:absolute;top:0;bottom:0;right:90px;left:90px;height:380px !important}.cloud-plugins .featured-plugins .carousel .slick-list{height:380px !important}.cloud-plugins .featured-plugins .carousel .featured{cursor:pointer;margin-top:40px}.cloud-plugins .featured-plugins .carousel .featured .box{padding:4px;border:1px solid #737373;height:300px;opacity:.4;margin:0 24px}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box{border:1px solid #444;text-align:center;height:290px}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box .price-container{position:absolute;top:0;left:0;width:90px;height:90px;overflow:hidden;color:#fff}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box .price{background-color:#883996;border:1px solid #883996;position:absolute;top:9px;left:-30px;padding:3px 0;transform:rotate(-45deg);min-width:108px;text-align:center}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box .price:before{content:"€ "}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box .licensed{background-color:#883996;border:1px solid #883996;position:absolute;top:16px;left:-30px;padding:3px 27px;font-size:12px;transform:rotate(-45deg)}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box .licensed:before{content:"PURCHASED"}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box h2{color:#c3c3c3;text-align:center}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box .img-container{height:113px;width:100%}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box .img-container img{vertical-align:middle;transition:all 500ms ease;width:auto;height:auto;margin:auto;display:block;max-height:113px;padding:0 20px;max-width:100%}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box p{color:#e0e0e0;padding:5px 5px 0 5px;height:59px}.cloud-plugins .featured-plugins .carousel .featured .box .inner-box button{background-color:transparent;color:#ff3838;border:1px solid #ff3838;text-transform:uppercase;padding:8px 20px}.cloud-plugins .featured-plugins .carousel .featured.slick-center{height:390px}.cloud-plugins .featured-plugins .carousel .featured.slick-center .box{opacity:1;transform:scale(1.2) translate(0, 0);transition:all 500ms ease}.cloud-plugins .featured-plugins .carousel .slick-arrow{width:60px;height:60px;top:200px}.cloud-plugins .featured-plugins .carousel .slick-arrow:before{font-size:60px}.cloud-plugins .featured-plugins .carousel .slick-prev{left:-70px !important}.cloud-plugins .featured-plugins .carousel .slick-next{right:-70px !important}.plugin-container .status-container{position:absolute;top:0;left:0;right:2px;text-align:right;padding-right:2px}.plugin-container .status{padding:1px 4px;text-align:center;text-transform:uppercase;font-weight:bold;font-size:9px;margin-left:1px}.plugin-container .status.installed{border:1px solid #883996;background-color:#883996}.plugin-container .status.installed:after{content:"installed"}.plugin-container .status.outdated{border:1px solid #f29446;background-color:#f29446;color:#212121}.plugin-container .status.outdated:after{content:"new version"}.plugin-container .price-container{position:absolute;top:0;left:0;width:90px;height:90px;overflow:hidden}.plugin-container .price{background-color:#883996;border:1px solid #883996;position:absolute;top:9px;left:-25px;padding:3px 0;transform:rotate(-45deg);min-width:108px;text-align:center}.plugin-container .price:before{content:"€ "}.plugin-container .licensed{background-color:#883996;border:1px solid #883996;position:absolute;top:21px;left:-30px;padding:3px 27px;font-size:14px;transform:rotate(-45deg)}.plugin-container .licensed:before{content:"PURCHASED"}.plugin-container .coming-soon{background-color:#883996;border:1px solid #883996;position:absolute;top:26px;left:-35px;padding:3px 27px;font-size:12px;transform:rotate(-45deg);width:135px}.plugin-container .coming-soon:before{content:"TRIAL ONLY"}.plugin-container .status.buildEnvironment{border:1px solid #ff2927;background-color:#ff2927}.plugin-container .status.buildEnvironment:after{content:"local"}.plugin-container .status.buildEnvironment.labs:after{content:"labs"}.plugin-container .status.buildEnvironment.dev:after{content:"dev"}.plugin-container .status.buildEnvironment.prod{display:none}.plugin-container .status.buildEnvironment.prod:after{content:""}.plugin-container .demo{border:1px solid #ff2927;background-color:#ff2927}.plugin-container .demo:after{content:"demo"}.plugin-container .description-price-container{position:absolute;top:-17px;left:-17px;overflow:hidden;height:200px}.plugin-container .description-price-container .description-price{background-color:#883996;border:1px solid #883996;position:relative;top:34px;left:-57px;padding:3px 0;transform:rotate(-45deg);min-width:250px;text-align:center;font-size:34px;z-index:11}.plugin-container .description-price-container .description-price:before{content:"€ "}.plugin-container .description-price-container .description-licensed{background-color:#883996;border:1px solid #883996;position:relative;top:50px;left:-60px;padding:3px 0;transform:rotate(-45deg);min-width:280px;text-align:center;font-size:34px;z-index:1}.plugin-container .description-price-container .description-licensed:before{content:"PURCHASED"}.plugin-container .description-price-container .description-coming-soon{background-color:#883996;border:1px solid #883996;position:relative;top:50px;left:-70px;padding:3px 0;transform:rotate(-45deg);min-width:280px;text-align:center;font-size:26px;z-index:1}.plugin-container .description-price-container .description-coming-soon:before{content:"TRIAL ONLY"}.buy-button{margin-top:-20px;position:relative}.buy-button iframe{position:absolute;top:-17px;left:0;min-width:115px;z-index:1}.shopify-fake-button{position:absolute;top:3px;left:0;z-index:0;background-color:#c224b0;font-family:Arial;font-size:12px;opacity:.25;min-width:115px;min-height:34px;padding:9px 15px;text-align:center}#bank-library{bottom:45px;left:0;overflow-x:hidden;overflow-y:auto;position:absolute;right:0;top:0;z-index:2}#bank-library .ui-draggable-dragging{cursor:webkit-dragging !important}#bank-library .mod-banks-drag-item{background:#f29446;color:white;font-weight:bold;z-index:10000;box-shadow:0 5px 15px black;opacity:.5}#bank-library .mod-banks-drag-item .img{display:block;height:auto;margin:0 auto;text-align:center;width:100%;background:url(../img/background.jpg);background-size:auto 100%;background-position:center center;box-shadow:inset 0 3px 6px black;border:1px solid #000}#bank-library .mod-banks-drag-item .title{display:block;line-height:32px;font-weight:bold;overflow:hidden;position:relative;padding-left:5px}#bank-library span.move{background-image:url(../img/move.png);background-position:left center;background-repeat:no-repeat;display:block;float:left;height:32px;left:0;cursor:move !important;margin:-1px 6px 0 0;width:24px}#bank-library span.remove{cursor:pointer;float:right;width:32px;height:32px;display:block;background-image:url(../img/icons/25/delete.png);background-repeat:no-repeat;background-position:50% 50%;transition:background-color .33s}#bank-library span.remove:hover{background-color:#f29446}#bank-library span.title{display:block;float:left;height:32px;overflow:hidden;max-width:70%;white-space:nowrap}#bank-library input::selection{background:#883996 !important;color:white}#bank-library .icon-add{width:1em;height:1em;display:inline-block;font-size:inherit;vertical-align:baseline}#bank-library .icon-add i{position:absolute;width:1em;margin-top:.3em;border-top:.4em solid #888}#bank-library .icon-add b{position:absolute;height:1em;margin-left:.3em;border-left:.4em solid #888}#bank-library #bank-list{left:0;list-style:none;margin:0;padding:0;position:fixed;bottom:45px;overflow-y:auto;top:45px;width:20%;background:#2c2c2c}#bank-library #bank-list>div.add-bank{color:#fff;cursor:pointer;padding-left:5px;line-height:32px;text-transform:uppercase;transition:all .33s}#bank-library #bank-list>div.add-bank:hover{background:#f29446}#bank-library #bank-list>div.add-bank .icon-add{display:inline-block;width:24px;margin-right:6px;padding-left:5px;box-sizing:border-box}#bank-library #bank-list>div.selected span.move{background-position:right center}#bank-library #bank-list>div.selected span.remove{background-position:right center}#bank-library #bank-list .edit-bank{color:#555;width:100% !important;height:30px;margin:1px;padding-left:.5em;background-color:#fff;background-image:none;border:0 solid #ccc;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out}#bank-library #bank-list div{background:#222;color:#888;cursor:pointer;font-weight:bold;margin:0 0 1px 0;content:\002B;position:relative;transition:all .33s}#bank-library #bank-list div.selected{background:#883996;color:#fff}#bank-library #bank-list div:hover{background:#000}#bank-library #bank-list div.selected:hover{background:#600e6f}#bank-library #bank-list .bank-item{display:block;background:#222;color:#888;line-height:32px;height:32px;cursor:pointer;font-weight:bold;margin:0 0 1px 0;padding-left:5px;position:relative}#bank-library #bank-list .bank-item .remove{border-radius:0}#bank-library #bank-list .filter_{border-color:#111;border-style:dotted;border-width:0 1px 0 0;bottom:46px;left:0;padding-top:18px;position:fixed;top:0;right:0;width:240px;overflow:auto}#bank-library #bank-list .filter_ h1{font-weight:2em;text-transform:uppercase;font-weight:bold;margin:0 0 0 10px}#bank-library #bank-list .filter_ h2{color:white;font-size:15px;text-transform:uppercase;font-weight:bold;margin-top:1em;margin-left:10px}#bank-library #bank-list .filter_ .control-group{float:left;margin-right:9px;margin-left:10px}#bank-library #bank-list .filter_ .control-group label{color:#fff;display:inline-block;font-size:12px;font-weight:bold}#bank-library #bank-list .filter_ .control-group select{width:50px}#bank-library #bank-list .filter_>.form-group{padding:15px}#bank-library #bank-title{background:#111;left:20%;height:92px;margin:0;padding:0;position:fixed;text-align:left;top:45px;width:50%}#bank-library #bank-title h1{font-size:2em;padding:0;max-height:2em;display:block;margin:.5em .8em 0 .8em;padding-bottom:.2em;color:white;white-space:nowrap;overflow:hidden}#bank-library #bank-title form{margin:0 2em;color:#666}#bank-library #bank-title h2{margin:4px 0 0 14px;display:block;text-transform:initial !Important;color:white;font-size:12px;line-height:20px;text-align:left}#bank-library #bank-title small{font-size:10px;color:#bbb;text-align:left;display:block;margin-left:14px}#bank-library #bank-title select{display:block;float:left;height:22px;margin:5px 2.5%;width:20%;font-size:10px}#bank-library #bank-pedalboards{background:#111;bottom:46px;left:20%;list-style:none;margin:0;overflow-x:hidden;overflow-y:auto;padding:0 0 200px 0;position:fixed;top:164px;width:50%}#bank-library #bank-pedalboards>div{margin:0 10px 20px 20px}#bank-library #bank-pedalboards .pedalboard{color:#fff;cursor:-webkit-grab !important;cursor:grab !important;width:100%;transition:all .33s}#bank-library #bank-pedalboards .pedalboard:active{cursor:-webkit-grabbing !important;cursor:grabbing !important}#bank-library #bank-pedalboards .pedalboard:hover{background-color:#883996}#bank-library #bank-pedalboards .pedalboard .info{height:32px;padding-left:5px;background:rgba(255,255,255,0.07)}#bank-library #bank-pedalboards .pedalboard .title{display:block;line-height:32px;font-weight:bold;overflow:hidden;position:relative}#bank-library #bank-pedalboards .pedalboard .img{display:inline-block;float:left;height:auto;margin:0 9px 0 0;text-align:center;width:100%;background:url(../img/background.jpg);background-size:auto 100%;background-position:center center;box-shadow:inset 0 3px 6px black;border:1px solid #000}#bank-library #bank-pedalboards .mode{border:none;margin:22px 0 18px 0;text-align:center}#bank-library #bank-edit{position:fixed;display:block;background:#111 url(../img/watermark.png) 100% 100% no-repeat;width:80%;bottom:45px;top:45px;left:20%}#bank-library #bank-pedalboards-search{bottom:45px;right:0;overflow:auto;position:fixed;top:0;width:30%;z-index:6}#bank-library #bank-pedalboards-search h2{text-transform:uppercase;color:white;font-size:1.5em;font-weight:bold;float:left}#bank-library #bank-pedalboards-search .box{background:#111;padding:0;box-sizing:border-box}#bank-library #bank-pedalboards-search input{width:50%;padding-left:1em}#bank-library #bank-pedalboards-search .remove{display:none !important}#bank-library #bank-pedalboards-search label{color:#fff;font-weight:bold;text-transform:uppercase;float:left;line-height:45px;padding-left:10px}#bank-library #bank-pedalboards-search .control-group{margin-bottom:10px;padding:0 2%;position:relative;width:29.3%}#bank-library #bank-pedalboards-search input[type="search"]{width:50% !important;float:right;margin:5px}#bank-library #bank-pedalboards-search select{width:100%}#bank-library #bank-pedalboards-search .input-clean{background:#333;color:#fff;cursor:pointer;font-size:8px;height:18px;left:auto !important;position:absolute;right:8px !important;text-align:center;text-transform:uppercase;top:31px !important;width:18px;border-radius:100%}#bank-pedalboards-mode{background:#333;left:30%;height:30px;margin:0;padding:20px 0 0 0;position:absolute;text-align:center;top:68px;width:45%}#bank-pedalboards-mode .grid{background:url(../img/icn-grid-list.png) no-repeat left bottom;display:inline-block;height:14px;width:14px}#bank-pedalboards-mode .grid.selected{background-position:left top}#bank-pedalboards-mode .list{background:url(../img/icn-grid-list.png) no-repeat right bottom;display:inline-block;height:14px;width:14px}#bank-pedalboards-mode .list.selected{background-position:right top}.pedalboard .addressings{width:100%}.pedalboard .addressings .footswitch{background:#2b2b2b url(../img/footswitch-free.png) no-repeat center top;float:left;height:20px;width:25%}.pedalboard .addressings .footswitch.addressed{background:#2b2b2b url(../img/footswitch-addressed.png) no-repeat center top}#bank-pedalboards-result{position:fixed;bottom:45px;top:45px;overflow:auto;width:30%;background:#111}#bank-pedalboards-result .pedalboard{color:#fff;background:rgba(255,255,255,0.07);cursor:-webkit-grab;cursor:grab;margin:0 20px 20px 10px;transition:all .33s}#bank-pedalboards-result .pedalboard:active{cursor:-webkit-grabbing !important;cursor:grabbing !important}#bank-pedalboards-result .pedalboard:hover{background-color:#883996}#bank-pedalboards-result .pedalboard .img{display:block;height:auto;margin:0 auto;text-align:center;width:100%;background:url(../img/background.jpg);background-size:auto 100%;background-position:center center;box-shadow:inset 0 3px 6px black;border:1px solid #000}#bank-pedalboards-result .pedalboard .img img{max-width:100%}#bank-pedalboards-result .pedalboard .title{display:block;line-height:32px;font-weight:bold;overflow:hidden;position:relative;padding-left:5px}#bank-pedalboards-result .pedalboard .description{display:block;font-size:11px;height:27px;line-height:1.5;overflow:hidden}#file-manager-library{background:#2c2c2c url(../img/watermark.png) 100% 100% no-repeat;top:0;bottom:46px;left:0;right:0;overflow-x:hidden;overflow-y:auto;position:absolute;z-index:2}#file-manager-wrapper{display:flex;position:fixed;top:45px;bottom:55px;left:2em;right:2em;overflow:auto;padding-top:1%}#file-manager-wrapper iframe{flex:1;border:none}#pedalboards-library{background:#2c2c2c;bottom:45px;left:0;overflow-x:hidden;overflow-y:auto;position:absolute;right:0;top:0;z-index:2}#pedalboards-library h1{color:#fff;display:inline-block;font-size:24px;line-height:35px;margin:0 0 18px 0;padding:0}#pedalboards-library header .form-group{display:inline-block;float:right;margin-top:5px;margin-right:5px}#pedalboards-library header .form-group .form-control{width:200px !important}#pedalboards-library header .form-group .input-clean{line-height:20px;margin-right:12px !important}#pedalboards-library header .view-modes{float:right;margin-right:12px;cursor:pointer}#pedalboards-library header .view-modes .view-mode{font-size:130%}#pedalboards-library header .view-modes .view-mode.selected{color:#fff}#pedalboards-library .filter{border-color:#111;border-style:dotted;border-width:0 1px 0 0;bottom:45px;left:0;position:fixed;right:0;top:45px;width:240px}#pedalboards-library .filter .control-group{float:left;margin-right:9px}#pedalboards-library .filter .control-group label{color:#fff;display:inline-block;font-size:12px;font-weight:bold;width:165px}#pedalboards-library .filter .control-group select{width:50px}#pedalboards-library .pedalboards{left:0;position:fixed;right:0;top:45px;bottom:45px;overflow:auto;background:#111 url(../img/watermark.png) 100% 100% no-repeat;padding-top:1%}#pedalboards-library .pedalboards .pedalboard{color:#fff;float:left;margin:0 0 1% 1%;width:18.8%;position:relative;background-color:transparent;background-image:url(../img/background.jpg);background-position:center center;background-repeat:repeat;background-size:auto 100%;transition:all .33s;cursor:pointer}#pedalboards-library .pedalboards .pedalboard:hover .info{background-color:#883996}#pedalboards-library .pedalboards .pedalboard .img{box-shadow:inset 0 3px 6px black;border:1px solid #000;display:block;width:100%;height:10vw;overflow:hidden;text-align:center;background-image:url(../img/loading-pedalboard.gif);background-position:center center;background-repeat:no-repeat;background-size:auto;position:relative}#pedalboards-library .pedalboards .pedalboard .img.loaded{background-size:contain}#pedalboards-library .pedalboards .pedalboard .img.broken{background-image:url(../img/icons/broken_image.svg);background-size:auto 50%}#pedalboards-library .pedalboards .pedalboard.broken .img::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;z-index:10;background-color:rgba(17,17,17,0.5);background-image:url(../img/icons/broken_pedal.svg);background-size:auto 50%;background-repeat:no-repeat;background-position:center}#pedalboards-library .pedalboards .pedalboard .info{background-color:#2c2c2c;transition:background-color .33s}#pedalboards-library .pedalboards .pedalboard .title{display:block;line-height:32px;font-weight:bold;overflow:hidden;position:relative;height:32px;left:5px;width:calc(100% - 32px);text-overflow:ellipsis;white-space:nowrap}#pedalboards-library .pedalboards .pedalboard .description{display:block;font-size:12px;height:36px;line-height:1.5;overflow:hidden}#pedalboards-library .pedalboards .pedalboard .actions{font-weight:bold;text-transform:uppercase;position:absolute;top:0;right:0}#pedalboards-library .pedalboards .pedalboard .actions .js-remove{width:32px;height:32px;background-image:url(../img/icons/25/delete.png);background-repeat:no-repeat;background-position:50% 50%;transition:background-color .33s}#pedalboards-library .pedalboards .pedalboard .actions .js-remove:hover{background-color:#f29446}#pedalboards-library .pedalboards .pedalboard .actions>span{cursor:pointer}#pedalboards-library .pedalboards .pedalboard .actions>span:hover{text-decoration:underline}#pedalboards-library .pedalboards .pedalboard .actions>span.duplicate{margin:0 6px}#pedalboards-library .pedalboards.list-selected .img{display:none}#nprogress{pointer-events:none;z-index:103100}#nprogress .bar{background:#883996;position:fixed;z-index:103100;top:45px;left:0;opacity:.5;width:100%;height:2px}#nprogress .peg{display:none}#nprogress .spinner{display:none;position:fixed;z-index:1031;top:45px;right:0;background:rgba(0,0,0,0.5);padding:6px;box-sizing:border-box;transform:translate(-50% -50%)}#nprogress .spinner-icon{width:32px;height:32px;box-sizing:border-box;border:solid 3px transparent;border-top-color:#f29446;border-left-color:rgba(242,148,70,0.66);border-bottom-color:rgba(242,148,70,0.33);border-radius:50%;-webkit-animation:nprogress-spinner 400ms linear infinite;animation:nprogress-spinner 400ms linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .spinner,.nprogress-custom-parent #nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.mod-pedal-settings .mod-address.addressed,.mod-pedal-settings .preset-btn-assign-all.addressed{background-color:#a144b2}.mod-pedal-settings-address .mod-box .form-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.mod-pedal-settings-address .mod-box .form-container .btn.js-type,.mod-pedal-settings-address .mod-box .form-container .btn.advanced-toggle{border:solid #333 1px}.mod-pedal-settings-address .mod-box .form-container .main-form-container{width:691px;padding-right:3px}.mod-pedal-settings-address .mod-box .form-container .main-form-container label{text-align:center}.mod-pedal-settings-address .mod-box .form-container .main-form-container .btn.js-type.selected{background-color:#333;color:white}.mod-pedal-settings-address .mod-box .form-container .main-form-container .group-strike{display:flex;flex-basis:100%;align-items:center;color:black;margin:6px 0}.mod-pedal-settings-address .mod-box .form-container .main-form-container .group-strike:before,.mod-pedal-settings-address .mod-box .form-container .main-form-container .group-strike:after{content:"";flex-grow:1;background:black;height:3px;font-size:0;line-height:0}.mod-pedal-settings-address .mod-box .form-container .main-form-container .group-strike:before{margin-right:8px}.mod-pedal-settings-address .mod-box .form-container .main-form-container .group-strike:after{margin-left:8px}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table{width:100%}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th:first-child{background-color:#f66}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th:nth-child(2){background-color:#ff6}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th:nth-child(3){background-color:#6ff}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th:nth-child(4){background-color:#bb7cd5}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th:nth-child(5){background-color:#f5a77e}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th:nth-child(6){background-color:#6f6}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th:nth-child(7){background-color:#f6f}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th:nth-child(8){background-color:#8080ff}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table th,.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table td{border:solid #333 1px;text-align:center}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table td{padding:5px;cursor:pointer}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table td.selected{background-color:#883996;color:white;box-shadow:3px 3px 3px #999}.mod-pedal-settings-address .mod-box .form-container .main-form-container .hmi-table td.disabled{cursor:auto;color:#999;background-color:#d9d9d9;box-shadow:inset 0 0 3px #555}.mod-pedal-settings-address .mod-box .form-container .main-form-container .midi-custom-uri{color:#883996}.mod-pedal-settings-address .mod-box .form-container .buttons-container{padding-right:3px;padding-bottom:18px}.mod-pedal-settings-address .mod-box .form-container .advanced-container{border-left:1px solid #eee;padding-left:12px;margin-left:12px}.mod-pedal-settings-address .mod-box .form-container .advanced-container .cv-op-mode label{width:100% !important}.mod-pedal-settings-address .mod-box .form-container .advanced-container .cv-op-mode .mod-controls{width:155px !important}.mod-cv-output .output-cv-checkbox{display:flex;position:absolute;top:45px;left:15px}.mod-cv-output .output-cv-checkbox .checkbox-container{position:relative;padding-left:45px;cursor:pointer;font-size:22px;height:35px;width:35px}.mod-cv-output .output-cv-checkbox .checkbox-container .checkmark{position:absolute;top:0;left:0;height:35px;width:35px;background-color:#eee}.mod-cv-output .output-cv-checkbox .checkbox-container .checkmark:after{content:"";position:absolute;display:none;left:13px;top:7px;width:10px;height:17px;border:solid white;border-width:0 4px 4px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mod-cv-output .output-cv-checkbox .checkbox-container input[type=checkbox]{position:absolute;opacity:0;cursor:pointer;z-index:5;width:100%;height:100%;top:0;left:0}.mod-cv-output .output-cv-checkbox .checkbox-container input[type=checkbox]:disabled{cursor:not-allowed}.mod-cv-output .output-cv-checkbox .checkbox-container input[type=checkbox]:checked~.checkmark{background-color:#883996}.mod-cv-output .output-cv-checkbox .checkbox-container input[type=checkbox]:checked~.checkmark:after{display:block}.mod-cv-output .output-cv-checkbox .checkbox-container input[type=checkbox]:disabled~.checkmark{background-color:#999}.mod-cv-output .output-cv-checkbox input[type=text]{font-size:20px}.mod-cv-output .output-cv-checkbox ::selection{background:#883996 !important;color:white !important}@font-face{font-family:'cooper hewitt';src:url('../fonts/cooper/cooperhewitt-semibold-webfont.eot');src:url('../fonts/cooper/cooperhewitt-semibold-webfont.eot?#iefix') format('embedded-opentype'),url('../fonts/cooper/cooperhewitt-semibold-webfont.woff2') format('woff2'),url('../fonts/cooper/cooperhewitt-semibold-webfont.woff') format('woff'),url('../fonts/cooper/cooperhewitt-semibold-webfont.ttf') format('truetype');font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:'cooper hewitt';src:url('../fonts/cooper/cooperhewitt-light-webfont.eot');src:url('../fonts/cooper/cooperhewitt-light-webfont.eot?#iefix') format('embedded-opentype'),url('../fonts/cooper/cooperhewitt-light-webfont.woff2') format('woff2'),url('../fonts/cooper/cooperhewitt-light-webfont.woff') format('woff'),url('../fonts/cooper/cooperhewitt-light-webfont.ttf') format('truetype');font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:'cooper hewitt';src:url('../fonts/cooper/cooperhewitt-lightitalic-webfont.eot');src:url('../fonts/cooper/cooperhewitt-lightitalic-webfont.eot?#iefix') format('embedded-opentype'),url('../fonts/cooper/cooperhewitt-lightitalic-webfont.woff2') format('woff2'),url('../fonts/cooper/cooperhewitt-lightitalic-webfont.woff') format('woff'),url('../fonts/cooper/cooperhewitt-lightitalic-webfont.ttf') format('truetype');font-weight:300;font-style:italic;font-display:swap}@font-face{font-family:'cooper hewitt';src:url('../fonts/cooper/cooperhewitt-bookitalic-webfont.eot');src:url('../fonts/cooper/cooperhewitt-bookitalic-webfont.eot?#iefix') format('embedded-opentype'),url('../fonts/cooper/cooperhewitt-bookitalic-webfont.woff2') format('woff2'),url('../fonts/cooper/cooperhewitt-bookitalic-webfont.woff') format('woff'),url('../fonts/cooper/cooperhewitt-bookitalic-webfont.ttf') format('truetype');font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:'cooper hewitt';src:url('../fonts/cooper/cooperhewitt-book-webfont.eot');src:url('../fonts/cooper/cooperhewitt-book-webfont.eot?#iefix') format('embedded-opentype'),url('../fonts/cooper/cooperhewitt-book-webfont.woff2') format('woff2'),url('../fonts/cooper/cooperhewitt-book-webfont.woff') format('woff'),url('../fonts/cooper/cooperhewitt-book-webfont.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}*{outline:0 !important}html,body{height:100%;overflow:hidden}body{background:#111;min-width:1024px}body.ios{position:fixed;min-width:980px}*{font-family:"cooper hewitt",Sans-serif !important}.unpadded{padding:0 !important}.unpadded-r{padding:0 0 0 7px}.unpadded-l{padding:0 7px 0 0}.ui-draggable:active{cursor:-webkit-grabbing !important;cursor:grabbing !important}.form-control{width:100% !important}#wrapper{bottom:0;left:0;min-width:980px;overflow:hidden;position:absolute;right:0;top:0}hr.dotted{border:1px dotted #444;margin:2px 0 3px 0}.preset-list{width:100%;height:200px !important}.input-clean{background:#333;color:#fff;cursor:pointer;height:18px;left:auto !important;position:absolute;right:0;margin-right:18px !important;text-align:center;text-transform:uppercase;margin-top:-26px !important;width:18px;border-radius:100%}.input-clean:after{content:"×";content:"\00d7";font-size:14px;font-weight:bold}.form-control::selection{background:#883996 !important;color:white !important}#notifications{position:absolute;top:55px;right:0;width:320px;z-index:100000}#notifications>section{border-radius:0;margin-bottom:0 !important;opacity:.96;cursor:pointer}#notifications .progressbar{border:0;height:8px;overflow:hidden;position:absolute;left:8px;bottom:0;width:306px}#notifications .progressbar .progressbar-value{background-color:rgba(136,57,150,0.7);height:90%;margin:0}#main-menu{background:#111;bottom:0;color:#fff;height:45px;left:0;position:absolute;right:0;z-index:10}#main-menu>div{cursor:pointer;float:left}#main-menu>div.icon{height:45px;width:45px}#main-menu>div.icon>img{margin:5px 0 0 6px}#main-menu>div.icon.selected{background:#000}#main-menu>div.icon>a{display:block;height:45px;width:45px}#main-menu #mod-plugins{background-image:url(../img/menu-icons-sprite.png?v=2);background-position:-45px top;background-repeat:no-repeat;transition:all .33s}#main-menu #mod-plugins:hover{background-color:#000;background-position:-45px bottom}#main-menu #mod-plugins.selected{background-color:#000;background-position:-45px bottom}#main-menu #mod-cloud-plugins{background-image:url(../img/menu-icons-sprite.png?v=2);background-position:-315px top;background-repeat:no-repeat;transition:all .33s}#main-menu #mod-cloud-plugins:hover{background-color:#000;background-position:-315px bottom}#main-menu #mod-cloud-plugins.selected{background-color:#000;background-position:-315px bottom}#main-menu #mod-pedalboard{background-image:url(../img/menu-icons-sprite.png?v=2);background-position:-90px top;background-repeat:no-repeat;transition:all .33s}#main-menu #mod-pedalboard:hover{background-color:#000;background-position:-90px bottom}#main-menu #mod-pedalboard.selected{background-color:#000;background-position:-90px bottom}#main-menu #mod-bank{background-image:url(../img/menu-icons-sprite.png?v=2);background-position:-135px top;background-repeat:no-repeat;transition:all .33s}#main-menu #mod-bank:hover{background-color:#000;background-position:-135px bottom}#main-menu #mod-bank.selected{background-color:#000;background-position:-135px bottom}#main-menu #mod-file-manager{background-image:url(../img/menu-icons-sprite.png?v=2);background-position:-180px top;background-repeat:no-repeat;transition:all .33s}#main-menu #mod-file-manager:hover{background-color:#000;background-position:-180px bottom}#main-menu #mod-file-manager.selected{background-color:#000;background-position:-180px bottom}#main-menu #banks-saving{margin:21px 0 0 6px;font-size:10px;color:#666;display:none}#main-menu #mod-show-midi-port,#main-menu #mod-transport-icon,#main-menu .mod-bypass,#main-menu #mod-cpu,#main-menu #mod-ram,#main-menu #mod-xruns,#main-menu #mod-buffersize,#main-menu #mod-cpu-stats{background-position:8px 50%;background-repeat:no-repeat;padding-left:40px;padding-right:12px;color:#fff;float:right;font-size:11px;font-weight:bold;line-height:4.5;text-transform:uppercase;width:auto !important;transition:all .33s}#main-menu #mod-show-midi-port:hover,#main-menu #mod-transport-icon:hover,#main-menu .mod-bypass:hover,#main-menu #mod-cpu:hover,#main-menu #mod-ram:hover,#main-menu #mod-xruns:hover,#main-menu #mod-buffersize:hover,#main-menu #mod-cpu-stats:hover{background-color:#000}#main-menu #mod-show-midi-port.selected,#main-menu #mod-transport-icon.selected,#main-menu .mod-bypass.selected,#main-menu #mod-cpu.selected,#main-menu #mod-ram.selected,#main-menu #mod-xruns.selected,#main-menu #mod-buffersize.selected,#main-menu #mod-cpu-stats.selected{background-color:#333}#main-menu #mod-show-midi-port{background-image:url(../img/icons/25/midi.png)}#main-menu #mod-transport-icon{background-image:url(../img/icons/25/stop.png);font-family:monospace;width:10.5em !important;text-align:right}#main-menu #mod-transport-icon.playing{background-image:url(../img/icons/25/transport.png)}#main-menu .mod-bypass{background-image:url(../img/icons/25/bypass.png)}#main-menu .mod-bypass.bypassed{background-color:#883996}#main-menu #mod-cpu,#main-menu #mod-ram{cursor:default;width:115px !important;padding:0 !important;background:linear-gradient(to right, #1e5799 0, #2989d8 69%, #ff6430 78%, #ff6430 93%, #c40000 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1e5799', endColorstr='#c40000', GradientType=1)}#main-menu #mod-cpu .progress-title{background-image:url(../img/icons/25/cpu.png);background-position:0 50%;background-repeat:no-repeat;padding-left:30px}#main-menu #mod-ram .progress-title{background-image:url(../img/icons/25/ram.png);background-position:0 50%;background-repeat:no-repeat;padding-left:30px}#main-menu #mod-xruns{background-image:url(../img/icons/25/cpu.png);width:115px !important}#main-menu #mod-cpu-stats{background-image:url(../img/icons/25/cpu.png);width:155px !important;text-transform:none}#main-menu #mod-buffersize{background-image:url(../img/icons/25/cpu.png);width:125px !important}#main-menu .progress{height:45px;margin-bottom:0;overflow:hidden;float:right;background-color:#111;-webkit-transition:width 1s;transition:width 1s}#main-menu .progress .bar{float:right;background:#222 !important}#main-menu .progress-title{position:absolute;top:0;height:45px;margin:0;margin-left:1em;color:white}#main-menu .status{background-color:#111;background-position:3px 50%;background-size:36px;background-repeat:no-repeat;border-color:#2b2b2b;border-style:solid;border-width:0 0 0 1px;float:right}#main-menu #mod-settings{font-family:fontello !important;font-size:28px;padding-top:3px;padding-left:10px;position:relative;color:#fff;opacity:.66;cursor:pointer;transition:all .33s}#main-menu #mod-settings:after{content:'\e802'}#main-menu #mod-settings:hover{opacity:1}#main-menu #mod-update{background-image:url(../img/icons/36/update.png)}#main-menu #mod-update.uptodate{background-image:url(../img/icons/36/ok.png)}#main-menu #mod-status{background-image:url(../img/icons/36/disconnect.png)}#main-menu #mod-status.online{background-image:url(../img/icons/36/disconnect.png)}#main-menu #mod-devices{background-image:url(../img/icons/36/control-chain.png)}#cloud_install_all{background-image:url(../img/icons/36/save.png);float:right;font-size:21px}#cloud_update_all{background-image:url(../img/icons/36/update.png);float:right;font-size:21px}header#pedalboard-actions,#bank-library header,#cloud-plugins-library header,#pedalboards-library header,#file-manager-library header{display:block;left:0;height:45px;line-height:45px;position:fixed;right:0;top:0;box-shadow:0 1px 10px rgba(0,0,0,0.1);z-index:5;background-color:#111;background-position:3px 50%;background-size:36px;background-repeat:no-repeat;background-image:url(../img/icons/36/mod.png);padding-left:45px}header#pedalboard-actions .help,#bank-library header .help,#cloud-plugins-library header .help,#pedalboards-library header .help,#file-manager-library header .help{background-image:url(../img/icn-help-16x16.png);background-position:center center;background-repeat:no-repeat;display:inline-block;height:21px;width:21px}header#pedalboard-actions .close,#bank-library header .close,#cloud-plugins-library header .close,#pedalboards-library header .close,#file-manager-library header .close{opacity:1;position:absolute;right:10px;top:16px}header#pedalboard-actions .drop-menu,#bank-library header .drop-menu,#cloud-plugins-library header .drop-menu,#pedalboards-library header .drop-menu,#file-manager-library header .drop-menu{position:absolute;display:none;list-style-type:none;padding:0;background-color:rgba(0,0,0,0.8);color:#999;width:150px}header#pedalboard-actions .drop-menu:hover,#bank-library header .drop-menu:hover,#cloud-plugins-library header .drop-menu:hover,#pedalboards-library header .drop-menu:hover,#file-manager-library header .drop-menu:hover{display:block}header#pedalboard-actions .drop-menu li,#bank-library header .drop-menu li,#cloud-plugins-library header .drop-menu li,#pedalboards-library header .drop-menu li,#file-manager-library header .drop-menu li{padding:5px 20px}header#pedalboard-actions .drop-menu li:hover,#bank-library header .drop-menu li:hover,#cloud-plugins-library header .drop-menu li:hover,#pedalboards-library header .drop-menu li:hover,#file-manager-library header .drop-menu li:hover{color:white;background-color:#883996}header#pedalboard-actions .drop-menu .sub-menu,#bank-library header .drop-menu .sub-menu,#cloud-plugins-library header .drop-menu .sub-menu,#pedalboards-library header .drop-menu .sub-menu,#file-manager-library header .drop-menu .sub-menu{display:none;list-style-type:none;padding:0;position:absolute;left:150px;height:14em;overflow-y:auto;overflow-x:hidden;margin-top:-50px;background-color:rgba(0,0,0,0.8);width:15em;border-left:3px solid #666}header#pedalboard-actions .drop-menu .sub-menu:hover,#bank-library header .drop-menu .sub-menu:hover,#cloud-plugins-library header .drop-menu .sub-menu:hover,#pedalboards-library header .drop-menu .sub-menu:hover,#file-manager-library header .drop-menu .sub-menu:hover{display:block}header#pedalboard-actions .menu-trigger:hover+.drop-menu,#bank-library header .menu-trigger:hover+.drop-menu,#cloud-plugins-library header .menu-trigger:hover+.drop-menu,#pedalboards-library header .menu-trigger:hover+.drop-menu,#file-manager-library header .menu-trigger:hover+.drop-menu{display:block}header#pedalboard-actions .sub-menu-trigger:hover ul,#bank-library header .sub-menu-trigger:hover ul,#cloud-plugins-library header .sub-menu-trigger:hover ul,#pedalboards-library header .sub-menu-trigger:hover ul,#file-manager-library header .sub-menu-trigger:hover ul{display:block}header#pedalboard-actions button,#bank-library header button,#cloud-plugins-library header button,#pedalboards-library header button,#file-manager-library header button{background-position:8px 50%;background-size:25px;background-repeat:no-repeat;padding:0 12px 0 40px;background-color:transparent;border:none;height:45px;line-height:45px;opacity:.66;color:white;transition:all .33s}header#pedalboard-actions button:hover,#bank-library header button:hover,#cloud-plugins-library header button:hover,#pedalboards-library header button:hover,#file-manager-library header button:hover,header#pedalboard-actions button.selected,#bank-library header button.selected,#cloud-plugins-library header button.selected,#pedalboards-library header button.selected,#file-manager-library header button.selected{opacity:1;background-color:black}header#pedalboard-actions button.js-save,#bank-library header button.js-save,#cloud-plugins-library header button.js-save,#pedalboards-library header button.js-save,#file-manager-library header button.js-save{background-image:url(../img/icons/25/save.png)}header#pedalboard-actions button.js-save-as,#bank-library header button.js-save-as,#cloud-plugins-library header button.js-save-as,#pedalboards-library header button.js-save-as,#file-manager-library header button.js-save-as{background-image:url(../img/icons/25/save.png)}header#pedalboard-actions button.js-preset,#bank-library header button.js-preset,#cloud-plugins-library header button.js-preset,#pedalboards-library header button.js-preset,#file-manager-library header button.js-preset{background-image:url(../img/icons/36/presets.png);background-size:30px 30px}header#pedalboard-actions button#js-preset-enabler:hover,#bank-library header button#js-preset-enabler:hover,#cloud-plugins-library header button#js-preset-enabler:hover,#pedalboards-library header button#js-preset-enabler:hover,#file-manager-library header button#js-preset-enabler:hover,header#pedalboard-actions button#js-preset-enabler.selected,#bank-library header button#js-preset-enabler.selected,#cloud-plugins-library header button#js-preset-enabler.selected,#pedalboards-library header button#js-preset-enabler.selected,#file-manager-library header button#js-preset-enabler.selected{background-color:#883996}header#pedalboard-actions button.js-reset,#bank-library header button.js-reset,#cloud-plugins-library header button.js-reset,#pedalboards-library header button.js-reset,#file-manager-library header button.js-reset{background-image:url(../img/icons/25/new.png)}header#pedalboard-actions button.js-reset:hover,#bank-library header button.js-reset:hover,#cloud-plugins-library header button.js-reset:hover,#pedalboards-library header button.js-reset:hover,#file-manager-library header button.js-reset:hover,header#pedalboard-actions button.js-reset.selected,#bank-library header button.js-reset.selected,#cloud-plugins-library header button.js-reset.selected,#pedalboards-library header button.js-reset.selected,#file-manager-library header button.js-reset.selected{background-color:#883996}header#pedalboard-actions button.js-cv-addressing,#bank-library header button.js-cv-addressing,#cloud-plugins-library header button.js-cv-addressing,#pedalboards-library header button.js-cv-addressing,#file-manager-library header button.js-cv-addressing{background-image:url(../img/icons/25/cv.png)}header#pedalboard-actions button.js-cv-addressing:hover,#bank-library header button.js-cv-addressing:hover,#cloud-plugins-library header button.js-cv-addressing:hover,#pedalboards-library header button.js-cv-addressing:hover,#file-manager-library header button.js-cv-addressing:hover,header#pedalboard-actions button.js-cv-addressing.selected,#bank-library header button.js-cv-addressing.selected,#cloud-plugins-library header button.js-cv-addressing.selected,#pedalboards-library header button.js-cv-addressing.selected,#file-manager-library header button.js-cv-addressing.selected{background-color:#883996}header#pedalboard-actions button.js-cloud,#bank-library header button.js-cloud,#cloud-plugins-library header button.js-cloud,#pedalboards-library header button.js-cloud,#file-manager-library header button.js-cloud{background-image:url(../img/icn-share.png);background-size:32px;background-position:5px center}header#pedalboard-actions h1,#bank-library header h1,#cloud-plugins-library header h1,#pedalboards-library header h1,#file-manager-library header h1{font-weight:2em;text-transform:uppercase;font-weight:normal;color:#999;display:inline-block;font-size:24px;line-height:49px;height:45px;padding:0}header#pedalboard-actions{box-shadow:0 2px 12px black}.tooltip{background:white;bottom:50px;height:auto;padding:7px;position:absolute}.tooltip .text{color:#222;font-weight:bold;line-height:1;text-align:center}.tooltip .arrow{border-bottom:9px solid transparent;border-left:9px solid transparent;border-right:9px solid transparent;border-top:9px solid white;height:0;position:absolute;bottom:-18px;right:14px;width:0}#mod-devices-window,#mod-upgrade{background:white;color:black;font-size:15px;max-height:350px;overflow:auto;position:absolute;right:10px;bottom:50px;z-index:100}#mod-devices-window .progressbar-wrapper,#mod-upgrade .progressbar-wrapper{border:1px solid #444;height:20px;width:330px}#mod-devices-window .progressbar,#mod-upgrade .progressbar{background-color:#88f;height:18px}#mod-devices-window{max-width:600px;min-width:500px}#mod-upgrade{max-width:450px;min-width:350px}#mod-transport-window{bottom:48px;right:310px;top:initial;left:initial;background:rgba(17,17,17,0.9);padding:50px 40px 15px 40px;z-index:999}#mod-transport-window .mod-midi-icon{width:auto !important;padding-left:25px;background-position:5% 45% !important;background-image:url(../img/icons/25/midi.png);background-size:15px;background-repeat:no-repeat}#plugins-library{bottom:45px;height:166px;left:0;position:absolute;right:0;transition:all .33s;transition:opacity .5s;transition:height .5s}#plugins-library.folded{height:38px}#plugins-library.folded #plugins-library-settings-window{bottom:0}#plugins-library.fade{opacity:.2}#plugins-library .fold{cursor:pointer;display:block !important;float:right;height:36px;position:absolute;top:0;right:0;width:36px;background-color:rgba(17,17,17,0.66);background-image:url(../img/icons/25/pinned.png);background-position:center center;background-repeat:no-repeat}#plugins-library .folded{cursor:pointer;display:block;float:right;height:36px;position:absolute;top:0;right:0;width:36px}#plugins-library.auto .fold{background-image:url(../img/icons/25/autohide.png)}#plugins-library .settings{background-color:rgba(17,17,17,0.66);background-image:url(../img/icn-search-white.png);background-position:center center;background-repeat:no-repeat;cursor:pointer;display:block;height:36px;position:absolute;right:37px;top:0;width:36px}#plugins-library #plugins-library-settings-window{background-color:rgba(17,17,17,0.66);bottom:130px;color:#fff;position:absolute;right:74px;transition:bottom .5s}#plugins-library #plugins-library-settings-window h1{padding:0}#plugins-library #plugins-library-settings-window form{padding:4px;border:0;margin:0}#plugins-library #plugins-library-settings-window label{margin-right:10px}#plugins-library #plugins-library-settings-window label.checkbox:last-child{margin-right:0}#plugins-library #plugins-library-settings-window .control-group{position:relative}#plugins-library #plugins-library-settings-window input{width:120px;height:28px;line-height:28px;padding:0 6px;outline:0;border:0}#plugins-library #plugins-library-settings-window .input-clean{position:absolute;top:50%;right:8px;bottom:auto;left:auto;transform:translateY(-50%);margin:0 !important;border-radius:100%}#plugins-library ul{list-style:none;margin:6px 73px 0 0;overflow:hidden;padding:10px 0 0 0;position:relative;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#plugins-library ul li{background:rgba(17,17,17,0.66);color:#bbb;cursor:pointer !important;display:inline-block;float:left;font-size:11px;margin:0 1px 0 0;padding:3px 11px;text-shadow:1px 1px 0 #000;text-transform:uppercase;border-top:solid 3px transparent;transition-property:border-radius,color,margin-top,padding,border-top;transition-duration:.33s}#plugins-library ul li:hover{margin-top:-6px;padding:6px 11px;color:white}#plugins-library ul li.selected{color:white;font-weight:bold;margin-top:-6px;padding:6px 11px;border-top:solid 3px #883996}#plugins-library.scrolling .plugins-wrapper{transition:all .1s !important}#plugins-library #plugins-list{background:rgba(17,17,17,0.66);height:140px;overflow:hidden;position:relative;width:100%;z-index:1}#plugins-library #plugins-list .nav{background:url(../img/nav-left.png) 50% 50% no-repeat;cursor:pointer;position:absolute;top:0;width:50px;height:100%;opacity:.66}#plugins-library #plugins-list .nav:hover{opacity:1}#plugins-library #plugins-list .nav-left{left:0}#plugins-library #plugins-list .nav-right{background:url(../img/nav-right.png) 50% 50% no-repeat;right:0}#plugins-library #plugins-list #plugins-results{bottom:0;left:50px;position:absolute;overflow:hidden;right:50px;top:0}#plugins-library #plugins-list .plugins-wrapper{position:absolute;display:inline-block;white-space:nowrap;transition:all .5s;top:120px;left:0;opacity:0}#plugins-library #plugins-list .plugins-wrapper.selected{top:0;opacity:1}#plugins-library #plugins-list .plugins-wrapper .plugin{color:#fff;font-size:11px;font-weight:bold;height:108px;padding:14px 12px 10px;position:relative;text-align:center;display:inline-block}#plugins-library #plugins-list .plugins-wrapper .plugin .thumb{height:67px;cursor:pointer !important;position:relative;display:flex;flex-direction:column;justify-content:center}#plugins-library #plugins-list .plugins-wrapper .plugin .thumb:active{cursor:-webkit-grabbing !important;cursor:grabbing !important}#plugins-library #plugins-list .plugins-wrapper .plugin .thumb img{height:auto;margin:0 auto 3px;width:auto;pointer-events:none;max-width:256px;max-height:64px}#plugins-library #plugins-list .plugins-wrapper .plugin .status{display:block;height:16px;margin:0 auto;width:16px}#plugins-library #plugins-list .plugins-wrapper .plugin .status.demo{display:inline-block;width:auto;height:auto;margin:0}#plugins-library #plugins-list .plugins-wrapper .plugin .status.installed{background-image:url(../img/icn-installed.png);background-position:center center;background-repeat:no-repeat}#plugins-library #plugins-list .plugins-wrapper .plugin .status.outdated{background-image:url(../img/icn-outdated.png);background-position:center center;background-repeat:no-repeat}#plugins-library #plugins-list .plugins-wrapper .plugin .status.blocked{background-image:url(../img/icn-blocked.png);background-position:center center;background-repeat:no-repeat}#plugins-library #plugins-list .plugins-wrapper .plugin .author{display:block;line-height:1.5}#plugins-library #plugins-list .plugins-wrapper .plugin .title{display:block;line-height:1.25}#plugins-library #plugins-list .plugins-wrapper .plugin .rating{background-image:url(../img/icn-rating.png);background-position:center top;background-repeat:no-repeat;display:block;height:16px;width:132px}#plugins-library #plugins-list .plugins-wrapper .plugin .rating.one{background-position:center -15px}#plugins-library #plugins-list .plugins-wrapper .plugin .rating.two{background-position:center -30px}#plugins-library #plugins-list .plugins-wrapper .plugin .rating.three{background-position:center -45px}#plugins-library #plugins-list .plugins-wrapper .plugin .rating.four{background-position:center -60px}#plugins-library #plugins-list .plugins-wrapper .plugin .rating.five{background-position:center -75px}#plugins-library #plugins-list .plugins-wrapper .plugin .downloads{display:block}#plugins-library #plugins-list .plugins-wrapper .plugin .demo-container{position:absolute;left:0;bottom:3px;right:0;text-align:center}.plugin-info{background-color:rgba(20,20,20,0.9);bottom:0;color:#ccc;left:0;overflow-y:scroll;position:fixed;right:0;top:0;z-index:40}.plugin-info .box{margin-top:3em;margin-bottom:3em;background-color:#111;padding:15px;border:2px solid #333}.plugin-info .box .row-fluid{position:relative}.plugin-info .close{color:#fff;font-size:12px;font-weight:bold;opacity:1;position:absolute;right:10px;text-shadow:none;text-transform:uppercase;top:10px}.plugin-info .screenshot{padding:18px;min-width:3em;min-height:9em;display:inline-block;z-index:0}.plugin-info .screenshot div.beta{background-color:#ff2927;font-family:"cooper hewitt",sans-serif;font-weight:700;padding:5px 10px;color:white;position:absolute;top:18px;left:30px;font-size:16px}.plugin-info figure{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:992px){.plugin-info figure{float:left;width:33.33333333%}}.plugin-info figure:hover{z-index:10 !important}.plugin-info .plugin-description{position:relative;min-height:1px;padding-right:15px;padding-left:15px;height:100%;display:block;position:a;padding-left:45px;background:-moz-linear-gradient(left, rgba(17,17,17,0.1) 1em, #111 2em);background:-webkit-gradient(linear, left top, right top, color-stop(1em, rgba(17,17,17,0.1)), color-stop(2em, #111));background:-webkit-linear-gradient(left, rgba(17,17,17,0.1) 1em, #111 2em);background:-o-linear-gradient(left, rgba(17,17,17,0.1) 1em, #111 2em);background:-ms-linear-gradient(left, rgba(17,17,17,0.1) 1em, #111 2em);background:linear-gradient(to right, rgba(17,17,17,0.1) 1em, #111 2em);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffffff', endColorstr='#ffffff', GradientType=1)}@media (min-width:992px){.plugin-info .plugin-description{float:left;width:58.33333333%}}.plugin-info .plugin-description>p{font-size:16px;margin-bottom:27px;white-space:pre-wrap}.plugin-info header{padding:18px 0 0}.plugin-info header h1{display:inline-block;vertical-align:middle;color:#fff;font-size:27px;font-weight:bold;line-height:1;margin:0;padding:0}.plugin-info header h1 span{font-size:16px;line-height:1;margin:0;padding:0}.plugin-info .version{color:#ccc;font-size:12px;font-weight:bold;text-transform:uppercase}.plugin-info .version span.bold{color:#fff;font-size:14px}.plugin-info .version button{font-weight:bold;margin-top:6px;text-transform:uppercase}.plugin-info .rating{background:url(../img/icn-rating.png) no-repeat -12px top;display:inline-block;height:14px;width:84px}.plugin-info .rating.one{background:url(../img/icn-rating.png) no-repeat -12px -15px}.plugin-info .rating.two{background:url(../img/icn-rating.png) no-repeat -12px -30px}.plugin-info .rating.three{background:url(../img/icn-rating.png) no-repeat -12px -45px}.plugin-info .rating.four{background:url(../img/icn-rating.png) no-repeat -12px -60px}.plugin-info .rating.five{background:url(../img/icn-rating.png) no-repeat -12px -75px}.plugin-info .rating-label{color:#fff;font-size:12px;font-weight:bold;text-transform:uppercase}.plugin-info .my-rate{width:15px;height:15px;margin:0;padding:0;float:left;cursor:pointer}.plugin-info .plugin-specs{text-align:center;width:100%;border-color:#333}.plugin-info .plugin-specs th{background:#333;color:#fff;border-color:#333;text-align:center}.plugin-info .plugin-specs td{border-color:#333}.plugin-info .plugin-specs td:first-child{width:40%}.plugin-info .plugin-specs td:not(first-child){width:20%}.plugin-info .comments-reviews{border-top:1px solid #333;margin-top:10px;padding-top:10px}.plugin-info .comments-reviews h1{color:#fff;font-size:21px;line-height:2;margin:0;padding:0}.plugin-info .reviews{border-bottom:1px solid #333;margin:9px 0 18px 0;padding:9px 0 18px 0}.plugin-info article.review{margin:18px 0}.plugin-info article.review h1{color:#fff;font-size:14px}.plugin-info article.review h1 .rating{margin-left:6px}.plugin-info article.review h1 .rating-label{color:#ccc;display:inline;font-size:12px;font-weight:normal;margin-left:6px}.plugin-info article.review .bar{background:#333;display:block;height:12px;margin:2px 6px 0;position:relative;width:100px}.plugin-info article.review .progress-bar{background:#444;bottom:0;display:block;height:10px;left:0;margin:1px;position:absolute;right:0;top:0;width:50%}.plugin-info article.review .rating-number{display:block;font-size:12px;margin-top:-1px}.plugin-info article.comment{border-top:1px solid #333;margin:18px 0 0;padding:18px 0 0}.plugin-info article.comment h1{color:#fff;font-size:16px;line-height:1}.plugin-info article.comment h1 .date{color:#ccc;font-size:12px;font-weight:normal;margin-left:6px}.plugin-info .comments{margin:18px 0;padding:18px 0}.plugin-info .comments button{margin-top:18px}.plugin-info form.comment-form{border-top:1px solid #333;margin:18px 0;padding:18px 0}.plugin-info form.comment-form label{font-size:12px;font-weight:bold;text-transform:uppercase}.plugin-info form.comment-form textarea{height:180px}.plugin-info .favorite-button{display:inline-block;vertical-align:middle;width:30px;height:30px;background:url(../img/icons/25/star-border.png) no-repeat center center;cursor:pointer;opacity:.5}.plugin-info .favorite-button:hover{opacity:.8}.plugin-info .favorite-button.favorite{opacity:1;background:url(../img/icons/25/star.png) no-repeat center center}.plugin-info .favorite-button.favorite:hover{opacity:1}.plugin-info .online-button-href{display:inline-block;margin-bottom:10px}.plugin-info .status.demo{display:inline-block;padding:4px 8px;margin:2px 0;font-size:.8em}.clearfix:after,.container:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after{content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden}.clearfix,.container,.dl-horizontal dd,.container,.container-fluid,.row,.form-horizontal .form-group,.btn-toolbar,.btn-group-vertical>.btn-group,.nav,.navbar,.navbar-header,.navbar-collapse,.pager,.panel-body{display:block}.clear{clear:both}.blend{opacity:.25}.box{padding:10px}.alignleft{float:left}.alignright{float:right}.textcenter{text-align:center}.textright{text-align:right}.bottom{margin-bottom:0 !important;padding-bottom:0 !important}.left{margin-left:0 !important;padding-left:0 !important}.right{margin-right:0 !important;padding-right:0 !important}.top{margin-top:0 !important;padding-top:0 !important}.nobullets{list-style:none}.mod-hidden{display:none}.mod-init-hidden{opacity:0}::selection{background:transparent}.mod-box{background:white;left:50%;margin:-150px -168px;padding:18px;position:absolute;top:50%;width:300px}.mod-box:not(#midi-ports-box) label{display:inline-block;float:left;line-height:2;width:96px}.mod-box .mod-controls{float:left}.mod-box input[type="text"]{width:190px}.mod-box input[type="password"]{width:190px}.blocker{background:rgba(17,17,17,0.9);color:white;display:block;position:fixed;width:100% !important;height:100% !important;top:0;left:0;text-align:center;z-index:99999}.blocker p{position:absolute;top:50%;width:100%;margin-top:56px;font-size:24px}.blocker.screen-disconnected{background:rgba(17,17,17,0.9) url(../img/icons/blocked.svg) 50% 50% no-repeat;background-size:100px 100px}.blocker.screen-disconnected .button{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);margin-top:120px}.plugin-wait{background:url(../img/loading-effect.gif) no-repeat center center;border:1px solid #ccc}.button{background:#883996;color:white;display:inline-block;cursor:pointer;line-height:25px;padding:5px 15px;transition:all .33s;border:none}.button:hover{background-color:#f29446;box-shadow:0 1px 5px black}.button.icon{padding-left:40px;background-position:10px 50%;background-repeat:no-repeat;background-size:25px}.drag-handle{bottom:0;cursor:-webkit-grabbing !important;cursor:grabbing !important;left:0;position:absolute;right:0;top:0;z-index:20}.demo-plugin{background:url("/img/trial.svg") no-repeat center center;background-size:contain;opacity:.4;z-index:11 !important}.demo-mask{width:100%;height:100%;left:0;right:0;top:0;bottom:0;position:absolute}.demo-plugin-light{opacity:.1 !important}.actions{z-index:20}@keyframes flashlight{0%{box-shadow:0 0 0 transparent}50%{box-shadow:0 0 10px white}100%{box-shadow:0 0 0 transparent}}.alert{background:rgba(17,17,17,0.9);border-width:0 0 0 6px;border-color:#883996;color:white;box-shadow:0 3px 10px black;margin-top:5px !important}.alert .js-close{color:white}.alert-warning{border-color:#f29446}.alert-danger{border-color:#c00}#go-back{width:200px;text-align:left;margin:20px 0 0 0;background:none;border:none;font-size:15px;padding:5px;color:#fff !important}#go-back span{font-family:fontello !important}#go-back span:before{content:'\e804'}#go-back:hover{text-decoration:none}.unstable-warning{float:left;background-color:#ffebb1;padding:5px;border-radius:10px}
\ No newline at end of file
diff --git a/html/css/main.css.old b/html/css/main.css.old
deleted file mode 100755
index b8f403661..000000000
--- a/html/css/main.css.old
+++ /dev/null
@@ -1,548 +0,0 @@
-body { background:#292929; font-family:Helvetica,Arial,Sans-serif; min-width:1024px;}
-
-#wrapper { bottom:0; left:0; min-width:980px; overflow:hidden; position:absolute; right:0; top:0; }
-
-/* = Main Menu (FOOTER)
-================================================ */
-#main-menu { background:#111; bottom:0; color:#fff; height:45px; left:0; position:absolute; right:0; z-index:10; }
-#main-menu > div { cursor:pointer; float:left; }
-#main-menu > div.icon { border-right:1px solid #2b2b2b; height:45px; width:45px; }
-#main-menu > div.icon > img { margin:5px 0 0 6px; }
-#main-menu > div.icon.selected { background:#000; border-right:1px solid black; } 
-#main-menu > div.icon > a { display:block; height:45px; width:45px; }
-
-/* MOD - The Social Cloud */
-#main-menu #cloud { background:url(../img/menu-icons-sprite.png) no-repeat 0px bottom; }
-#main-menu #cloud:hover, #main-menu #cloud.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat 0px top; }
-/* Effects */
-#main-menu #mod-effects { background:url(../img/menu-icons-sprite.png) no-repeat -45px bottom; }
-#main-menu #mod-effects:hover, #main-menu #mod-effects.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -45px top; }
-/* Pedalboards */
-#main-menu #mod-pedalboard { background:url(../img/menu-icons-sprite.png) no-repeat -90px bottom; }
-#main-menu #mod-pedalboard:hover, #main-menu #mod-pedalboard.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -90px top; }
-/* Banks */
-#main-menu #mod-bank { background:url(../img/menu-icons-sprite.png) no-repeat -135px bottom; }
-#main-menu #mod-bank:hover, #main-menu #mod-bank.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -135px top; }
-/* MOD - Settings */
-#main-menu #mod-settings { background:url(../img/menu-icons-sprite.png) no-repeat -180px bottom; border-left:1px solid #2b2b2b; border-right:none; float:right; }
-#main-menu #mod-settings:hover, #main-menu #mod-settings.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -180px top; }
-/* MOD - Bluetooth */
-#main-menu #mod-bluetooth { background:url(../img/menu-icons-sprite.png) no-repeat -225px bottom; border-left:1px solid #2b2b2b; border-right:none; float:right; }
-#main-menu #mod-bluetooth:hover, #main-menu #mod-bluetooth.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -225px top; }
-
-
-
-/* = EFFECTS LIBRARY
-================================================ */
-#effects-library { bottom:46px; height:166px; left:0; position:absolute; right:0; }
-/* Effects Categories */
-#effects-library ul { list-style:none; margin:0; padding:0; width:100%; }
-#effects-library ul li { background:#111; color:#fff; cursor:pointer; display:inline-block; float:left; font-size:11px; margin:0 1px 0 0; padding:3px 11px; text-shadow:1px 1px 0 #000; text-transform:uppercase; }
-#effects-library ul li.selected { background:#000; border-radius:4px 4px 0 0; font-weight:bold; margin-top:-6px; padding:6px 11px; }
-/* Effects Filter Settings */
-#effects-library .settings { background:url(../img/icn-settings.png) no-repeat center center; cursor:pointer; display:block; float:right; height:36px; margin-top:-10px; width:36px; }
-#effects-library .settings.selected { background-color:#000; }
-#effects-library .fold, #effects-library .folded { cursor:pointer; display:block; float:right; height:36px; margin-right:1px; margin-top:-10px; width:36px; }
-#effects-library .fold { background:#000 url(../img/nav-bottom.png) no-repeat center center; }
-#effects-library .folded { background:red url(../img/nav-top.png) no-repeat center center; }
-#effects-library #effects-library-settings-window { background:#000; bottom:176px; color:#fff; position:absolute; right:0; }
-#effects-library #effects-library-settings-window h1 { font-size:14px; font-weight:bold; line-height:1; margin:0 0 10px; padding:0; text-transform:uppercase; }
-#effects-library #effects-library-settings-window form { margin-bottom:0; }
-#effects-library #effects-library-settings-window label { margin-right:10px; }
-#effects-library #effects-library-settings-window label.checkbox:last-child { margin-right:0; }
-/* Effects List */
-#effects-library .effects-list { background:#000; height:140px; overflow:hidden; position:relative; width:100%; }
-#effects-library.folded { bottom:-94px }
-#effects-library .effects-list .nav { cursor:pointer; position:absolute; top:50px; }
-#effects-library .effects-list .nav-left { left:10px; }
-#effects-library .effects-list .nav-right { right:10px; }
-#effects-library .effects-list .effects-wrapper { bottom:0; left:50px; position:absolute; right:50px; top:0; }
-#effects-library .effects-list .effects-wrapper .available-effect { color:#fff; float:left; font-size:11px; font-weight:bold; height:108px; padding:14px 12px 10px; position:relative; text-align:center; }
-/* Effect Thumbnail and Status*/
-#effects-library .effects-list .effects-wrapper .available-effect .thumb { position:relative; }
-#effects-library .effects-list .effects-wrapper .available-effect .thumb img { height:auto; margin:0 auto 3px; width:auto; }
-#effects-library .effects-list .effects-wrapper .available-effect .thumb .status { display:block; height:16px; left:9px; position:absolute; top:-3px; width:16px; }
-#effects-library .effects-list .effects-wrapper .available-effect .thumb .status.installed { background:url(../img/icn-installed.png) no-repeat center center; }
-/* Effect Title */
-#effects-library .effects-list .effects-wrapper .available-effect .title { display:block; }
-/* Effect Rating */
-#effects-library .effects-list .effects-wrapper .available-effect .rating         { background:url(../img/icn-rating.png) no-repeat center top; display:block; height:16px; width:132px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.one     { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.two     { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.three   { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.four    { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.five    { background:url(../img/icn-rating.png) no-repeat center -75px; }
-/* Effect's Downloads Status */
-#effects-library .effects-list .effects-wrapper .available-effect .downloads { display:block; }
-
-
-
-/* = PEDALBOARDS LIBRARY
-================================================ */
-#pedalboards-library { background:#000; bottom:46px; left:0; overflow:auto; position:absolute; right:0; top:0; z-index:2; }
-#pedalboards-library h1 { color:#fff; display:inline-block; font-size:24px; margin:0 0 18px 0; padding:0; }
-#pedalboards-library header { background:url(../img/header-pattern.png) no-repeat bottom center; display:block; left:0; padding:10px 10px 18px 10px; position:fixed; right:0; top:0; z-index:2; }
-#pedalboards-library header .help { background:url(../img/icn-help-16x16.png) no-repeat center center; display:inline-block; height:21px; width:21px; }
-#pedalboards-library header .close { opacity:1; position:absolute; right:10px; top:16px; }
-#pedalboards-library .filter { border-right:1px dotted #111; bottom:45px; left:10px; padding-top:18px; position:fixed; right:0; top:68px; width:240px; }
-#pedalboards-library .filter .control-group { float:left; margin-right:9px; }
-#pedalboards-library .filter .control-group label { color:#fff; display:inline-block; font-size:12px; font-weight:bold; width:165px; }
-#pedalboards-library .filter .control-group select { width:50px; }
-#pedalboards-library .pedalboards { left:252px; position:absolute; right:10px; top:100px; height:1000px; }
-#pedalboards-library .pedalboards .pedalboard { color:#fff; float:left; margin:0 0 20px 20px; width:157px; }
-#pedalboards-library .pedalboards .pedalboard .img { background:#2b2b2b; display:block; height:105px; margin-bottom:9px; width:157px; }
-#pedalboards-library .pedalboards .pedalboard .title { display:block; height:18px; font-weight:bold; overflow:hidden; position:relative; }
-#pedalboards-library .pedalboards .pedalboard .description { display:block; font-size:12px; height:36px; line-height:1.5; overflow:hidden; }
-#pedalboards-library .pedalboards .pedalboard .actions { font-size:11px; font-weight:bold; text-transform:uppercase; }
-#pedalboards-library .pedalboards .pedalboard .actions span.duplicate { margin:0 6px; }
-
-/* Bank Library */
-#bank-library { background:#000; bottom:46px; left:0; overflow:auto; position:absolute; right:0; top:0; z-index:2; }
-#bank-library h1 { color:#fff; display:inline-block; font-size:24px; margin:0 0 18px 0; padding:0; }
-#bank-library header { background:url(../img/header-pattern.png) no-repeat bottom center; display:block; left:0; padding:10px 10px 18px 10px; position:fixed; right:0; top:0; z-index:2; }
-#bank-library header .help { background:url(../img/icn-help-16x16.png) no-repeat center center; display:inline-block; height:21px; width:21px; }
-#bank-library header .close { opacity:1; position:absolute; right:10px; top:16px; }
-
-/* Banks List */
-#bank-list { bottom:0; left:0; list-style:none; margin:0; padding:0; position:absolute; top:68px; width:30%; }
-#bank-list li { background:#222; color:#888; cursor:pointer; font-weight:bold; margin:0 0 1px 0; padding:10px 5px; }
-#bank-list li.selected { background:#333; color:#fff; }
-
-/* Bank List - Add Bank */
-#bank-list li.add-bank { color:#fff; cursor:pointer; padding-left:35px; }
-
-/* Bank List - Move bank position */
-#bank-list span.move { background:url(../img/move.png) no-repeat left center; display:block; float:left; height:22px; margin:-1px 6px 0 0; width:24px; }
-#bank-list li.selected span.move { background-position:right center; }
-
-/* Bank List - Remove bank */
-#bank-list span.remove { background:url(../img/icn-remove-bank.png) no-repeat left center; display:block; float:right; height:22px; margin:-1px 6px 0 0; width:24px; }
-#bank-list li.selected span.remove { background-position:right center; }
-
-/* Pedalboards in a bank */
-#bank-pedalboards { background:#333; bottom:0; left:30%; list-style:none; margin:0; padding:0; position:absolute; top:68px; width:45%; }
-#bank-pedalboards li { border:1px dotted #111; margin:10px; padding:10px; }
-#bank-pedalboards .pedalboard { color:#fff; float:left; width:100%; }
-#bank-pedalboards .pedalboard .img { background:#2b2b2b; display:block; float:left; height:105px; margin:0 9px 0 0; width:30%; }
-#bank-pedalboards .pedalboard .title { display:block; height:18px; font-weight:bold; overflow:hidden; position:relative; }
-#bank-pedalboards .pedalboard .description { display:block; font-size:12px; height:36px; line-height:1.5; overflow:hidden; }
-
-#bank-pedalboards .mode { border:none; margin:22px 0 18px 0; text-align:center; }
-#bank-pedalboards .grid { background:url(../img/icn-grid-list.png) no-repeat left bottom; display:inline-block; height:14px; width:14px; }
-#bank-pedalboards .grid.selected { background-position:left top; }
-#bank-pedalboards .list { background:url(../img/icn-grid-list.png) no-repeat right bottom; display:inline-block; height:14px; width:14px; }
-#bank-pedalboards .list.selected { background-position:right top; }
-
-/* Pedalboards search*/
-#bank-pedalboards-search { bottom:0; left:75%; position:absolute; top:68px; width:25%; }
-#bank-pedalboards-search label { color:#fff; font-size:11px; font-weight:bold; text-transform:uppercase; }
-#bank-pedalboards-search .control-group { padding:0 2.5%; width:45%; }
-#bank-pedalboards-search input[type="text"] { margin:auto 0; padding-left:0; padding-right:0; width:100%; }
-#bank-pedalboards-search select { width:100%; }
-
-/* Pedalboards search results */
-#bank-pedalboards-result { overflow:auto; position:relative; }
-
-/* Pedalboards search results - view (grid or list) */
-#bank-pedalboards-result .mode { margin:22px 0 18px 0; text-align:center; }
-#bank-pedalboards-result .grid { background:url(../img/icn-grid-list.png) no-repeat left bottom; display:inline-block; height:14px; width:14px; }
-#bank-pedalboards-result .grid.selected { background-position:left top; }
-#bank-pedalboards-result .list { background:url(../img/icn-grid-list.png) no-repeat right bottom; display:inline-block; height:14px; width:14px; }
-#bank-pedalboards-result .list.selected { background-position:right top; }
-
-/* Pedalboards search results - pedalboard */
-#bank-pedalboards-result .grid-selected .pedalboard { color:#fff; float:left; margin:0 2.5% 20px 2.5%; width:45%; }
-#bank-pedalboards-result .grid-selected .pedalboard .img { background:#2b2b2b; display:block; height:75px; margin-bottom:9px; width:100%; }
-#bank-pedalboards-result .grid-selected .pedalboard .title { display:block; height:18px; font-size:12px; font-weight:bold; overflow:hidden; position:relative; }
-#bank-pedalboards-result .grid-selected .pedalboard .description { display:block; font-size:11px; height:27px; line-height:1.5; overflow:hidden; }
-
-#bank-pedalboards-result .list-selected .pedalboard { border:1px dotted #333; color:#fff; float:left; margin:0 0 6px 0; padding:2.5%; width:94%; }
-#bank-pedalboards-result .list-selected .pedalboard .img { display:none; }
-#bank-pedalboards-result .list-selected .pedalboard .title { display:block; height:18px; font-size:12px; font-weight:bold; overflow:hidden; position:relative; }
-#bank-pedalboards-result .list-selected .pedalboard .description { display:block; font-size:11px; height:27px; line-height:1.5; overflow:hidden; }
-
-
-
-/* = DASHBOARD
-================================================ */
-#pedalboard { bottom:46px; left:0; position:absolute; right:0; top:0; }
-
-#pedalboard-actions { 
-    background-color:#1b1b1b;
-    background-image:-moz-linear-gradient(top, #222222, #111111);
-    background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
-    background-image:-webkit-linear-gradient(top, #222222, #111111);
-    background-image:-o-linear-gradient(top, #222222, #111111);
-    background-image:linear-gradient(to bottom, #222222, #111111);
-    background-repeat:repeat-x;
-    border-bottom:1px solid #252525;
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
-    box-shadow:0 1px 10px rgba(0,0,0,0.1);
-    height:36px; left:0; position:absolute; right:0; top:0; 
-}
-
-/* Pedalboard Info - Header */
-#pedalboard-info { height:35px; left:0; margin:0; position:absolute; padding:0 10px; right:71px; z-index:2; }
-#pedalboard-info .open { border-right:1px dotted #444; display:block; float:left; line-height:2.5; margin-right:10px; padding-right:10px; }
-#pedalboard-info .title { color:#fff; cursor:pointer; display:block; float:left; height:36px; font-size:18px; font-weight:bold; line-height:2; margin-right:10px; overflow:hidden; position:relative; }
-#pedalboard-info .title input { background:rgba(255,255,255,0.2); border:none; color:#fff; font-size:18px; font-weight:bold; line-height:2; padding-left:10px; padding-right:10px; -webkit-appearance:none; }
-#pedalboard-info .favorite { background:url(../img/icn-favorite-off.png) no-repeat center center; cursor:pointer; float:left; height:36px; width:36px; }
-#pedalboard-info .favorite.selected { background:url(../img/icn-favorite-on.png) no-repeat center center; }
-#pedalboard-info .settings { background:url(../img/icn-settings.png) no-repeat center center; cursor:pointer; float:left; height:36px; width:36px; }
-#pedalboard-info .settings.selected { background-color:#444; }
-#pedalboard-info .actions { font-weight:bold; position:absolute; right:0; top:0; }
-#pedalboard-info .actions > button { margin-top:-25px; }
-#pedalboard-info .actions .separator { border-left:1px dotted #444; display:inline-block; height:35px; margin:0 6px; }
-
-/* Pedalboard Settings Window */
-#pedalboard-settings { background:#444; bottom:46px; left:0; padding:10px; position:absolute; right:0; top:36px; z-index:2; }
-#pedalboard-settings h1 { color:#fff; font-size:24px; line-height:1; text-shadow:0 1px 3px #000; }
-
-/* Share Pedalboard */
-#pedalboard-sharing { height:36px; position:absolute; right:0; top:0; }
-#pedalboard-sharing .button { background:#222 url(../img/icn-share.png) no-repeat center center; cursor:pointer; height:36px; width:64px; }
-#pedalboard-sharing .button:hover, #pedalboard-sharing .button.selected { background-color:#444; }
-#pedalboard-sharing .window { background:#444; border-radius:0 0 0 9px; padding:10px; position:absolute; right:0; top:36px; width:306px; z-index:30}
-#pedalboard-sharing .window h1 { color:#fff; font-size:18px; margin:0 0 10px 0; padding:0; text-shadow:0 1px 0 #000; }
-#pedalboard-sharing .window label { color:#fff; float:left; font-size:11px; font-weight:bold; height:30px; line-height:2.9; margin-bottom:10px; text-align:left; text-shadow:0 1px 2px #000; text-transform:uppercase; width:85px; }
-#pedalboard-sharing .window textarea { height:150px; margin-bottom:10px; }
-#pedalboard-sharing .window .item-list { color:#fff; font-size:11px; font-weight:bold; list-style:none; margin:6px 0 10px 84px; padding:0; }
-#pedalboard-sharing .window .item-list .item { background:#2b2b2b; border-radius:6px; display:block; float:left; height:18px; padding:3px 9px; }
-#pedalboard-sharing .window .submit { text-align:right; }
-
-
-/* Dashboard - Input/Output */
-svg .shadow { fill:none; stroke:#000000; stroke-width:16; z-index:0; }
-svg .cable { fill:none; stroke:#222; stroke-width:12; z-index:0; }
-svg .light { fill:none; stroke:#777; stroke-width:2; z-index:0; -webkit-transform: translateY(1.5px)}
-
-.output { cursor:pointer; height:56px; position:absolute; width:60px; }
-.pedal-input  { left:-25px }
-.pedal-output { right:-54px }
-.output-jack { height:32px; width:90px; z-index:20; }
-.output .output-jack { top: 12px }
-.jack-connecting { background:url(../img/jack-p10.png) no-repeat 0px 0px; height: 18px; width: 90px; }
-.jack-connected { background:url(../img/input-connected.png) no-repeat 0px center; top: 4px !important; left: 3px !important}
-.output-disconnected { background:url(../img/output.png) no-repeat 1px 0px; }
-.hardware-output.output-disconnected { background:url(../img/hardware-output.png) no-repeat 0px center; width: 103px; }
-.hardware-output.output-disconnected .output-jack { left: 10px; }
-.output-connecting, .output-connected, .hardware-output.output-connecting { background:url(../img/output-connected.png) no-repeat 0px 0px; width: 54px}
-
-/*
-.output .hardware { position: absolute; top: 1px; left: 2px; width: 35px; height: 32px; background:url(../img/hardware-output.png) no-repeat 0 0; }
-.input .hardware { position: absolute; top: 1px; left: 53px; width: 35px; height: 32px; background:url(../img/hardware-input.png) no-repeat 0 0; }
-*/
-
-.cable-connected {}
-.cable-connecting svg { stroke:black; }
-/*    .jack-disconnected { background:#111; } */
-
-.effect-ports { position:absolute; top:0; }
-
-.input { background:url(../img/input.png) no-repeat top right; height:56px; position:absolute; right:0; width:59px; }
-.input-connected { top: 2px; }
-.input-connecting { background-color: rgba(189,30,82,.8); border-radius: 3px}
-.input-disconnected {  }
-
-
-
-/*  ==============================================================================
-    THE EFFECT BOX
-    ============================================================================== */
-    
-/* General Style - Borders, Colors, Height, Margin, Padding, Position, Width, etc */
-.effect { cursor:pointer; position:absolute; z-index:10; }
-/*    .effect-shell, #pedalboard .effect { background-color:rgba(255,255,255,.1); border:1px solid black; border-radius:9px; box-shadow:inset 1px 1px 0 #666, 1px 1px 0 #555; cursor:pointer; height:150px; position:absolute; width:200px; z-index:10; }*/
-
-/* Remove Button */
-.effect .remove { cursor:pointer; }
-
-/* Bypass */
-.effect .bypass { bottom:0; color:white; font-size:9px; font-weight:bold; left:0; margin:0 auto; position:absolute; right:0; text-align:center; text-transform:uppercase; top:55px; width:64px; }
-
-/* Blue Light On/Off */
-.effect div.lighton { background:rgba(170,10,0,1); border-radius:6px; box-shadow:0 0 10px rgba(255,0,0,.8); height:12px; margin:0 auto; width:12px; }
-.effect div.lightoff { background:rgba(255,255,255,.3); border-radius:6px; box-shadow:0 0 10px rgba(255,255,255,.4); height:12px; margin:0 auto; width:12px; }
-
-/*  ==============================================================================
-    END The Effect Box
-    ============================================================================== */
-
-/* Pedal Settings - Lightbox Window */
-.pedal-settings { background:#000; border-radius:12px; color:#fff; left:400px; padding:0; position:absolute; top:60px; z-index:2; width:583px; height:400px; }
-.pedal-settings h1 { font-size:18px; font-weight:bold; margin:0; padding:10px 10px 18px; }
-.pedal-settings .actions { bottom:10px; position:absolute; right:10px; }
-
-.pedal-settings .controls .control-1 { float:left; height:140px; width:140px; }
-.pedal-settings .controls .control-2 { float:left; height:140px; width:140px; }
-.pedal-settings .controls .control-3 { float:left; height:140px; width:140px; }
-
-.pedal-settings .controls .button { background:#111; position:absolute; }
-
-.pedal-boss-settings .controls .button-0-0  { left:010px; top:70px; }
-.pedal-boss-settings .controls .button-0-1  { left:080px; top:70px; }
-.pedal-boss-settings .controls .button-0-2  { left:151px; top:70px; }
-.pedal-boss-settings .controls .button-0-3  { left:220px; top:70px; }
-.pedal-boss-settings .controls .button-0-4  { left:292px; top:70px; }
-.pedal-boss-settings .controls .button-0-5  { left:360px; top:70px; }
-.pedal-boss-settings .controls .button-0-6  { left:433px; top:70px; }
-.pedal-boss-settings .controls .button-0-7  { left:500px; top:70px; }
-.pedal-boss-settings .controls .button-0-8  { left:574px; top:70px; }
-.pedal-boss-settings .controls .button-0-9  { left:640px; top:70px; }
-.pedal-boss-settings .controls .button-0-10 { left:715px; top:70px; }
-.pedal-boss-settings .controls .button-0-11 { left:780px; top:70px; }
-
-.pedal-boss-settings .controls .button-1-0  { left:010px; top:140px; }
-.pedal-boss-settings .controls .button-1-1  { left:080px; top:140px; }
-.pedal-boss-settings .controls .button-1-2  { left:151px; top:140px; }
-.pedal-boss-settings .controls .button-1-3  { left:220px; top:140px; }
-.pedal-boss-settings .controls .button-1-4  { left:292px; top:140px; }
-.pedal-boss-settings .controls .button-1-5  { left:360px; top:140px; }
-.pedal-boss-settings .controls .button-1-6  { left:433px; top:140px; }
-.pedal-boss-settings .controls .button-1-7  { left:500px; top:140px; }
-.pedal-boss-settings .controls .button-1-8  { left:574px; top:140px; }
-.pedal-boss-settings .controls .button-1-9  { left:640px; top:140px; }
-.pedal-boss-settings .controls .button-1-10 { left:715px; top:140px; }
-.pedal-boss-settings .controls .button-1-11 { left:780px; top:140px; }
-
-.pedal-boss-settings .controls .button-2-0  { left:010px; top:211px; }
-.pedal-boss-settings .controls .button-2-1  { left:080px; top:211px; }
-.pedal-boss-settings .controls .button-2-2  { left:151px; top:211px; }
-.pedal-boss-settings .controls .button-2-3  { left:220px; top:211px; }
-.pedal-boss-settings .controls .button-2-4  { left:292px; top:211px; }
-.pedal-boss-settings .controls .button-2-5  { left:360px; top:211px; }
-.pedal-boss-settings .controls .button-2-6  { left:433px; top:211px; }
-.pedal-boss-settings .controls .button-2-7  { left:500px; top:211px; }
-.pedal-boss-settings .controls .button-2-8  { left:574px; top:211px; }
-.pedal-boss-settings .controls .button-2-9  { left:640px; top:211px; }
-.pedal-boss-settings .controls .button-2-10 { left:715px; top:211px; }
-.pedal-boss-settings .controls .button-2-11 { left:780px; top:211px; }
-
-.pedal-boss-settings .knob > img  { height:auto; width:auto; }
-.pedal-boss-settings .knob > span.current-value { bottom:20px; font-size:12px; font-weight:bold; left:0; position:absolute; text-align:center; right:0; }
-.pedal-boss-settings .knob > span.max-value     { font-size:11px; font-weight:bold; left:100px; position:absolute; text-align:left; top:72px; }
-.pedal-boss-settings .knob > span.min-value     { font-size:11px; font-weight:bold; position:absolute; text-align:right; right:100px; top:72px; }
-.pedal-boss-settings .knob > span.title         { color:white; display:block; font-size:11px; font-weight:bold; height:12px; line-height:1; margin:9px 0; padding:0; text-transform:uppercase; }
-
-.pedal-settings .knob-group              { background:#111; border-radius:9px; margin:0 10px 10px 10px; padding:6px; position:relative; width:auto; }
-.pedal-settings .knob-group .knob-column { float:left; }
-.pedal-settings .knob-group .knob-row    { border-bottom:1px dotted #2b2b2b; clear:both; }
-.pedal-settings .knob-group .knob-row:last-child { border:none; }
-.pedal-settings .knob-group .knob        { height:126px; float:left; margin:6px; position:relative; text-align:center; width:126px; }
-
-
-
-/* = MOD SOCIAL NETWORK
-================================================ */
-#mod-social-network { background:#292929; bottom:46px; color:#fff; left:0; overflow:auto; position:absolute; right:0; top:0; z-index:3; }
-
-/* Top Menu */
-#mod-social-network #header { 
-	background-color:#1b1b1b;
-	background-image:-moz-linear-gradient(top, #222222, #111111);
-	background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
-	background-image:-webkit-linear-gradient(top, #222222, #111111);
-	background-image:-o-linear-gradient(top, #222222, #111111);
-	background-image:linear-gradient(to bottom, #222222, #111111);
-	background-repeat:repeat-x;
-	border-bottom:1px solid #252525;
-	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
-	box-shadow:0 1px 10px rgba(0,0,0,0.1);
-	color:#fff; height:38px; min-width:1024px; padding:0 5%; position:fixed; width:90%; z-index:3; }
-#mod-social-network #header .profile { float:left; width:40%; }
-#mod-social-network #header .avatar { background:#fff; display:inline-block; float:left; height:38px; width:38px; }
-#mod-social-network #header .name { color:#fff; display:inline-block; font-size:12px; font-weight:bold; padding:8px 10px; }
-#mod-social-network #header .menu { float:left; width:60%; }
-#mod-social-network #header .menu ul { float:right; list-style:none; margin:0; padding:0; text-align:right; }
-#mod-social-network #header .menu ul li { display:inline-block; float:left; padding:8px 8px 9px 8px; }
-#mod-social-network #header .menu ul li:hover, #mod-social-network #header .menu ul li.selected { background:rgba(255,255,255,.2); }
-#mod-social-network #header .menu ul li:first-child { border-left:1px solid #222; }
-#mod-social-network #header .menu ul li.search { border-left:1px solid #222; }
-#mod-social-network #header .menu ul li.logout { border-left:1px solid #222; border-right:1px solid #222; }
-#mod-social-network #header .menu a { color:#fff; font-size:11px; font-weight:bold; text-decoration:none; text-shadow:0 -1px 0 #000; text-transform:uppercase; }
-#mod-social-network #header .menu form { position:relative; }
-#mod-social-network #header .menu input[type="search"] { border:none; border-radius:0; font-size:12px; }
-#mod-social-network #header .menu button { background:url(../img/icn-search.png); border:none; display:block; height:18px; position:absolute; right:2px; top:2px; width:18px; }
-
-/* Content Wrapper  */
-#mod-social-network #content-wrapper { margin:63px 5% 0 5%; position:relative; width:90%; }
-
-/* Sidebar */
-#mod-social-network #aside { position:absolute; width:210px; word-break:break-word; }
-#mod-social-network #aside.leftcolumn { left:0; }
-#mod-social-network #aside.rightcolumn { right:0; }
-#mod-social-network #aside table.users-list td { padding-bottom:4px; }
-#mod-social-network #aside table.users-list td.avatar { width:32px; }
-#mod-social-network #aside table.users-list td.avatar > .img { background:#222; display:block; height:32px; width:32px; }
-#mod-social-network #aside table.users-list td.user-info { padding-left:10px; }
-#mod-social-network #aside table.users-list td.user-info a { color:#fff; font-size:13px; font-weight:bold; word-break:break-word; }
-
-/* Main Content */
-#mod-social-network #main { min-height:600px; position:absolute; top:0; word-break:break-word; }
-#mod-social-network #main.leftcolumn { border-right:1px solid #222; left:0; right:220px; }
-#mod-social-network #main.rightcolumn { border-left:1px solid #222; left:220px; right:0; }
-
-/* User Profile */
-#mod-social-network #user-profile .avatar { height:64px; margin:2px 10px 18px 0; width:64px; background:#ddd; }
-#mod-social-network #user-profile .user-info h1.username { font-size:18px; line-height:1; }
-#mod-social-network #user-profile .user-info ul { list-style:none; }
-
-/* User Pedalboard - Info */
-/* #mod-social-network #user-profile .pedalboard { margin-right:2%; } */
-
-/* Pedalboard */
-#mod-social-network .pedalboard h2 { font-size:27px; line-height:2; }
-#mod-social-network .pedalboard h3 { font-size:14px; text-transform:uppercase; }
-/* Rating */
-#mod-social-network .pedalboard .rating-label     { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; line-height:0; }
-#mod-social-network .pedalboard .rating           { background:url(../img/icn-rating.png) no-repeat center top; display:inline-block; height:16px; width:74px; }
-#mod-social-network .pedalboard .rating.one       { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#mod-social-network .pedalboard .rating.two       { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#mod-social-network .pedalboard .rating.three     { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#mod-social-network .pedalboard .rating.four      { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#mod-social-network .pedalboard .rating.five      { background:url(../img/icn-rating.png) no-repeat center -75px; }
-/* Download */
-#mod-social-network .pedalboard .downloads-label  { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .pedalboard .downloads        { display:inline-block; font-size:14px; font-weight:bold; text-transform:uppercase; }
-/* Techspecs */
-#mod-social-network .pedalboard .techspecs        { font-size:12px; width:100%; }
-#mod-social-network .pedalboard .techspecs td     { border-bottom:1px solid #222; padding:9px 20px 9px 0; }
-#mod-social-network .pedalboard .techspecs td.spec { font-weight:bold; text-transform:uppercase; vertical-align:top; width:150px; }
-/* Tags */
-#mod-social-network .pedalboard ul.tags li { display:inline-block; }
-#mod-social-network .pedalboard ul.tags li:after { content:", "; }
-#mod-social-network .pedalboard ul.tags li:first-child:after { content:""; }
-#mod-social-network .pedalboard ul.tags li:last-child:after { content:""; } 
-/* Reviews */
-#mod-social-network .pedalboard ul.reviews { border-top:1px solid #222; list-style:none; margin-right:20%; width:80%; }
-#mod-social-network .pedalboard li.review { margin-bottom:18px; }
-#mod-social-network .pedalboard li.review .avatar { margin-top:5px; }
-#mod-social-network .pedalboard li.review .username { font-size:14px; font-weight:bold; }
-#mod-social-network .pedalboard li.review .date { font-size:12px; font-style:italic; line-height:1; }
-#mod-social-network .pedalboard li.review .content { font-size:12px; line-height:1; }
-#mod-social-network .pedalboard .review-form { margin-bottom:36px; }
-#mod-social-network .pedalboard .review-form textarea { height:120px; margin-bottom:9px; }
-
-/* More Pedalboards - Related */
-#mod-social-network .more-pedalboards { border-top:1px solid #222; height:260px; overflow:hidden; padding-top:18px; position:relative; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard { color:#fff; float:left; margin:0 1% 27px; position:relative; width:18%; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .img { background:#2b2b2b; display:block; float:left; height:100px; margin-bottom:9px; width:100%; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .title { display:block; font-size:14px; font-weight:bold; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .more-info { font-size:11px; text-transform:uppercase; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .more-info:before { content:" – "; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .description { display:block; font-size:12px; line-height:1.5; margin-bottom:9px; max-height:54px; overflow:hidden; position:relative; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating-label     { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; line-height:0; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating           { background:url(../img/icn-rating.png) no-repeat center top; display:inline-block; height:16px; width:74px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.one       { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.two       { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.three     { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.four      { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.five      { background:url(../img/icn-rating.png) no-repeat center -75px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .downloads-label  { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .downloads        { display:inline-block; font-size:14px; font-weight:bold; text-transform:uppercase; }
-
-/* Pedalboards */
-#mod-social-network .pedalboards h2 { font-size:18px; line-height:1; margin-bottom:27px; }
-#mod-social-network .pedalboards .mode { border:none; cursor:pointer; margin-top:10px; }
-#mod-social-network .pedalboards .grid { background:url(../img/icn-grid-list.png) no-repeat left bottom; display:inline-block; height:14px; width:14px; }
-#mod-social-network .pedalboards .grid.selected { background-position:left top; }
-#mod-social-network .pedalboards .list { background:url(../img/icn-grid-list.png) no-repeat right bottom; display:inline-block; height:14px; width:14px; }
-#mod-social-network .pedalboards .list.selected { background-position:right top; }
-
-/* Pedalboards - List Mode */
-#mod-social-network .pedalboards .list-mode .pedalboard { color:#fff; margin:0 1% 27px; position:relative; width:98%; }
-#mod-social-network .pedalboards .list-mode .pedalboard .img { background:#2b2b2b; display:block; float:left; height:130px; margin-top:3px; width:200px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .info { left:220px; position:absolute; right:18px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .title { display:block; font-size:18px; font-weight:bold; }
-#mod-social-network .pedalboards .list-mode .pedalboard .more-info { font-size:11px; text-transform:uppercase; }
-#mod-social-network .pedalboards .list-mode .pedalboard .more-info:before { content:" – "; }
-#mod-social-network .pedalboards .list-mode .pedalboard .description { display:block; font-size:12px; line-height:1.5; margin-bottom:9px; max-height:54px; overflow:hidden; position:relative; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating-label   { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; line-height:0; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating         { background:url(../img/icn-rating.png) no-repeat center top; display:inline-block; height:16px; width:74px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.one     { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.two     { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.three   { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.four    { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.five    { background:url(../img/icn-rating.png) no-repeat center -75px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .downloads-label   { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .pedalboards .list-mode .pedalboard .downloads   { display:inline-block; font-size:14px; font-weight:bold; text-transform:uppercase; }
-
-/* Pedalboards - Grid Mode */
-#mod-social-network .pedalboards .grid-mode .pedalboard { color:#fff; float:left; margin:0 1% 27px 1% !important; position:relative; width:200px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard a { color:#fff; text-decoration:none; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .img { background:#2b2b2b; display:block; float:left; height:130px; margin-bottom:9px; width:100%; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .title { display:block; font-size:16px; margin-bottom:3px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .more-info { font-size:11px; text-transform:uppercase; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .more-info:before { content:" – "; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .description { display:block; font-size:12px; line-height:1.5; margin-bottom:9px; max-height:54px; overflow:hidden; position:relative; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating-label     { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; line-height:0; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating           { background:url(../img/icn-rating.png) no-repeat center top; display:inline-block; height:16px; width:74px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.one       { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.two       { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.three     { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.four      { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.five      { background:url(../img/icn-rating.png) no-repeat center -75px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .downloads-label  { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .downloads        { display:inline-block; font-size:14px; font-weight:bold; text-transform:uppercase; }
-
-/* Pedalboards - Search */
-#mod-social-network .filter .control-group { margin-bottom:9px; }
-#mod-social-network .filter .control-group.submit { margin-top:18px; }
-#mod-social-network .filter label { font-size:11px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .filter input[type=text] { width:196px; }
-#mod-social-network .filter select { width:210px; }
-
-/* Feed */
-.feed { border-top:1px solid #222; border-left:5px solid transparent; padding:18px; }
-.feed:hover { background:#2a2a2a; border-left:5px solid #222; }
-/* Info - User, description */
-.feed .avatar { display:block; float:left; margin:4px 0 0 0; }
-.feed .content { float:left; }
-.feed .description { font-size:13px; }
-/* TechSpec */
-.feed div.techspecs { margin-bottom:9px; }
-.feed div.techspecs div.spec { float:left; margin-right:18px; }
-.feed div.techspecs div.spec > * { float:left; }
-.feed div.techspecs div.spec div.number { background:#fff; border-radius:4px; color:#292929; font-weight:bold; margin:6px 0 0 9px; padding:0 1px 0 0; min-width:27px; text-align:center; }
-.feed div.techspecs div.spec div.number .arrow-left { border-bottom:6px solid transparent; border-right:6px solid #fff; border-top:6px solid transparent; float:left; height:0; margin:4px 0 0 -5px; width:0; }
-/* Comments */
-.feed .comments { margin:18px 0 9px 0; position:relative; }
-.feed .comments form { background:#222; display:inline-block; margin-bottom:0; padding:6px !important; }
-.feed .comments form input[type="text"] { border-radius:0; }
-.feed .comments form img { height:30px; width:auto; }
-.feed .comments .arrow-top { border-color:transparent transparent #222 transparent; border-style:solid; border-width:6px 6px 6px 6px; height:0; left:16px; position:absolute; top:-12px; width:0; }
-.comments-list .comment { background:#222; margin-top:1px; padding:3px 6px !important; }
-.comments-list .comment .avatar { float:left; margin:3px 0 0 0 !important; }
-.comments-list .comment .content { float:left; font-size:13px; }
-
-/* = Notifications
-================================================ */
-.notifications          { border-radius:0; height:18px; left:0; position:absolute; right:0; top:35px; }
-
-.notifications .progressbar { position:absolute; height:16px; width:200px; right:40px; bottom:10px;  background-color:white; display:none }
-.notifications .progressbar-value { background:rgb(48, 187,153); height:16px }
-
-
-/* = Helpers
-================================================ */
-.clearfix:after, .container:after { content:"\0020"; display:block; height:0; clear:both; visibility:hidden; overflow:hidden; }
-.clearfix, .container { display:block; }
-.clear { clear:both; }
-.box { padding:10px; }
-.alignleft  { float:left; }
-.alignright { float:right; }
-.textcenter { text-align:center; }
-.textright  { text-align:right; }
-.bottom { margin-bottom:0 !important; padding-bottom:0 !important; }
-.left   { margin-left:0 !important; padding-left:0 !important; }
-.right  { margin-right:0 !important; padding-right:0 !important; }
-.top    { margin-top:0 !important; padding-top:0 !important; }
-.nobullets { list-style:none; }
-.hidden { display:none; }
-::selection { background:transparent; }
-
-
-/* Baguncinha do asa */
-
-.input-clean { color:#666666; position:absolute; font-size:1.5em; margin-top:5px; cursor:pointer }
-
diff --git a/html/css/main.old.css b/html/css/main.old.css
deleted file mode 100644
index 233f5c4d8..000000000
--- a/html/css/main.old.css
+++ /dev/null
@@ -1,538 +0,0 @@
-body { background:#525252; font-family:Helvetica,Arial,Sans-serif; min-width:1024px;}
-
-#wrapper { bottom:0; left:0; min-width:980px; overflow:hidden; position:absolute; right:0; top:0; }
-
-/* = Main Menu (FOOTER)
-================================================ */
-#main-menu { background:#111; bottom:0; color:#fff; height:45px; left:0; position:absolute; right:0; z-index:10; }
-#main-menu > div { cursor:pointer; float:left; }
-#main-menu > div.icon { border-right:1px solid #2b2b2b; height:45px; width:45px; }
-#main-menu > div.icon > img { margin:5px 0 0 6px; }
-#main-menu > div.icon.selected { background:#000; border-right:1px solid black; } 
-#main-menu > div.icon > a { display:block; height:45px; width:45px; }
-
-/* MOD - The Social Cloud */
-#main-menu #cloud { background:url(../img/menu-icons-sprite.png) no-repeat 0px bottom; }
-#main-menu #cloud:hover, #main-menu #cloud.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat 0px top; }
-/* Effects */
-#main-menu #mod-effects { background:url(../img/menu-icons-sprite.png) no-repeat -45px bottom; }
-#main-menu #mod-effects:hover, #main-menu #mod-effects.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -45px top; }
-/* Pedalboards */
-#main-menu #mod-pedalboard { background:url(../img/menu-icons-sprite.png) no-repeat -90px bottom; }
-#main-menu #mod-pedalboard:hover, #main-menu #mod-pedalboard.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -90px top; }
-/* Banks */
-#main-menu #mod-bank { background:url(../img/menu-icons-sprite.png) no-repeat -135px bottom; }
-#main-menu #mod-bank:hover, #main-menu #mod-bank.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -135px top; }
-/* MOD - Settings */
-#main-menu #mod-settings { background:url(../img/menu-icons-sprite.png) no-repeat -180px bottom; border-left:1px solid #2b2b2b; border-right:none; float:right; }
-#main-menu #mod-settings:hover, #main-menu #mod-settings.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -180px top; }
-/* MOD - Bluetooth */
-#main-menu #mod-bluetooth { background:url(../img/menu-icons-sprite.png) no-repeat -225px bottom; border-left:1px solid #2b2b2b; border-right:none; float:right; }
-#main-menu #mod-bluetooth:hover, #main-menu #mod-bluetooth.selected { background:#000 url(../img/menu-icons-sprite.png) no-repeat -225px top; }
-
-
-
-/* = EFFECTS LIBRARY
-================================================ */
-#effects-library { bottom:46px; height:166px; left:0; position:absolute; right:0; }
-/* Effects Categories */
-#effects-library ul { list-style:none; margin:0; padding:0; width:100%; }
-#effects-library ul li { background:#111; color:#fff; cursor:pointer; display:inline-block; float:left; font-size:11px; margin:0 1px 0 0; padding:3px 11px; text-shadow:1px 1px 0 #000; text-transform:uppercase; }
-#effects-library ul li.selected { background:#000; border-radius:4px 4px 0 0; font-weight:bold; margin-top:-6px; padding:6px 11px; }
-/* Effects Filter Settings */
-#effects-library .settings { background:url(../img/icn-settings.png) no-repeat center center; cursor:pointer; display:block; float:right; height:36px; margin-top:-10px; width:36px; }
-#effects-library .settings.selected { background-color:#000; }
-#effects-library .fold, #effects-library .folded { cursor:pointer; display:block; float:right; height:36px; margin-right:1px; margin-top:-10px; width:36px; }
-#effects-library .fold { background:#000 url(../img/nav-bottom.png) no-repeat center center; }
-#effects-library .folded { background:red url(../img/nav-top.png) no-repeat center center; }
-#effects-library #effects-library-settings-window { background:#000; bottom:176px; color:#fff; position:absolute; right:0; }
-#effects-library #effects-library-settings-window h1 { font-size:14px; font-weight:bold; line-height:1; margin:0 0 10px; padding:0; text-transform:uppercase; }
-#effects-library #effects-library-settings-window form { margin-bottom:0; }
-#effects-library #effects-library-settings-window label { margin-right:10px; }
-#effects-library #effects-library-settings-window label.checkbox:last-child { margin-right:0; }
-/* Effects List */
-#effects-library .effects-list { background:#000; height:140px; overflow:hidden; position:relative; width:100%; }
-#effects-library.folded { bottom:-94px }
-#effects-library .effects-list .nav { cursor:pointer; position:absolute; top:50px; }
-#effects-library .effects-list .nav-left { left:10px; }
-#effects-library .effects-list .nav-right { right:10px; }
-#effects-library .effects-list .effects-wrapper { bottom:0; left:50px; position:absolute; right:50px; top:0; }
-#effects-library .effects-list .effects-wrapper .available-effect { color:#fff; float:left; font-size:11px; font-weight:bold; height:108px; padding:14px 12px 10px; position:relative; text-align:center; }
-/* Effect Thumbnail and Status*/
-#effects-library .effects-list .effects-wrapper .available-effect .thumb { position:relative; }
-#effects-library .effects-list .effects-wrapper .available-effect .thumb img { height:auto; margin:0 auto 3px; width:auto; }
-#effects-library .effects-list .effects-wrapper .available-effect .thumb .status { display:block; height:16px; left:9px; position:absolute; top:-3px; width:16px; }
-#effects-library .effects-list .effects-wrapper .available-effect .thumb .status.installed { background:url(../img/icn-installed.png) no-repeat center center; }
-/* Effect Title */
-#effects-library .effects-list .effects-wrapper .available-effect .title { display:block; }
-/* Effect Rating */
-#effects-library .effects-list .effects-wrapper .available-effect .rating         { background:url(../img/icn-rating.png) no-repeat center top; display:block; height:16px; width:132px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.one     { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.two     { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.three   { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.four    { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#effects-library .effects-list .effects-wrapper .available-effect .rating.five    { background:url(../img/icn-rating.png) no-repeat center -75px; }
-/* Effect's Downloads Status */
-#effects-library .effects-list .effects-wrapper .available-effect .downloads { display:block; }
-
-
-
-/* = PEDALBOARDS LIBRARY
-================================================ */
-#pedalboards-library { background:#000; bottom:46px; left:0; overflow:auto; position:absolute; right:0; top:0; z-index:2; }
-#pedalboards-library h1 { color:#fff; display:inline-block; font-size:24px; margin:0 0 18px 0; padding:0; }
-#pedalboards-library header { background:url(../img/header-pattern.png) no-repeat bottom center; display:block; left:0; padding:10px 10px 18px 10px; position:fixed; right:0; top:0; z-index:2; }
-#pedalboards-library header .help { background:url(../img/icn-help-16x16.png) no-repeat center center; display:inline-block; height:21px; width:21px; }
-#pedalboards-library header .close { opacity:1; position:absolute; right:10px; top:16px; }
-#pedalboards-library .filter { border-right:1px dotted #111; bottom:45px; left:10px; padding-top:18px; position:fixed; right:0; top:68px; width:240px; }
-#pedalboards-library .filter .control-group { float:left; margin-right:9px; }
-#pedalboards-library .filter .control-group label { color:#fff; display:inline-block; font-size:12px; font-weight:bold; width:165px; }
-#pedalboards-library .filter .control-group select { width:50px; }
-#pedalboards-library .pedalboards { left:252px; position:absolute; right:10px; top:100px; height:1000px; }
-#pedalboards-library .pedalboards .pedalboard { color:#fff; float:left; margin:0 0 20px 20px; width:157px; }
-#pedalboards-library .pedalboards .pedalboard .img { background:#2b2b2b; display:block; height:105px; margin-bottom:9px; width:157px; }
-#pedalboards-library .pedalboards .pedalboard .title { display:block; height:18px; font-weight:bold; overflow:hidden; position:relative; }
-#pedalboards-library .pedalboards .pedalboard .description { display:block; font-size:12px; height:36px; line-height:1.5; overflow:hidden; }
-#pedalboards-library .pedalboards .pedalboard .actions { font-size:11px; font-weight:bold; text-transform:uppercase; }
-#pedalboards-library .pedalboards .pedalboard .actions span.duplicate { margin:0 6px; }
-
-/* Bank Library */
-#bank-library { background:#000; bottom:46px; left:0; overflow:auto; position:absolute; right:0; top:0; z-index:2; }
-#bank-library h1 { color:#fff; display:inline-block; font-size:24px; margin:0 0 18px 0; padding:0; }
-#bank-library header { background:url(../img/header-pattern.png) no-repeat bottom center; display:block; left:0; padding:10px 10px 18px 10px; position:fixed; right:0; top:0; z-index:2; }
-#bank-library header .help { background:url(../img/icn-help-16x16.png) no-repeat center center; display:inline-block; height:21px; width:21px; }
-#bank-library header .close { opacity:1; position:absolute; right:10px; top:16px; }
-
-/* Banks List */
-#bank-list { bottom:0; left:0; list-style:none; margin:0; padding:0; position:absolute; top:68px; width:30%; }
-#bank-list li { background:#222; color:#888; cursor:pointer; font-weight:bold; margin:0 0 1px 0; padding:10px 5px; }
-#bank-list li.selected { background:#333; color:#fff; }
-
-/* Bank List - Add Bank */
-#bank-list li.add-bank { color:#fff; cursor:pointer; padding-left:35px; }
-
-/* Bank List - Move bank position */
-#bank-list span.move { background:url(../img/move.png) no-repeat left center; display:block; float:left; height:22px; margin:-1px 6px 0 0; width:24px; }
-#bank-list li.selected span.move { background-position:right center; }
-
-/* Bank List - Remove bank */
-#bank-list span.remove { background:url(../img/icn-remove-bank.png) no-repeat left center; display:block; float:right; height:22px; margin:-1px 6px 0 0; width:24px; }
-#bank-list li.selected span.remove { background-position:right center; }
-
-/* Pedalboards in a bank */
-#bank-pedalboards { background:#333; bottom:0; left:30%; list-style:none; margin:0; padding:0; position:absolute; top:68px; width:45%; }
-#bank-pedalboards li { border:1px dotted #111; margin:10px; padding:10px; }
-#bank-pedalboards .pedalboard { color:#fff; float:left; width:100%; }
-#bank-pedalboards .pedalboard .img { background:#2b2b2b; display:block; float:left; height:105px; margin:0 9px 0 0; width:30%; }
-#bank-pedalboards .pedalboard .title { display:block; height:18px; font-weight:bold; overflow:hidden; position:relative; }
-#bank-pedalboards .pedalboard .description { display:block; font-size:12px; height:36px; line-height:1.5; overflow:hidden; }
-
-#bank-pedalboards .mode { border:none; margin:22px 0 18px 0; text-align:center; }
-#bank-pedalboards .grid { background:url(../img/icn-grid-list.png) no-repeat left bottom; display:inline-block; height:14px; width:14px; }
-#bank-pedalboards .grid.selected { background-position:left top; }
-#bank-pedalboards .list { background:url(../img/icn-grid-list.png) no-repeat right bottom; display:inline-block; height:14px; width:14px; }
-#bank-pedalboards .list.selected { background-position:right top; }
-
-/* Pedalboards search*/
-#bank-pedalboards-search { bottom:0; left:75%; position:absolute; top:68px; width:25%; }
-#bank-pedalboards-search label { color:#fff; font-size:11px; font-weight:bold; text-transform:uppercase; }
-#bank-pedalboards-search .control-group { padding:0 2.5%; width:45%; }
-#bank-pedalboards-search input[type="text"] { margin:auto 0; padding-left:0; padding-right:0; width:100%; }
-#bank-pedalboards-search select { width:100%; }
-
-/* Pedalboards search results */
-#bank-pedalboards-result { overflow:auto; position:relative; }
-
-/* Pedalboards search results - view (grid or list) */
-#bank-pedalboards-result .mode { margin:22px 0 18px 0; text-align:center; }
-#bank-pedalboards-result .grid { background:url(../img/icn-grid-list.png) no-repeat left bottom; display:inline-block; height:14px; width:14px; }
-#bank-pedalboards-result .grid.selected { background-position:left top; }
-#bank-pedalboards-result .list { background:url(../img/icn-grid-list.png) no-repeat right bottom; display:inline-block; height:14px; width:14px; }
-#bank-pedalboards-result .list.selected { background-position:right top; }
-
-/* Pedalboards search results - pedalboard */
-#bank-pedalboards-result .grid-selected .pedalboard { color:#fff; float:left; margin:0 2.5% 20px 2.5%; width:45%; }
-#bank-pedalboards-result .grid-selected .pedalboard .img { background:#2b2b2b; display:block; height:75px; margin-bottom:9px; width:100%; }
-#bank-pedalboards-result .grid-selected .pedalboard .title { display:block; height:18px; font-size:12px; font-weight:bold; overflow:hidden; position:relative; }
-#bank-pedalboards-result .grid-selected .pedalboard .description { display:block; font-size:11px; height:27px; line-height:1.5; overflow:hidden; }
-
-#bank-pedalboards-result .list-selected .pedalboard { border:1px dotted #333; color:#fff; float:left; margin:0 0 6px 0; padding:2.5%; width:94%; }
-#bank-pedalboards-result .list-selected .pedalboard .img { display:none; }
-#bank-pedalboards-result .list-selected .pedalboard .title { display:block; height:18px; font-size:12px; font-weight:bold; overflow:hidden; position:relative; }
-#bank-pedalboards-result .list-selected .pedalboard .description { display:block; font-size:11px; height:27px; line-height:1.5; overflow:hidden; }
-
-
-
-/* = DASHBOARD
-================================================ */
-#pedalboard { bottom:46px; left:0; position:absolute; right:0; top:0; }
-
-#pedalboard-actions { 
-    background-color:#1b1b1b;
-    background-image:-moz-linear-gradient(top, #222222, #111111);
-    background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
-    background-image:-webkit-linear-gradient(top, #222222, #111111);
-    background-image:-o-linear-gradient(top, #222222, #111111);
-    background-image:linear-gradient(to bottom, #222222, #111111);
-    background-repeat:repeat-x;
-    border-bottom:1px solid #252525;
-    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
-    box-shadow:0 1px 10px rgba(0,0,0,0.1);
-    height:36px; left:0; position:absolute; right:0; top:0; 
-}
-
-/* Pedalboard Info - Header */
-#pedalboard-info { height:35px; left:0; margin:0; position:absolute; padding:0 10px; right:71px; z-index:2; }
-#pedalboard-info .open { border-right:1px dotted #444; display:block; float:left; line-height:2.5; margin-right:10px; padding-right:10px; }
-#pedalboard-info .title { color:#fff; cursor:pointer; display:block; float:left; height:36px; font-size:18px; font-weight:bold; line-height:2; margin-right:10px; overflow:hidden; position:relative; }
-#pedalboard-info .title input { background:rgba(255,255,255,0.2); border:none; color:#fff; font-size:18px; font-weight:bold; line-height:2; padding-left:10px; padding-right:10px; -webkit-appearance:none; }
-#pedalboard-info .favorite { background:url(../img/icn-favorite-off.png) no-repeat center center; cursor:pointer; float:left; height:36px; width:36px; }
-#pedalboard-info .favorite.selected { background:url(../img/icn-favorite-on.png) no-repeat center center; }
-#pedalboard-info .settings { background:url(../img/icn-settings.png) no-repeat center center; cursor:pointer; float:left; height:36px; width:36px; }
-#pedalboard-info .settings.selected { background-color:#444; }
-#pedalboard-info .actions { font-weight:bold; position:absolute; right:0; top:0; }
-#pedalboard-info .actions > button { margin-top:-25px; }
-#pedalboard-info .actions .separator { border-left:1px dotted #444; display:inline-block; height:35px; margin:0 6px; }
-
-/* Pedalboard Settings Window */
-#pedalboard-settings { background:#444; bottom:46px; left:0; padding:10px; position:absolute; right:0; top:36px; z-index:2; }
-#pedalboard-settings h1 { color:#fff; font-size:24px; line-height:1; text-shadow:0 1px 3px #000; }
-
-/* Share Pedalboard */
-#pedalboard-sharing { height:36px; position:absolute; right:0; top:0; }
-#pedalboard-sharing .button { background:#222 url(../img/icn-share.png) no-repeat center center; cursor:pointer; height:36px; width:64px; }
-#pedalboard-sharing .button:hover, #pedalboard-sharing .button.selected { background-color:#444; }
-#pedalboard-sharing .window { background:#444; border-radius:0 0 0 9px; padding:10px; position:absolute; right:0; top:36px; width:306px; z-index:30}
-#pedalboard-sharing .window h1 { color:#fff; font-size:18px; margin:0 0 10px 0; padding:0; text-shadow:0 1px 0 #000; }
-#pedalboard-sharing .window label { color:#fff; float:left; font-size:11px; font-weight:bold; height:30px; line-height:2.9; margin-bottom:10px; text-align:left; text-shadow:0 1px 2px #000; text-transform:uppercase; width:85px; }
-#pedalboard-sharing .window textarea { height:150px; margin-bottom:10px; }
-#pedalboard-sharing .window .item-list { color:#fff; font-size:11px; font-weight:bold; list-style:none; margin:6px 0 10px 84px; padding:0; }
-#pedalboard-sharing .window .item-list .item { background:#2b2b2b; border-radius:6px; display:block; float:left; height:18px; padding:3px 9px; }
-#pedalboard-sharing .window .submit { text-align:right; }
-
-
-/* Dashboard - Input/Output */
-svg { fill:none; stroke:rgba(0,0,0,.5); stroke-width:3; z-index:0; }
-
-.output { left:-3px !important; }
-
-.output { cursor:pointer; height:32px; position:absolute; width:90px; }
-.pedal-input  { left:-25px }
-.pedal-output { right:-25px }
-.output-jack { background:url(../img/jack-p10.png) no-repeat center center; height:32px; width:90px; z-index:20; }
-
-.jack-connected { margin-left:-2px }
-.cable-connected {}
-.jack-connecting {}
-.cable-connecting svg { stroke:black; }
-/*    .jack-disconnected { background:#111; } */
-
-.effect-ports { position:absolute; top:0; }
-
-.input { background:url(../img/input-output.png) no-repeat top right; height:32px; position:absolute; right:0; width:16px; left:1266px !important; }
-.input-connected { width:32px; overflow:hidden; }
-.input-connecting { background:rgba(189,30,82,.8); }
-.input-disconnected {  }
-
-
-
-/*  ==============================================================================
-    THE EFFECT BOX
-    ============================================================================== */
-    
-/* General Style - Borders, Colors, Height, Margin, Padding, Position, Width, etc */
-.effect { cursor:pointer; position:absolute; z-index:10; }
-/*    .effect-shell, #pedalboard .effect { background-color:rgba(255,255,255,.1); border:1px solid black; border-radius:9px; box-shadow:inset 1px 1px 0 #666, 1px 1px 0 #555; cursor:pointer; height:150px; position:absolute; width:200px; z-index:10; }*/
-
-/* Remove Button */
-.effect .remove { cursor:pointer; }
-
-/* Bypass */
-.effect .bypass { bottom:0; color:white; font-size:9px; font-weight:bold; left:0; margin:0 auto; position:absolute; right:0; text-align:center; text-transform:uppercase; top:55px; width:64px; }
-
-/* Blue Light On/Off */
-.effect div.lighton { background:rgba(170,10,0,1); border-radius:6px; box-shadow:0 0 10px rgba(255,0,0,.8); height:12px; margin:0 auto; width:12px; }
-.effect div.lightoff { background:rgba(255,255,255,.3); border-radius:6px; box-shadow:0 0 10px rgba(255,255,255,.4); height:12px; margin:0 auto; width:12px; }
-
-/*  ==============================================================================
-    END The Effect Box
-    ============================================================================== */
-
-/* Pedal Settings - Lightbox Window */
-.pedal-settings { background:#000; border-radius:12px; color:#fff; left:400px; padding:0; position:absolute; top:60px; z-index:2; width:583px; height:400px; }
-.pedal-settings h1 { font-size:18px; font-weight:bold; margin:0; padding:10px 10px 18px; }
-.pedal-settings .actions { bottom:10px; position:absolute; right:10px; }
-
-.pedal-settings .controls .control-1 { float:left; height:140px; width:140px; }
-.pedal-settings .controls .control-2 { float:left; height:140px; width:140px; }
-.pedal-settings .controls .control-3 { float:left; height:140px; width:140px; }
-
-.pedal-settings .controls .button { background:#111; position:absolute; }
-
-.pedal-boss-settings .controls .button-0-0  { left:010px; top:70px; }
-.pedal-boss-settings .controls .button-0-1  { left:080px; top:70px; }
-.pedal-boss-settings .controls .button-0-2  { left:151px; top:70px; }
-.pedal-boss-settings .controls .button-0-3  { left:220px; top:70px; }
-.pedal-boss-settings .controls .button-0-4  { left:292px; top:70px; }
-.pedal-boss-settings .controls .button-0-5  { left:360px; top:70px; }
-.pedal-boss-settings .controls .button-0-6  { left:433px; top:70px; }
-.pedal-boss-settings .controls .button-0-7  { left:500px; top:70px; }
-.pedal-boss-settings .controls .button-0-8  { left:574px; top:70px; }
-.pedal-boss-settings .controls .button-0-9  { left:640px; top:70px; }
-.pedal-boss-settings .controls .button-0-10 { left:715px; top:70px; }
-.pedal-boss-settings .controls .button-0-11 { left:780px; top:70px; }
-
-.pedal-boss-settings .controls .button-1-0  { left:010px; top:140px; }
-.pedal-boss-settings .controls .button-1-1  { left:080px; top:140px; }
-.pedal-boss-settings .controls .button-1-2  { left:151px; top:140px; }
-.pedal-boss-settings .controls .button-1-3  { left:220px; top:140px; }
-.pedal-boss-settings .controls .button-1-4  { left:292px; top:140px; }
-.pedal-boss-settings .controls .button-1-5  { left:360px; top:140px; }
-.pedal-boss-settings .controls .button-1-6  { left:433px; top:140px; }
-.pedal-boss-settings .controls .button-1-7  { left:500px; top:140px; }
-.pedal-boss-settings .controls .button-1-8  { left:574px; top:140px; }
-.pedal-boss-settings .controls .button-1-9  { left:640px; top:140px; }
-.pedal-boss-settings .controls .button-1-10 { left:715px; top:140px; }
-.pedal-boss-settings .controls .button-1-11 { left:780px; top:140px; }
-
-.pedal-boss-settings .controls .button-2-0  { left:010px; top:211px; }
-.pedal-boss-settings .controls .button-2-1  { left:080px; top:211px; }
-.pedal-boss-settings .controls .button-2-2  { left:151px; top:211px; }
-.pedal-boss-settings .controls .button-2-3  { left:220px; top:211px; }
-.pedal-boss-settings .controls .button-2-4  { left:292px; top:211px; }
-.pedal-boss-settings .controls .button-2-5  { left:360px; top:211px; }
-.pedal-boss-settings .controls .button-2-6  { left:433px; top:211px; }
-.pedal-boss-settings .controls .button-2-7  { left:500px; top:211px; }
-.pedal-boss-settings .controls .button-2-8  { left:574px; top:211px; }
-.pedal-boss-settings .controls .button-2-9  { left:640px; top:211px; }
-.pedal-boss-settings .controls .button-2-10 { left:715px; top:211px; }
-.pedal-boss-settings .controls .button-2-11 { left:780px; top:211px; }
-
-.pedal-boss-settings .knob > img  { height:auto; width:auto; }
-.pedal-boss-settings .knob > span.current-value { bottom:20px; font-size:12px; font-weight:bold; left:0; position:absolute; text-align:center; right:0; }
-.pedal-boss-settings .knob > span.max-value     { font-size:11px; font-weight:bold; left:100px; position:absolute; text-align:left; top:72px; }
-.pedal-boss-settings .knob > span.min-value     { font-size:11px; font-weight:bold; position:absolute; text-align:right; right:100px; top:72px; }
-.pedal-boss-settings .knob > span.title         { color:white; display:block; font-size:11px; font-weight:bold; height:12px; line-height:1; margin:9px 0; padding:0; text-transform:uppercase; }
-
-.pedal-settings .knob-group              { background:#111; border-radius:9px; margin:0 10px 10px 10px; padding:6px; position:relative; width:auto; }
-.pedal-settings .knob-group .knob-column { float:left; }
-.pedal-settings .knob-group .knob-row    { border-bottom:1px dotted #2b2b2b; clear:both; }
-.pedal-settings .knob-group .knob-row:last-child { border:none; }
-.pedal-settings .knob-group .knob        { height:126px; float:left; margin:6px; position:relative; text-align:center; width:126px; }
-
-
-
-/* = MOD SOCIAL NETWORK
-================================================ */
-#mod-social-network { background:#292929; bottom:46px; color:#fff; left:0; overflow:auto; position:absolute; right:0; top:0; z-index:3; }
-
-/* Top Menu */
-#mod-social-network #header { 
-	background-color:#1b1b1b;
-	background-image:-moz-linear-gradient(top, #222222, #111111);
-	background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
-	background-image:-webkit-linear-gradient(top, #222222, #111111);
-	background-image:-o-linear-gradient(top, #222222, #111111);
-	background-image:linear-gradient(to bottom, #222222, #111111);
-	background-repeat:repeat-x;
-	border-bottom:1px solid #252525;
-	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
-	box-shadow:0 1px 10px rgba(0,0,0,0.1);
-	color:#fff; height:38px; min-width:1024px; padding:0 5%; position:fixed; width:90%; z-index:3; }
-#mod-social-network #header .profile { float:left; width:40%; }
-#mod-social-network #header .avatar { background:#fff; display:inline-block; float:left; height:38px; width:38px; }
-#mod-social-network #header .name { color:#fff; display:inline-block; font-size:12px; font-weight:bold; padding:8px 10px; }
-#mod-social-network #header .menu { float:left; width:60%; }
-#mod-social-network #header .menu ul { float:right; list-style:none; margin:0; padding:0; text-align:right; }
-#mod-social-network #header .menu ul li { display:inline-block; float:left; padding:8px 8px 9px 8px; }
-#mod-social-network #header .menu ul li:hover, #mod-social-network #header .menu ul li.selected { background:rgba(255,255,255,.2); }
-#mod-social-network #header .menu ul li:first-child { border-left:1px solid #222; }
-#mod-social-network #header .menu ul li.search { border-left:1px solid #222; }
-#mod-social-network #header .menu ul li.logout { border-left:1px solid #222; border-right:1px solid #222; }
-#mod-social-network #header .menu a { color:#fff; font-size:11px; font-weight:bold; text-decoration:none; text-shadow:0 -1px 0 #000; text-transform:uppercase; }
-#mod-social-network #header .menu form { position:relative; }
-#mod-social-network #header .menu input[type="search"] { border:none; border-radius:0; font-size:12px; }
-#mod-social-network #header .menu button { background:url(../img/icn-search.png); border:none; display:block; height:18px; position:absolute; right:2px; top:2px; width:18px; }
-
-/* Content Wrapper  */
-#mod-social-network #content-wrapper { margin:63px 5% 0 5%; position:relative; width:90%; }
-
-/* Sidebar */
-#mod-social-network #aside { position:absolute; width:210px; word-break:break-word; }
-#mod-social-network #aside.leftcolumn { left:0; }
-#mod-social-network #aside.rightcolumn { right:0; }
-#mod-social-network #aside table.users-list td { padding-bottom:4px; }
-#mod-social-network #aside table.users-list td.avatar { width:32px; }
-#mod-social-network #aside table.users-list td.avatar > .img { background:#222; display:block; height:32px; width:32px; }
-#mod-social-network #aside table.users-list td.user-info { padding-left:10px; }
-#mod-social-network #aside table.users-list td.user-info a { color:#fff; font-size:13px; font-weight:bold; word-break:break-word; }
-
-/* Main Content */
-#mod-social-network #main { min-height:600px; position:absolute; top:0; word-break:break-word; }
-#mod-social-network #main.leftcolumn { border-right:1px solid #222; left:0; right:220px; }
-#mod-social-network #main.rightcolumn { border-left:1px solid #222; left:220px; right:0; }
-
-/* User Profile */
-#mod-social-network #user-profile .avatar { height:64px; margin:2px 10px 18px 0; width:64px; background:#ddd; }
-#mod-social-network #user-profile .user-info h1.username { font-size:18px; line-height:1; }
-#mod-social-network #user-profile .user-info ul { list-style:none; }
-
-/* User Pedalboard - Info */
-/* #mod-social-network #user-profile .pedalboard { margin-right:2%; } */
-
-/* Pedalboard */
-#mod-social-network .pedalboard h2 { font-size:27px; line-height:2; }
-#mod-social-network .pedalboard h3 { font-size:14px; text-transform:uppercase; }
-/* Rating */
-#mod-social-network .pedalboard .rating-label     { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; line-height:0; }
-#mod-social-network .pedalboard .rating           { background:url(../img/icn-rating.png) no-repeat center top; display:inline-block; height:16px; width:74px; }
-#mod-social-network .pedalboard .rating.one       { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#mod-social-network .pedalboard .rating.two       { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#mod-social-network .pedalboard .rating.three     { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#mod-social-network .pedalboard .rating.four      { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#mod-social-network .pedalboard .rating.five      { background:url(../img/icn-rating.png) no-repeat center -75px; }
-/* Download */
-#mod-social-network .pedalboard .downloads-label  { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .pedalboard .downloads        { display:inline-block; font-size:14px; font-weight:bold; text-transform:uppercase; }
-/* Techspecs */
-#mod-social-network .pedalboard .techspecs        { font-size:12px; width:100%; }
-#mod-social-network .pedalboard .techspecs td     { border-bottom:1px solid #222; padding:9px 20px 9px 0; }
-#mod-social-network .pedalboard .techspecs td.spec { font-weight:bold; text-transform:uppercase; vertical-align:top; width:150px; }
-/* Tags */
-#mod-social-network .pedalboard ul.tags li { display:inline-block; }
-#mod-social-network .pedalboard ul.tags li:after { content:", "; }
-#mod-social-network .pedalboard ul.tags li:first-child:after { content:""; }
-#mod-social-network .pedalboard ul.tags li:last-child:after { content:""; } 
-/* Reviews */
-#mod-social-network .pedalboard ul.reviews { border-top:1px solid #222; list-style:none; margin-right:20%; width:80%; }
-#mod-social-network .pedalboard li.review { margin-bottom:18px; }
-#mod-social-network .pedalboard li.review .avatar { margin-top:5px; }
-#mod-social-network .pedalboard li.review .username { font-size:14px; font-weight:bold; }
-#mod-social-network .pedalboard li.review .date { font-size:12px; font-style:italic; line-height:1; }
-#mod-social-network .pedalboard li.review .content { font-size:12px; line-height:1; }
-#mod-social-network .pedalboard .review-form { margin-bottom:36px; }
-#mod-social-network .pedalboard .review-form textarea { height:120px; margin-bottom:9px; }
-
-/* More Pedalboards - Related */
-#mod-social-network .more-pedalboards { border-top:1px solid #222; height:260px; overflow:hidden; padding-top:18px; position:relative; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard { color:#fff; float:left; margin:0 1% 27px; position:relative; width:18%; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .img { background:#2b2b2b; display:block; float:left; height:100px; margin-bottom:9px; width:100%; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .title { display:block; font-size:14px; font-weight:bold; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .more-info { font-size:11px; text-transform:uppercase; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .more-info:before { content:" – "; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .description { display:block; font-size:12px; line-height:1.5; margin-bottom:9px; max-height:54px; overflow:hidden; position:relative; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating-label     { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; line-height:0; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating           { background:url(../img/icn-rating.png) no-repeat center top; display:inline-block; height:16px; width:74px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.one       { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.two       { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.three     { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.four      { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .rating.five      { background:url(../img/icn-rating.png) no-repeat center -75px; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .downloads-label  { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .more-pedalboards .grid-mode .pedalboard .downloads        { display:inline-block; font-size:14px; font-weight:bold; text-transform:uppercase; }
-
-/* Pedalboards */
-#mod-social-network .pedalboards h2 { font-size:18px; line-height:1; margin-bottom:27px; }
-#mod-social-network .pedalboards .mode { border:none; cursor:pointer; margin-top:10px; }
-#mod-social-network .pedalboards .grid { background:url(../img/icn-grid-list.png) no-repeat left bottom; display:inline-block; height:14px; width:14px; }
-#mod-social-network .pedalboards .grid.selected { background-position:left top; }
-#mod-social-network .pedalboards .list { background:url(../img/icn-grid-list.png) no-repeat right bottom; display:inline-block; height:14px; width:14px; }
-#mod-social-network .pedalboards .list.selected { background-position:right top; }
-
-/* Pedalboards - List Mode */
-#mod-social-network .pedalboards .list-mode .pedalboard { color:#fff; margin:0 1% 27px; position:relative; width:98%; }
-#mod-social-network .pedalboards .list-mode .pedalboard .img { background:#2b2b2b; display:block; float:left; height:130px; margin-top:3px; width:200px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .info { left:220px; position:absolute; right:18px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .title { display:block; font-size:18px; font-weight:bold; }
-#mod-social-network .pedalboards .list-mode .pedalboard .more-info { font-size:11px; text-transform:uppercase; }
-#mod-social-network .pedalboards .list-mode .pedalboard .more-info:before { content:" – "; }
-#mod-social-network .pedalboards .list-mode .pedalboard .description { display:block; font-size:12px; line-height:1.5; margin-bottom:9px; max-height:54px; overflow:hidden; position:relative; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating-label   { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; line-height:0; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating         { background:url(../img/icn-rating.png) no-repeat center top; display:inline-block; height:16px; width:74px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.one     { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.two     { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.three   { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.four    { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .rating.five    { background:url(../img/icn-rating.png) no-repeat center -75px; }
-#mod-social-network .pedalboards .list-mode .pedalboard .downloads-label   { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .pedalboards .list-mode .pedalboard .downloads   { display:inline-block; font-size:14px; font-weight:bold; text-transform:uppercase; }
-
-/* Pedalboards - Grid Mode */
-#mod-social-network .pedalboards .grid-mode .pedalboard { color:#fff; float:left; margin:0 1% 27px 1% !important; position:relative; width:200px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard a { color:#fff; text-decoration:none; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .img { background:#2b2b2b; display:block; float:left; height:130px; margin-bottom:9px; width:100%; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .title { display:block; font-size:16px; margin-bottom:3px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .more-info { font-size:11px; text-transform:uppercase; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .more-info:before { content:" – "; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .description { display:block; font-size:12px; line-height:1.5; margin-bottom:9px; max-height:54px; overflow:hidden; position:relative; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating-label     { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; line-height:0; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating           { background:url(../img/icn-rating.png) no-repeat center top; display:inline-block; height:16px; width:74px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.one       { background:url(../img/icn-rating.png) no-repeat center -15px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.two       { background:url(../img/icn-rating.png) no-repeat center -30px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.three     { background:url(../img/icn-rating.png) no-repeat center -45px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.four      { background:url(../img/icn-rating.png) no-repeat center -60px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .rating.five      { background:url(../img/icn-rating.png) no-repeat center -75px; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .downloads-label  { display:inline-block; font-size:10px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .pedalboards .grid-mode .pedalboard .downloads        { display:inline-block; font-size:14px; font-weight:bold; text-transform:uppercase; }
-
-/* Pedalboards - Search */
-#mod-social-network .filter .control-group { margin-bottom:9px; }
-#mod-social-network .filter .control-group.submit { margin-top:18px; }
-#mod-social-network .filter label { font-size:11px; font-weight:bold; text-transform:uppercase; }
-#mod-social-network .filter input[type=text] { width:196px; }
-#mod-social-network .filter select { width:210px; }
-
-/* Feed */
-.feed { border-top:1px solid #222; border-left:5px solid transparent; padding:18px; }
-.feed:hover { background:#2a2a2a; border-left:5px solid #222; }
-/* Info - User, description */
-.feed .avatar { display:block; float:left; margin:4px 0 0 0; }
-.feed .content { float:left; }
-.feed .description { font-size:13px; }
-/* TechSpec */
-.feed div.techspecs { margin-bottom:9px; }
-.feed div.techspecs div.spec { float:left; margin-right:18px; }
-.feed div.techspecs div.spec > * { float:left; }
-.feed div.techspecs div.spec div.number { background:#fff; border-radius:4px; color:#292929; font-weight:bold; margin:6px 0 0 9px; padding:0 1px 0 0; min-width:27px; text-align:center; }
-.feed div.techspecs div.spec div.number .arrow-left { border-bottom:6px solid transparent; border-right:6px solid #fff; border-top:6px solid transparent; float:left; height:0; margin:4px 0 0 -5px; width:0; }
-/* Comments */
-.feed .comments { margin:18px 0 9px 0; position:relative; }
-.feed .comments form { background:#222; display:inline-block; margin-bottom:0; padding:6px !important; }
-.feed .comments form input[type="text"] { border-radius:0; }
-.feed .comments form img { height:30px; width:auto; }
-.feed .comments .arrow-top { border-color:transparent transparent #222 transparent; border-style:solid; border-width:6px 6px 6px 6px; height:0; left:16px; position:absolute; top:-12px; width:0; }
-.comments-list .comment { background:#222; margin-top:1px; padding:3px 6px !important; }
-.comments-list .comment .avatar { float:left; margin:3px 0 0 0 !important; }
-.comments-list .comment .content { float:left; font-size:13px; }
-
-/* = Notifications
-================================================ */
-.notifications          { border-radius:0; height:18px; left:0; position:absolute; right:0; top:35px; }
-
-.notifications .progressbar { position:absolute; height:16px; width:200px; right:40px; bottom:10px;  background-color:white; display:none }
-.notifications .progressbar-value { background:rgb(48, 187,153); height:16px }
-
-
-/* = Helpers
-================================================ */
-.clearfix:after, .container:after { content:"\0020"; display:block; height:0; clear:both; visibility:hidden; overflow:hidden; }
-.clearfix, .container { display:block; }
-.clear { clear:both; }
-.box { padding:10px; }
-.alignleft  { float:left; }
-.alignright { float:right; }
-.textcenter { text-align:center; }
-.textright  { text-align:right; }
-.bottom { margin-bottom:0 !important; padding-bottom:0 !important; }
-.left   { margin-left:0 !important; padding-left:0 !important; }
-.right  { margin-right:0 !important; padding-right:0 !important; }
-.top    { margin-top:0 !important; padding-top:0 !important; }
-.nobullets { list-style:none; }
-.hidden { display:none; }
-::selection { background:transparent; }
-
-
-/* Baguncinha do asa */
-
-.input-clean { color:#666666; position:absolute; font-size:1.5em; margin-top:5px; cursor:pointer }
-
diff --git a/html/css/package.json b/html/css/package.json
deleted file mode 100644
index 014237bce..000000000
--- a/html/css/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "name": "mod-boostrap",
-  "author": "MOD Team",
-  "description": "grunt task for compiing MOD's css",
-  "repository": "moddevices/mod-ui",
-  "dependencies": {
-    "bootstrap": "~3.4.1",
-    "grunt": "^0.4.5",
-    "grunt-cli": "^0.1.13",
-    "grunt-contrib-less": "^1.0.1",
-    "grunt-contrib-watch": "~0.6.1",
-    "jit-grunt": "0.9.1"
-  }
-}
diff --git a/html/css/pedals.css b/html/css/pedals.css
deleted file mode 100644
index aa4221784..000000000
--- a/html/css/pedals.css
+++ /dev/null
@@ -1,1054 +0,0 @@
-/* GENERAL PEDAL STYLE */
-
-.mod-pedal {
-    display:inline-block;
-/*
-    padding:1px 15px 1px 15px;
-*/
-    z-index:100;
-}
-#pedalboard-dashboard > .mod-pedal > div:first-child:not(.mod-no-shadow) {
-    box-shadow:  2px  8px  7px rgba(0,0,0,0.2),
-                 4px 16px  7px rgba(0,0,0,0.2),
-                 6px 24px  7px rgba(0,0,0,0.2),
-                 8px 32px  7px rgba(0,0,0,0.2),
-                10px 40px  7px rgba(0,0,0,0.2),
-                 5px 20px 50px rgba(0,0,0,0.9),
-                 4px 12px 30px rgba(0,0,0,0.5);
-}
-.mod-input .mod-output-jack {
-    z-index: 100;
-}
-
-.mod-input.input-connected.expanded {
-  z-index: 101;
-}
-
-/* = ACTIONS - Icons above: settings, remove, etc
-================================================ */
-.mod-pedal .mod-actions {
-    position:absolute;
-    right:0;
-    top: -1.5em;
-    font-size: 3em;
-}
-.mod-pedal .mod-actions .mod-settings {
-    font-family: fontello !important;
-    cursor: pointer;
-    position: absolute;
-    width: 32px;
-    right: 1.5em;
-    color: #666;
-    transition: color 0.33s;
-}
-.mod-settings:after {
-    content: '\e802';
-}
-.mod-pedal .mod-actions .mod-settings:hover { color: #eee;}
-.mod-pedal .mod-actions .mod-remove {
-    font-family: fontello !important;
-    cursor: pointer;
-    position: absolute;
-    width: 32px;
-    right: 0em;
-    color: #666;
-    transition: color 0.33s;
-}
-.mod-remove:after {
-    content: '\e803';
-}
-.mod-pedal .mod-actions .mod-remove:hover { color: #eee; }
-.mod-pedal .mod-actions .mod-information {
-    font-family: fontello !important;
-    cursor: pointer;
-    position: absolute;
-    width: 32px;
-    right: 3em;
-    color: #666;
-    transition: color 0.33s;
-}
-.mod-information:after {
-    content: '\e808';
-}
-.mod-pedal .mod-actions .mod-information:hover { color: #eee; }
-
-.mod-pedal .mod-actions .mod-external-ui {
-    font-family: fontello !important;
-    cursor: pointer;
-    position: absolute;
-    width: 32px;
-    right: 4.5em;
-    color: #666;
-    transition: color 0.33s;
-}
-.mod-external-ui:after {
-    content: '\e800';
-}
-.mod-pedal .mod-actions .mod-external-ui:hover { color: #eee; }
-
-/* = DRAG HANDLE
-================================================ */
-.mod-pedal .mod-drag-handle {
-    bottom:0;
-    cursor:move;
-    left:0;
-    position:absolute;
-    right:0;
-    top:0px;
-    z-index:20;
-}
-
-/* = AUTHOR AND PLUGIN'S NAME
-================================================ */
-.mod-pedal .mod-plugin-author,
-.mod-pedal .mod-plugin-brand,
-.mod-pedal .mod-plugin-title {
-    z-index:10;
-}
-
-/* = FOOTSWITCH
-================================================ */
-.mod-pedal .mod-footswitch {
-    z-index:20;
-}
-
-/* = CONTROLS
-================================================ */
-.mod-pedal .mod-control-group {
-    z-index:20;
-}
-
-/* = INPUT/OUTPUT
-================================================ */
-.mod-pedal .mod-pedal-input,
-.mod-pedal .mod-pedal-output {
-    z-index:30;
-}
-
-
-/* = LIGHT ON/OFF
-================================================ */
-.mod-pedal .mod-light.off { background-image:url(../img/red-light-off.png); }
-.mod-pedal .mod-light.on  { background-image:url(../img/red-light-on.png); }
-
-
-/* = INPUT
-================================================ */
-.mod-pedal-input-wrapper {
-    background: rgba(0, 0, 0, 0.5);
-    height:100px;
-    position:relative;
-    z-index:35;
-    padding: 0 10px;
-    border-radius:20px;
-}
-
-.mod-pedal .mod-pedal-input {
-    position: absolute;
-    top: 106px;
-    left: -88px;
-    width: 88px;
-}
-.mod-pedal .mod-pedal-input .mod-audio-input,
-.mod-pedal .mod-pedal-input .mod-midi-input,
-.mod-pedal .mod-pedal-input .mod-cv-input {
-    position: relative;
-    margin-bottom: 13px;
-}
-.mod-pedal .mod-pedal-input .mod-midi-input {
-    right: -12px;
-}
-.mod-pedal .mod-pedal-input .mod-cv-input {
-    right: -8px;
-}
-.mod-input.expanded .mod-output-jack {
-    height: 40px;
-}
-.mod-audio-input.expanded .mod-output-jack {
-    background-image:url(../img/audio-jack.png) !important;
-}
-.mod-midi-input.expanded .mod-output-jack {
-    background-image:url(../img/midi-jack.png) !important;
-}
-.mod-cv-input.expanded .mod-output-jack {
-    background-image:url(../img/cv-jack.png) !important;
-}
-
-/* = OUTPUT
-================================================ */
-.mod-pedal-output-wrapper {
-    background:#000;
-    border-radius:4px;
-    height:100px;
-    right:-32px;
-    position:absolute;
-    top:78px;
-    width:32px;
-    z-index:50;
-}
-
-.mod-pedal-output-wrapper .mod-pedal-output-arrow {
-    border-bottom:12px solid transparent;
-    border-right:12px solid #000;
-    border-top:12px solid transparent;
-    height:0;
-    position:absolute;
-    left:-12px;
-    top:39px;
-    width:0;
-}
-.mod-pedal .mod-pedal-output {
-    position: absolute;
-    top: 106px;
-    right: -87px;
-    width: 87px;
-}
-.mod-pedal .mod-pedal-output .mod-audio-output,
-.mod-pedal .mod-pedal-output .mod-midi-output,
-.mod-pedal .mod-pedal-output .mod-cv-output {
-    position: relative;
-    margin-bottom: 13px;
-}
-
-/* = PEDAL SETTINGS - Pop Up Window
-================================================ */
-body > .mod-settings {
-    background:rgba(17, 17, 17, 0.9);
-    bottom:0;
-    left:0;
-    position:absolute;
-    right:0;
-    top:0;
-/*
-    transition-property: display, transform;
-    transition-duration: 0.5s, 0.33s;
-    transition-delay: 0.5s, 0s;
-    transform: translateY(-100%);
-*/
-}
-
-body > .mod-settings.mod-window-visible {
-/*
-    transition-delay: 0s, 0s;
-    transform: translateY(0%);
-*/
-}
-
-.mod-pedal-settings {
-    bottom:38px;
-    color:#fff;
-    left:30px;
-    margin:0 auto;
-    overflow:auto;
-    padding:0;
-    position:absolute;
-    right:30px;
-    top:38px;
-    z-index:10;
-}
-
-.mod-pedal-settings header {
-    padding:10px 10px 18px;
-}
-
-.mod-pedal-settings h1 {
-    font-size:24px;
-    font-weight:normal;
-    margin:0;
-}
-
-.mod-pedal-settings .mod-actions {
-    border-color:#2b2b2b;
-    border-style:dotted;
-    border-width:1px 0 0 0;
-    margin:18px;
-    padding:18px 0 0 0;
-    text-align:right;
-}
-
-.mod-pedal-settings .mod-control-group {
-    margin:0;
-    padding:0 18px;
-}
-
-/* PRESETS */
-
-.mod-presets {
-    margin:0;
-}
-.mod-presets span.mod-enumerated-title {
-    overflow: initial !important;
-}
-.mod-presets input[type="radio"] {
-    vertical-align: middle;
-}
-.mod-presets>div.mod-enumerated-list {
-    width: 100% ;
-    padding-left: 0;
-}
-.mod-presets select {
-    color: #000;
-    background-color: #FFFFFE; /* forces mod-remote to use custom combo-box bg */
-}
-.mod-presets footer{
-    width: 100%;
-    position: absolute;
-    left: 0;
-    padding: 4px 10px;
-}
-.mod-presets .btn {
-    font-size: 10px;
-    border-radius: 0px;
-    margin: 0;
-    min-height: 29px;
-    min-width: 29px;
-    font-weight: bold;
-    clear: both;
-    background-color: black;
-    background-repeat: no-repeat;
-    background-position: center center;
-    text-transform: uppercase !important;
-}
-.mod-presets .btn.preset-btn-save {
-    background-image: url('../img/icons/25/save.png');
-}
-.mod-presets .btn.preset-btn-save-as {
-    background-image: url('../img/icons/25/save_as.png');
-    width: 32px
-}
-.mod-presets .btn.preset-btn-rename {
-    /*background-image: url('../img/icons/25/rename.png');*/
-    width: 29px !important;
-    padding: 0;
-    font-size: 12px;
-}
-.btn.preset-btn-rename:after {
-    content: 'REN';
-}
-.mod-presets .btn.preset-btn-delete {
-    background-image: url('../img/icons/25/delete.png');
-    margin-right: 5px
-}
-
-
-.preset-manager {
-    color: #000;
-}
-
-/* = KNOB
-================================================ */
-.mod-pedal-settings .mod-knob {
-    background:#212121;
-    float:left;
-    height:160px;
-    margin-bottom:2px;
-    margin-right:2px;
-    position:relative;
-    text-align:center;
-    width:160px;
-}
-
-.mod-pedal-settings .mod-knob > span.mod-knob-current-value {
-    bottom:12px;
-    font-weight:bold;
-    left: 38px;
-    position:absolute;
-    text-align:center;
-    right: 38px;
-    padding: 2px;
-    border: 1px solid #000;
-    background: black;
-}
-.mod-pedal-settings .mod-knob > span.mod-knob-current-value:focus {
-    border: 1px solid #883996;
-    background: black;
-}
-.mod-pedal-settings .mod-knob > span.mod-knob-current-value::selection {
-  background: #883996;
-}
-.mod-pedal-settings .mod-knob > span.mod-knob-current-value::-moz-selection {
-  background: #883996;
-}
-.mod-pedal-settings .mod-knob > span.mod-knob-max-value {
-    font-size:10px;
-    left:110px;
-    position:absolute;
-    text-align:left;
-    bottom: 43px;
-}
-.mod-pedal-settings .mod-knob > span.mod-knob-min-value {
-    font-size:10px;
-    position:absolute;
-    text-align:right;
-    right:110px;
-    bottom: 43px;
-}
-.mod-pedal-settings .mod-knob > span.mod-knob-title {
-    color:white;
-    display:block;
-    font-size:11px;
-    font-weight:bold;
-    height:11px;
-    line-height:1;
-    margin:9px 0;
-    position:relative;
-    overflow:hidden;
-    text-transform:uppercase;
-}
-
-.mod-pedal-settings .mod-knob .mod-knob-image {
-    background-image:url(../img/knob.png);
-    background-position:left center;
-    background-repeat:no-repeat;
-    background-size:auto 80px;
-    height:80px;
-    left:40px;
-    position:absolute;
-    overflow:hidden;
-    top:35px;
-    width:80px;
-}
-
-.mod-pedal-settings .mod-knob .mod-knob-image.disabled {
-    opacity:.3;
-}
-
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-3 {
-    background-image:url(../img/knob_steps_3.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-4 {
-    background-image:url(../img/knob_steps_4.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-5 {
-    background-image:url(../img/knob_steps_5.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-6 {
-    background-image:url(../img/knob_steps_6.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-7 {
-    background-image:url(../img/knob_steps_7.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-8 {
-    background-image:url(../img/knob_steps_8.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-9 {
-    background-image:url(../img/knob_steps_9.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-10 {
-    background-image:url(../img/knob_steps_10.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-11 {
-    background-image:url(../img/knob_steps_11.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-12 {
-    background-image:url(../img/knob_steps_12.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-13 {
-    background-image:url(../img/knob_steps_13.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-14 {
-    background-image:url(../img/knob_steps_14.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-15 {
-    background-image:url(../img/knob_steps_15.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-16 {
-    background-image:url(../img/knob_steps_16.png);
-}
-.mod-pedal-settings .mod-knob .mod-knob-image.mod-knob-image-steps-17 {
-    background-image:url(../img/knob_steps_17.png);
-}
-
-/* = ENUMERATED
-================================================ */
-.mod-pedal-settings .mod-enumerated {
-    background:#212121;
-    float:left;
-    height:160px;
-    margin:0 2px 2px 0;
-    position:relative;
-    width:160px;
-}
-
-.mod-presets,
-.mod-file-list {
-    width: 322px !important;
-}
-.radio-preset {
-    height: 9px !important;
-    width: 9px !important;
-    margin: 0 !important;
-}
-
-
-
-.mod-pedal-settings .mod-enumerated .mod-enumerated-list {
-    color:#fff;
-    height:95px;
-    overflow:auto;
-    position:relative;
-}
-.mod-pedal-settings .mod-enumerated.mod-file-list .mod-file-list-buttons {
-    position: absolute;
-    top: 0px;
-    right: 0px;
-    margin: 3px;
-}
-.mod-pedal-settings .mod-enumerated.mod-file-list .mod-enumerated-list {
-    height:130px;
-}
-.mod-pedal-settings .mod-enumerated.mod-file-list.expanded .mod-enumerated-list {
-    height: calc(100vh - 175px);
-    z-index: 1;
-    background: #212121;
-}
-.mod-pedal-settings .mod-enumerated.mod-file-list .btn-primary {
-    background-color: black;
-    border-color: #773284;
-}
-.mod-pedal-settings .mod-enumerated.mod-file-list .btn-primary:hover {
-    border-color: #4f2157;
-}
-.mod-pedal-settings .mod-enumerated.mod-file-list.expanded .btn-primary {
-    background-color: #773284;
-    border-color: black;
-}
-.mod-pedal-settings .mod-enumerated.mod-file-list.expanded .btn-primary:hover {
-    background-color: #883996;
-}
-
-.mod-pedal-settings .mod-enumerated .mod-enumerated-list > div {
-    font-weight:bold;
-    padding:1px 9px;
-    cursor:pointer;
-    margin: 0 0 1px 0;
-    background: #2c2c2c;
-}
-
-.mod-pedal-settings .mod-enumerated .mod-enumerated-list > div.selected {
-    background:#883996;
-}
-
-.mod-pedal-settings .mod-enumerated .mod-enumerated-list > div:hover {
-    background:#000;
-}
-.mod-pedal-settings .mod-enumerated .mod-enumerated-list > div.selected:hover {
-    background:#600E6F;
-}
-
-.mod-pedal-settings .mod-enumerated > span.mod-enumerated-title {
-    color:white;
-    display:block;
-    font-size:11px;
-    font-weight:bold;
-    height:11px;
-    line-height:1;
-    margin:9px 0;
-    position:relative;
-    overflow:hidden;
-    text-align:center;
-    text-transform:uppercase;
-}
-
-
-/* = STRING
-================================================ */
-.mod-pedal-settings .mod-string {
-    background:#212121;
-    float:left;
-    height:160px;
-    margin:0 2px 2px 0;
-    position:relative;
-    text-align:center;
-    width:322px !important;
-}
-.mod-pedal-settings .mod-string > span.mod-string-title {
-    color:white;
-    display:block;
-    font-size:11px;
-    font-weight:bold;
-    height:11px;
-    line-height:1;
-    margin:9px 0;
-    position:relative;
-    overflow:hidden;
-    text-transform:uppercase;
-}
-
-.mod-pedal-settings .mod-string-content {
-    font-weight:bold;
-    background: black;
-    height:131px;
-    display:flex;
-}
-.mod-pedal-settings .mod-string-content > textarea.mod-string-value {
-    flex:1;
-    padding:2px;
-    border:1px solid #000;
-    white-space:pre-wrap;
-    resize: none;
-    background: inherit;
-}
-.mod-pedal-settings .mod-string-content > textarea.mod-string-value:focus {
-    border: 1px solid #883996;
-    background: black;
-}
-.mod-pedal-settings .mod-string-content > textarea.mod-string-value::selection {
-  background: #883996;
-}
-.mod-pedal-settings .mod-string-content > textarea.mod-string-value::-moz-selection {
-  background: #883996;
-}
-
-/* = SLIDER
-================================================ */
-.mod-pedal-settings .mod-slider {
-    background:#212121;
-    float:left;
-    font-size:11px;
-    height:160px;
-    margin-bottom:2px;
-    margin-right:2px;
-    overflow:hidden;
-    position:relative;
-    text-align:center;
-    width:80px;
-}
-
-
-.mod-pedal-settings .mod-slider .mod-slider-title {
-    color:white;
-    display:block;
-    font-size:11px;
-    font-weight:bold;
-    height:11px;
-    line-height:1;
-    margin:9px 0;
-    position:relative;
-    overflow:hidden;
-    text-transform:uppercase;}
-
-.mod-pedal-settings .mod-slider .mod-slider-image {
-    background-image:url(../img/slider.png);
-    background-repeat:no-repeat;
-    background-size:auto 70px;
-    height:70px;
-    margin:14px auto 0;
-    width:28px;
-}
-
-.mod-pedal-settings .mod-slider .mod-slider-image:hover {
-    cursor:pointer;
-}
-
-.mod-pedal-settings .mod-slider > span.mod-slider-current-value {
-    bottom:24px;
-    font-size:12px;
-    font-weight:bold;
-    left:0;
-    position:absolute;
-    text-align:center;
-    right:0;
-}
-.mod-pedal-settings .mod-slider > span.mod-slider-max-value {
-    font-size:11px;
-    font-weight:bold;
-    left:0;
-    position:absolute;
-    right:0;
-    text-align:center;
-    top:18px;
-}
-.mod-pedal-settings .mod-slider > span.mod-slider-min-value {
-    bottom:38px;
-    font-size:11px;
-    font-weight:bold;
-    left:0;
-    position:absolute;
-    right:0;
-    text-align:center;
-}
-
-
-/* = SWITCH
-================================================ */
-.mod-pedal-settings .mod-switch {
-    background:#212121;
-    cursor:pointer;
-    float:left;
-    height:160px;
-    margin-bottom:2px;
-    margin-right:2px;
-    position:relative;
-    text-align:center;
-    width:160px;
-}
-
-.mod-pedal-settings .mod-switch > span.mod-switch-title {
-    color:white;
-    display:block;
-    font-size:11px;
-    font-weight:bold;
-    height:11px;
-    line-height:1;
-    margin:9px 0;
-    position:relative;
-    overflow:hidden;
-    text-transform:uppercase;
-}
-
-.mod-pedal-settings .mod-switch .mod-switch-image {
-    background-image:url(../img/switch.png);
-    background-position:left center;
-    background-repeat:no-repeat;
-    background-size:auto 50px;
-    height:50px;
-    left:30px;
-    position:absolute;
-    overflow:hidden;
-    top:64px;
-    width:100px;
-}
-
-.mod-pedal-settings #mod-switch-transport-play .mod-switch-image {
-  width: 50px;
-  height: 50px;
-  background-size: auto 50px;
-}
-
-.mod-pedal-settings #mod-switch-transport-play .mod-switch-image.stop.off,
-.mod-pedal-settings #mod-switch-transport-play .mod-switch-image.play.on {
-  background-color: #883996;
-}
-
-.mod-pedal-settings #mod-switch-transport-play .mod-switch-image.stop {
-  background-image:url(../img/icons/stop.png);
-  left: 30px;
-}
-
-.mod-pedal-settings #mod-switch-transport-play .mod-switch-image.play {
-  background-image:url(../img/icons/transport.png);
-  left: 80px;
-}
-
-.mod-pedal-settings .mod-switch .mod-footswitch-image {
-    background-image:url(../img/footswitch.png);
-    background-position:left center;
-    background-repeat:no-repeat;
-    background-size:auto 64px;
-    height:64px;
-    left:47px;
-    position:absolute;
-    overflow:hidden;
-    top:55px;
-    width:64px;
-}
-
-/* This makes the switch works either with film of switch widget */
-.mod-pedal-settings .mod-switch .mod-switch-image.on {
-    background-position:right center;
-}
-.mod-pedal-settings .mod-switch .mod-switch-image.off {
-    background-position:left center;
-}
-
-/* Invert the display of bypass, so that we display ON when bypass is off */
-.mod-pedal-settings .bypass .mod-switch-image.on {
-    background-position:left center !important;
-}
-.mod-pedal-settings .bypass .mod-switch-image.off {
-    background-position:right center !important;
-}
-.mod-pedal-settings .bypass .mod-switch-image {
-    background-position:right center !important;
-}
-
-.mod-pedal-settings .bypass .mod-light {
-    background-repeat:no-repeat;
-    background-size:auto 24px;
-    height:24px;
-    margin:20px auto 0;
-    width:24px;
-}
-.mod-pedal-settings .bypass .mod-light.off {
-    background-image:url(../img/purple-light-off.png);
-}
-.mod-pedal-settings .bypass .mod-light.on  {
-    background-image:url(../img/purple-light-on.png);
-}
-
-
-
-/* ADDRESSING BUTTON */
-.mod-pedal-settings .mod-knob .mod-address,
-.mod-pedal-settings .mod-enumerated .mod-address,
-.mod-pedal-settings .mod-switch .mod-address,
-.mod-pedal-settings .mod-slider .mod-address {
-    background-image:url(../img/icons/36/faders.png);
-    background-position:center center;
-    background-repeat:no-repeat;
-    background-size: 36px;
-    bottom:0;
-    cursor:pointer;
-    height:36px;
-    position:absolute;
-    right:0;
-    width:36px;
-    transition: all 0.33s;
-}
-
-.mod-pedal-settings .mod-knob .mod-address:hover,
-.mod-pedal-settings .mod-enumerated .mod-address:hover,
-.mod-pedal-settings .mod-switch .mod-address:hover,
-.mod-pedal-settings .mod-slider .mod-address:hover {
-    background-color:#883996;
-}
-
-
-/* ADDRESSING POP-UP */
-.mod-pedal-settings-address {
-    background:rgba(0,0,0,.75);
-    bottom:0;
-    left:0;
-    position:absolute;
-    right:0;
-    top:0;
-    z-index:1000;
-    /* new style */
-    display:flex;
-    flex-direction:column;
-    align-items:center;
-    justify-content:start;
-}
-
-.mod-pedal-settings-address .mod-spacer {
-    height:10%;
-}
-
-.mod-pedal-settings-address .mod-box {
-    background:white;
-    padding:18px 18px 0 18px;
-    width:766px;
-    overflow-y:auto;
-    overflow-x:hidden;
-    /* old style */
-    /*
-    margin:-150px -430px;
-    left:48%;
-    top:40%;
-    max-height:70%;
-    position:absolute;
-    */
-    /* new style */
-    margin:0;
-    max-height:90%;
-    position:initial;
-    position:unset;
-}
-
-.mod-pedal-settings-address h1 {
-    font-size:18px;
-    line-height:1;
-    margin:0 0 18px 0;
-    padding:0;
-    text-transform:uppercase;
-}
-
-.mod-pedal-settings-address label {
-    display:inline-block;
-    float:left;
-    line-height:2;
-    width:96px;
-}
-
-.mod-pedal-settings-address .mod-controls {
-    float:left;
-}
-
-.mod-pedal-settings-address input[type="text"] {
-    width:190px;
-}
-
-.mod-pedal-settings-address .mod-value input[type="number"] {
-    width:190px;
-}
-
-.mod-pedal-settings-address .mod-range input[type="number"] {
-    padding-right: 4px;
-    width: 41% !important;
-    float: left;
-}
-.mod-pedal-settings-address .mod-range input[type="number"][name="max"] {
-    width: 47% !important;
-}
-.mod-pedal-settings-address .mod-range span {
-    width: 12%;
-    text-align: center;
-    float: left;
-    line-height: 2em;
-}
-
-.mod-pedal-settings-address select {
-    width:202px;
-}
-
-/* FIXME put it in the right place */
-.mod-pedal.replaceable-drop {
-    opacity: 0.5;
-    filter: blur(2px);
-}
-.mod-pedal.possible-replaceable-drop {
-    /*opacity: 0.75;*/
-}
-.mod-pedal.possible-replaceable-drop .mod-drag-handle {
-    background: url("/img/switch.svg") no-repeat center center;
-    background-color: #fff;
-    background-color: rgba(255,255,255,0.5);
-    background-size: contain;
-    border-radius: 20px;
-    margin: -20px;
-    opacity: 1 !important;
-    z-index: 99999 !important;
-}
-
-#pedalboards-library .js-pedalboards {
-    padding: 8px 0;
-}
-
-#pedalboards-library .separator-title {
-    color: #fff;
-    font-size: 1.4em;
-    margin: 0 8px 0 1%;
-}
-
-#pedalboards-library .separator {
-    background: rgb(153, 153, 153);
-    display: inline-block;
-    height: 2px;
-    vertical-align: middle;
-}
-
-#pedalboards-library .separator.separator-user {
-    width: calc(99% - 8px - 17rem);
-}
-
-#pedalboards-library .separator.separator-factory {
-    width: calc(99% - 8px - 19.5rem);
-}
-
-/* FIXME put it in the right place */
-#pedalboards-library .js-pedalboards.list-selected .img {
-  display: none;
-}
-
-#bank-library #bank-pedalboards {
-    width: 680px;
-}
-
-#bank-library #bank-title {
-    width: unset;
-    height: unset;
-}
-
-#bank-library #bank-pedalboards {
-    top: 110px;
-}
-
-/*#bank-library #bank-pedalboards .ui-sortable-helper .pedalboard {
-    cursor: -webkit-grabbing !important;
-    cursor: grabbing !important;
-}*/
-
-#bank-library #bank-pedalboards .pedalboard .img > img {
-    max-width: 100%;
-}
-
-#bank-library #bank-pedalboards-search,
-#bank-library #bank-pedalboards-search #bank-pedalboards-result {
-    width: calc(80% - 680px);
-}
-
-#bank-library #bank-pedalboards-search .pedalboard {
-    margin: 10px;
-}
-
-#bank-library #bank-pedalboards-search .separator-title {
-    color: #fff;
-    font-size: 1.4em;
-    margin: 0 10px;
-}
-
-#bank-library #bank-pedalboards-search .separator {
-    background: rgb(153, 153, 153);
-    display: inline-block;
-    height: 2px;
-    vertical-align: middle;
-}
-
-#bank-library #bank-pedalboards-search .separator.separator-user {
-    width: calc(100% - 20px - 16.5rem);
-}
-
-#bank-library #bank-pedalboards-search .separator.separator-factory {
-    width: calc(100% - 20px - 19rem);
-}
-
-#bank-library #bank-pedalboards-search .js-canvas {
-    display: flex;
-    padding: 8px 0;
-    flex-flow: row;
-    flex-wrap: wrap;
-    justify-content: center;
-    /* these ones below are not always supported, default to center in worst case */
-    justify-content: space-evenly;
-    justify-content: space-around;
-}
-
-#bank-library #bank-pedalboards-search .js-canvas .js-pedalboard-item {
-    width: 33%;
-    min-width: 230px;
-    max-width: 320px;
-}
-
-#bank-library #bank-pedalboards-search .input-clean {
-    top: 38px !important;
-}
-
-@media only screen and (max-width: 1450px) {
-    #bank-library #bank-pedalboards {
-        width: 500px;
-    }
-    #bank-library #bank-pedalboards-search,
-    #bank-library #bank-pedalboards-search #bank-pedalboards-result {
-        width: calc(80% - 500px);
-    }
-}
-
-/*#bank-library #bank-pedalboards .pedalboard > img {
-    width: 100%;
-}*/
-
-.plugin-description h1::selection,
-.plugin-description p::selection {
-    background: #4f2157
-}
-
-#pedalboard-info .js-save.unmodified-changes {
-  background-color: #883996;
-}
-
-#mod-cloud-terms {
-    z-index: 100000;
-}
-#mod-cloud-terms .mod-box {
-    width: 500px;
-    left: 0;
-    right: 0;
-    margin: -150px auto;
-}
-#mod-cloud-terms .actions {
-    text-align: center;
-}
-#mod-cloud-terms .btn {
-    margin: 0px 4px;
-}
diff --git a/html/css/readme.md b/html/css/readme.md
deleted file mode 100644
index af284f823..000000000
--- a/html/css/readme.md
+++ /dev/null
@@ -1,39 +0,0 @@
-## LESS compiler for MOD-UI's css
-
-NodeJS and its package manager npm are required to install the dependencies,
-which are included in package.json. Once you have them installed, simply run: 
-
-```shell
-sudo npm install
-```
-
-On some systems it's required to install grunt-cli, too:
-
-```shell 
-sudo npm install -g grunt-cli
-```
-
-It might happen that the sudo command installs the hidden directory ".npm"
-not into your users home directory but in /root. If so, just move the folder
-over to your users home directory and make sure its content and the folder
-itself belong to your user:
-
-```shell
-sudo mv /root.npm ~/
-sudo chown -R $USER:$USER ~/.npm
-```
-
-On some systems the binary of "nodejs" is called "node". In this case add
-a link to it:
-
-```shell 
-sudo ln -s /usr/bin/nodejs /usr/bin/node
-```
-
-If everything is set up correctly you should have a working grunt. To use it
-switch over to the directory this readme is located and run "grunt" in a
-terminal.
-
-It should watch every .less and .css file inside the less folder and compile
-into main.css. Ideally, every section should have its .less file. Bootstrap
-is included in main.less.
diff --git a/html/desktop-pp.html b/html/desktop-pp.html
deleted file mode 100644
index a5635d7f2..000000000
--- a/html/desktop-pp.html
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
-
-
-
-
-MOD
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - -
-
-
-

MOD Desktop - Privacy Policy

-
-
- -
-
- -

Introduction

-

- Thank you for choosing MOD Desktop. Our commitment to your privacy is paramount, and we aim to be transparent about how we handle data related to your use of MOD Desktop. - Protecting your privacy and ensuring you understand our practices is crucial to us. -

- -

Data Collection and Use

-

- MOD Desktop is dedicated to enhancing your user experience while respecting your privacy. - To achieve this, we exclusively utilize Matomo analytics for collecting non-personal usage data. - Choosing Matomo is a deliberate decision to ensure we have full control over the collected information, without relying on third-party platforms such as Google, Facebook, or others. - This approach allows us to maintain the highest standards of privacy and data security by keeping this data in-house. -

-

- We collect data on the following events to understand usage patterns and improve our service: -

-
    -
  • App Open: Tracks each time the application is opened, helping us gauge application usage frequency.
  • -
  • Plugin Load: Records the loading of plugins by name to identify popular plugins and inform our development focus.
  • -
  • Pedalboard Save: Monitors when pedalboards are saved, capturing usage patterns without storing any pedalboard names.
  • -
  • Pedalboard Load: Tracks the loading of pedalboards, similar to saves, without collecting pedalboard names.
  • -
-

- This collected data is purely for internal use to enhance the MOD Desktop experience and is strictly non-personal. - Our commitment to your privacy means we prioritize the security and integrity of this usage data, ensuring it remains confidential and is used solely for the purposes outlined above. -

- -

Data Sharing and Disclosure

-

- We firmly stand by our commitment to not sell, share, or disclose the collected data to any third parties, except as strictly required by law. - Our use of Matomo enables us to uphold this commitment by providing us complete oversight and control over the analytics data, ensuring it is protected from unauthorized access or use. -

- -

Data Security

-

- The security of your data is a top priority. - We implement robust security measures to safeguard the non-personal information collected through our analytics. - While we strive for the highest level of security, it’s important to recognize that no method of electronic storage or transmission over the Internet is entirely secure. - We are committed to using commercially acceptable means to protect your data to ensure its security to the best of our ability. -

- -

Changes to the Privacy Policy

-

- We reserve the right to modify or update our Privacy Policy at any time. - Such changes will be communicated through our application and/or website, encouraging you to review our Privacy Policy periodically for any updates. -

- -

Contact information

-

- Should you have any inquiries or concerns about our Privacy Policy, please do not hesitate to reach out to us through our designated support channels. - We are here to ensure your experience with MOD Desktop is secure, private, and enjoyable. -

-

Owner and Data Controller:

-
    -
  • - Gianfranco Ceccolini
    - MOD Audio UG (haftungsbeschränkt)
    - Ernst-Augustin-Straße 9
    12489 Berlin
    - Germany -
  • -
  • Owner contact email: gdpr@mod.audio
  • -
-
-
-
-
- - diff --git a/html/desktop-tou.html b/html/desktop-tou.html deleted file mode 100644 index d7db23b68..000000000 --- a/html/desktop-tou.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -MOD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
-

MOD Desktop - Terms of Use

-
-
- -
-
- -

Introduction

-

- Welcome to MOD Desktop. - These Terms of Use (“Terms”) govern your access to and use of MOD Desktop, an open-source application governed by the GNU Affero General Public License version 3 (AGPL-3.0). - By accessing or using MOD Desktop, you agree to be bound by these Terms and the AGPL-3.0 under which MOD Desktop is licensed. -

-

- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -

-
-
- -
- Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. -
- -
-
- -

Acceptance of Terms

-

- By using MOD Desktop, you acknowledge that you have read, understood, and agree to be bound by these Terms and the AGPL-3.0. If you do not agree with any part of these Terms, you may not use MOD Desktop. -

- -

License and Use Rights

-

- MOD Desktop is provided under the AGPL-3.0 license, which allows you to use, modify, and distribute the software under the same license. - The AGPL-3.0 is designed to ensure that all users have the freedom to use, study, share, and modify the software. - You are encouraged to review the full text of the AGPL-3.0 to understand your rights and obligations under this license. -

- -

Modifications and Contributions

-
    -
  • Modifications: You may modify MOD Desktop for personal or community use, subject to the AGPL-3.0’s terms. Any modifications must also be made available under the AGPL-3.0.
  • -
  • Contributions: Contributions to MOD Desktop are welcome and encouraged. By submitting contributions, you agree to license them under the AGPL-3.0, allowing them to be freely used, modified, and shared by the community.
  • -
- -

Prohibited Use

-

- You may not use MOD Desktop for any unlawful or prohibited purpose. - You agree not to use MOD Desktop in a way that could damage, disable, overburden, or impair the software or interfere with any other party’s use and enjoyment of MOD Desktop. -

- -

Intellectual Property

-

- MOD Desktop and its original content, features, and functionality are and will remain the exclusive property of MOD Desktop’s developers and its contributors. - Your use of MOD Desktop does not grant you ownership rights to the software or its content. -

- -

Disclaimer of Warranties

-

- MOD Desktop is provided “AS IS,” without warranty of any kind, express or implied. - The developers of MOD Desktop expressly disclaim all warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. -

- -

Limitation of Liability

-

- In no event shall the developers or contributors of MOD Desktop be liable for any direct, indirect, incidental, special, consequential, or punitive damages arising out of or in connection with your use of MOD Desktop. -

- -

Changes to Terms

-

- We reserve the right to modify or replace these Terms at any time. We will provide notice of any changes by posting the new Terms on the MOD Desktop website or within the application itself. -

- -

Governing Law

-

- These Terms will be governed by and interpreted in accordance with the laws of the jurisdiction in which MOD Desktop’s primary developers are located, without regard to its conflict of law provisions. -

- -

Contact Us

-

- If you have any questions about these Terms, please contact us through the designated channels provided by MOD Desktop. -

- -
-
-
-
- - diff --git a/html/favicon.ico b/html/favicon.ico deleted file mode 100644 index 5426a13c9..000000000 Binary files a/html/favicon.ico and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.eot b/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.eot deleted file mode 100644 index 8b179d151..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.eot and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.svg b/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.svg deleted file mode 100644 index 4548c2f45..000000000 --- a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.svg +++ /dev/null @@ -1,999 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.ttf b/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.ttf deleted file mode 100644 index cb4906d6f..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.ttf and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.woff b/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.woff deleted file mode 100644 index ea4c74f37..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.woff and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.woff2 b/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.woff2 deleted file mode 100644 index e37601509..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-200/Ek-Mukta-200.woff2 and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-200/LICENSE.txt b/html/fonts/Ek-Mukta/Ek-Mukta-200/LICENSE.txt deleted file mode 100644 index 383af7282..000000000 --- a/html/fonts/Ek-Mukta/Ek-Mukta-200/LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2013-2014 Ek Type (www.ektype.in) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.eot b/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.eot deleted file mode 100644 index c5b5ab431..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.eot and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.svg b/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.svg deleted file mode 100644 index 93b62c17c..000000000 --- a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.svg +++ /dev/null @@ -1,734 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.ttf b/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.ttf deleted file mode 100644 index dc2df81b6..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.ttf and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.woff b/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.woff deleted file mode 100644 index 73a489447..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.woff and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.woff2 b/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.woff2 deleted file mode 100644 index da8628cc9..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-600/Ek-Mukta-600.woff2 and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-600/LICENSE.txt b/html/fonts/Ek-Mukta/Ek-Mukta-600/LICENSE.txt deleted file mode 100644 index 383af7282..000000000 --- a/html/fonts/Ek-Mukta/Ek-Mukta-600/LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2013-2014 Ek Type (www.ektype.in) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.eot b/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.eot deleted file mode 100644 index 06e244c01..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.eot and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.svg b/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.svg deleted file mode 100644 index 582009fad..000000000 --- a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.svg +++ /dev/null @@ -1,696 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.ttf b/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.ttf deleted file mode 100644 index 014020b5d..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.ttf and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.woff b/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.woff deleted file mode 100644 index cccc792c5..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.woff and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.woff2 b/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.woff2 deleted file mode 100644 index 10cfda3ec..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-700/Ek-Mukta-700.woff2 and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-700/LICENSE.txt b/html/fonts/Ek-Mukta/Ek-Mukta-700/LICENSE.txt deleted file mode 100644 index 383af7282..000000000 --- a/html/fonts/Ek-Mukta/Ek-Mukta-700/LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2013-2014 Ek Type (www.ektype.in) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.eot b/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.eot deleted file mode 100644 index 1ab32ba65..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.eot and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.svg b/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.svg deleted file mode 100644 index 4c53258e6..000000000 --- a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.svg +++ /dev/null @@ -1,918 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.ttf b/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.ttf deleted file mode 100644 index 8417db9f1..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.ttf and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.woff b/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.woff deleted file mode 100644 index cc9f1303f..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.woff and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.woff2 b/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.woff2 deleted file mode 100644 index 6a48cc129..000000000 Binary files a/html/fonts/Ek-Mukta/Ek-Mukta-regular/Ek-Mukta-regular.woff2 and /dev/null differ diff --git a/html/fonts/Ek-Mukta/Ek-Mukta-regular/LICENSE.txt b/html/fonts/Ek-Mukta/Ek-Mukta-regular/LICENSE.txt deleted file mode 100644 index 383af7282..000000000 --- a/html/fonts/Ek-Mukta/Ek-Mukta-regular/LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2013-2014 Ek Type (www.ektype.in) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/html/fonts/Ek-Mukta/LICENSE.txt b/html/fonts/Ek-Mukta/LICENSE.txt deleted file mode 100644 index 383af7282..000000000 --- a/html/fonts/Ek-Mukta/LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2013-2014 Ek Type (www.ektype.in) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/html/fonts/comforta/Comfortaa-Bold.ttf b/html/fonts/comforta/Comfortaa-Bold.ttf deleted file mode 100755 index 5beebe0ae..000000000 Binary files a/html/fonts/comforta/Comfortaa-Bold.ttf and /dev/null differ diff --git a/html/fonts/comforta/Comfortaa-Light.ttf b/html/fonts/comforta/Comfortaa-Light.ttf deleted file mode 100755 index 67fa2f7fb..000000000 Binary files a/html/fonts/comforta/Comfortaa-Light.ttf and /dev/null differ diff --git a/html/fonts/comforta/Comfortaa-Regular.ttf b/html/fonts/comforta/Comfortaa-Regular.ttf deleted file mode 100755 index 3f900aa00..000000000 Binary files a/html/fonts/comforta/Comfortaa-Regular.ttf and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-book-webfont.eot b/html/fonts/cooper/cooperhewitt-book-webfont.eot deleted file mode 100644 index 6c355f903..000000000 Binary files a/html/fonts/cooper/cooperhewitt-book-webfont.eot and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-book-webfont.ttf b/html/fonts/cooper/cooperhewitt-book-webfont.ttf deleted file mode 100644 index 2078ad9fc..000000000 Binary files a/html/fonts/cooper/cooperhewitt-book-webfont.ttf and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-book-webfont.woff b/html/fonts/cooper/cooperhewitt-book-webfont.woff deleted file mode 100644 index 5ce9504c3..000000000 Binary files a/html/fonts/cooper/cooperhewitt-book-webfont.woff and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-book-webfont.woff2 b/html/fonts/cooper/cooperhewitt-book-webfont.woff2 deleted file mode 100644 index e5d9a4c78..000000000 Binary files a/html/fonts/cooper/cooperhewitt-book-webfont.woff2 and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-bookitalic-webfont.eot b/html/fonts/cooper/cooperhewitt-bookitalic-webfont.eot deleted file mode 100644 index 52cb88866..000000000 Binary files a/html/fonts/cooper/cooperhewitt-bookitalic-webfont.eot and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-bookitalic-webfont.ttf b/html/fonts/cooper/cooperhewitt-bookitalic-webfont.ttf deleted file mode 100644 index 9335fa672..000000000 Binary files a/html/fonts/cooper/cooperhewitt-bookitalic-webfont.ttf and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-bookitalic-webfont.woff b/html/fonts/cooper/cooperhewitt-bookitalic-webfont.woff deleted file mode 100644 index 8776fd3e7..000000000 Binary files a/html/fonts/cooper/cooperhewitt-bookitalic-webfont.woff and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-bookitalic-webfont.woff2 b/html/fonts/cooper/cooperhewitt-bookitalic-webfont.woff2 deleted file mode 100644 index ebb0af513..000000000 Binary files a/html/fonts/cooper/cooperhewitt-bookitalic-webfont.woff2 and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-light-webfont.eot b/html/fonts/cooper/cooperhewitt-light-webfont.eot deleted file mode 100644 index 803b4f9c5..000000000 Binary files a/html/fonts/cooper/cooperhewitt-light-webfont.eot and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-light-webfont.ttf b/html/fonts/cooper/cooperhewitt-light-webfont.ttf deleted file mode 100644 index c5e989910..000000000 Binary files a/html/fonts/cooper/cooperhewitt-light-webfont.ttf and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-light-webfont.woff b/html/fonts/cooper/cooperhewitt-light-webfont.woff deleted file mode 100644 index db8e7ece7..000000000 Binary files a/html/fonts/cooper/cooperhewitt-light-webfont.woff and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-light-webfont.woff2 b/html/fonts/cooper/cooperhewitt-light-webfont.woff2 deleted file mode 100644 index 935d1df78..000000000 Binary files a/html/fonts/cooper/cooperhewitt-light-webfont.woff2 and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-lightitalic-webfont.eot b/html/fonts/cooper/cooperhewitt-lightitalic-webfont.eot deleted file mode 100644 index a1f7c1846..000000000 Binary files a/html/fonts/cooper/cooperhewitt-lightitalic-webfont.eot and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-lightitalic-webfont.ttf b/html/fonts/cooper/cooperhewitt-lightitalic-webfont.ttf deleted file mode 100644 index 0c5373cf8..000000000 Binary files a/html/fonts/cooper/cooperhewitt-lightitalic-webfont.ttf and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-lightitalic-webfont.woff b/html/fonts/cooper/cooperhewitt-lightitalic-webfont.woff deleted file mode 100644 index feea2211b..000000000 Binary files a/html/fonts/cooper/cooperhewitt-lightitalic-webfont.woff and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-lightitalic-webfont.woff2 b/html/fonts/cooper/cooperhewitt-lightitalic-webfont.woff2 deleted file mode 100644 index e79179997..000000000 Binary files a/html/fonts/cooper/cooperhewitt-lightitalic-webfont.woff2 and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-semibold-webfont.eot b/html/fonts/cooper/cooperhewitt-semibold-webfont.eot deleted file mode 100644 index 36491a51f..000000000 Binary files a/html/fonts/cooper/cooperhewitt-semibold-webfont.eot and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-semibold-webfont.ttf b/html/fonts/cooper/cooperhewitt-semibold-webfont.ttf deleted file mode 100644 index 1c30bf512..000000000 Binary files a/html/fonts/cooper/cooperhewitt-semibold-webfont.ttf and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-semibold-webfont.woff b/html/fonts/cooper/cooperhewitt-semibold-webfont.woff deleted file mode 100644 index 53a9ea184..000000000 Binary files a/html/fonts/cooper/cooperhewitt-semibold-webfont.woff and /dev/null differ diff --git a/html/fonts/cooper/cooperhewitt-semibold-webfont.woff2 b/html/fonts/cooper/cooperhewitt-semibold-webfont.woff2 deleted file mode 100644 index a925502e9..000000000 Binary files a/html/fonts/cooper/cooperhewitt-semibold-webfont.woff2 and /dev/null differ diff --git a/html/fonts/css/fonts.css b/html/fonts/css/fonts.css deleted file mode 100644 index c2963ba6a..000000000 --- a/html/fonts/css/fonts.css +++ /dev/null @@ -1,56 +0,0 @@ -@font-face { - font-family: 'Ek Mukta'; - font-weight: 200; - font-style: normal; - src: url('/fonts/Ek-Mukta-200/Ek-Mukta-200.eot'); - src: url('/fonts/Ek-Mukta-200/Ek-Mukta-200.eot?#iefix') format('embedded-opentype'), - local('Ek Mukta ExtraLight'), - local('Ek-Mukta-200'), - url('/fonts/Ek-Mukta-200/Ek-Mukta-200.woff2') format('woff2'), - url('/fonts/Ek-Mukta-200/Ek-Mukta-200.woff') format('woff'), - url('/fonts/Ek-Mukta-200/Ek-Mukta-200.ttf') format('truetype'), - url('/fonts/Ek-Mukta-200/Ek-Mukta-200.svg#EkMukta') format('svg'); -} - -@font-face { - font-family: 'Ek Mukta'; - font-weight: 400; - font-style: normal; - src: url('/fonts/Ek-Mukta-regular/Ek-Mukta-regular.eot'); - src: url('/fonts/Ek-Mukta-regular/Ek-Mukta-regular.eot?#iefix') format('embedded-opentype'), - local('Ek Mukta'), - local('Ek-Mukta-regular'), - url('/fonts/Ek-Mukta-regular/Ek-Mukta-regular.woff2') format('woff2'), - url('/fonts/Ek-Mukta-regular/Ek-Mukta-regular.woff') format('woff'), - url('/fonts/Ek-Mukta-regular/Ek-Mukta-regular.ttf') format('truetype'), - url('/fonts/Ek-Mukta-regular/Ek-Mukta-regular.svg#EkMukta') format('svg'); -} - -@font-face { - font-family: 'Ek Mukta'; - font-weight: 600; - font-style: normal; - src: url('/fonts/Ek-Mukta-600/Ek-Mukta-600.eot'); - src: url('/fonts/Ek-Mukta-600/Ek-Mukta-600.eot?#iefix') format('embedded-opentype'), - local('Ek Mukta SemiBold'), - local('Ek-Mukta-600'), - url('/fonts/Ek-Mukta-600/Ek-Mukta-600.woff2') format('woff2'), - url('/fonts/Ek-Mukta-600/Ek-Mukta-600.woff') format('woff'), - url('/fonts/Ek-Mukta-600/Ek-Mukta-600.ttf') format('truetype'), - url('/fonts/Ek-Mukta-600/Ek-Mukta-600.svg#EkMukta') format('svg'); -} - -@font-face { - font-family: 'Ek Mukta'; - font-weight: 700; - font-style: normal; - src: url('/fonts/Ek-Mukta-700/Ek-Mukta-700.eot'); - src: url('/fonts/Ek-Mukta-700/Ek-Mukta-700.eot?#iefix') format('embedded-opentype'), - local('Ek Mukta Bold'), - local('Ek-Mukta-700'), - url('/fonts/Ek-Mukta-700/Ek-Mukta-700.woff2') format('woff2'), - url('/fonts/Ek-Mukta-700/Ek-Mukta-700.woff') format('woff'), - url('/fonts/Ek-Mukta-700/Ek-Mukta-700.ttf') format('truetype'), - url('/fonts/Ek-Mukta-700/Ek-Mukta-700.svg#EkMukta') format('svg'); -} - diff --git a/html/fonts/england-hand/england-webfont.eot b/html/fonts/england-hand/england-webfont.eot deleted file mode 100755 index 5c43d26f6..000000000 Binary files a/html/fonts/england-hand/england-webfont.eot and /dev/null differ diff --git a/html/fonts/england-hand/england-webfont.svg b/html/fonts/england-hand/england-webfont.svg deleted file mode 100755 index efd37703b..000000000 --- a/html/fonts/england-hand/england-webfont.svg +++ /dev/null @@ -1,247 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Copyright 1993 by DATA BECKER GmbH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/html/fonts/england-hand/england-webfont.ttf b/html/fonts/england-hand/england-webfont.ttf deleted file mode 100755 index d51154c8d..000000000 Binary files a/html/fonts/england-hand/england-webfont.ttf and /dev/null differ diff --git a/html/fonts/england-hand/england-webfont.woff b/html/fonts/england-hand/england-webfont.woff deleted file mode 100755 index f79cfd6c8..000000000 Binary files a/html/fonts/england-hand/england-webfont.woff and /dev/null differ diff --git a/html/fonts/england-hand/stylesheet.css b/html/fonts/england-hand/stylesheet.css deleted file mode 100755 index 530501f10..000000000 --- a/html/fonts/england-hand/stylesheet.css +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated by Font Squirrel (http://www.fontsquirrel.com) on May 14, 2013 12:29:02 PM America/New_York */ - - - -@font-face { - font-family: 'EnglandHand'; - src: url('england-webfont.eot'); - src: url('england-webfont.eot?#iefix') format('embedded-opentype'), - url('england-webfont.woff') format('woff'), - url('england-webfont.ttf') format('truetype'), - url('england-webfont.svg#EnglandHandDBRegular') format('svg'); - font-weight: normal; - font-style: normal; - -} - diff --git a/html/fonts/epf/epf_lul-webfont.eot b/html/fonts/epf/epf_lul-webfont.eot deleted file mode 100755 index 8f2a0a1a9..000000000 Binary files a/html/fonts/epf/epf_lul-webfont.eot and /dev/null differ diff --git a/html/fonts/epf/epf_lul-webfont.svg b/html/fonts/epf/epf_lul-webfont.svg deleted file mode 100755 index 78236dd66..000000000 --- a/html/fonts/epf/epf_lul-webfont.svg +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/html/fonts/epf/epf_lul-webfont.ttf b/html/fonts/epf/epf_lul-webfont.ttf deleted file mode 100755 index 6876dd5ab..000000000 Binary files a/html/fonts/epf/epf_lul-webfont.ttf and /dev/null differ diff --git a/html/fonts/epf/epf_lul-webfont.woff b/html/fonts/epf/epf_lul-webfont.woff deleted file mode 100755 index eebb9a92c..000000000 Binary files a/html/fonts/epf/epf_lul-webfont.woff and /dev/null differ diff --git a/html/fonts/epf/stylesheet.css b/html/fonts/epf/stylesheet.css deleted file mode 100755 index 2e8a6720f..000000000 --- a/html/fonts/epf/stylesheet.css +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated by Font Squirrel (http://www.fontsquirrel.com) on April 9, 2013 */ -@font-face { - font-family: 'epflul'; - src: url('epf_lul-webfont.eot'); - src: url('epf_lul-webfont.eot?#iefix') format('embedded-opentype'), - url('epf_lul-webfont.woff') format('woff'), - url('epf_lul-webfont.ttf') format('truetype'), - url('epf_lul-webfont.svg#epflul') format('svg'); - font-weight: normal; - font-style: normal; - -} \ No newline at end of file diff --git a/html/fonts/nexa/Nexa_Free_Bold-webfont.eot b/html/fonts/nexa/Nexa_Free_Bold-webfont.eot deleted file mode 100755 index bd283aeb4..000000000 Binary files a/html/fonts/nexa/Nexa_Free_Bold-webfont.eot and /dev/null differ diff --git a/html/fonts/nexa/Nexa_Free_Bold-webfont.svg b/html/fonts/nexa/Nexa_Free_Bold-webfont.svg deleted file mode 100755 index 963844309..000000000 --- a/html/fonts/nexa/Nexa_Free_Bold-webfont.svg +++ /dev/null @@ -1,1816 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/html/fonts/nexa/Nexa_Free_Bold-webfont.ttf b/html/fonts/nexa/Nexa_Free_Bold-webfont.ttf deleted file mode 100755 index 1c7319f11..000000000 Binary files a/html/fonts/nexa/Nexa_Free_Bold-webfont.ttf and /dev/null differ diff --git a/html/fonts/nexa/Nexa_Free_Bold-webfont.woff b/html/fonts/nexa/Nexa_Free_Bold-webfont.woff deleted file mode 100755 index 4bce9d86e..000000000 Binary files a/html/fonts/nexa/Nexa_Free_Bold-webfont.woff and /dev/null differ diff --git a/html/fonts/nexa/stylesheet.css b/html/fonts/nexa/stylesheet.css deleted file mode 100755 index 5d6e319cf..000000000 --- a/html/fonts/nexa/stylesheet.css +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Web Fonts from fontspring.com - * - * All OpenType features and all extended glyphs have been removed. - * Fully installable fonts can be purchased at http://www.fontspring.com - * - * The fonts included in this stylesheet are subject to the End User License you purchased - * from Fontspring. The fonts are protected under domestic and international trademark and - * copyright law. You are prohibited from modifying, reverse engineering, duplicating, or - * distributing this font software. - * - * (c) 2010-2012 Fontspring - * - * - * - * - * The fonts included are copyrighted by the vendor listed below. - * - * Vendor: Fontfabric - * License URL: http://www.fontspring.com/fflicense/fontfabric - * - * - */ - -@font-face { - font-family: 'Nexa'; - src: url('Nexa_Free_Bold-webfont.eot'); - src: url('Nexa_Free_Bold-webfont.eot?#iefix') format('embedded-opentype'), - url('Nexa_Free_Bold-webfont.woff') format('woff'), - url('Nexa_Free_Bold-webfont.ttf') format('truetype'), - url('Nexa_Free_Bold-webfont.svg#nexa_boldregular') format('svg'); - font-weight: normal; - font-style: normal; - -} - diff --git a/html/fonts/pirulen/pirulen_rg-demo.html b/html/fonts/pirulen/pirulen_rg-demo.html deleted file mode 100755 index 787394811..000000000 --- a/html/fonts/pirulen/pirulen_rg-demo.html +++ /dev/null @@ -1,608 +0,0 @@ - - - - - - - - - - - - - Pirulen Regular Specimen - - - - - - -
- - - -
- - -
- -
-
-
AaBb
-
-
- -
-
A​B​C​D​E​F​G​H​I​J​K​L​M​N​O​P​Q​R​S​T​U​V​W​X​Y​Z​a​b​c​d​e​f​g​h​i​j​k​l​m​n​o​p​q​r​s​t​u​v​w​x​y​z​1​2​3​4​5​6​7​8​9​0​&​.​,​?​!​@​(​)​#​$​%​*​+​-​=​:​;
-
-
-
- - - - - - - - - - - - - - - - -
10abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
11abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
12abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
13abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
14abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
16abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
18abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
20abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
24abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
30abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
36abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
48abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
60abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
72abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
90abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- -
- -
- - - -
- - -
-
body
body
body
body
-
- bodyPirulen Regular -
-
- bodyArial -
-
- bodyVerdana -
-
- bodyGeorgia -
- - - -
- - -
- -
-

10.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

11.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

12.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

13.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
- -
-
-
-

14.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

16.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

18.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
- -
- -
- -
-
-

20.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

-
-
-

24.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

-
- -
- -
- -
-
-

30.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

-
-
- -
- - - -
-
-

10.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

11.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

12.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

13.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
- -
- -
-
-

14.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

16.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
-

18.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

- -
-
- -
- -
-
-

20.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

-
-
-

24.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

-
- -
- -
- -
-
-

30.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

-
-
- -
- - - - -
- -
- -
- -
-

Lorem Ipsum Dolor

-

Etiam porta sem malesuada magna mollis euismod

- - -
-
-
-
-

Donec sed odio dui. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

- - -

Pellentesque ornare sem

- -

Maecenas sed diam eget risus varius blandit sit amet non magna. Maecenas faucibus mollis interdum. Donec ullamcorper nulla non metus auctor fringilla. Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam id dolor id nibh ultricies vehicula ut id elit.

- -

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

- -

Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean lacinia bibendum nulla sed consectetur.

- -

Nullam quis risus eget urna mollis ornare vel eu leo. Nullam quis risus eget urna mollis ornare vel eu leo. Maecenas sed diam eget risus varius blandit sit amet non magna. Donec ullamcorper nulla non metus auctor fringilla.

- -

Cras mattis consectetur

- -

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean lacinia bibendum nulla sed consectetur. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cras mattis consectetur purus sit amet fermentum.

- -

Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Cras mattis consectetur purus sit amet fermentum.

-
- - -
- -
- - - - - - -
-
-
- -

Language Support

-

The subset of Pirulen Regular in this kit supports the following languages:
- - Albanian, Danish, Dutch, English, Faroese, French, German, Icelandic, Italian, Malagasy, Norwegian, Portuguese, Spanish, Swedish

-

Glyph Chart

-

The subset of Pirulen Regular in this kit includes all the glyphs listed below. Unicode entities are included above each glyph to help you insert individual characters into your layout.

-
- -

&#13;

-

&#23;


-

&#32;

-

&#33;

!
-

&#34;

"
-

&#35;

#
-

&#36;

$
-

&#37;

%
-

&#38;

&
-

&#39;

'
-

&#40;

(
-

&#41;

)
-

&#42;

*
-

&#43;

+
-

&#44;

,
-

&#45;

-
-

&#46;

.
-

&#47;

/
-

&#48;

0
-

&#49;

1
-

&#50;

2
-

&#51;

3
-

&#52;

4
-

&#53;

5
-

&#54;

6
-

&#55;

7
-

&#56;

8
-

&#57;

9
-

&#58;

:
-

&#59;

;
-

&#60;

<
-

&#61;

=
-

&#62;

>
-

&#63;

?
-

&#64;

@
-

&#65;

A
-

&#66;

B
-

&#67;

C
-

&#68;

D
-

&#69;

E
-

&#70;

F
-

&#71;

G
-

&#72;

H
-

&#73;

I
-

&#74;

J
-

&#75;

K
-

&#76;

L
-

&#77;

M
-

&#78;

N
-

&#79;

O
-

&#80;

P
-

&#81;

Q
-

&#82;

R
-

&#83;

S
-

&#84;

T
-

&#85;

U
-

&#86;

V
-

&#87;

W
-

&#88;

X
-

&#89;

Y
-

&#90;

Z
-

&#91;

[
-

&#92;

\
-

&#93;

]
-

&#94;

^
-

&#95;

_
-

&#96;

`
-

&#97;

a
-

&#98;

b
-

&#99;

c
-

&#100;

d
-

&#101;

e
-

&#102;

f
-

&#103;

g
-

&#104;

h
-

&#105;

i
-

&#106;

j
-

&#107;

k
-

&#108;

l
-

&#109;

m
-

&#110;

n
-

&#111;

o
-

&#112;

p
-

&#113;

q
-

&#114;

r
-

&#115;

s
-

&#116;

t
-

&#117;

u
-

&#118;

v
-

&#119;

w
-

&#120;

x
-

&#121;

y
-

&#122;

z
-

&#123;

{
-

&#124;

|
-

&#125;

}
-

&#126;

~
-

&#160;

 
-

&#161;

¡
-

&#162;

¢
-

&#163;

£
-

&#165;

¥
-

&#166;

¦
-

&#167;

§
-

&#168;

¨
-

&#169;

©
-

&#170;

ª
-

&#171;

«
-

&#173;

­
-

&#174;

®
-

&#175;

¯
-

&#176;

°
-

&#177;

±
-

&#178;

²
-

&#179;

³
-

&#180;

´
-

&#182;

-

&#183;

·
-

&#184;

¸
-

&#185;

¹
-

&#186;

º
-

&#187;

»
-

&#188;

¼
-

&#189;

½
-

&#190;

¾
-

&#191;

¿
-

&#192;

À
-

&#193;

Á
-

&#194;

Â
-

&#195;

Ã
-

&#196;

Ä
-

&#197;

Å
-

&#198;

Æ
-

&#199;

Ç
-

&#200;

È
-

&#201;

É
-

&#202;

Ê
-

&#203;

Ë
-

&#204;

Ì
-

&#205;

Í
-

&#206;

Î
-

&#207;

Ï
-

&#208;

Ð
-

&#209;

Ñ
-

&#210;

Ò
-

&#211;

Ó
-

&#212;

Ô
-

&#213;

Õ
-

&#214;

Ö
-

&#215;

×
-

&#216;

Ø
-

&#217;

Ù
-

&#218;

Ú
-

&#219;

Û
-

&#220;

Ü
-

&#221;

Ý
-

&#222;

Þ
-

&#223;

ß
-

&#224;

à
-

&#225;

á
-

&#226;

â
-

&#227;

ã
-

&#228;

ä
-

&#229;

å
-

&#230;

æ
-

&#231;

ç
-

&#232;

è
-

&#233;

é
-

&#234;

ê
-

&#235;

ë
-

&#236;

ì
-

&#237;

í
-

&#238;

î
-

&#239;

ï
-

&#240;

ð
-

&#241;

ñ
-

&#242;

ò
-

&#243;

ó
-

&#244;

ô
-

&#245;

õ
-

&#246;

ö
-

&#247;

÷
-

&#248;

ø
-

&#249;

ù
-

&#250;

ú
-

&#251;

û
-

&#252;

ü
-

&#253;

ý
-

&#254;

þ
-

&#255;

ÿ
-

&#338;

Œ
-

&#339;

œ
-

&#376;

Ÿ
-

&#710;

ˆ
-

&#732;

˜
-

&#8192;

 
-

&#8193;

-

&#8194;

-

&#8195;

-

&#8196;

-

&#8197;

-

&#8198;

-

&#8199;

-

&#8200;

-

&#8201;

-

&#8202;

-

&#8208;

-

&#8209;

-

&#8210;

-

&#8211;

-

&#8212;

-

&#8216;

-

&#8217;

-

&#8218;

-

&#8220;

-

&#8221;

-

&#8222;

-

&#8226;

-

&#8230;

-

&#8239;

-

&#8249;

-

&#8250;

-

&#8287;

-

&#8364;

-

&#8482;

-

&#57344;

-
-
- - -
-
- - -
- -
- -
-
-
-

Installing Webfonts

- -

Webfonts are supported by all major browser platforms but not all in the same way. There are currently four different font formats that must be included in order to target all browsers. This includes TTF, WOFF, EOT and SVG.

- -

1. Upload your webfonts

-

You must upload your webfont kit to your website. They should be in or near the same directory as your CSS files.

- -

2. Include the webfont stylesheet

-

A special CSS @font-face declaration helps the various browsers select the appropriate font it needs without causing you a bunch of headaches. Learn more about this syntax by reading the Fontspring blog post about it. The code for it is as follows:

- - - -@font-face{ - font-family: 'MyWebFont'; - src: url('WebFont.eot'); - src: url('WebFont.eot?#iefix') format('embedded-opentype'), - url('WebFont.woff') format('woff'), - url('WebFont.ttf') format('truetype'), - url('WebFont.svg#webfont') format('svg'); -} - - -

We've already gone ahead and generated the code for you. All you have to do is link to the stylesheet in your HTML, like this:

- <link rel="stylesheet" href="stylesheet.css" type="text/css" charset="utf-8" /> - -

3. Modify your own stylesheet

-

To take advantage of your new fonts, you must tell your stylesheet to use them. Look at the original @font-face declaration above and find the property called "font-family." The name linked there will be what you use to reference the font. Prepend that webfont name to the font stack in the "font-family" property, inside the selector you want to change. For example:

-p { font-family: 'WebFont', Arial, sans-serif; } - -

4. Test

-

Getting webfonts to work cross-browser can be tricky. Use the information in the sidebar to help you if you find that fonts aren't loading in a particular browser.

-
- - -
- -
- -
- -
- - diff --git a/html/fonts/pirulen/pirulen_rg-webfont.eot b/html/fonts/pirulen/pirulen_rg-webfont.eot deleted file mode 100755 index 32057ba7d..000000000 Binary files a/html/fonts/pirulen/pirulen_rg-webfont.eot and /dev/null differ diff --git a/html/fonts/pirulen/pirulen_rg-webfont.ttf b/html/fonts/pirulen/pirulen_rg-webfont.ttf deleted file mode 100755 index acd0cd465..000000000 Binary files a/html/fonts/pirulen/pirulen_rg-webfont.ttf and /dev/null differ diff --git a/html/fonts/pirulen/pirulen_rg-webfont.woff b/html/fonts/pirulen/pirulen_rg-webfont.woff deleted file mode 100755 index 8df692edc..000000000 Binary files a/html/fonts/pirulen/pirulen_rg-webfont.woff and /dev/null differ diff --git a/html/fonts/pirulen/stylesheet.css b/html/fonts/pirulen/stylesheet.css deleted file mode 100755 index 30de957c5..000000000 --- a/html/fonts/pirulen/stylesheet.css +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated by Font Squirrel (http://www.fontsquirrel.com) on February 25, 2013 */ - -@font-face { - font-family: 'Pirulen'; - src: url('pirulen_rg-webfont.eot'); - src: url('pirulen_rg-webfont.eot?#iefix') format('embedded-opentype'), - url('pirulen_rg-webfont.woff') format('woff'), - url('pirulen_rg-webfont.ttf') format('truetype'); - font-weight: normal; - font-style: normal; - -} \ No newline at end of file diff --git a/html/fonts/questrial/questrial-regular-webfont.eot b/html/fonts/questrial/questrial-regular-webfont.eot deleted file mode 100755 index e75e3b05c..000000000 Binary files a/html/fonts/questrial/questrial-regular-webfont.eot and /dev/null differ diff --git a/html/fonts/questrial/questrial-regular-webfont.svg b/html/fonts/questrial/questrial-regular-webfont.svg deleted file mode 100755 index 73c4c10c0..000000000 --- a/html/fonts/questrial/questrial-regular-webfont.svg +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/html/fonts/questrial/questrial-regular-webfont.ttf b/html/fonts/questrial/questrial-regular-webfont.ttf deleted file mode 100755 index 76270d4f4..000000000 Binary files a/html/fonts/questrial/questrial-regular-webfont.ttf and /dev/null differ diff --git a/html/fonts/questrial/questrial-regular-webfont.woff b/html/fonts/questrial/questrial-regular-webfont.woff deleted file mode 100755 index 0043bff41..000000000 Binary files a/html/fonts/questrial/questrial-regular-webfont.woff and /dev/null differ diff --git a/html/fonts/questrial/stylesheet.css b/html/fonts/questrial/stylesheet.css deleted file mode 100755 index 8296b482e..000000000 --- a/html/fonts/questrial/stylesheet.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated by Font Squirrel (http://www.fontsquirrel.com) on February 27, 2013 */ - -@font-face { - font-family: 'Questrial'; - src: url('questrial-regular-webfont.eot'); - src: url('questrial-regular-webfont.eot?#iefix') format('embedded-opentype'), - url('questrial-regular-webfont.woff') format('woff'), - url('questrial-regular-webfont.ttf') format('truetype'), - url('questrial-regular-webfont.svg#questrialregular') format('svg'); - font-weight: normal; - font-style: normal; - -} \ No newline at end of file diff --git a/html/icon.html b/html/icon.html deleted file mode 100644 index 4fdd4f67d..000000000 --- a/html/icon.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - MOD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
- -
- - - - diff --git a/html/img/audio-input-connected-highlight.png b/html/img/audio-input-connected-highlight.png deleted file mode 100644 index fedd20bfd..000000000 Binary files a/html/img/audio-input-connected-highlight.png and /dev/null differ diff --git a/html/img/audio-input-connected.png b/html/img/audio-input-connected.png deleted file mode 100644 index abd00e117..000000000 Binary files a/html/img/audio-input-connected.png and /dev/null differ diff --git a/html/img/audio-input-connecting-highlight.png b/html/img/audio-input-connecting-highlight.png deleted file mode 100644 index 9db6fcfdb..000000000 Binary files a/html/img/audio-input-connecting-highlight.png and /dev/null differ diff --git a/html/img/audio-input-connecting.png b/html/img/audio-input-connecting.png deleted file mode 100644 index 89e46d936..000000000 Binary files a/html/img/audio-input-connecting.png and /dev/null differ diff --git a/html/img/audio-input.png b/html/img/audio-input.png deleted file mode 100644 index a001b3aeb..000000000 Binary files a/html/img/audio-input.png and /dev/null differ diff --git a/html/img/audio-jack-nconnect.png b/html/img/audio-jack-nconnect.png deleted file mode 100644 index b0e617e2f..000000000 Binary files a/html/img/audio-jack-nconnect.png and /dev/null differ diff --git a/html/img/audio-jack.png b/html/img/audio-jack.png deleted file mode 100644 index 0e64ec68d..000000000 Binary files a/html/img/audio-jack.png and /dev/null differ diff --git a/html/img/audio-output-connected.png b/html/img/audio-output-connected.png deleted file mode 100644 index 4842b3dbc..000000000 Binary files a/html/img/audio-output-connected.png and /dev/null differ diff --git a/html/img/audio-output.png b/html/img/audio-output.png deleted file mode 100644 index b032c3311..000000000 Binary files a/html/img/audio-output.png and /dev/null differ diff --git a/html/img/avatar-default.png b/html/img/avatar-default.png deleted file mode 100644 index ec6c99efc..000000000 Binary files a/html/img/avatar-default.png and /dev/null differ diff --git a/html/img/background.jpg b/html/img/background.jpg deleted file mode 100644 index a0d864f87..000000000 Binary files a/html/img/background.jpg and /dev/null differ diff --git a/html/img/cloud/icn-rockit.png b/html/img/cloud/icn-rockit.png deleted file mode 100644 index aa481e950..000000000 Binary files a/html/img/cloud/icn-rockit.png and /dev/null differ diff --git a/html/img/cloud/icn-techspecs-footswitch.png b/html/img/cloud/icn-techspecs-footswitch.png deleted file mode 100755 index a83d70ba6..000000000 Binary files a/html/img/cloud/icn-techspecs-footswitch.png and /dev/null differ diff --git a/html/img/cloud/icn-techspecs-input.png b/html/img/cloud/icn-techspecs-input.png deleted file mode 100755 index a66e8e477..000000000 Binary files a/html/img/cloud/icn-techspecs-input.png and /dev/null differ diff --git a/html/img/cloud/icn-techspecs-midiin.png b/html/img/cloud/icn-techspecs-midiin.png deleted file mode 100644 index 623cae00a..000000000 Binary files a/html/img/cloud/icn-techspecs-midiin.png and /dev/null differ diff --git a/html/img/cloud/icn-techspecs-output.png b/html/img/cloud/icn-techspecs-output.png deleted file mode 100755 index 9df348a8a..000000000 Binary files a/html/img/cloud/icn-techspecs-output.png and /dev/null differ diff --git a/html/img/cloud/icn-techspecs-pedal.png b/html/img/cloud/icn-techspecs-pedal.png deleted file mode 100644 index c31732f15..000000000 Binary files a/html/img/cloud/icn-techspecs-pedal.png and /dev/null differ diff --git a/html/img/cloud/icn-techspecs-rotary.png b/html/img/cloud/icn-techspecs-rotary.png deleted file mode 100755 index 32217bf0c..000000000 Binary files a/html/img/cloud/icn-techspecs-rotary.png and /dev/null differ diff --git a/html/img/cv-input-connected-highlight.png b/html/img/cv-input-connected-highlight.png deleted file mode 100644 index 4d29165d8..000000000 Binary files a/html/img/cv-input-connected-highlight.png and /dev/null differ diff --git a/html/img/cv-input-connected.png b/html/img/cv-input-connected.png deleted file mode 100644 index 38b10af9c..000000000 Binary files a/html/img/cv-input-connected.png and /dev/null differ diff --git a/html/img/cv-input-connecting-highlight.png b/html/img/cv-input-connecting-highlight.png deleted file mode 100644 index 3dbf54064..000000000 Binary files a/html/img/cv-input-connecting-highlight.png and /dev/null differ diff --git a/html/img/cv-input-connecting.png b/html/img/cv-input-connecting.png deleted file mode 100644 index 0fcb7aaad..000000000 Binary files a/html/img/cv-input-connecting.png and /dev/null differ diff --git a/html/img/cv-input.png b/html/img/cv-input.png deleted file mode 100644 index 0e91fd618..000000000 Binary files a/html/img/cv-input.png and /dev/null differ diff --git a/html/img/cv-jack-nconnect.png b/html/img/cv-jack-nconnect.png deleted file mode 100644 index ea857991f..000000000 Binary files a/html/img/cv-jack-nconnect.png and /dev/null differ diff --git a/html/img/cv-jack.png b/html/img/cv-jack.png deleted file mode 100644 index ce520c3da..000000000 Binary files a/html/img/cv-jack.png and /dev/null differ diff --git a/html/img/cv-output-connected.png b/html/img/cv-output-connected.png deleted file mode 100644 index e7119796a..000000000 Binary files a/html/img/cv-output-connected.png and /dev/null differ diff --git a/html/img/cv-output.png b/html/img/cv-output.png deleted file mode 100644 index 05c081c85..000000000 Binary files a/html/img/cv-output.png and /dev/null differ diff --git a/html/img/effects-icon.png b/html/img/effects-icon.png deleted file mode 100755 index aaca62ff0..000000000 Binary files a/html/img/effects-icon.png and /dev/null differ diff --git a/html/img/expanded_background.png b/html/img/expanded_background.png deleted file mode 100644 index 88e47b4cf..000000000 Binary files a/html/img/expanded_background.png and /dev/null differ diff --git a/html/img/expanded_bottom.png b/html/img/expanded_bottom.png deleted file mode 100644 index 6b89002d5..000000000 Binary files a/html/img/expanded_bottom.png and /dev/null differ diff --git a/html/img/expanded_left.png b/html/img/expanded_left.png deleted file mode 100644 index a65ee765a..000000000 Binary files a/html/img/expanded_left.png and /dev/null differ diff --git a/html/img/expanded_right.png b/html/img/expanded_right.png deleted file mode 100644 index ab23aee07..000000000 Binary files a/html/img/expanded_right.png and /dev/null differ diff --git a/html/img/expanded_top.png b/html/img/expanded_top.png deleted file mode 100644 index 588717fee..000000000 Binary files a/html/img/expanded_top.png and /dev/null differ diff --git a/html/img/facebook-icons.png b/html/img/facebook-icons.png deleted file mode 100755 index fdaa78231..000000000 Binary files a/html/img/facebook-icons.png and /dev/null differ diff --git a/html/img/facebook-menu-sprite.png b/html/img/facebook-menu-sprite.png deleted file mode 100755 index 635ceef0e..000000000 Binary files a/html/img/facebook-menu-sprite.png and /dev/null differ diff --git a/html/img/favicon/android-icon-144x144.png b/html/img/favicon/android-icon-144x144.png deleted file mode 100644 index f67328691..000000000 Binary files a/html/img/favicon/android-icon-144x144.png and /dev/null differ diff --git a/html/img/favicon/android-icon-192x192.png b/html/img/favicon/android-icon-192x192.png deleted file mode 100644 index dd8c24fbb..000000000 Binary files a/html/img/favicon/android-icon-192x192.png and /dev/null differ diff --git a/html/img/favicon/android-icon-36x36.png b/html/img/favicon/android-icon-36x36.png deleted file mode 100644 index c0cca08d1..000000000 Binary files a/html/img/favicon/android-icon-36x36.png and /dev/null differ diff --git a/html/img/favicon/android-icon-48x48.png b/html/img/favicon/android-icon-48x48.png deleted file mode 100644 index f77817846..000000000 Binary files a/html/img/favicon/android-icon-48x48.png and /dev/null differ diff --git a/html/img/favicon/android-icon-72x72.png b/html/img/favicon/android-icon-72x72.png deleted file mode 100644 index f48103dd7..000000000 Binary files a/html/img/favicon/android-icon-72x72.png and /dev/null differ diff --git a/html/img/favicon/android-icon-96x96.png b/html/img/favicon/android-icon-96x96.png deleted file mode 100644 index 6f058ff1a..000000000 Binary files a/html/img/favicon/android-icon-96x96.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-114x114.png b/html/img/favicon/apple-icon-114x114.png deleted file mode 100644 index 93dc48b30..000000000 Binary files a/html/img/favicon/apple-icon-114x114.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-120x120.png b/html/img/favicon/apple-icon-120x120.png deleted file mode 100644 index 04d233ea8..000000000 Binary files a/html/img/favicon/apple-icon-120x120.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-144x144.png b/html/img/favicon/apple-icon-144x144.png deleted file mode 100644 index f67328691..000000000 Binary files a/html/img/favicon/apple-icon-144x144.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-152x152.png b/html/img/favicon/apple-icon-152x152.png deleted file mode 100644 index 58343bb6c..000000000 Binary files a/html/img/favicon/apple-icon-152x152.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-180x180.png b/html/img/favicon/apple-icon-180x180.png deleted file mode 100644 index fcdb20d12..000000000 Binary files a/html/img/favicon/apple-icon-180x180.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-57x57.png b/html/img/favicon/apple-icon-57x57.png deleted file mode 100644 index b2639039d..000000000 Binary files a/html/img/favicon/apple-icon-57x57.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-60x60.png b/html/img/favicon/apple-icon-60x60.png deleted file mode 100644 index d0df6f5a4..000000000 Binary files a/html/img/favicon/apple-icon-60x60.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-72x72.png b/html/img/favicon/apple-icon-72x72.png deleted file mode 100644 index f48103dd7..000000000 Binary files a/html/img/favicon/apple-icon-72x72.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-76x76.png b/html/img/favicon/apple-icon-76x76.png deleted file mode 100644 index d5a834de5..000000000 Binary files a/html/img/favicon/apple-icon-76x76.png and /dev/null differ diff --git a/html/img/favicon/apple-icon-precomposed.png b/html/img/favicon/apple-icon-precomposed.png deleted file mode 100644 index 18d5a8cb3..000000000 Binary files a/html/img/favicon/apple-icon-precomposed.png and /dev/null differ diff --git a/html/img/favicon/apple-icon.png b/html/img/favicon/apple-icon.png deleted file mode 100644 index 18d5a8cb3..000000000 Binary files a/html/img/favicon/apple-icon.png and /dev/null differ diff --git a/html/img/favicon/favicon-16x16.png b/html/img/favicon/favicon-16x16.png deleted file mode 100644 index 17592ba81..000000000 Binary files a/html/img/favicon/favicon-16x16.png and /dev/null differ diff --git a/html/img/favicon/favicon-32x32.png b/html/img/favicon/favicon-32x32.png deleted file mode 100644 index 30cebb119..000000000 Binary files a/html/img/favicon/favicon-32x32.png and /dev/null differ diff --git a/html/img/favicon/favicon-96x96.png b/html/img/favicon/favicon-96x96.png deleted file mode 100644 index 6f058ff1a..000000000 Binary files a/html/img/favicon/favicon-96x96.png and /dev/null differ diff --git a/html/img/favicon/favicon.png b/html/img/favicon/favicon.png deleted file mode 100644 index 6fa4ccc9c..000000000 Binary files a/html/img/favicon/favicon.png and /dev/null differ diff --git a/html/img/favicon/manifest.json b/html/img/favicon/manifest.json deleted file mode 100644 index 013d4a6a5..000000000 --- a/html/img/favicon/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "App", - "icons": [ - { - "src": "\/android-icon-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" - }, - { - "src": "\/android-icon-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" - }, - { - "src": "\/android-icon-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" - }, - { - "src": "\/android-icon-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" - }, - { - "src": "\/android-icon-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" - }, - { - "src": "\/android-icon-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" - } - ] -} \ No newline at end of file diff --git a/html/img/favicon/ms-icon-144x144.png b/html/img/favicon/ms-icon-144x144.png deleted file mode 100644 index f67328691..000000000 Binary files a/html/img/favicon/ms-icon-144x144.png and /dev/null differ diff --git a/html/img/favicon/ms-icon-150x150.png b/html/img/favicon/ms-icon-150x150.png deleted file mode 100644 index c248d3ef5..000000000 Binary files a/html/img/favicon/ms-icon-150x150.png and /dev/null differ diff --git a/html/img/favicon/ms-icon-310x310.png b/html/img/favicon/ms-icon-310x310.png deleted file mode 100644 index 5321dc0a8..000000000 Binary files a/html/img/favicon/ms-icon-310x310.png and /dev/null differ diff --git a/html/img/favicon/ms-icon-70x70.png b/html/img/favicon/ms-icon-70x70.png deleted file mode 100644 index 34d314662..000000000 Binary files a/html/img/favicon/ms-icon-70x70.png and /dev/null differ diff --git a/html/img/footswitch-addressed.png b/html/img/footswitch-addressed.png deleted file mode 100644 index 76737e8b6..000000000 Binary files a/html/img/footswitch-addressed.png and /dev/null differ diff --git a/html/img/footswitch-free.png b/html/img/footswitch-free.png deleted file mode 100644 index 154140706..000000000 Binary files a/html/img/footswitch-free.png and /dev/null differ diff --git a/html/img/footswitch.png b/html/img/footswitch.png deleted file mode 100755 index a0cbb18b5..000000000 Binary files a/html/img/footswitch.png and /dev/null differ diff --git a/html/img/glyphicons-halflings-white.png b/html/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a2..000000000 Binary files a/html/img/glyphicons-halflings-white.png and /dev/null differ diff --git a/html/img/glyphicons-halflings.png b/html/img/glyphicons-halflings.png deleted file mode 100644 index a99699932..000000000 Binary files a/html/img/glyphicons-halflings.png and /dev/null differ diff --git a/html/img/header-pattern.png b/html/img/header-pattern.png deleted file mode 100755 index 251f52328..000000000 Binary files a/html/img/header-pattern.png and /dev/null differ diff --git a/html/img/icn-addressing.png b/html/img/icn-addressing.png deleted file mode 100755 index 40f0dcba8..000000000 Binary files a/html/img/icn-addressing.png and /dev/null differ diff --git a/html/img/icn-bank.png b/html/img/icn-bank.png deleted file mode 100755 index 2eb4c254c..000000000 Binary files a/html/img/icn-bank.png and /dev/null differ diff --git a/html/img/icn-blocked.png b/html/img/icn-blocked.png deleted file mode 100644 index 9afcbdf45..000000000 Binary files a/html/img/icn-blocked.png and /dev/null differ diff --git a/html/img/icn-favorite-off.png b/html/img/icn-favorite-off.png deleted file mode 100755 index 97231f8a4..000000000 Binary files a/html/img/icn-favorite-off.png and /dev/null differ diff --git a/html/img/icn-favorite-on.png b/html/img/icn-favorite-on.png deleted file mode 100755 index 16298fd80..000000000 Binary files a/html/img/icn-favorite-on.png and /dev/null differ diff --git a/html/img/icn-grid-list.png b/html/img/icn-grid-list.png deleted file mode 100755 index 129da1388..000000000 Binary files a/html/img/icn-grid-list.png and /dev/null differ diff --git a/html/img/icn-help-16x16.png b/html/img/icn-help-16x16.png deleted file mode 100755 index 6dfd9990c..000000000 Binary files a/html/img/icn-help-16x16.png and /dev/null differ diff --git a/html/img/icn-help.png b/html/img/icn-help.png deleted file mode 100755 index 954f7190c..000000000 Binary files a/html/img/icn-help.png and /dev/null differ diff --git a/html/img/icn-input-output.png b/html/img/icn-input-output.png deleted file mode 100644 index 9b63d1433..000000000 Binary files a/html/img/icn-input-output.png and /dev/null differ diff --git a/html/img/icn-installed.png b/html/img/icn-installed.png deleted file mode 100644 index 197b675ff..000000000 Binary files a/html/img/icn-installed.png and /dev/null differ diff --git a/html/img/icn-outdated.png b/html/img/icn-outdated.png deleted file mode 100644 index be328e4ca..000000000 Binary files a/html/img/icn-outdated.png and /dev/null differ diff --git a/html/img/icn-rating.png b/html/img/icn-rating.png deleted file mode 100755 index 70cb0375f..000000000 Binary files a/html/img/icn-rating.png and /dev/null differ diff --git a/html/img/icn-remove-16x16.png b/html/img/icn-remove-16x16.png deleted file mode 100755 index 24d706803..000000000 Binary files a/html/img/icn-remove-16x16.png and /dev/null differ diff --git a/html/img/icn-remove-bank.png b/html/img/icn-remove-bank.png deleted file mode 100755 index 0cbc5669f..000000000 Binary files a/html/img/icn-remove-bank.png and /dev/null differ diff --git a/html/img/icn-search-white.png b/html/img/icn-search-white.png deleted file mode 100755 index 75d7eaa87..000000000 Binary files a/html/img/icn-search-white.png and /dev/null differ diff --git a/html/img/icn-search.png b/html/img/icn-search.png deleted file mode 100755 index e55ec75a3..000000000 Binary files a/html/img/icn-search.png and /dev/null differ diff --git a/html/img/icn-settings-16x16.png b/html/img/icn-settings-16x16.png deleted file mode 100755 index 08e074d5c..000000000 Binary files a/html/img/icn-settings-16x16.png and /dev/null differ diff --git a/html/img/icn-settings.png b/html/img/icn-settings.png deleted file mode 100755 index a5115e143..000000000 Binary files a/html/img/icn-settings.png and /dev/null differ diff --git a/html/img/icn-share.png b/html/img/icn-share.png deleted file mode 100755 index 98561a43f..000000000 Binary files a/html/img/icn-share.png and /dev/null differ diff --git a/html/img/icn-zoom-in.png b/html/img/icn-zoom-in.png deleted file mode 100644 index d16a638ec..000000000 Binary files a/html/img/icn-zoom-in.png and /dev/null differ diff --git a/html/img/icn-zoom-out.png b/html/img/icn-zoom-out.png deleted file mode 100644 index 9f30e60e3..000000000 Binary files a/html/img/icn-zoom-out.png and /dev/null differ diff --git a/html/img/icons/25/autohide.png b/html/img/icons/25/autohide.png deleted file mode 100644 index fe4f50264..000000000 Binary files a/html/img/icons/25/autohide.png and /dev/null differ diff --git a/html/img/icons/25/bypass.png b/html/img/icons/25/bypass.png deleted file mode 100644 index 3cfb3b4a8..000000000 Binary files a/html/img/icons/25/bypass.png and /dev/null differ diff --git a/html/img/icons/25/cpu.png b/html/img/icons/25/cpu.png deleted file mode 100644 index 0772d22e7..000000000 Binary files a/html/img/icons/25/cpu.png and /dev/null differ diff --git a/html/img/icons/25/cv.png b/html/img/icons/25/cv.png deleted file mode 100644 index 31994bce5..000000000 Binary files a/html/img/icons/25/cv.png and /dev/null differ diff --git a/html/img/icons/25/delete.png b/html/img/icons/25/delete.png deleted file mode 100644 index abaeea6c6..000000000 Binary files a/html/img/icons/25/delete.png and /dev/null differ diff --git a/html/img/icons/25/disconnect.png b/html/img/icons/25/disconnect.png deleted file mode 100644 index 88426b18f..000000000 Binary files a/html/img/icons/25/disconnect.png and /dev/null differ diff --git a/html/img/icons/25/language.png b/html/img/icons/25/language.png deleted file mode 100644 index 42fc15d24..000000000 Binary files a/html/img/icons/25/language.png and /dev/null differ diff --git a/html/img/icons/25/midi.png b/html/img/icons/25/midi.png deleted file mode 100644 index fc3a7fb22..000000000 Binary files a/html/img/icons/25/midi.png and /dev/null differ diff --git a/html/img/icons/25/new.png b/html/img/icons/25/new.png deleted file mode 100644 index f4ed0f06f..000000000 Binary files a/html/img/icons/25/new.png and /dev/null differ diff --git a/html/img/icons/25/pin.png b/html/img/icons/25/pin.png deleted file mode 100644 index df3f4db79..000000000 Binary files a/html/img/icons/25/pin.png and /dev/null differ diff --git a/html/img/icons/25/pinned.png b/html/img/icons/25/pinned.png deleted file mode 100644 index f0e6a7178..000000000 Binary files a/html/img/icons/25/pinned.png and /dev/null differ diff --git a/html/img/icons/25/ram.png b/html/img/icons/25/ram.png deleted file mode 100644 index eb3c1b7d6..000000000 Binary files a/html/img/icons/25/ram.png and /dev/null differ diff --git a/html/img/icons/25/reload.png b/html/img/icons/25/reload.png deleted file mode 100644 index 4c7929861..000000000 Binary files a/html/img/icons/25/reload.png and /dev/null differ diff --git a/html/img/icons/25/rename.png b/html/img/icons/25/rename.png deleted file mode 100644 index f2da4d354..000000000 Binary files a/html/img/icons/25/rename.png and /dev/null differ diff --git a/html/img/icons/25/save.png b/html/img/icons/25/save.png deleted file mode 100644 index bc90ffb82..000000000 Binary files a/html/img/icons/25/save.png and /dev/null differ diff --git a/html/img/icons/25/save_as.png b/html/img/icons/25/save_as.png deleted file mode 100644 index 144780e33..000000000 Binary files a/html/img/icons/25/save_as.png and /dev/null differ diff --git a/html/img/icons/25/star-border.png b/html/img/icons/25/star-border.png deleted file mode 100644 index 1afb069ef..000000000 Binary files a/html/img/icons/25/star-border.png and /dev/null differ diff --git a/html/img/icons/25/star.png b/html/img/icons/25/star.png deleted file mode 100644 index 801868bd9..000000000 Binary files a/html/img/icons/25/star.png and /dev/null differ diff --git a/html/img/icons/25/stop.png b/html/img/icons/25/stop.png deleted file mode 100644 index ada6a46c2..000000000 Binary files a/html/img/icons/25/stop.png and /dev/null differ diff --git a/html/img/icons/25/transport.png b/html/img/icons/25/transport.png deleted file mode 100644 index dcc22ca78..000000000 Binary files a/html/img/icons/25/transport.png and /dev/null differ diff --git a/html/img/icons/25/update.png b/html/img/icons/25/update.png deleted file mode 100644 index a670c5291..000000000 Binary files a/html/img/icons/25/update.png and /dev/null differ diff --git a/html/img/icons/36/assembler.png b/html/img/icons/36/assembler.png deleted file mode 100644 index 31c11af9e..000000000 Binary files a/html/img/icons/36/assembler.png and /dev/null differ diff --git a/html/img/icons/36/banks.png b/html/img/icons/36/banks.png deleted file mode 100644 index 00014947d..000000000 Binary files a/html/img/icons/36/banks.png and /dev/null differ diff --git a/html/img/icons/36/bind.png b/html/img/icons/36/bind.png deleted file mode 100644 index d488d3a1b..000000000 Binary files a/html/img/icons/36/bind.png and /dev/null differ diff --git a/html/img/icons/36/bluetooth.png b/html/img/icons/36/bluetooth.png deleted file mode 100644 index 19a4662dc..000000000 Binary files a/html/img/icons/36/bluetooth.png and /dev/null differ diff --git a/html/img/icons/36/bypass_L.png b/html/img/icons/36/bypass_L.png deleted file mode 100644 index fa74a87c6..000000000 Binary files a/html/img/icons/36/bypass_L.png and /dev/null differ diff --git a/html/img/icons/36/bypass_R.png b/html/img/icons/36/bypass_R.png deleted file mode 100644 index 673c70928..000000000 Binary files a/html/img/icons/36/bypass_R.png and /dev/null differ diff --git a/html/img/icons/36/clear.png b/html/img/icons/36/clear.png deleted file mode 100644 index 9c6694f35..000000000 Binary files a/html/img/icons/36/clear.png and /dev/null differ diff --git a/html/img/icons/36/cloud.png b/html/img/icons/36/cloud.png deleted file mode 100644 index 707c80d55..000000000 Binary files a/html/img/icons/36/cloud.png and /dev/null differ diff --git a/html/img/icons/36/confirm.png b/html/img/icons/36/confirm.png deleted file mode 100644 index 6aa6441a2..000000000 Binary files a/html/img/icons/36/confirm.png and /dev/null differ diff --git a/html/img/icons/36/control-chain.png b/html/img/icons/36/control-chain.png deleted file mode 100644 index 30dbcfd01..000000000 Binary files a/html/img/icons/36/control-chain.png and /dev/null differ diff --git a/html/img/icons/36/cpu.png b/html/img/icons/36/cpu.png deleted file mode 100644 index 0772d22e7..000000000 Binary files a/html/img/icons/36/cpu.png and /dev/null differ diff --git a/html/img/icons/36/disconnect.png b/html/img/icons/36/disconnect.png deleted file mode 100644 index 069d8a9fc..000000000 Binary files a/html/img/icons/36/disconnect.png and /dev/null differ diff --git a/html/img/icons/36/disconnected.png b/html/img/icons/36/disconnected.png deleted file mode 100644 index 069d8a9fc..000000000 Binary files a/html/img/icons/36/disconnected.png and /dev/null differ diff --git a/html/img/icons/36/edit.png b/html/img/icons/36/edit.png deleted file mode 100644 index e3b17c4e0..000000000 Binary files a/html/img/icons/36/edit.png and /dev/null differ diff --git a/html/img/icons/36/faders.png b/html/img/icons/36/faders.png deleted file mode 100644 index d488d3a1b..000000000 Binary files a/html/img/icons/36/faders.png and /dev/null differ diff --git a/html/img/icons/36/folder.png b/html/img/icons/36/folder.png deleted file mode 100644 index 20eaa7cd7..000000000 Binary files a/html/img/icons/36/folder.png and /dev/null differ diff --git a/html/img/icons/36/footswitch.png b/html/img/icons/36/footswitch.png deleted file mode 100644 index d0ca0d1b8..000000000 Binary files a/html/img/icons/36/footswitch.png and /dev/null differ diff --git a/html/img/icons/36/help.png b/html/img/icons/36/help.png deleted file mode 100644 index 6aa6441a2..000000000 Binary files a/html/img/icons/36/help.png and /dev/null differ diff --git a/html/img/icons/36/knob.png b/html/img/icons/36/knob.png deleted file mode 100644 index 5adf0253a..000000000 Binary files a/html/img/icons/36/knob.png and /dev/null differ diff --git a/html/img/icons/36/load.png b/html/img/icons/36/load.png deleted file mode 100644 index 018018eb0..000000000 Binary files a/html/img/icons/36/load.png and /dev/null differ diff --git a/html/img/icons/36/midi.png b/html/img/icons/36/midi.png deleted file mode 100644 index 4604de478..000000000 Binary files a/html/img/icons/36/midi.png and /dev/null differ diff --git a/html/img/icons/36/mod.png b/html/img/icons/36/mod.png deleted file mode 100644 index 1c05d9fc9..000000000 Binary files a/html/img/icons/36/mod.png and /dev/null differ diff --git a/html/img/icons/36/ok.png b/html/img/icons/36/ok.png deleted file mode 100644 index bbc1742a7..000000000 Binary files a/html/img/icons/36/ok.png and /dev/null differ diff --git a/html/img/icons/36/pedal.png b/html/img/icons/36/pedal.png deleted file mode 100644 index 34a6cdb00..000000000 Binary files a/html/img/icons/36/pedal.png and /dev/null differ diff --git a/html/img/icons/36/pedalboard.png b/html/img/icons/36/pedalboard.png deleted file mode 100644 index b1b267b05..000000000 Binary files a/html/img/icons/36/pedalboard.png and /dev/null differ diff --git a/html/img/icons/36/pedalboardlibrary.png b/html/img/icons/36/pedalboardlibrary.png deleted file mode 100644 index 32deaa9c2..000000000 Binary files a/html/img/icons/36/pedalboardlibrary.png and /dev/null differ diff --git a/html/img/icons/36/pedalboardstore.png b/html/img/icons/36/pedalboardstore.png deleted file mode 100644 index 9fe4a40d1..000000000 Binary files a/html/img/icons/36/pedalboardstore.png and /dev/null differ diff --git a/html/img/icons/36/pedals.png b/html/img/icons/36/pedals.png deleted file mode 100644 index b1b267b05..000000000 Binary files a/html/img/icons/36/pedals.png and /dev/null differ diff --git a/html/img/icons/36/pedals2.png b/html/img/icons/36/pedals2.png deleted file mode 100644 index 4d7b225c1..000000000 Binary files a/html/img/icons/36/pedals2.png and /dev/null differ diff --git a/html/img/icons/36/pin.png b/html/img/icons/36/pin.png deleted file mode 100644 index 9ec28c315..000000000 Binary files a/html/img/icons/36/pin.png and /dev/null differ diff --git a/html/img/icons/36/pluginlibrary.png b/html/img/icons/36/pluginlibrary.png deleted file mode 100644 index eef6205d4..000000000 Binary files a/html/img/icons/36/pluginlibrary.png and /dev/null differ diff --git a/html/img/icons/36/pluginstore.png b/html/img/icons/36/pluginstore.png deleted file mode 100644 index 3413b40cb..000000000 Binary files a/html/img/icons/36/pluginstore.png and /dev/null differ diff --git a/html/img/icons/36/presets.png b/html/img/icons/36/presets.png deleted file mode 100644 index 412e13886..000000000 Binary files a/html/img/icons/36/presets.png and /dev/null differ diff --git a/html/img/icons/36/ram.png b/html/img/icons/36/ram.png deleted file mode 100644 index eb3c1b7d6..000000000 Binary files a/html/img/icons/36/ram.png and /dev/null differ diff --git a/html/img/icons/36/remove.png b/html/img/icons/36/remove.png deleted file mode 100644 index ff37a80df..000000000 Binary files a/html/img/icons/36/remove.png and /dev/null differ diff --git a/html/img/icons/36/save.png b/html/img/icons/36/save.png deleted file mode 100644 index 4cc8dc551..000000000 Binary files a/html/img/icons/36/save.png and /dev/null differ diff --git a/html/img/icons/36/settings.png b/html/img/icons/36/settings.png deleted file mode 100644 index 4d38e192b..000000000 Binary files a/html/img/icons/36/settings.png and /dev/null differ diff --git a/html/img/icons/36/share-fb.png b/html/img/icons/36/share-fb.png deleted file mode 100644 index 60633686e..000000000 Binary files a/html/img/icons/36/share-fb.png and /dev/null differ diff --git a/html/img/icons/36/share-tw.png b/html/img/icons/36/share-tw.png deleted file mode 100644 index 7f3f95d2e..000000000 Binary files a/html/img/icons/36/share-tw.png and /dev/null differ diff --git a/html/img/icons/36/switch.png b/html/img/icons/36/switch.png deleted file mode 100644 index d0ca0d1b8..000000000 Binary files a/html/img/icons/36/switch.png and /dev/null differ diff --git a/html/img/icons/36/toggle.png b/html/img/icons/36/toggle.png deleted file mode 100644 index d0ca0d1b8..000000000 Binary files a/html/img/icons/36/toggle.png and /dev/null differ diff --git a/html/img/icons/36/update.png b/html/img/icons/36/update.png deleted file mode 100644 index a41d97274..000000000 Binary files a/html/img/icons/36/update.png and /dev/null differ diff --git a/html/img/icons/blocked.svg b/html/img/icons/blocked.svg deleted file mode 100644 index 05a69e25d..000000000 --- a/html/img/icons/blocked.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - -image/svg+xml - - - - - - - - - - - - - diff --git a/html/img/icons/broken_image.svg b/html/img/icons/broken_image.svg deleted file mode 100644 index 24da5aca9..000000000 --- a/html/img/icons/broken_image.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - -image/svg+xml - - - - - - - - - - - - - diff --git a/html/img/icons/broken_pedal.svg b/html/img/icons/broken_pedal.svg deleted file mode 100644 index b4fc06853..000000000 --- a/html/img/icons/broken_pedal.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - -image/svg+xml - - - - - - - - - - - diff --git a/html/img/icons/icons.css b/html/img/icons/icons.css deleted file mode 100644 index b0067dfe9..000000000 --- a/html/img/icons/icons.css +++ /dev/null @@ -1,184 +0,0 @@ -.mod-dark .mod-icon-autohide, .mod-light.mod-icon-autohide { - background-image: url(white/autohide.png); -} -.mod-light .mod-icon-autohide, .mod-dark.mod-icon-autohide { - background-image: url(black/autohide.png); -} - - -.mod-dark .mod-icon-bind, .mod-light.mod-icon-bind { - background-image: url(white/bind.png); -} -.mod-light .mod-icon-bind, .mod-dark.mod-icon-bind { - background-image: url(black/bind.png); -} - - -.mod-dark .mod-icon-bluetooth, .mod-light.mod-icon-bluetooth { - background-image: url(white/bluetooth.png); -} -.mod-light .mod-icon-bluetooth, .mod-dark.mod-icon-bluetooth { - background-image: url(black/bluetooth.png); -} - - -.mod-dark .mod-icon-clear, .mod-light.mod-icon-clear { - background-image: url(white/clear.png); -} -.mod-light .mod-icon-clear, .mod-dark.mod-icon-clear { - background-image: url(black/clear.png); -} - - -.mod-dark .mod-icon-cloud, .mod-light.mod-icon-cloud { - background-image: url(white/cloud.png); -} -.mod-light .mod-icon-cloud, .mod-dark.mod-icon-cloud { - background-image: url(black/cloud.png); -} - - -.mod-dark .mod-icon-confirm, .mod-light.mod-icon-confirm { - background-image: url(white/confirm.png); -} -.mod-light .mod-icon-confirm, .mod-dark.mod-icon-confirm { - background-image: url(black/confirm.png); -} - - -.mod-dark .mod-icon-disconnected, .mod-light.mod-icon-disconnected { - background-image: url(white/disconnected.png); -} -.mod-light .mod-icon-disconnected, .mod-dark.mod-icon-disconnected { - background-image: url(black/disconnected.png); -} - - -.mod-dark .mod-icon-edit, .mod-light.mod-icon-edit { - background-image: url(white/edit.png); -} -.mod-light .mod-icon-edit, .mod-dark.mod-icon-edit { - background-image: url(black/edit.png); -} - - -.mod-dark .mod-icon-folder, .mod-light.mod-icon-folder { - background-image: url(white/folder.png); -} -.mod-light .mod-icon-folder, .mod-dark.mod-icon-folder { - background-image: url(black/folder.png); -} - - -.mod-dark .mod-icon-footswitch, .mod-light.mod-icon-footswitch { - background-image: url(white/footswitch.png); -} -.mod-light .mod-icon-footswitch, .mod-dark.mod-icon-footswitch { - background-image: url(black/footswitch.png); -} - - -.mod-dark .mod-icon-knob, .mod-light.mod-icon-knob { - background-image: url(white/knob.png); -} -.mod-light .mod-icon-knob, .mod-dark.mod-icon-knob { - background-image: url(black/knob.png); -} - - -.mod-dark .mod-icon-load, .mod-light.mod-icon-load { - background-image: url(white/load.png); -} -.mod-light .mod-icon-load, .mod-dark.mod-icon-load { - background-image: url(black/load.png); -} - - -.mod-dark .mod-icon-midi, .mod-light.mod-icon-midi { - background-image: url(white/midi.png); -} -.mod-light .mod-icon-midi, .mod-dark.mod-icon-midi { - background-image: url(black/midi.png); -} - - -.mod-dark .mod-icon-mod, .mod-light.mod-icon-mod { - background-image: url(white/mod.png); -} -.mod-light .mod-icon-mod, .mod-dark.mod-icon-mod { - background-image: url(black/mod.png); -} - - -.mod-dark .mod-icon-ok, .mod-light.mod-icon-ok { - background-image: url(white/ok.png); -} -.mod-light .mod-icon-ok, .mod-dark.mod-icon-ok { - background-image: url(black/ok.png); -} - - -.mod-dark .mod-icon-pedal, .mod-light.mod-icon-pedal { - background-image: url(white/pedal.png); -} -.mod-light .mod-icon-pedal, .mod-dark.mod-icon-pedal { - background-image: url(black/pedal.png); -} - - -.mod-dark .mod-icon-pedalboard, .mod-light.mod-icon-pedalboard { - background-image: url(white/pedalboard.png); -} -.mod-light .mod-icon-pedalboard, .mod-dark.mod-icon-pedalboard { - background-image: url(black/pedalboard.png); -} - - -.mod-dark .mod-icon-pedals, .mod-light.mod-icon-pedals { - background-image: url(white/pedals.png); -} -.mod-light .mod-icon-pedals, .mod-dark.mod-icon-pedals { - background-image: url(black/pedals.png); -} - - -.mod-dark .mod-icon-pin, .mod-light.mod-icon-pin { - background-image: url(white/pin.png); -} -.mod-light .mod-icon-pin, .mod-dark.mod-icon-pin { - background-image: url(black/pin.png); -} - - -.mod-dark .mod-icon-pinned, .mod-light.mod-icon-pinned { - background-image: url(white/pinned.png); -} -.mod-light .mod-icon-pinned, .mod-dark.mod-icon-pinned { - background-image: url(black/pinned.png); -} - - -.mod-dark .mod-icon-remove, .mod-light.mod-icon-remove { - background-image: url(white/remove.png); -} -.mod-light .mod-icon-remove, .mod-dark.mod-icon-remove { - background-image: url(black/remove.png); -} - - -.mod-dark .mod-icon-save, .mod-light.mod-icon-save { - background-image: url(white/save.png); -} -.mod-light .mod-icon-save, .mod-dark.mod-icon-save { - background-image: url(black/save.png); -} - - -.mod-dark .mod-icon-settings, .mod-light.mod-icon-settings { - background-image: url(white/settings.png); -} -.mod-light .mod-icon-settings, .mod-dark.mod-icon-settings { - background-image: url(black/settings.png); -} - - diff --git a/html/img/icons/icons.svg b/html/img/icons/icons.svg deleted file mode 100644 index b91e2318a..000000000 --- a/html/img/icons/icons.svg +++ /dev/null @@ -1,1511 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/img/icons/makefile b/html/img/icons/makefile deleted file mode 100644 index 398ce57fa..000000000 --- a/html/img/icons/makefile +++ /dev/null @@ -1,17 +0,0 @@ -PNG = $(wildcard *.png) -FILE="icons.css" - -all: - @-rm icons.css - @touch icons.css - @for i in $(PNG) ; do \ - io=$$(echo $$i | sed 's/.png//') ; \ - convert $$i -negate black/$$i ; \ - mv $$i white/$$i ; \ - done - @for i in white/*.png ; do \ - io=$$(echo $$i | sed 's/.png//' | sed 's/white\///') ; \ - if=$$(echo $$i | sed 's/white\///') ; \ - echo ".mod-dark .mod-icon-"$$io", .mod-light.mod-icon-"$$io" {\n background-image: url(white/"$$if");\n}" >> $(FILE) ; \ - echo ".mod-light .mod-icon-"$$io", .mod-dark.mod-icon-"$$io" {\n background-image: url(black/"$$if");\n}\n\n" >> $(FILE) ; \ - done diff --git a/html/img/icons/stop.png b/html/img/icons/stop.png deleted file mode 100644 index 126eb8129..000000000 Binary files a/html/img/icons/stop.png and /dev/null differ diff --git a/html/img/icons/transport.png b/html/img/icons/transport.png deleted file mode 100644 index fe76cc2cb..000000000 Binary files a/html/img/icons/transport.png and /dev/null differ diff --git a/html/img/icons/transport.svg b/html/img/icons/transport.svg deleted file mode 100644 index 34d9165b0..000000000 --- a/html/img/icons/transport.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/html/img/knob.png b/html/img/knob.png deleted file mode 100644 index 19cde252a..000000000 Binary files a/html/img/knob.png and /dev/null differ diff --git a/html/img/knob_steps_10.png b/html/img/knob_steps_10.png deleted file mode 100644 index aecd0e296..000000000 Binary files a/html/img/knob_steps_10.png and /dev/null differ diff --git a/html/img/knob_steps_11.png b/html/img/knob_steps_11.png deleted file mode 100644 index eba7ef17b..000000000 Binary files a/html/img/knob_steps_11.png and /dev/null differ diff --git a/html/img/knob_steps_12.png b/html/img/knob_steps_12.png deleted file mode 100644 index 2da203744..000000000 Binary files a/html/img/knob_steps_12.png and /dev/null differ diff --git a/html/img/knob_steps_13.png b/html/img/knob_steps_13.png deleted file mode 100644 index d919e60c9..000000000 Binary files a/html/img/knob_steps_13.png and /dev/null differ diff --git a/html/img/knob_steps_14.png b/html/img/knob_steps_14.png deleted file mode 100644 index 12c15a880..000000000 Binary files a/html/img/knob_steps_14.png and /dev/null differ diff --git a/html/img/knob_steps_15.png b/html/img/knob_steps_15.png deleted file mode 100644 index ade363388..000000000 Binary files a/html/img/knob_steps_15.png and /dev/null differ diff --git a/html/img/knob_steps_16.png b/html/img/knob_steps_16.png deleted file mode 100644 index f3456437b..000000000 Binary files a/html/img/knob_steps_16.png and /dev/null differ diff --git a/html/img/knob_steps_17.png b/html/img/knob_steps_17.png deleted file mode 100644 index f1df1a503..000000000 Binary files a/html/img/knob_steps_17.png and /dev/null differ diff --git a/html/img/knob_steps_3.png b/html/img/knob_steps_3.png deleted file mode 100644 index 250dcaf13..000000000 Binary files a/html/img/knob_steps_3.png and /dev/null differ diff --git a/html/img/knob_steps_4.png b/html/img/knob_steps_4.png deleted file mode 100644 index 276861e54..000000000 Binary files a/html/img/knob_steps_4.png and /dev/null differ diff --git a/html/img/knob_steps_5.png b/html/img/knob_steps_5.png deleted file mode 100644 index f0513b2f6..000000000 Binary files a/html/img/knob_steps_5.png and /dev/null differ diff --git a/html/img/knob_steps_6.png b/html/img/knob_steps_6.png deleted file mode 100644 index c366ad396..000000000 Binary files a/html/img/knob_steps_6.png and /dev/null differ diff --git a/html/img/knob_steps_7.png b/html/img/knob_steps_7.png deleted file mode 100644 index 47e815f81..000000000 Binary files a/html/img/knob_steps_7.png and /dev/null differ diff --git a/html/img/knob_steps_8.png b/html/img/knob_steps_8.png deleted file mode 100644 index 3fd139591..000000000 Binary files a/html/img/knob_steps_8.png and /dev/null differ diff --git a/html/img/knob_steps_9.png b/html/img/knob_steps_9.png deleted file mode 100644 index 17ae5d1f5..000000000 Binary files a/html/img/knob_steps_9.png and /dev/null differ diff --git a/html/img/library-background.png b/html/img/library-background.png deleted file mode 100755 index 5e507963f..000000000 Binary files a/html/img/library-background.png and /dev/null differ diff --git a/html/img/loading-effect.gif b/html/img/loading-effect.gif deleted file mode 100644 index 13f0f64ea..000000000 Binary files a/html/img/loading-effect.gif and /dev/null differ diff --git a/html/img/loading-pedalboard.gif b/html/img/loading-pedalboard.gif deleted file mode 100644 index ffb2ddc64..000000000 Binary files a/html/img/loading-pedalboard.gif and /dev/null differ diff --git a/html/img/loading-pedalboard_old.gif b/html/img/loading-pedalboard_old.gif deleted file mode 100644 index 3fa906395..000000000 Binary files a/html/img/loading-pedalboard_old.gif and /dev/null differ diff --git a/html/img/loading.gif b/html/img/loading.gif deleted file mode 100644 index cbc528efb..000000000 Binary files a/html/img/loading.gif and /dev/null differ diff --git a/html/img/loading.svg b/html/img/loading.svg deleted file mode 100644 index e66e212f3..000000000 --- a/html/img/loading.svg +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/img/menu-icons-sprite.png b/html/img/menu-icons-sprite.png deleted file mode 100755 index e757b27db..000000000 Binary files a/html/img/menu-icons-sprite.png and /dev/null differ diff --git a/html/img/midi-input-connected-highlight.png b/html/img/midi-input-connected-highlight.png deleted file mode 100644 index 6c300da4d..000000000 Binary files a/html/img/midi-input-connected-highlight.png and /dev/null differ diff --git a/html/img/midi-input-connected.png b/html/img/midi-input-connected.png deleted file mode 100644 index 39ac165b0..000000000 Binary files a/html/img/midi-input-connected.png and /dev/null differ diff --git a/html/img/midi-input-connecting-highlight.png b/html/img/midi-input-connecting-highlight.png deleted file mode 100644 index 6d918a535..000000000 Binary files a/html/img/midi-input-connecting-highlight.png and /dev/null differ diff --git a/html/img/midi-input-connecting.png b/html/img/midi-input-connecting.png deleted file mode 100644 index aa0484d65..000000000 Binary files a/html/img/midi-input-connecting.png and /dev/null differ diff --git a/html/img/midi-input.png b/html/img/midi-input.png deleted file mode 100644 index 6bf714a7c..000000000 Binary files a/html/img/midi-input.png and /dev/null differ diff --git a/html/img/midi-jack-nconnect.png b/html/img/midi-jack-nconnect.png deleted file mode 100644 index b0aa98084..000000000 Binary files a/html/img/midi-jack-nconnect.png and /dev/null differ diff --git a/html/img/midi-jack.png b/html/img/midi-jack.png deleted file mode 100644 index 6e5005da1..000000000 Binary files a/html/img/midi-jack.png and /dev/null differ diff --git a/html/img/midi-output-connected.png b/html/img/midi-output-connected.png deleted file mode 100644 index 6b99f90ff..000000000 Binary files a/html/img/midi-output-connected.png and /dev/null differ diff --git a/html/img/midi-output.png b/html/img/midi-output.png deleted file mode 100644 index d07f42722..000000000 Binary files a/html/img/midi-output.png and /dev/null differ diff --git a/html/img/midi-plug.png b/html/img/midi-plug.png deleted file mode 100644 index 6e5005da1..000000000 Binary files a/html/img/midi-plug.png and /dev/null differ diff --git a/html/img/mod-mini.png b/html/img/mod-mini.png deleted file mode 100755 index 36424cd7a..000000000 Binary files a/html/img/mod-mini.png and /dev/null differ diff --git a/html/img/mod-popout-anchor-bottom.png b/html/img/mod-popout-anchor-bottom.png deleted file mode 100644 index 7759132d0..000000000 Binary files a/html/img/mod-popout-anchor-bottom.png and /dev/null differ diff --git a/html/img/mod-popout-anchor-left.png b/html/img/mod-popout-anchor-left.png deleted file mode 100644 index 5a302a45d..000000000 Binary files a/html/img/mod-popout-anchor-left.png and /dev/null differ diff --git a/html/img/mod-popout-anchor-right.png b/html/img/mod-popout-anchor-right.png deleted file mode 100644 index 486d904d3..000000000 Binary files a/html/img/mod-popout-anchor-right.png and /dev/null differ diff --git a/html/img/mod-popout-anchor-top.png b/html/img/mod-popout-anchor-top.png deleted file mode 100644 index c2229fd0b..000000000 Binary files a/html/img/mod-popout-anchor-top.png and /dev/null differ diff --git a/html/img/move.png b/html/img/move.png deleted file mode 100755 index 5d3e94384..000000000 Binary files a/html/img/move.png and /dev/null differ diff --git a/html/img/nav-bottom.png b/html/img/nav-bottom.png deleted file mode 100644 index c98504c15..000000000 Binary files a/html/img/nav-bottom.png and /dev/null differ diff --git a/html/img/nav-left.png b/html/img/nav-left.png deleted file mode 100755 index e3dbbfd05..000000000 Binary files a/html/img/nav-left.png and /dev/null differ diff --git a/html/img/nav-right.png b/html/img/nav-right.png deleted file mode 100755 index 8b0bcd469..000000000 Binary files a/html/img/nav-right.png and /dev/null differ diff --git a/html/img/nav-top.png b/html/img/nav-top.png deleted file mode 100644 index b104c0fa3..000000000 Binary files a/html/img/nav-top.png and /dev/null differ diff --git a/html/img/purple-light-off.png b/html/img/purple-light-off.png deleted file mode 100644 index 2c5624011..000000000 Binary files a/html/img/purple-light-off.png and /dev/null differ diff --git a/html/img/purple-light-on.png b/html/img/purple-light-on.png deleted file mode 100644 index a56bc381e..000000000 Binary files a/html/img/purple-light-on.png and /dev/null differ diff --git a/html/img/px.gif b/html/img/px.gif deleted file mode 100644 index 57c007ba1..000000000 Binary files a/html/img/px.gif and /dev/null differ diff --git a/html/img/rack.png b/html/img/rack.png deleted file mode 100755 index 8f7a60de5..000000000 Binary files a/html/img/rack.png and /dev/null differ diff --git a/html/img/red-light-off.png b/html/img/red-light-off.png deleted file mode 100755 index 6239f0754..000000000 Binary files a/html/img/red-light-off.png and /dev/null differ diff --git a/html/img/red-light-on.png b/html/img/red-light-on.png deleted file mode 100755 index 55474155c..000000000 Binary files a/html/img/red-light-on.png and /dev/null differ diff --git a/html/img/rocker-switch-off.png b/html/img/rocker-switch-off.png deleted file mode 100755 index 064aef2b4..000000000 Binary files a/html/img/rocker-switch-off.png and /dev/null differ diff --git a/html/img/rocker-switch-on.png b/html/img/rocker-switch-on.png deleted file mode 100755 index 22982dfb0..000000000 Binary files a/html/img/rocker-switch-on.png and /dev/null differ diff --git a/html/img/sample-lata.png b/html/img/sample-lata.png deleted file mode 100755 index dce5af801..000000000 Binary files a/html/img/sample-lata.png and /dev/null differ diff --git a/html/img/settings.png b/html/img/settings.png deleted file mode 100755 index a771b0664..000000000 Binary files a/html/img/settings.png and /dev/null differ diff --git a/html/img/slider.png b/html/img/slider.png deleted file mode 100644 index a35755c20..000000000 Binary files a/html/img/slider.png and /dev/null differ diff --git a/html/img/social/default-plugin.png b/html/img/social/default-plugin.png deleted file mode 100644 index 2471fd06d..000000000 Binary files a/html/img/social/default-plugin.png and /dev/null differ diff --git a/html/img/social/favicon.png b/html/img/social/favicon.png deleted file mode 100644 index 3c64cc018..000000000 Binary files a/html/img/social/favicon.png and /dev/null differ diff --git a/html/img/social/logo-b.png b/html/img/social/logo-b.png deleted file mode 100644 index 15f6c27b8..000000000 Binary files a/html/img/social/logo-b.png and /dev/null differ diff --git a/html/img/social/logo-w.png b/html/img/social/logo-w.png deleted file mode 100644 index 02ac62e9b..000000000 Binary files a/html/img/social/logo-w.png and /dev/null differ diff --git a/html/img/social/pattern-collapse.png b/html/img/social/pattern-collapse.png deleted file mode 100644 index 53f6f0d73..000000000 Binary files a/html/img/social/pattern-collapse.png and /dev/null differ diff --git a/html/img/social/social_pedal.png b/html/img/social/social_pedal.png deleted file mode 100644 index f1314dbac..000000000 Binary files a/html/img/social/social_pedal.png and /dev/null differ diff --git a/html/img/social/social_pedalboards.png b/html/img/social/social_pedalboards.png deleted file mode 100644 index 77bf67e80..000000000 Binary files a/html/img/social/social_pedalboards.png and /dev/null differ diff --git a/html/img/social/thumbnail.png b/html/img/social/thumbnail.png deleted file mode 100644 index 60cfc2a80..000000000 Binary files a/html/img/social/thumbnail.png and /dev/null differ diff --git a/html/img/switch.png b/html/img/switch.png deleted file mode 100644 index fa6c0b5e5..000000000 Binary files a/html/img/switch.png and /dev/null differ diff --git a/html/img/switch.svg b/html/img/switch.svg deleted file mode 100644 index 0a5aeadcc..000000000 --- a/html/img/switch.svg +++ /dev/null @@ -1,509 +0,0 @@ - - - -image/svg+xmlswitchparticipantothercourseJun 2009Franziska SponselFranziska SponselRRZEBeate Kaspar, Hendrik Eggersuses < http://ftp.uni-erlangen.de/pub/rrze/tango/rrze-icon-set/tango/scalable/actions/switch-course.svg> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/img/teste.png b/html/img/teste.png deleted file mode 100755 index 122e112f4..000000000 Binary files a/html/img/teste.png and /dev/null differ diff --git a/html/img/trial-src.svg b/html/img/trial-src.svg deleted file mode 100644 index c0521b809..000000000 --- a/html/img/trial-src.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - TRIAL - - diff --git a/html/img/trial.svg b/html/img/trial.svg deleted file mode 100644 index dc1bf1fd1..000000000 --- a/html/img/trial.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/html/img/ui-elements.svg b/html/img/ui-elements.svg deleted file mode 100644 index 1b77f59f0..000000000 --- a/html/img/ui-elements.svg +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/img/watermark.png b/html/img/watermark.png deleted file mode 100644 index 77376a437..000000000 Binary files a/html/img/watermark.png and /dev/null differ diff --git a/html/include/addressing.html b/html/include/addressing.html deleted file mode 100644 index b49110e25..000000000 --- a/html/include/addressing.html +++ /dev/null @@ -1,130 +0,0 @@ -
-
-
-

{{label}} - {{name}}

× -
-
-
-
-
-
-
- -
- Translate value to musical tempo -
-
- - -
-
-
- - - -
- - - - - - - - -
-
-
- Cancel - Save - Advanced -
-
- - -
-
-
-
diff --git a/html/include/bank_item.html b/html/include/bank_item.html deleted file mode 100644 index dee27a2f6..000000000 --- a/html/include/bank_item.html +++ /dev/null @@ -1,5 +0,0 @@ -
- - {{title}} - -
diff --git a/html/include/bank_pedalboard.html b/html/include/bank_pedalboard.html deleted file mode 100644 index e572b98ef..000000000 --- a/html/include/bank_pedalboard.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
-
- {{index}}{{#index}} {{/index}} - {{title}} - -
-
- -
-
-
diff --git a/html/include/bypass_addressing.html b/html/include/bypass_addressing.html deleted file mode 100644 index e499bb17f..000000000 --- a/html/include/bypass_addressing.html +++ /dev/null @@ -1,114 +0,0 @@ -
-
-
-

{{label}} - {{name}}

× -
-
-
-
-
-
-
- -
- Translate value to musical tempo -
-
- -
-
-
- - - -
- - - - - - - - -
-
-
- Cancel - Save - Advanced -
-
- - -
-
-
-
diff --git a/html/include/cloudplugin.html b/html/include/cloudplugin.html deleted file mode 100644 index 0ef2d3c8b..000000000 --- a/html/include/cloudplugin.html +++ /dev/null @@ -1,37 +0,0 @@ -
-
-
- {{#demo}} -
- {{/demo}} - -
-
- {{label}} - {{brand}} -
-

{{comment}}

-
-
- {{#status}} - - {{/status}} - - {{#price}} - - {{price}} - - {{/price}} - {{#licensed}} - - - - {{/licensed}} - {{#coming}} - - - - {{/coming}} -
-
-
diff --git a/html/include/cloudplugin_info.html b/html/include/cloudplugin_info.html deleted file mode 100644 index 220c772b5..000000000 --- a/html/include/cloudplugin_info.html +++ /dev/null @@ -1,147 +0,0 @@ -
-
-
- Close - {{#price}} -
-
{{price}}
-
- {{/price}} - {{#licensed}} -
-
-
- {{/licensed}} - {{#coming}} -
-
-
- {{/coming}} -
-
- {{#demo}} -
- {{/demo}} - {{#show_build_env}} -
{{build_env_uppercase}}
- {{/show_build_env}} - -
- -
-
-

{{name}}

- {{#installed}} - - {{/installed}} -
-

- URI: {{uri}}
- Category: {{category}}
-

-

- Author: {{author.name}}
- Homepage: {{author.homepage}}
-

-

- - Latest Version: {{latest_version}}
-
- - Installed Version: {{installed_version}}
-
- - {{#shopify_id}} - - - {{/shopify_id}} -
- - - -  
-

-
-

{{comment}}

- {{#pedalboard_href}} - - See it in action - - {{/pedalboard_href}} - - See online - - {{#discussion_href}} - - See discussion - - {{/discussion_href}} - {{#documentation_href}} - - See documentation - - {{/documentation_href}} -
-

CONTROL PORTS:

- - - - - - - - {{#ports.control.input}} - - - - - - - {{/ports.control.input}} -
ControlDefaultMinMax
{{shortName}}{{formatted.default}}{{formatted.minimum}}{{formatted.maximum}}
-
-
-

CV INPUTS:

- - - - - - - - {{#ports.cv.input}} - - - - - - - {{/ports.cv.input}} -
PortDefaultMinMax
{{shortName}}{{formatted.default}}{{formatted.minimum}}{{formatted.maximum}}
-
-
-

CV OUTPUTS:

- - - - - - - - {{#ports.cv.output}} - - - - - - - {{/ports.cv.output}} -
PortDefaultMinMax
{{shortName}}{{formatted.default}}{{formatted.minimum}}{{formatted.maximum}}
-
-
-
-
-
-
diff --git a/html/include/featuredplugin.html b/html/include/featuredplugin.html deleted file mode 100644 index 3d7b2d1e7..000000000 --- a/html/include/featuredplugin.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/html/include/notification.html b/html/include/notification.html deleted file mode 100644 index 6dcf1f0fc..000000000 --- a/html/include/notification.html +++ /dev/null @@ -1,5 +0,0 @@ -
- -
{{{message}}}
-
-
diff --git a/html/include/pedalboard.html b/html/include/pedalboard.html deleted file mode 100644 index 73d38c6bc..000000000 --- a/html/include/pedalboard.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
- {{title}} - - - - -
-
-
diff --git a/html/include/plugin.html b/html/include/plugin.html deleted file mode 100644 index e083a3bee..000000000 --- a/html/include/plugin.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
- {{#demo}} -
- {{/demo}} - -
- {{{label}}} - {{{brand}}} -
diff --git a/html/index.html b/html/index.html index 3a7606ab3..1eb77e668 100644 --- a/html/index.html +++ b/html/index.html @@ -1,1119 +1,14 @@ - - - - - - -MOD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
- - -{% if using_desktop == 'true' or using_mod == 'true' %} - -
-
- {% if using_desktop == 'true' %} -

Welcome to MOD Desktop!

-
-

- We're thrilled to have you on board and can't wait for you to explore all the amazing features we've built for you. - Before you dive in, there's just a little bit of housekeeping to take care of.
- By using this application you're agreeing to our - Terms of Use - and - Privacy Policy. - They outline how we work together, use your data, and protect your privacy – ensuring a safe and enjoyable experience for everyone.
- So, take a quick moment to review these documents. - Once you're all set, the world of MOD is yours to explore. - Happy modding!
-

-
- {% else %} -

Terms of Use for MOD online components

- × -
-
-

- (NOTE: THIS AN EXAMPLE TEXT YET TO BE REVIEWED)
- Your MOD unit can receive firmware updates over the internet, and also download new plugins and pedalboards.
- The use of these online services is under Terms of Use and Privacy Policy in order to comply with different regulatory laws across the globe.
-

-

- Please review our - Terms of Use - and - Privacy Policy before continuing.
- While you can freely use your MOD unit without accepting these terms, you must agree to them in order to enable or perform any online interaction. -

-
- {% end %} -
- {% if using_desktop == 'true' %} - - {% else %} - - - {% end %} -
-
-
- -{% end %} - - -
- - -
-

Settings

-
-
- - - -
- - -
-
-

Saving Pedalboard

× -
-
-
- - -
-
- - -
-
-
-
- - - -
-
-

Saving

× -
-
-
- - -
-
- - -
-
-
-
- - - -
-
-

SHARE

× -
- Warning: This pedalboard contains MOD Labs plugins and won't be available to most users -
-
-
-
-
- -
-
- -
- - - -
-
-
-

Record a sample

- -

(optional)

-

-
-
-

Recording starts in

- 3 -
-
-
-

Recording

- 0:15 -

(click the square to stop)

-

-
-
- - - - -
- -
-
-
 
-
- - -
-
-
-
-
- - - -
- - -
-

{{fulltitle}}

-
- -
- -
    -
  • Save
  • -
  • Save as
  • - -
  • Load / Manage
  • -
-
- - - - -
-
- - - -
- - -
- - -
- - - -
- - - -
-
-

MIDI Ports List

-
-
-
- -
-
- -
-
- -
-
-
- - -
-
-
-
-
- - - -
-
-

Load / Manage snapshots

× -
-
- - -
-
- - - - -
-
-
-
- - - -
-
-

Control Chain Device Update

× -
-
-
-

- Your Control Chain (CC) device firmware is ready to be updated. -

-

- To continue, please follow these steps: -

-
    -
  • Disconnect the CC device from the Control Chain port
  • -
  • Hold down the first footswitch on the CC device
  • -
  • While the first footswitch is held down, connect the CC device to your MOD device via USB
  • -
  • Wait for the "update completed" message
  • -
  • Disconnect the CC device from the USB port
  • -
  • Connect the CC device to the Control Chain port once again
  • -
-

- Note: The update should only take a few seconds. -

-
-
-
-
- - -
- - - - - - - -
- - -
    -
  • Favorites
  • -
  • All
  • -
  • Control Voltage
  • -
  • Delay
  • -
  • Distortion
  • -
  • Dynamics
  • -
  • Filter
  • -
  • Generator
  • -
  • MIDI Utility
  • -
  • Modulator
  • -
  • Reverb
  • -
  • Simulator
  • -
  • Spatial
  • -
  • Spectral
  • -
  • Utility
  • - - -
- - - - - -
-
-
- -
-
-
- - - -
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
- - -
- - - -
-
-
-

PLUGIN STORE

- - -
- -
-

Filter

-
- - -
-
- - -
-
-
- - - - - - - -
-
-
    -
  • All
  • -
  • Control Voltage
  • -
  • Delay
  • -
  • Distortion
  • -
  • Dynamics
  • -
  • Filter
  • -
  • Generator
  • -
  • MIDI Utility
  • -
  • Modulator
  • -
  • Reverb
  • -
  • Simulator
  • -
  • Spatial
  • -
  • Spectral
  • -
  • Utility
  • - - -
-
- -
-
- -
-
- -

Filtered results

-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - -
-
- -
-
- - - -
-
-
-

- Pedalboards Library -

-
- -
- - - Browse Online Pedalboards - - - - - -
-
-
- {% if factory_pedalboards %} - User Pedalboards -
- {% end %} -
-
- {% if factory_pedalboards %} -
- Factory Pedalboards -
-
-
- {% end %} -
-
-
- - - -
-
-

User Banks

-
- - -
-
Add Bank
- -
- - - -
-
-

Untitled

-
-
-
- {% if factory_pedalboards %} -

- This page is dedicated to user banks.
- Factory banks are not displayed in this area. -

-

- To start using banks click on "Add Bank" on the left side, - give it a name and then drag and drop pedalboards from the right side. -

- {% else %} -

- To start using banks click on "Add Bank" on the left side, - give it a name and then drag and drop pedalboards from the right side. -

- {% end %} -
-
- - - - - - -
- - - -
-
-

File Manager

-
-
- -
-
- - - -
-
-
New updates are available. Click to learn more.
-
- - - -
-
-
-
Downloading...
-
Download complete
-
-
-
-


-
-
-

- Update version 0.0.0.
- Released on 0000-00-00. -

-

- Curious about this release? Check out - this forum post - where you can read more details and discuss with our community. -

-

- - -

-
-
-
- - - -
-
-
-

Control Chain Devices

-
    -
    -
    -
    - - - -
    -
    -
    -
    - Sync Mode -
    -
    Internal
    -
    - MIDI -
    -
    Ableton™ Link
    -
    -
    - -
    - Beats Per Minute - 20 BPM - 280 BPM - ---.-- BPM -
    -
    -
    - -
    - Beats Per Bar - 1/4 - 16/4 - -/4 -
    -
    -
    - -
    - Transport -
    -
    -
    -
    - -
    -
    -
    - - - -
    - - - - + + + + + + + MOD UI + + + + +
    + diff --git a/html/js/banks.js b/html/js/banks.js deleted file mode 100644 index 3ec43b8c0..000000000 --- a/html/js/banks.js +++ /dev/null @@ -1,457 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -JqueryClass('bankBox', { - init: function (options) { - var self = $(this) - - options = $.extend({ - bankCanvas: self.find('#bank-list .js-canvas'), - addButton: self.find('#js-add-bank'), - pedalboardCanvas: self.find('#bank-pedalboards'), - initMessage: self.find('#bank-init'), - searchForm: self.find('#bank-pedalboards-search'), - searchBox: self.find('input[type=search]'), - resultCanvasUser: self.find('#bank-pedalboards-result .js-user-pedalboards'), - resultCanvasFactory: self.find('#bank-pedalboards-result .js-factory-pedalboards'), - bankTitle: self.find('#bank-title'), - saving: $('#banks-saving'), - previousBankTitle: null, - list: function (callback) { - callback([]) - }, - search: function (local, query, callback) { - callback([]) - }, - load: function (callback) { - callback([]) - }, - save: function (data, callback) { - callback(true) - }, - copyFactoryPedalboard: function (bundlepath, title, callback) { - callback({}) - }, - isMainWindow: true, - windowName: "Banks" - }, options) - - self.data(options) - - options.pedalboardCanvas.hide() - options.searchForm.hide() - options.resultCanvasUser.hide() - options.resultCanvasFactory.hide() - options.initMessage.show() - options.addButton.click(function () { - self.bankBox('create') - }) - - var searcher = new PedalboardSearcher($.extend({ - searchbox: options.searchBox, - mode: 'installed', - skipBroken: true, - render: function (pedalboard, url) { - var rendered = self.bankBox('renderPedalboard', pedalboard) - rendered.draggable({ - cursor: "grabbing !important", - revert: 'invalid', - connectToSortable: options.pedalboardCanvas, - helper: function () { - var helper = rendered.clone().appendTo(self) - helper.addClass('mod-banks-drag-item') - helper.removeClass('js-pedalboard-item') - helper.find('.js-remove').hide() - return helper - } - }) - if (pedalboard.factory) { - self.data('resultCanvasFactory').append(rendered) - } else { - self.data('resultCanvasUser').append(rendered) - } - }, - cleanResults: function () { - self.data('resultCanvasUser').html('') - self.data('resultCanvasFactory').html('') - } - }, options)) - - options.pedalboardCanvas.sortable({ - cursor: "grabbing !important", - revert: true, - receive: function (e, ui) { - // the next update call will be acting on a cloned item, not this one. - // as such, we need to cache these values and set them on the newly cloned object for the update - self.droppedBundle = ui.item.data('pedalboardBundle') - self.droppedTitle = ui.item.data('pedalboardTitle') - self.isFactoryPedalboard = ui.item.data('isFactoryPedalboard') - if (self.isFactoryPedalboard) { - self.clonedFactoryItem = ui.item.clone() - } - }, - update: function (e, ui) { - if (self.droppedBundle) { - // cloned item that got moved into the central area, re-set data attributes - ui.item.data('pedalboardBundle', self.droppedBundle) - ui.item.data('pedalboardTitle', self.droppedTitle) - ui.item.data('isFactoryPedalboard', self.isFactoryPedalboard) - - // if factory pedalboard was dropped, handle user-data copying - if (self.isFactoryPedalboard) { - self.data('copyFactoryPedalboard')(self.droppedBundle, self.droppedTitle, function(pb) { - ui.item.data('pedalboardBundle', pb.bundlepath) - ui.item.data('pedalboardTitle', pb.title) - ui.item.data('isFactoryPedalboard', false) - ui.item.find('.js-title').text(pb.title) - - // add the newly copied pedalboard to the user-data canvas area - var clone = self.clonedFactoryItem - clone.draggable({ - cursor: "grabbing !important", - revert: 'invalid', - connectToSortable: options.pedalboardCanvas, - helper: function () { - var helper = clone.clone().appendTo(self) - helper.addClass('mod-banks-drag-item') - helper.removeClass('js-pedalboard-item') - helper.find('.js-remove').hide() - return helper - } - }) - clone.data('pedalboardBundle', pb.bundlepath) - clone.data('pedalboardTitle', pb.title) - clone.data('isFactoryPedalboard', false) - clone.find('.js-title').text(pb.title) - self.data('resultCanvasUser').append(clone) - self.clonedFactoryItem = null - - self.bankBox('save') - }) - } - } - - ui.item.removeClass('js-pedalboard-item') - - // TODO the code below is repeated. The former click event is not triggered because - // the element is cloned - ui.item.find('.js-remove').show().click(function () { - ui.item.animate({ - opacity: 0, - height: 0 - }, function () { - ui.item.remove() - self.bankBox('save') - }) - }) - - // if this is a factory pedalboard drop, do not save just yet - if (!self.isFactoryPedalboard) { - self.bankBox('save') - } - - self.droppedBundle = self.droppedTitle = null - self.isFactoryPedalboard = false - }, - }) - - options.bankCanvas.sortable({ - handle: '.move', - update: function () { - self.bankBox('save') - } - }) - - options.open = function () { - searcher.search() - self.bankBox('load') - return false - } - - self.window(options) - }, - - load: function () { - var self = $(this) - self.data('loading', true) - - if (self.data('loaded')) { - self.data('currentBank', null) - self.data('pedalboardCanvas').html('').hide() - self.data('searchForm').hide() - self.data('resultCanvasUser').hide() - self.data('resultCanvasFactory').hide() - self.data('bankTitle').hide() - } else { - self.data('loaded', true) - } - - self.data('load')(function (banks) { - self.data('bankCanvas').html('') - if (banks.length > 0) { - var bank, previousBankTitle = self.data('previousBankTitle') - self.data('currentBank', null) - self.data('previousBankTitle', null) - - for (var i = 0; i < banks.length; i++) { - bank = self.bankBox('renderBank', banks[i], i) - if (previousBankTitle == banks[i].title) { - self.bankBox('selectBank', bank) - } - } - } - self.data('loading', false) - }) - }, - - save: function () { - var self = $(this) - var serialized = [] - self.data('bankCanvas').children().each(function () { - var bank = $(this) - var pedalboards = (bank.data('selected') ? self.data('pedalboardCanvas') : bank.data('pedalboards')) - var pedalboardData = [] - pedalboards.children().each(function () { - var bundle = $(this).data('pedalboardBundle') - var title = $(this).data('pedalboardTitle') - if (!bundle) { - return - } - pedalboardData.push({ - bundle: bundle, - title: title, - }) - }) - - serialized.push({ - title: bank.find('.js-bank-title').text(), - pedalboards: pedalboardData, - }) - }); - self.data('saving').html('Auto saving banks...').show() - self.data('save')(serialized, function (ok) { - if (ok) - self.data('saving').html('Auto saving banks... Done!').show() - - else { - self.data('saving').html('Auto saving banks... Error!').show() - new Notification('error', 'Error saving banks!') - } - if (self.data('savingTimeout')) { - clearTimeout(self.data('savingTimeout')) - } - var timeout = setTimeout(function () { - self.data('savingTimeout', null) - self.data('saving').hide() - }, 500) - self.data('savingTimeout', timeout) - }) - // Update displayed indexes - self.data('pedalboardCanvas').children().each(function (i) { - var pedalboard = $(this) - var index = pedalboard.find(".js-index") - index.html((i+1) + ". ") - }) - }, - - create: function () { - var self = $(this) - if (self.data('resultCanvasUser').children().length + self.data('resultCanvasFactory').children().length === 0) { - new Notification('error', 'Before creating banks you must save a pedalboard first.') - return; - } - if (self.data('loading')) { - return - } - - var bankData = { - 'title': '', - 'pedalboards': [], - } - var bank = self.bankBox('renderBank', bankData) - self.bankBox('editBank', bank) - self.bankBox('selectBank', bank) - }, - - renderBank: function (bankData) { - var self = $(this) - var bank = $(Mustache.render(TEMPLATES.bank_item, bankData)) - self.data('bankCanvas').append(bank) - bank.data('selected', false) - bank.data('pedalboards', $('
    ')) - bank.data('title', bankData.title) - - var i, pedalboardData, rendered - for (i = 0; i < bankData.pedalboards.length; i++) { - rendered = self.bankBox('renderPedalboard', bankData.pedalboards[i], i+1) - rendered.find('.js-remove').show() - rendered.appendTo(bank.data('pedalboards')) - } - - bank.click(function () { - if (self.data('loading')) { - self.data('previousBankTitle', bankData.title) - return - } - if (bank.hasClass('selected')) - self.bankBox('editBank', bank) - else - self.bankBox('selectBank', bank) - }) - - bank.find('.js-remove').click(function () { - if (self.data('loading')) { - return false - } - self.bankBox('removeBank', bank) - return false - }) - - return bank - }, - - selectBank: function (bank) { - var self = $(this) - var pedalboards = bank.data('pedalboards') - var canvas = self.data('pedalboardCanvas') - - var current = self.data('currentBank') - if (current) { - // Save the pedalboards of the current bank - current.data('pedalboards').append(canvas.children()) - current.data('selected', false) - // addressing is already saved, every time select is changed - } - - if (pedalboards.children().length == 0) { - new Notification('warning', 'This bank is empty - drag pedalboards from the right panel', 5000) - } - - canvas.append(bank.data('pedalboards').children()) - - // Hide initial message - self.data('initMessage').hide() - - // Show everything else - canvas.show() - self.data('searchForm').show() - self.data('resultCanvasUser').show() - self.data('resultCanvasFactory').show() - - // Mark this bank as selected - self.data('currentBank', bank) - self.data('previousBankTitle', bank.data('title')) - bank.data('selected', true) - self.data('bankCanvas').children().removeClass('selected') - bank.addClass('selected') - - // Replace the title string - self.data('bankTitle').find('h1').text(bank.data('title') || "Untitled") - self.data('bankTitle').show() - }, - - editBank: function (bank) { - var self = $(this) - var titleBox = bank.find('.js-bank-title') - if (titleBox.data('editing')) - return true - titleBox.data('editing', true) - var title = titleBox.html() - titleBox.html('') - var editBox = $('') - editBox.val(title) - editBox.addClass('edit-bank') - titleBox.append(editBox) - var finish = function () { - var title = editBox.val() || 'Untitled' - titleBox.data('editing', false) - titleBox.html(title) - bank.data('title', title) - self.data('bankTitle').find('h1').text(title) - self.data('previousBankTitle', title) - self.bankBox('save') - } - editBox.keydown(function (e) { - if (e.keyCode == 13) { - finish() - } - }) - editBox.blur(finish) - editBox.focus() - }, - - removeBank: function (bank) { - var msg = "Deleting bank \""+bank.find('.js-bank-title').html()+"\". Confirm?" - if (confirm(msg) != true) { - return; - } - var self = $(this) - var count = bank.data('pedalboards').children().length - if (count > 1 && !confirm(sprintf('There are %d pedalboards in this bank, are you sure you want to delete it?', count))) - return - if (bank.data('selected')) { - self.data('currentBank', null) - self.data('previousBankTitle', null) - self.data('pedalboardCanvas').html('').hide() - self.data('searchForm').hide() - self.data('resultCanvasUser').hide() - self.data('resultCanvasFactory').hide() - self.data('bankTitle').hide() - } - bank.animate({ - opacity: 0, - height: 0 - }, function () { - bank.remove(); - self.bankBox('save') - }) - }, - - renderPedalboard: function (pedalboard, index) { - var self = $(this) - - var metadata = { - index: index ? (index + ".") : "", - title: pedalboard.title, - image: "/img/loading-pedalboard.gif", - } - - var rendered = $(Mustache.render(TEMPLATES.bank_pedalboard, metadata)) - - if (!index) { - rendered.addClass('js-pedalboard-item') - rendered.removeClass('clearfix') - } - - // Assign remove functionality. If removal is not desired (it's a search result), - // then the remove clickable element will be hidden - rendered.find('.js-remove').click(function () { - rendered.animate({ - opacity: 0, - height: 0 - }, function () { - rendered.remove() - self.bankBox('save') - }) - }) - - rendered.data('pedalboardBundle', pedalboard.bundle) - rendered.data('pedalboardTitle', pedalboard.title) - rendered.data('isFactoryPedalboard', pedalboard.factory) - - wait_for_pedalboard_screenshot(pedalboard.bundle, pedalboard.version, function (resp) { - var img = rendered.find('.img img'); - - if (resp.ok) { - img.attr("src", "/pedalboard/image/thumbnail.png?bundlepath="+escape(pedalboard.bundle)+"&tstamp="+resp.ctime+"&v="+pedalboard.version) - img.css({ top: (img.parent().height() - img.height()) / 2 }) - } else { - img.attr("src", "/img/icons/broken_image.svg") - img.css({'width': '100px'}) - } - }) - - return rendered - } - -}) diff --git a/html/js/cc-manager.js b/html/js/cc-manager.js deleted file mode 100644 index 1e30797e6..000000000 --- a/html/js/cc-manager.js +++ /dev/null @@ -1,101 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -function ControlChainDeviceManager(options) { - var self = this; - - options = $.extend({ - devicesIcon: $('
    '), - devicesWindow: $('
    '), - updateInfoWindow: $('
    '), - setIconTooltip: function (msg) {}, - showNotification: function (msg, timeout) {}, - cancelDownload: function (callback) { callback() }, - }, options) - - this.connectedDevices = [] - this.devicesListElem = options.devicesWindow.find('.mod-devices-window-list > ul') - - options.devicesIcon.statusTooltip() - options.devicesIcon.statusTooltip('message', "No Control Chain devices connected", true) - - options.devicesIcon.click(function () { - if (options.devicesWindow.is(':visible')) { - options.devicesWindow.hide() - } else if (self.connectedDevices.length > 0) { - options.devicesWindow.show() - } - }) - - options.updateInfoWindow.find('.js-cancel').click(function () { - options.cancelDownload(function () { - options.updateInfoWindow.hide() - }) - return false - }) - - this.showUpdateWindow = function () { - options.updateInfoWindow.show() - } - - this.hideUpdateWindow = function () { - options.updateInfoWindow.hide() - } - - this.deviceAdded = function (dev_uri, label, version) { - var item = [dev_uri, label, version] - self.connectedDevices.push(item) - self._devicesUpdated() - self.deviceConnected(label, version) - } - - this.deviceRemoved = function (dev_uri, label, version) { - var item - for (var i in self.connectedDevices) { - item = self.connectedDevices[i] - if (item[0] == dev_uri && item[1] == label && item[2] == version) { - self.connectedDevices.splice(i, 1) - break - } - } - self._devicesUpdated() - self.deviceDisconnected(label, version) - } - - this.deviceConnected = function (label, version) { - options.showNotification('New Control Chain device connected:
    ' + label + ' v' + version) - } - - this.deviceDisconnected = function (label, version) { - options.showNotification('Control Chain device disconnected:
    ' + label + ' v' + version) - } - - this._devicesUpdated = function () { - var count = self.connectedDevices.length - if (count == 0) { - options.devicesIcon.statusTooltip('message', "No Control Chain devices connected", true) - options.devicesWindow.hide() - self.devicesListElem.html("
  • No Control Chain devices connected
  • ") - - } else { - var item, lihtml = "" - for (var i in self.connectedDevices) { - item = self.connectedDevices[i] - lihtml += "
  • " + - "" + item[1] + "
    " + - "URI: " + item[0] + "
    " + - "Version: " + item[2] + - "
  • " - } - self.devicesListElem.html(lihtml) - - var msg - if (count == 1) { - msg = "1 Control Chain device activated" - } else { - msg = sprintf("%d Control Chain devices activated", count) - } - options.devicesIcon.statusTooltip('message', msg, true) - } - } -} diff --git a/html/js/cloudplugin.js b/html/js/cloudplugin.js deleted file mode 100644 index 145225ba8..000000000 --- a/html/js/cloudplugin.js +++ /dev/null @@ -1,1099 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -// add this to plugin data when cloud fails -function getDummyPluginData() { - return $.extend(true, {}, { - ports: { - control: { - input: [] - }, - }, - }) -} - -JqueryClass('cloudPluginBox', { - init: function (options) { - var self = $(this) - - options = $.extend({ - resultCanvas: self.find('.js-cloud-plugins'), - removePluginBundles: function (bundles, callback) { - callback({}) - }, - installPluginURI: function (uri, usingLabs, callback) { - callback({}, "") - }, - upgradePluginURI: function (uri, usingLabs, callback) { - callback({}, "") - }, - info: null, - fake: false, - isMainWindow: true, - usingLabs: false, - windowName: "Plugin Store", - pluginsData: {}, - }, options) - - self.data(options) - - var searchbox = self.find('input[type=search]') - - // make sure searchbox is empty on init - searchbox.val("") - - self.data('searchbox', searchbox) - searchbox.cleanableInput() - - self.data('category', null) - self.cloudPluginBox('setCategory', "All") - - self.data('usingLabs', self.find('input:radio[name=plugins-source]:checked').val() === 'labs') - - var lastKeyTimeout = null - searchbox.keydown(function (e) { - if (e.keyCode == 13) { // detect enter - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - lastKeyTimeout = null - } - self.cloudPluginBox('search') - return false - } - else if (e.keyCode == 8 || e.keyCode == 46) { // detect delete and backspace - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - } - lastKeyTimeout = setTimeout(function () { - self.cloudPluginBox('search') - }, 400); - } - }) - searchbox.keypress(function (e) { // keypress won't detect delete and backspace but will only allow inputable keys - if (e.which == 13) - return - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - } - lastKeyTimeout = setTimeout(function () { - self.cloudPluginBox('search') - }, 400); - }) - searchbox.on('cut', function(e) { - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - } - lastKeyTimeout = setTimeout(function () { - self.cloudPluginBox('search') - }, 400); - }) - searchbox.on('paste', function(e) { - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - } - lastKeyTimeout = setTimeout(function () { - self.cloudPluginBox('search') - }, 400); - }) - - self.find('input:checkbox[name=installed]').click(function (e) { - self.find('input:checkbox[name=non-installed]').prop('checked', false) - self.cloudPluginBox('search') - }) - self.find('input:checkbox[name=non-installed]').click(function (e) { - self.find('input:checkbox[name=installed]').prop('checked', false) - self.cloudPluginBox('search') - }) - - self.find('input:radio[name=plugins-source]').click(function (e) { - self.data('usingLabs', self.find('input:radio[name=plugins-source]:checked').val() === 'labs') - self.cloudPluginBox('toggleFeaturedPlugins') - self.cloudPluginBox('search') - }) - - $('#cloud_install_all').click(function (e) { - if (! $(this).hasClass("disabled")) { - $(this).addClass("disabled").css({color:'#444'}) - self.cloudPluginBox('installAllPlugins', false) - } - }) - $('#cloud_update_all').click(function (e) { - if (! $(this).hasClass("disabled")) { - $(this).addClass("disabled").css({color:'#444'}) - self.cloudPluginBox('installAllPlugins', true) - } - }) - - var results = {} - self.data('results', results) - - self.data('firstLoad', true) - self.find('ul.categories li').click(function () { - var category = $(this).attr('id').replace(/^cloud-plugin-tab-/, '') - self.cloudPluginBox('setCategory', category) - }) - - options.open = function () { - self.data('firstLoad', true) - $('#cloud_install_all').addClass("disabled").css({color:'#444'}) - $('#cloud_update_all').addClass("disabled").css({color:'#444'}) - - self.cloudPluginBox('search') - - return false - } - - self.window(options) - - return self - }, - - setCategory: function (category) { - var self = $(this) - - self.find('ul.categories li').removeClass('selected') - self.find('.plugins-wrapper').hide() - self.find('#cloud-plugin-tab-' + category).addClass('selected') - self.find('#cloud-plugin-content-' + category).show().css('display', 'inline-block') - self.data('category', category) - - // hide/show featured plugins if specific category/All - self.cloudPluginBox('toggleFeaturedPlugins') - }, - cleanResults: function () { - var self = $(this) - self.find('.plugins-wrapper').html('') - self.find('ul.categories li').each(function () { - var content = $(this).html().split(/\s/) - if (content.length >= 2 && content[1] == "Utility") { - $(this).html(content[0] + " Utility") - } else { - $(this).html(content[0]) - } - }); - }, - checkLocalScreenshot: function (plugin) { - if (plugin.status == 'installed') { - if (plugin.gui) { - var uri = escape(plugin.uri) - var ver = plugin.installedVersion.join('_') - plugin.screenshot_href = "/effect/image/screenshot.png?uri=" + uri + "&v=" + ver - plugin.thumbnail_href = "/effect/image/thumbnail.png?uri=" + uri + "&v=" + ver - } else { - plugin.screenshot_href = "/resources/pedals/default-screenshot.png" - plugin.thumbnail_href = "/resources/pedals/default-thumbnail.png" - } - } - else { - //if (!plugin.screenshot_available && !plugin.thumbnail_available) { - if (!plugin.screenshot_href && !plugin.thumbnail_href) { - plugin.screenshot_href = "/resources/pedals/default-screenshot.png" - plugin.thumbnail_href = "/resources/pedals/default-thumbnail.png" - } - } - }, - - toggleFeaturedPlugins: function () { - var self = $(this) - var featuredPlugins = self.find('.featured-plugins') - var usingLabs = self.data('usingLabs') - var queryText = self.data('searchbox').val() - var category = self.data('category') - - if (queryText === '' && category === 'All' && !usingLabs) { - if (featuredPlugins.is(':hidden')) { - featuredPlugins.show() - } - } else if (featuredPlugins.is(':visible')) { - featuredPlugins.hide() - } - }, - - // search all or installed, depending on selected option - search: function (customRenderCallback) { - var self = $(this) - var query = { - text: self.data('searchbox').val(), - summary: "true", - image_version: VERSION, - bin_compat: BIN_COMPAT, - } - - if (self.data('fake')) { - query.stable = true - } - - // hide/show featured plugins if searching/not searching - var usingLabs = self.data('usingLabs') - - self.cloudPluginBox('toggleFeaturedPlugins') - - if (self.find('input:checkbox[name=installed]:checked').length) - return self.cloudPluginBox('searchInstalled', usingLabs, query, customRenderCallback) - - if (self.find('input:checkbox[name=non-installed]:checked').length) - return self.cloudPluginBox('searchAll', usingLabs, false, query, customRenderCallback) - - return self.cloudPluginBox('searchAll', usingLabs, true, query, customRenderCallback) - }, - - synchronizePluginData: function (plugin) { - var index = $(this).data('pluginsData') - indexed = index[plugin.uri] - if (indexed == null) { - indexed = {} - index[plugin.uri] = indexed - } - // Let's store all data safely, while modifying the given object - // to have all available data - $.extend(indexed, plugin) - $.extend(plugin, indexed) - - if (window.devicePixelRatio && window.devicePixelRatio >= 2) { - plugin.thumbnail_href = plugin.thumbnail_href.replace("thumbnail","screenshot") - } - }, - - rebuildSearchIndex: function () { - var plugins = Object.values($(this).data('pluginsData')) - desktop.resetPluginIndexer(plugins.filter(function(plugin) { return !!plugin.installedVersion })) - }, - - // search cloud and local plugins, prefer cloud - searchAll: function (usingLabs, showInstalled, query, customRenderCallback) { - var self = $(this) - var results = {} - var cplugin, lplugin, - cloudReached = false - - renderResults = function () { - if (results.local == null || results.cloud == null) - return - - var plugins = [] - - for (var i in results.cloud) { - cplugin = results.cloud[i] - lplugin = results.local[cplugin.uri] - - if (!showInstalled && lplugin) { - continue - } - - - if (results.featured) { - cplugin.featured = results.featured.filter(function (ft) { return ft.uri === cplugin.uri })[0] - } - - cplugin.latestVersion = [cplugin.builder_version || 0, cplugin.minorVersion, cplugin.microVersion, cplugin.release_number] - - if (lplugin) { - if (!lplugin.installedVersion) { - console.log("local plugin is missing version info:", lplugin.uri) - lplugin.installedVersion = [0, 0, 0, 0] - } - - cplugin.installedVersion = lplugin.installedVersion - delete results.local[cplugin.uri] - - if (compareVersions(cplugin.installedVersion, cplugin.latestVersion) >= 0) { - cplugin.status = 'installed' - } else { - cplugin.status = 'outdated' - } - - // overwrite build environment if local plugin - cplugin.buildEnvironment = lplugin.buildEnvironment - - self.cloudPluginBox('checkLocalScreenshot', cplugin) - - } else { - cplugin.installedVersion = null // if set to [0, 0, 0, 0], it appears as intalled on cloudplugininfo - cplugin.status = 'blocked' - } - - if (self.data('fake') && cplugin.mod_license === 'paid_perpetual') { - cplugin.licensed = true; - } - - if (!cplugin.screenshot_available && !cplugin.thumbnail_available) { - if (!cplugin.screenshot_href && !cplugin.thumbnail_href) { - cplugin.screenshot_href = "/resources/pedals/default-screenshot.png" - cplugin.thumbnail_href = "/resources/pedals/default-thumbnail.png" - } - } - self.cloudPluginBox('synchronizePluginData', cplugin) - plugins.push(cplugin) - } - - // for all the other plugins that are not in the cloud - if (showInstalled) { - for (var uri in results.local) { - lplugin = results.local[uri] - lplugin.status = 'installed' - lplugin.latestVersion = null - self.cloudPluginBox('checkLocalScreenshot', lplugin) - self.cloudPluginBox('synchronizePluginData', lplugin) - plugins.push(lplugin) - } - } - - if (customRenderCallback) { - customRenderCallback(plugins) - } else { - self.cloudPluginBox('showPlugins', plugins, cloudReached) - } - - if (self.data('firstLoad')) { - self.data('firstLoad', false) - $('#cloud_install_all').removeClass("disabled").css({color:'white'}) - $('#cloud_update_all').removeClass("disabled").css({color:'white'}) - } - self.cloudPluginBox('rebuildSearchIndex') - } - - // cloud search - var cloudResults - $.ajax({ - method: 'GET', - url: (usingLabs ? CLOUD_LABS_URL : SITEURL) + "/lv2/plugins", - data: query, - success: function (plugins) { - cloudReached = true - cloudResults = plugins - }, - error: function () { - cloudResults = [] - }, - complete: function () { - if (usingLabs) { - results.cloud = cloudResults - results.featured = [] - $('.featured-plugins').hide() - renderResults() - } else { - $.ajax({ - method: 'GET', - url: SITEURL + "/lv2/plugins/featured", - success: function (featured) { - results.featured = featured - }, - error: function () { - results.featured = [] - $('.featured-plugins').hide() - }, - complete: function () { - results.cloud = cloudResults; - renderResults() - }, - cache: false, - dataType: 'json' - }) - } - }, - cache: false, - dataType: 'json' - }) - - if (self.data('fake')) { - results.local = {} - renderResults() - return; - } - - // local search - if (query.text) - { - var lplugins = {} - - var ret = desktop.pluginIndexer.search(query.text) - for (var i in ret) { - var uri = ret[i].ref - var pluginData = self.data('pluginsData')[uri] - if (! pluginData) { - console.log("ERROR: Plugin '" + uri + "' was not previously cached, cannot show it") - continue - } - lplugins[uri] = pluginData - } - - results.local = $.extend(true, {}, lplugins) // deep copy instead of link/reference - renderResults() - } - else - { - $.ajax({ - method: 'GET', - url: '/effect/list', - success: function (plugins) { - var i, plugin, allplugins = {} - for (i in plugins) { - plugin = plugins[i] - - plugin.installedVersion = [plugin.builder, plugin.minorVersion, plugin.microVersion, plugin.release] - allplugins[plugin.uri] = plugin - } - - results.local = $.extend(true, {}, allplugins) // deep copy instead of link/reference - renderResults() - }, - error: function () { - results.local = {} - renderResults() - }, - cache: false, - dataType: 'json' - }) - } - }, - - // search cloud and local plugins, show installed only - searchInstalled: function (usingLabs, query, customRenderCallback) { - var self = $(this) - var results = {} - var cplugin, lplugin, - cloudReached = false - - renderResults = function () { - var plugins = [] - - for (var i in results.local) { - lplugin = results.local[i] - cplugin = results.cloud[lplugin.uri] - - if (!lplugin.installedVersion) { - console.log("local plugin is missing version info:", lplugin.uri) - lplugin.installedVersion = [0, 0, 0, 0] - } - - if (cplugin) { - lplugin.latestVersion = [cplugin.builder_version || 0, cplugin.minorVersion, cplugin.microVersion, cplugin.release_number] - - if (compareVersions(lplugin.installedVersion, lplugin.latestVersion) >= 0) { - lplugin.status = 'installed' - } else { - lplugin.status = 'outdated' - } - } else { - lplugin.latestVersion = null - lplugin.status = 'installed' - } - - // we're showing installed only, so prefer to show installed modgui screenshot - if (lplugin.gui) { - var uri = escape(lplugin.uri) - var ver = [lplugin.builder, lplugin.microVersion, lplugin.minorVersion, lplugin.release].join('_') - - lplugin.screenshot_href = "/effect/image/screenshot.png?uri=" + uri + "&v=" + ver - lplugin.thumbnail_href = "/effect/image/thumbnail.png?uri=" + uri + "&v=" + ver - } else { - lplugin.screenshot_href = "/resources/pedals/default-screenshot.png" - lplugin.thumbnail_href = "/resources/pedals/default-thumbnail.png" - } - self.cloudPluginBox('synchronizePluginData', lplugin) - plugins.push(lplugin) - } - - if (customRenderCallback) { - customRenderCallback(plugins) - } else { - self.cloudPluginBox('showPlugins', plugins, cloudReached) - } - - if (self.data('firstLoad')) { - self.data('firstLoad', false) - $('#cloud_install_all').removeClass("disabled").css({color:'white'}) - $('#cloud_update_all').removeClass("disabled").css({color:'white'}) - } - self.cloudPluginBox('rebuildSearchIndex') - } - - // cloud search - $.ajax({ - method: 'GET', - url: (usingLabs ? CLOUD_LABS_URL : SITEURL) + "/lv2/plugins", - data: query, - success: function (plugins) { - // index by uri, needed later to check its latest version - var cplugins = {} - for (var i in plugins) { - delete plugins[i].installedVersion - delete plugins[i].bundles - cplugins[plugins[i].uri] = plugins[i] - } - cloudReached = true - results.cloud = cplugins - if (results.local != null) - renderResults() - }, - error: function () { - results.cloud = {} - if (results.local != null) - renderResults() - }, - cache: false, - dataType: 'json' - }) - - // local search - if (query.text) - { - var lplugins = [] - - var ret = desktop.pluginIndexer.search(query.text) - for (var i in ret) { - var uri = ret[i].ref - var pluginData = self.data('pluginsData')[uri] - if (! pluginData) { - console.log("ERROR: Plugin '" + uri + "' was not previously cached, cannot show it") - continue - } - lplugins.push(pluginData) - } - - results.local = $.extend(true, {}, lplugins) // deep copy instead of link/reference - if (results.cloud != null) - renderResults() - } - else - { - $.ajax({ - method: 'GET', - url: '/effect/list', - success: function (plugins) { - var i, plugin - for (i in plugins) { - plugin = plugins[i] - plugin.installedVersion = [plugin.builder || 0, plugin.minorVersion, plugin.microVersion, plugin.release] - } - - results.local = plugins - if (results.cloud != null) - renderResults() - }, - cache: false, - dataType: 'json' - }) - } - }, - - showPlugins: function (plugins, cloudReached) { - var self = $(this) - self.cloudPluginBox('cleanResults') - var featured = plugins.filter(function(p) { - return p.featured; - }) - - // sort plugins by label - plugins.sort(function (a, b) { - a = a.label.toLowerCase() - b = b.label.toLowerCase() - if (a > b) { - return 1 - } - if (a < b) { - return -1 - } - return 0 - }) - - // sort featured plugins by priority - featured.sort(function (a, b) { - a = a.featured.priority - b = b.featured.priority - if (a > b) { - return 1 - } - if (a < b) { - return -1 - } - return 0 - }) - - var category = {} - var categories = { - 'All': plugins.length, - 'ControlVoltage': 0, - 'Delay': 0, - 'Distortion': 0, - 'Dynamics': 0, - 'Filter': 0, - 'Generator': 0, - 'MIDI': 0, - 'Modulator': 0, - 'Reverb': 0, - 'Simulator': 0, - 'Spatial': 0, - 'Spectral': 0, - 'Utility': 0, - } - var cachedContentCanvas = { - 'All': self.find('#cloud-plugin-content-All') - } - var pluginsDict = {} - - var getCategory = function(plugin) { - category = plugin.category[0] - if (category == 'Utility' && plugin.category.length == 2 && plugin.category[1] == 'MIDI') { - return 'MIDI'; - } - return category - } - - var plugin, render - var factory = function(img) { - return function() { - img.css('opacity', 1) - var top = (parseInt((img.parent().height()-img.height())/2))+'px' - // We need to put a padding in image, but slick creates clones of the - // element to use on carousel, so we need padding in all clones - var uri = img.parent().parent().parent().parent().attr('mod-uri') - var clones = $('div.slick-slide[mod-uri="'+uri+'"][mod-role="cloud-plugin"]') - clones.find('img').css('padding-top', top); - }; - } - - if (!self.data('featuredInitialized')) { - var featuredCanvas = $('.carousel') - for (var i in featured) { - plugin = featured[i] - render = self.cloudPluginBox('renderPlugin', plugin, cloudReached, true) - render.appendTo(featuredCanvas) - render.find('img').on('load', factory(render.find('img'))); - } - var columns = $(window).width() >= 1650 ? 5 : 3; - featuredCanvas.slick({ - slidesToShow: Math.min(columns, plugins.length), - centerPadding: '60px', - centerMode: true, - }); - self.data('featuredInitialized', true) - } - - for (var i in plugins) { - plugin = plugins[i] - category = getCategory(plugin) - render = self.cloudPluginBox('renderPlugin', plugin, cloudReached) - - pluginsDict[plugin.uri] = plugin - - if (category && category != 'All' && categories[category] != null) { - categories[category] += 1 - if (cachedContentCanvas[category] == null) { - cachedContentCanvas[category] = self.find('#cloud-plugin-content-' + category) - } - render.clone(true).appendTo(cachedContentCanvas[category]) - } - - render.appendTo(cachedContentCanvas['All']) - } - - self.data('pluginsDict', pluginsDict) - - // display plugin count - self.cloudPluginBox('setCategoryCount', categories) - }, - - setCategoryCount: function (categories) { - var self = $(this) - self.data('categoryCount', categories) - - for (var category in categories) { - var tab = self.find('#cloud-plugin-tab-' + category) - if (tab.length == 0) { - continue - } - var content = tab.html().split(/\s/) - - if (content.length >= 2 && content[1] == "Utility") { - content = content[0] + " Utility" - } else { - content = content[0] - } - tab.html(content + ' (' + categories[category] + ')') - } - }, - - renderPlugin: function (plugin, cloudReached, featured) { - var self = $(this) - var uri = escape(plugin.uri) - var comment = plugin.comment.trim() - var has_comment = "" - if(!comment) { - comment = "No description available"; - has_comment = "no_description"; - } - var plugin_data = { - uri: uri, - screenshot_href: plugin.screenshot_href, - thumbnail_href: plugin.thumbnail_href, - has_comment: has_comment, - comment: comment, - status: plugin.status, - brand : plugin.brand, - label : plugin.label, - build_env: plugin.buildEnvironment, - } - - var template = featured ? TEMPLATES.featuredplugin : TEMPLATES.cloudplugin - var rendered = $(Mustache.render(template, plugin_data)) - rendered.click(function () { - self.cloudPluginBox('showPluginInfo', plugin.uri) - }) - - return rendered - }, - - installAllPlugins: function (updateOnly) { - var self = $(this) - - self.cloudPluginBox('search', function (plugins) { - // sort plugins by label - var alower, blower - plugins.sort(function (a, b) { - alower = a.label.toLowerCase() - blower = b.label.toLowerCase() - if (alower > blower) - return 1 - if (alower < blower) - return -1 - return 0 - }) - - var bundle_id, bundle_ids = [] - var currentCategory = $("#cloud-plugins-library .categories .selected").attr('id').replace(/^cloud-plugin-tab-/, '') || "All" - - var plugin - for (var i in plugins) { - plugin = plugins[i] - if (! plugin.bundle_id || ! plugin.latestVersion) { - continue - } - if (plugin.installedVersion) { - if (compareVersions(plugin.latestVersion, plugin.installedVersion) <= 0) { - continue - } - } else if (updateOnly) { - continue - } - - var category = plugin.category[0] - if (category == 'Utility' && plugin.category.length == 2 && plugin.category[1] == 'MIDI') { - category = 'MIDI' - } - - // FIXME for midi - if (bundle_ids.indexOf(plugin.bundle_id) < 0 && (currentCategory == "All" || currentCategory == category)) { - bundle_ids.push(plugin.bundle_id) - } - } - - if (bundle_ids.length == 0) { - $('#cloud_install_all').removeClass("disabled").css({color:'white'}) - $('#cloud_update_all').removeClass("disabled").css({color:'white'}) - new Notification('warn', 'All plugins are '+(updateOnly?'updated':'installed')+', nothing to do', 8000) - return - } - - var count = 0 - var finished = function (resp, bundlename) { - self.cloudPluginBox('postInstallAction', resp.installed, resp.removed, bundlename) - count += 1 - if (count == bundle_ids.length) { - $('#cloud_install_all').removeClass("disabled").css({color:'white'}) - $('#cloud_update_all').removeClass("disabled").css({color:'white'}) - new Notification('warn', 'All plugins are now '+(updateOnly?'updated':'installed'), 8000) - } - if (resp.ok) { - self.cloudPluginBox('search') - } - } - var usingLabs = self.data('usingLabs') - - for (var i in bundle_ids) { - desktop.installationQueue.installUsingBundle(bundle_ids[i], usingLabs, finished) - } - }) - }, - - postInstallAction: function (installed, removed, bundlename) { - var self = $(this) - var bundle = LV2_PLUGIN_DIR + bundlename - var category, categories = self.data('categoryCount') - var uri, plugin, oldElem, newElem - - for (var i in installed) { - uri = installed[i] - plugin = self.data('pluginsData')[uri] - - if (! plugin) { - continue - } - - plugin.status = 'installed' - plugin.bundles = [bundle] - plugin.installedVersion = plugin.latestVersion - - oldElem = self.find('.cloud-plugin[mod-uri="'+escape(uri)+'"]') - newElem = self.cloudPluginBox('renderPlugin', plugin, true) - oldElem.replaceWith(newElem) - } - - for (var i in removed) { - uri = removed[i] - - if (installed.indexOf(uri) >= 0) { - continue - } - - var favoriteIndex = FAVORITES.indexOf(uri) - if (favoriteIndex >= 0) { - FAVORITES.splice(favoriteIndex, 1) - $('#effect-content-Favorites').find('[mod-uri="'+escape(uri)+'"]').remove() - $('#effect-tab-Favorites').html('Favorites (' + FAVORITES.length + ')') - } - - plugin = self.data('pluginsData')[uri] - oldElem = self.find('.cloud-plugin[mod-uri="'+escape(uri)+'"]') - - if (plugin.latestVersion) { - // removing a plugin available on cloud, keep its store item - plugin.status = 'blocked' - plugin.bundle_name = bundle - delete plugin.bundles - plugin.installedVersion = null - - newElem = self.cloudPluginBox('renderPlugin', plugin, true) - oldElem.replaceWith(newElem) - - } else { - // removing local plugin means the number of possible plugins goes down - category = plugin.category[0] - - if (category && category != 'All') { - if (category == 'Utility' && plugin.category.length == 2 && plugin.category[1] == 'MIDI') { - category = 'MIDI' - } - categories[category] -= 1 - } - categories['All'] -= 1 - - // remove it from store - delete self.data('pluginsData')[uri] - oldElem.remove() - } - } - - self.cloudPluginBox('setCategoryCount', categories) - }, - - showPluginInfo: function (uri) { - var self = $(this) - - var plugin = self.data('pluginsData')[uri] - if (!plugin) { - if (self.data('fake')) - new Notification('error', "Requested plugin is not available") - return - } - - var cloudChecked = false - var localChecked = false - - var showInfo = function() { - if (!cloudChecked || !localChecked) - return - - // formating numbers and flooring ranges up to two decimal cases - for (var i = 0; i < plugin.ports.control.input.length; i++) { - plugin.ports.control.input[i].formatted = format(plugin.ports.control.input[i]) - } - - if (plugin.ports.cv && plugin.ports.cv.input) { - for (var i = 0; i < plugin.ports.cv.input.length; i++) { - plugin.ports.cv.input[i].formatted = format(plugin.ports.cv.input[i]) - } - } - - if (plugin.ports.cv && plugin.ports.cv.output) { - for (var i = 0; i < plugin.ports.cv.output.length; i++) { - plugin.ports.cv.output[i].formatted = format(plugin.ports.cv.output[i]) - } - } - - var category = plugin.category[0] - if (category == 'Utility' && plugin.category.length == 2 && plugin.category[1] == 'MIDI') { - category = 'MIDI' - } - - var metadata = { - author: plugin.author, - uri: plugin.uri, - escaped_uri: escape(plugin.uri), - thumbnail_href: plugin.thumbnail_href, - screenshot_href: plugin.screenshot_href, - category: category || "None", - installed_version: version(plugin.installedVersion), - latest_version: version(plugin.latestVersion), - package_name: (plugin.bundle_name || plugin.bundles[0]).replace(/\.lv2$/, ''), - comment: plugin.comment.trim() || "No description available", - brand : plugin.brand, - name : plugin.name, - label : plugin.label, - ports : plugin.ports, - plugin_href: PLUGINS_URL + '/' + btoa(plugin.uri), - pedalboard_href: desktop.getPedalboardHref(plugin.uri, plugin.stable === false), - build_env_uppercase: (plugin.buildEnvironment || "LOCAL").toUpperCase(), - show_build_env: plugin.buildEnvironment !== "prod", - }; - - var info = self.data('info') - - if (info) { - info.remove() - self.data('info', null) - } - info = $(Mustache.render(TEMPLATES.cloudplugin_info, metadata)) - - // hide control ports table if none available - if (plugin.ports.control.input.length == 0) { - info.find('.plugin-controlports').hide() - } - - // hide cv inputs table if none available - if (!plugin.ports.cv || (plugin.ports.cv && plugin.ports.cv.input && plugin.ports.cv.input.length == 0)) { - info.find('.plugin-cvinputs').hide() - } - - // hide cv ouputs ports table if none available - if (!plugin.ports.cv || (plugin.ports.cv && plugin.ports.cv.output && plugin.ports.cv.output.length == 0)) { - info.find('.plugin-cvoutputs').hide() - } - - var canInstall = false, - canUpgrade = false - - // The remove button will remove the plugin, close window and re-render the plugins - // without the removed one - if (plugin.installedVersion) { - info.find('.js-install').hide() - info.find('.js-remove').show().click(function () { - // Remove plugin - self.data('removePluginBundles')(plugin.bundles, function (resp) { - var bundlename = plugin.bundles[0].split('/').filter(function(el){return el.length!=0}).pop(0) - self.cloudPluginBox('postInstallAction', [], resp.removed, bundlename) - info.window('close') - - // remove-only action, need to manually update plugins - desktop.updatePluginList([], resp.removed) - }) - }) - } else { - canInstall = true - info.find('.js-remove').hide() - info.find('.js-installed-version').hide() - info.find('.js-install').show().click(function () { - // Install plugin - self.data('installPluginURI')(plugin.uri, self.data('usingLabs'), function (resp, bundlename) { - self.cloudPluginBox('postInstallAction', resp.installed, resp.removed, bundlename) - info.window('close') - }) - }) - } - - if (plugin.installedVersion && plugin.latestVersion && compareVersions(plugin.latestVersion, plugin.installedVersion) > 0) { - canUpgrade = true - info.find('.js-upgrade').show().click(function () { - // Upgrade plugin - self.data('upgradePluginURI')(plugin.uri, self.data('usingLabs'), function (resp, bundlename) { - self.cloudPluginBox('postInstallAction', resp.installed, resp.removed, bundlename) - info.window('close') - }) - }) - } else { - info.find('.js-upgrade').hide() - } - - if (! plugin.latestVersion) { - info.find('.js-latest-version').hide() - } - - info.appendTo($('body')) - info.window({ - windowName: "Cloud Plugin Info" - }) - info.window('open') - self.data('info', info) - } - - // get full plugin info if plugin has a local version - if ((plugin.bundles && plugin.bundles.length > 0) || ! plugin.installedVersion) { - localChecked = true - } else { - var renderedVersion = [plugin.builder, - plugin.microVersion, - plugin.minorVersion, - plugin.release].join('_'); - $.ajax({ - url: "/effect/get", - data: { - uri: plugin.uri, - version: VERSION, - plugin_version: renderedVersion, - }, - success: function (pluginData) { - // delete cloud specific fields just in case - delete pluginData.bundle_name - delete pluginData.latestVersion - // ready to merge - plugin = $.extend(pluginData, plugin) - localChecked = true - showInfo() - }, - error: function () { - // assume not installed - plugin.installedVersion = null - plugin.installed_version = null - localChecked = true - showInfo() - }, - cache: !!plugin.buildEnvironment, - dataType: 'json' - }) - } - - // always get cloud plugin info - $.ajax({ - url: (self.data('usingLabs') ? CLOUD_LABS_URL : SITEURL) + "/lv2/plugins", - data: { - uri: plugin.uri, - image_version: VERSION, - bin_compat: BIN_COMPAT, - }, - success: function (pluginData) { - if (pluginData && pluginData.length > 0) { - pluginData = pluginData[0] - // delete local specific fields just in case - delete pluginData.bundles - delete pluginData.installedVersion - // ready to merge - plugin = $.extend(pluginData, plugin) - plugin.latestVersion = [plugin.builder_version || 0, plugin.minorVersion, plugin.microVersion, plugin.release_number] - } else { - plugin = $.extend(getDummyPluginData(), plugin) - plugin.latestVersion = null - } - cloudChecked = true - showInfo() - }, - error: function () { - plugin = $.extend(getDummyPluginData(), plugin) - plugin.latestVersion = null - cloudChecked = true - showInfo() - }, - cache: false, - dataType: 'json' - }) - }, -}) diff --git a/html/js/common.js b/html/js/common.js deleted file mode 100644 index 8714f2ec6..000000000 --- a/html/js/common.js +++ /dev/null @@ -1,189 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -/* The method below is already implemented in modgui.js. - * The reason it's there and not here is because modgui.js is a standalone implementation - * of modgui LV2 standards and should not depend of anything from this package (it's also used in modsdk) - * We kept it commented here because this is where it used to belong, and it's weird to have this so core - * function being declared only in modgui.js. - */ -/* -function JqueryClass(name, methods) { - (function($) { - $.fn[name] = function(method) { - if (methods[method]) { - return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); - } else if (typeof method === 'object' || !method) { - return methods.init.apply(this, arguments); - } else { - $.error( 'Method ' + method + ' does not exist on jQuery.' + name ); - } - } - })(jQuery); -} -*/ - -(function ($) { - $.fn.cleanableInput = function (options) { - var self = $(this) - var remove = $('') - remove.insertAfter(self) - - var position = function () { - remove.show() -/* remove.css('left', self.position().left + self.width() - 3) - remove.css('top', self.position().top + self.height() - 22) -*/ } - - remove.click(function () { - self.val('') - remove.hide() - self.trigger('keypress') - }) - - if (self.val().length == 0) - remove.hide() - else - position() - - self.keyup(function () { - if (self.val().length > 0) - position() - else - remove.hide() - }) - - } -})(jQuery); - -(function ($) { - $.extend($.expr[":"], { - scrollable: function (element) { - var vertically_scrollable, horizontally_scrollable; - if ($(element).css('overflow') == 'scroll' || $(element).css('overflowX') == 'scroll' || $(element).css('overflowY') == 'scroll') return true; - - vertically_scrollable = (element.clientHeight < element.scrollHeight) && ( - $.inArray($(element).css('overflowY'), ['scroll', 'auto']) != -1 || $.inArray($(element).css('overflow'), ['scroll', 'auto']) != -1); - - if (vertically_scrollable) return true; - - horizontally_scrollable = (element.clientWidth < element.scrollWidth) && ( - $.inArray($(element).css('overflowX'), ['scroll', 'auto']) != -1 || $.inArray($(element).css('overflow'), ['scroll', 'auto']) != -1); - return horizontally_scrollable; - } - }); -})(jQuery) - -function setCookie(name, value, days) { - if (days) { - var date = new Date(); - date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); - var expires = "; expires=" + date.toGMTString(); - } else var expires = ""; - document.cookie = name + "=" + value + expires + "; path=/"; -} - -function getCookie(c_name, defaultValue) { - if (document.cookie.length > 0) { - c_start = document.cookie.indexOf(c_name + "="); - if (c_start != -1) { - c_start = c_start + c_name.length + 1; - c_end = document.cookie.indexOf(";", c_start); - if (c_end == -1) { - c_end = document.cookie.length; - } - return unescape(document.cookie.substring(c_start, c_end)); - } - } - if (defaultValue) - return defaultValue - return ""; -} - -function compareVersions(a, b, len) { - if (!a && !b) { - return 0 - } - if (!b) { - return 1 - } - if (!a) { - return -1 - } - if (! len) { - len = 4 - } - for (var i = 0; i < len; i++) { - if (a[i] > b[i]) { - return 1 - } - if (a[i] < b[i]) { - return -1 - } - } - return 0 -} - -function renderTime(time) { - var months = ['Jan', - 'Feb', - 'Mar', - 'Apr', - 'May', - 'Jun', - 'Jul', - 'Aug', - 'Sep', - 'Oct', - 'Nov', - 'Dec' - ] - return sprintf('%s %02d %02d:%02d', - months[time.getMonth()], - time.getDate(), - time.getHours(), - time.getMinutes()) -} - -function remove_from_array(array, element) { - var index = array.indexOf(element) - if (index > -1) - array.splice(index, 1) -} - -var pending_pedalboard_screenshots = [] - -function wait_for_pedalboard_screenshot(bundlepath, version, callback) { - // allow to cache request if no screenshot is being currently generated - var cache = pending_pedalboard_screenshots.indexOf(bundlepath) < 0; - - $.ajax({ - url: "/pedalboard/image/check?bundlepath="+escape(bundlepath)+'&v='+version.toString(), - success: function (resp) { - if (resp.status == 1) { - // success - remove_from_array(pending_pedalboard_screenshots, bundlepath) - callback({'ok':true,'ctime':resp.ctime}) - return - } - - if (resp.status == 0) { - // pending - setTimeout(function() { - wait_for_pedalboard_screenshot(bundlepath, version, callback) - }, 1000) - return - } - - // error - callback({'ok':false}) - - }, - error: function () { - callback({'ok':false}) - }, - cache: cache, - global: false, - dataType: 'json' - }) -} diff --git a/html/js/desktop.js b/html/js/desktop.js deleted file mode 100644 index 631a98bdd..000000000 --- a/html/js/desktop.js +++ /dev/null @@ -1,2202 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -function Desktop(elements) { - var self = this - - // The elements below are expected to be all defined in HTML and passed as parameter - elements = $.extend({ - titleBox: $('
    '), - zoomIn: $('
    '), - zoomOut: $('
    '), - addMidiButton: $('
    '), - midiPortsWindow: $('
    '), - midiPortsList: $('
    '), - pedalPresetsWindow: $('
    '), - pedalPresetsList: $('
    '), - pedalPresetsOverlay: $('
    '), - updateDeviceWindow: $('
    '), - saveBox: $('
    '), - saveButton: $('
    '), - saveAsButton: $('
    '), - resetButton: $('
    '), - cvAddressingButton: $('
    '), - snapshotSaveButton: $('
    '), - snapshotSaveAsButton: $('
    '), - snapshotManageButton: $('
    '), - transportButton: $('
    '), - transportWindow: $('
    '), - transportPlay: $('
    '), - transportBPB: $('
    '), - transportBPM: $('
    '), - transportSyncMode: $('
    '), - effectBox: $('
    '), - effectBoxTrigger: $('
    '), - cloudPluginBox: $('
    '), - cloudPluginBoxTrigger: $('
    '), - pedalboardTrigger: $('
    '), - fileManagerBox: $('
    '), - fileManagerBoxTrigger: $('
    '), - pedalboardBox: $('
    '), - pedalboardBoxTrigger: $('
    '), - bankBox: $('
    '), - bankBoxTrigger: $('
    '), - bankList: $('
    '), - bankPedalboardList: $('
    '), - bankSearchResult: $('
    '), - shareButton: $('
    '), - shareWindow: $('
    '), - presetSaveBox: $('
    '), - devicesIcon: $('
    '), - devicesWindow: $('
    '), - statusIcon: $('
    '), - settingsIcon: $('
    '), - upgradeIcon: $('
    '), - upgradeWindow: $('
    '), - bypassLeftButton: $('
    '), - bypassRightButton: $('
    '), - bufferSizeButton: $('
    '), - xrunsButton: $('
    '), - cpuStatsButton: $('
    '), - }, elements) - - this.installationQueue = new InstallationQueue() - this.windowManager = new WindowManager() - - this.pluginIndexer = lunr(function () { - this.field('data') - this.ref('id') - this.requireAllTerms = true - }) - - this.pedalboardIndexer = lunr(function () { - this.field('data') - this.ref('id') - this.requireAllTerms = true - }) - - this.pluginIndexerData = {} - this.pedalboardIndexerData = {} - this.previousPedalboardList = null - this.cvAddressing = false - - this.resetPluginIndexer = function (plugins) { - self.pluginIndexer = lunr(function () { - this.field('data') - this.ref('id') - this.requireAllTerms = true - }) - - var i, plugin - for (i in plugins) { - plugin = plugins[i] - self.pluginIndexer.add({ - id: plugin.uri, - data: [plugin.uri, plugin.name, plugin.brand, plugin.comment, plugin.category.join(" ")].join(" "), - }) - } - self.pluginIndexerData = plugins - } - - this.pedalboardStatsSuccess = false; - this.pedalboardStats = {}; - this.resetPedalboardStats = function() { - this.pedalboardStatsSuccess = false; - if (! CLOUD_TERMS_ACCEPTED) { - return - } - $.ajax({ - url: SITEURL + '/pedalboards/stats', - type: 'GET', - success: function(stats) { - self.pedalboardStatsSuccess = true; - self.pedalboardStats = stats; - }, - cache: false - }) - }; - this.getPedalboardHref = function(uri, unstable) { - if (!this.pedalboardStatsSuccess) { - return null; - } - var base64Uri = btoa(uri); - if (!this.pedalboardStats[base64Uri]) { - return null; - } - var encodedUri = encodeURIComponent(uri); - if (unstable) { - encodedUri += '&unstable=true'; - } - return PEDALBOARDS_URL + '/?plugin_uri=' + encodedUri; - }; - - this.midiDevices = new MidiPortsWindow({ - midiPortsWindow: elements.midiPortsWindow, - midiPortsList: elements.midiPortsList, - }) - - this.hardwareManager = new HardwareManager({ - address: function (instanceAndSymbol, addressing, callback) { - $.ajax({ - url: '/effect/parameter/address/' + instanceAndSymbol, - type: 'POST', - data: JSON.stringify(addressing), - success: function (resp) { - if (resp) { - self.setPedalboardAsModified(true) - callback(true) - } else { - new Bug("Couldn't address parameter, not allowed") - callback(false) - } - }, - error: function () { - new Bug("Couldn't address parameter, server error") - callback(false) - }, - cache: false, - dataType: 'json' - }) - }, - setEnabled: function (instance, portSymbol, enabled, feedback, forceAddress, momentaryMode) { - if (!enabled && feedback === undefined) { - console.warn("ERROR setEnabled called as false, but with undefined feedback") - feedback = true - } - if (instance == "/pedalboard") { - self.transportControls.setControlEnabled(portSymbol, enabled, feedback, forceAddress, momentaryMode) - return - } - self.pedalboard.pedalboard('setPortEnabled', instance, portSymbol, enabled, feedback, forceAddress, momentaryMode) - }, - renderForm: function (instance, port) { - var label - - if (instance == "/pedalboard") { - label = "Pedalboard" - } else { - label = self.pedalboard.pedalboard('getLabel', instance) - } - - if (port.symbol == ':bypass' || port.symbol == ':presets') { - context = { - label: label, - name: port.symbol == ':bypass' ? "On/Off" : port.name - } - return Mustache.render(TEMPLATES.bypass_addressing, context) - } - - context = { - label: label, - name: port.shortName - } - return Mustache.render(TEMPLATES.addressing, context) - }, - isApp: function() { - return self.isApp; - }, - }) - - this.pedalPresets = new SnapshotsManager({ - pedalPresetsWindow: elements.pedalPresetsWindow, - pedalPresetsList: elements.pedalPresetsList, - pedalPresetsOverlay: elements.pedalPresetsOverlay, - hardwareManager: self.hardwareManager, - renamedCallback: function (name) { - self.titleBox.text((self.title || 'Untitled') + " - " + (name || 'Default')) - } - }) - - this.isApp = false - this.title = '' - this.cloudAccessToken = null - this.cloudHardwareDeviceVersions = null - this.pedalboardBundle = null - this.pedalboardEmpty = true - this.pedalboardModified = false - this.pedalboardPresetId = 0 - this.pedalboardPresetName = '' - this.pedalboardDemoPluginsNotified = false - this.loadingPeldaboardForFirstTime = true - - this.pedalboard = self.makePedalboard(elements.pedalboard, elements.effectBox) - - elements.zoomIn.click(function () { - self.pedalboard.pedalboard('zoomIn') - }) - elements.zoomOut.click(function () { - self.pedalboard.pedalboard('zoomOut') - }) - - var ajaxFactory = function (url, errorMessage) { - return function (callback) { - $.ajax({ - url: url, - success: callback, - error: function () { - new Error(errorMessage) - }, - cache: false, - dataType: 'json' - }) - } - } - - elements.pedalboardTrigger.click(function () { - self.windowManager.closeWindows(null, true) - }) - - this.titleBox = elements.titleBox - - this.ParameterSet = function (paramchange) { - $.ajax({ - url: '/effect/parameter/set/' , - type: 'POST', - contentType: 'application/json', - data: JSON.stringify(paramchange), - success: function (resp) { - if (!resp) { - new Bug("Couldn't address parameter, not allowed") - } - }, - error: function () { - new Bug ("Couldn't address parameter, server error") - }, - cache: false, - global: false, - dataType: 'json' - }) - } - - this.cloudPluginListFunction = function (callback) { - $.ajax({ - method: 'GET', - url: '/effect/list', - success: callback, - cache: false, - dataType: 'json', - }) - } - - this.cloudPluginSearchFunction = function (query, callback) { - $.ajax({ - method: 'GET', - url: '/effect/search', - query: query, - success: callback, - cache: false, - dataType: 'json' - }) - } - - this.pedalboardListFunction = function (callback) { - if (self.previousPedalboardList != null && callback) { - callback(self.previousPedalboardList) - return - } - - $.ajax({ - method: 'GET', - url: '/pedalboard/list', - success: function(pedals) { - var allpedals = {} - for (var i=0; i') - - if (isUpdating) { - block.html('

    Auto-update in progress, please wait...

    ') - } else { - block.html('

    Disconnected

    ') - var re = $("
    Reload
    ").appendTo(block); - re.css("background-image", "url(img/icons/25/reload.png)"); - re.click(function () { location.reload(); }); - } - - $('body').append(block).css('overflow', 'hidden') - $('#wrapper').css('z-index', -1) - $('#plugins-library').css('z-index', -1) - $('#cloud-plugins-library').css('z-index', -1) - $('#pedalboards-library').css('z-index', -1) - $('#bank-library').css('z-index', -1) - $('#main-menu').css('z-index', -1) - ws.close() - } - - this.init = function () { - $(".mod-init-hidden").removeClass("mod-init-hidden"); - $("body").addClass("initialized"); - } - - this.authenticateDevice = function (callback) { - $.ajax({ - method: 'GET', - url: SITEURL + '/devices/nonce', - cache: false, - success: function (resp) { - if (!resp || !resp.nonce) { - callback(false) - return - } - $.ajax({ - url: '/auth/nonce', - type: 'POST', - cache: false, - contentType: 'application/json', - dataType: 'json', - data: JSON.stringify(resp), - success: function (resp) { - if (!resp || !resp.message) { - //$('#mod-cloud-plugins').hide() - callback(false) - console.log("Webserver does not support MOD tokens, downloads will not be possible") - return; - } - - $.ajax({ - url: SITEURL + '/devices/tokens', - type: 'POST', - cache: false, - contentType: 'application/json', - dataType: 'json', - data: JSON.stringify(resp), - success: function (resp) { - if (!resp || !resp.message) { - callback(false) - return; - } - - if (resp['upgrade']) { - $.ajax({ - method: 'GET', - url: resp['image-href'], - cache: false, - contentType: 'application/json', - success: function (data) { - elements.upgradeWindow.upgradeWindow('setup', resp['upgrade-required'], data) - }, - error: function () { - elements.upgradeWindow.upgradeWindow('setErrored') - }, - }) - } else { - elements.upgradeWindow.upgradeWindow('setUpdated') - } - - $.ajax({ - url: '/auth/token', - type: 'POST', - cache: false, - contentType: 'application/json', - dataType: 'json', - data: JSON.stringify(resp), - success: function (resp) { - self.cloudAccessToken = resp.access_token; - var opts = { - from_args: { - headers: { 'Authorization' : 'MOD ' + resp.access_token } - } - } - callback(true, opts); - }, - error: function () { - callback(false); - }, - }) - }, - error: function () { - callback(false) - }, - }) - }, - error: function () { - callback(false) - }, - }) - }, - error: function () { - callback(false) - }, - }) - } - - this.setPedalboardAsModified = function (modified) { - this.pedalboardModified = modified - if (modified) { - elements.saveButton.addClass('unmodified-changes') - } else { - elements.saveButton.removeClass('unmodified-changes') - } - } - - elements.devicesIcon.statusTooltip() - this.ccDeviceManager = new ControlChainDeviceManager({ - devicesIcon: elements.devicesIcon, - devicesWindow: elements.devicesWindow, - updateInfoWindow: elements.updateDeviceWindow, - setIconTooltip: function (msg) { - elements.devicesIcon.statusTooltip('message', msg, true) - }, - showNotification: function (msg) { - if (! self.loadingPeldaboardForFirstTime) { - new Notification('info', msg, 5000) - } - }, - cancelDownload: function (callback) { - $.ajax({ - url: '/controlchain/cancel/', - type: 'POST', - success: function () { - callback() - }, - error: function () { - callback() - }, - cache: false, - dataType: 'json' - }) - }, - }) - - this.ccDeviceAdded = function (dev_uri, label, labelsuffix, version) { - self.ccDeviceManager.deviceAdded(dev_uri, label+labelsuffix, version) - self.checkHardwareDeviceVersion(dev_uri, label, version) - } - - this.ccDeviceRemoved = function (dev_uri, label, version) { - self.ccDeviceManager.deviceRemoved(dev_uri, label, version) - elements.upgradeWindow.upgradeWindow('cancelDeviceSetup', dev_uri) - } - - this.ccDeviceConnected = function (label, version) { - self.ccDeviceManager.deviceConnected(label, version) - } - - this.ccDeviceDisconnected = function (label, version) { - self.ccDeviceManager.deviceDisconnected(label, version) - } - - this.ccDeviceUpdateFinished = function () { - elements.upgradeWindow.upgradeWindow('setUpdated') - elements.upgradeWindow.hide() - self.ccDeviceManager.hideUpdateWindow() - new Notification("info", "Control Chain device firmware update complete!") - } - - this.transportControls = new TransportControls({ - transportButton: elements.transportButton, - transportWindow: elements.transportWindow, - transportPlay: elements.transportPlay, - transportBPB: elements.transportBPB, - transportBPM: elements.transportBPM, - transportSyncMode: elements.transportSyncMode, - openAddressingDialog: function (port, label) { - self.hardwareManager.open("/pedalboard", port, label) - }, - setNewBeatsPerMinuteValue: function (bpm) { - self.hardwareManager.setBeatsPerMinuteValue(bpm) - }, - removeBPMHardwareMapping: function(syncMode) { - var instanceAndSymbol = "/pedalboard/:bpm" - if (self.hardwareManager.removeHardwareMappping(instanceAndSymbol)) { - var source = syncMode === "link" ? "Ableton Link" : "MIDI" - new Notification('info', 'BPM addressing removed, incompatible with ' + source + ' sync mode', 8000) - } - self.setPedalboardAsModified(true) - }, - setSyncMode: function(syncMode, callback) { - $.ajax({ - url: '/pedalboard/transport/set_sync_mode/' + syncMode, - type: 'POST', - success: function (resp) { - if (resp) { - callback(true) - } else { - new Bug("Couldn't set new sync mode") - callback(false) - } - }, - error: function () { - new Bug("Couldn't set new sync mode, server error") - callback(false) - }, - cache: false, - dataType: 'json' - }) - }, - unaddressPort: function (portSymbol, syncMode, callback) { - var addressing = { - uri : kNullAddressURI, - label : "", - minimum: 0, - maximum: 0, - value : 0, - steps : 0, - } - var instanceAndSymbol = "/pedalboard/" + portSymbol - - $.ajax({ - url: '/effect/parameter/address/' + instanceAndSymbol, - type: 'POST', - data: JSON.stringify(addressing), - success: function (resp) { - if (resp) { - if (self.hardwareManager.removeHardwareMappping(instanceAndSymbol)) { - var source = syncMode === "link" ? "Ableton Link" : "MIDI" - new Notification('info', 'BPM addressing removed, incompatible with ' + source + ' sync mode', 8000) - } - self.setPedalboardAsModified(true) - callback(true) - } else { - new Bug("Couldn't address parameter") - callback(false) - } - }, - error: function () { - new Bug("Couldn't address parameter, server error") - callback(false) - }, - cache: false, - dataType: 'json' - }) - }, - }) - - this.checkHardwareDeviceVersion = function (dev_uri, label, version) { - if (self.cloudAccessToken == null) { - self.authenticateDevice(function (ok) { - if (ok && self.cloudAccessToken != null) { - self.checkHardwareDeviceVersion(dev_uri, label, version) - } else { - console.log("Notice: failed to check device version") - } - }) - return - } - - if (self.cloudHardwareDeviceVersions == null) { - $.ajax({ - method: 'GET', - url: CONTROLCHAIN_URL + '/versions', - success: function (resp) { - if (!resp) { - console.log("Notice: failed to get latest device version") - return - } - if (resp.api_version != 1) { - return - } - - self.cloudHardwareDeviceVersions = resp - self.checkHardwareDeviceVersion(dev_uri, label, version) - }, - error: function (resp) { - console.log("Notice: failed to get latest device version") - }, - cache: false, - dataType: 'json' - }) - return - } - - var devs = self.cloudHardwareDeviceVersions.devices - if (! devs || Object.keys(devs).length == 0) { - return - } - var dev = devs[dev_uri] - if (! dev) { - return - } - - var majminor = VERSION.split(".").slice(0, 2).join(".") - var cloudversion = dev[majminor] - - if (! cloudversion) { - cloudversion = dev["latest"] - if (! cloudversion) { - return - } - } - - if (compareVersions(version.split("."), cloudversion.split("."), 3) < 0) { - data = { - 'uri': dev_uri, - 'label': label, - 'download-url': CONTROLCHAIN_URL + "/file/" + label + cloudversion + ".bin", - 'release-url': "http://wiki.moddevices.com/wiki/Control_Chain_Releases#" + label + "," + cloudversion - } - elements.upgradeWindow.upgradeWindow('setupDevice', data) - } - } - - this.validatePlugins = function (uris, callback) { - $.ajax({ - url: SITEURL + '/pedalboards/validate/', - method: 'POST', - contentType: 'application/json', - data: JSON.stringify({ - uris: uris, - }), - success: function (resp) { - if (! resp.result) { - callback(false) - return - } - callback(true) - }, - error: function (resp) { - new Bug("Couldn't validate pedalboard, error:
    " + resp.statusText) - }, - cache: false, - dataType: 'json' - }) - } - - this.saveConfigValue = function (key, value, callback) { - $.ajax({ - url: '/config/set', - type: 'POST', - data: { - key : key, - value: value, - }, - success: function () { - if (callback) { - callback(true) - PREFERENCES[key] = value - } - }, - error: function () { - if (callback) { - callback(false) - } - }, - cache: false, - dataType: 'json' - }) - } - - this.setupApp = function () { - self.isApp = true - $('#mod-bank').hide() - $('#mod-file-manager').hide() - $('#mod-settings').hide() - $('#mod-devices').hide() - $('#mod-status').hide() - $('#mod-ram').hide() - $('#mod-show-midi-port').hide() - $('#pedalboards-library').find('a').hide() - $('#pedal-presets-window').find('.js-assign-all').hide() - } - - this.setupDeviceAuthentication = function () { - self.authenticateDevice(function (ok) { - if (ok) { - console.log("MOD authentication succeeded") - self.resetPedalboardStats(); - } else { - console.log("MOD authentication failed") - self.upgradeWindow.upgradeWindow('setErrored') - } - }) - } - - this.setupMatomo = function() { - var _mtm = window._mtm = window._mtm || []; - _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'}); - (function() { - var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.async=true; g.src='https://cdn.matomo.cloud/modaudio.matomo.cloud/container_DfEOyKDN.js'; s.parentNode.insertBefore(g,s); - })(); - } - - this.effectBox = self.makeEffectBox(elements.effectBox, - elements.effectBoxTrigger) - this.cloudPluginBox = self.makeCloudPluginBox(elements.cloudPluginBox, - elements.cloudPluginBoxTrigger) - this.pedalboardBox = self.makePedalboardBox(elements.pedalboardBox, - elements.pedalboardBoxTrigger) - this.bankBox = self.makeBankBox(elements.bankBox, - elements.bankBoxTrigger) - this.fileManagerBox = self.makeFileManagerBox(elements.fileManagerBox, - elements.fileManagerBoxTrigger) - - this.getPluginsData = function (uris, callback) { - $.ajax({ - url: '/effect/bulk/', - type: 'POST', - contentType: 'application/json', - data: JSON.stringify(uris), - success: callback, - cache: false, - dataType: 'json' - }) - } - this.installMissingPlugins = function (plugins, callback) { - if (self.isApp) { - new Notification('warn', "Cannot load this pedalboard, some plugins are missing", 4000) - callback(false) - return - } - - var missingCount = 0 - var versions = {} - var uris = [] - var error = false - - // make list of uris - for (var i in plugins) { - var plugin = plugins[i] - if (uris.indexOf(plugin.uri) < 0) { - versions[plugin.uri] = [plugin.builder || 0, plugin.minorVersion, plugin.microVersion, plugin.release || 0] - uris.push(plugin.uri) - } - } - - var finalCallback = function () { - self.previousPedalboardList = null - if (error && !confirm("Failed to install some required plugins, do you want to load the pedalboard anyway?")) { - callback(false) - return - } - callback(true) - } - - var installPlugin = function (uri, data) { - missingCount++ - - self.installationQueue.installUsingURI(uri, 'auto', function (resp, bundlename) { - if (! resp.ok) { - error = true - } - - missingCount-- - - if (missingCount == 0) { - finalCallback() - } - }) - } - - var installMissing = function (data) { - for (var i in uris) { - var uri = uris[i] - var localplugin = data[uri] - - if (localplugin == null) - { - installPlugin(uri, data) - } - else - { - var version = [localplugin.builder || 0, localplugin.minorVersion, localplugin.microVersion, localplugin.release || 0] - - if (compareVersions(version, versions[uri]) < 0) { - installPlugin(uri, data) - } - } - } - - if (missingCount == 0) { - finalCallback() - } - } - - this.getPluginsData(uris, installMissing) - }, - - this.loadRemotePedalboard = function (pedalboard_id) { - if (! CLOUD_TERMS_ACCEPTED) { - return - } - - self.windowManager.closeWindows(null, true) - - if (self.cloudAccessToken == null) { - self.authenticateDevice(function (ok) { - if (ok && self.cloudAccessToken != null) { - self.loadRemotePedalboard(pedalboard_id) - } else { - new Notification('error', "Cannot load remote pedalboards, authentication failure") - } - }) - return - } - - $.ajax({ - url: startsWith(pedalboard_id, 'https://') ? pedalboard_id : (SITEURL + '/pedalboards/' + pedalboard_id), - contentType: 'application/json', - success: function (resp) { - if (!resp.data.stable && PREFERENCES['show-labs-plugins'] !== "true") { - new Notification('error', 'This pedalboard contains one or more community maintained MOD Labs plugins. To load it, you need to enable MOD Labs plugins in Settings -> Advanced'); - return; - } - self.reset(function () { - self.installMissingPlugins(resp.data.plugins, function (ok) { - if (ok) { - var transfer = new SimpleTransference(resp.file_href, '/pedalboard/load_web/', - { from_args: { headers: - { 'Authorization' : 'MOD ' + self.cloudAccessToken } - }}) - - transfer.reauthorizeDownload = self.authenticateDevice - - transfer.reportFinished = function () { - self.pedalboardEmpty = false - self.setPedalboardAsModified(true) - } - - transfer.reportError = function (error) { - new Bug("Couldn't load pedalboard, reason:
    " + error) - } - - transfer.start() - } else { - self.pedalboard.data('wait').stop() - } - }) - }, true) - }, - error: function (resp) { - new Bug("Couldn't get pedalboard info, error:
    " + resp.statusText) - }, - cache: false, - dataType: 'json' - }) - }, - - this.waitForScreenshot = function (generate, bundlepath, callback) { - pending_pedalboard_screenshots.push(bundlepath) - - if (generate) { - $.ajax({ - url: "/pedalboard/image/generate?bundlepath="+escape(bundlepath), - success: function (resp) { - callback(resp.ok) - }, - error: function () { - callback(false) - }, - cache: false, - dataType: 'json' - }) - } else { - $.ajax({ - url: "/pedalboard/image/wait?bundlepath="+escape(bundlepath), - success: function (resp) { - callback(resp.ok) - }, - error: function () { - callback(false) - }, - cache: false, - dataType: 'json' - }) - } - }, - - this.saveBox = elements.saveBox.saveBox({ - save: function (windotTitle, name, asNew, callback) { - $.ajax({ - url: '/pedalboard/save', - type: 'POST', - data: { - title: name, - asNew: asNew ? 1 : 0 - }, - success: function (result) { - if (result.ok) { - // dummy call to keep 1 ajax request active while screenshot is generated - self.waitForScreenshot(false, result.bundlepath, function(){}) - // all set - callback(true, result.bundlepath, result.title) - _paq.push(['trackEvent', 'pedalboard', 'pedalboard-save']) - } else { - callback(false, "Failed to save") - } - }, - error: function (resp) { - self.saveBox.hide() - callback(false, "Couldn't save pedalboard") - }, - cache: false, - dataType: 'json' - }); - } - }) - - this.presetSaveBox = elements.presetSaveBox.saveBox({ - save: function (windotTitle, name, asNew, callback) { - callback(true, "", name) - } - }) - - elements.addMidiButton.click(function () { - self.showMidiDeviceList() - }) - elements.saveButton.click(function () { - self.saveCurrentPedalboard(false) - }) - elements.saveAsButton.click(function () { - self.saveCurrentPedalboard(true) - }) - - elements.cvAddressingButton.click(function () { - // Show/hide CV checkboxes - if ($(this).hasClass('selected')) { - $('body').find('.output-cv-checkbox').hide() - } else { - $('body').find('.output-cv-checkbox').show() - } - // Toggle cvAddressing and button state - self.cvAddressing = !self.cvAddressing - self.pedalboard.pedalboard('setCvAddressing', self.cvAddressing) - $(this).toggleClass('selected') - }) - elements.resetButton.click(function () { - self.reset(function () { - $.ajax({ - url: '/pedalboard/load_bundle/', - type: 'POST', - data: { - bundlepath: DEFAULT_PEDALBOARD, - isDefault: '1', - }, - cache: false, - dataType: 'json' - }) - }) - }) - elements.snapshotSaveButton.click(function () { - if (self.pedalboardPresetId < 0) { - return new Notification('warn', 'Nothing to save', 1500) - } - - $.ajax({ - url: '/snapshot/save', - method: 'POST', - success: function () { - new Notification('info', 'Pedalboard snapshot saved', 2000) - }, - error: function () { - new Bug("Failed to save pedalboard snapshot") - }, - cache: false, - dataType: 'json', - }) - }) - elements.snapshotSaveAsButton.click(function () { - var addressed = !!self.hardwareManager.addressingsByPortSymbol['/pedalboard/:presets'] - if (addressed) { - return new Notification("warn", "Cannot change snapshot while addressed to hardware", 3000) - } - - desktop.openPresetSaveWindow("Saving Snapshot", "", function (newName) { - $.ajax({ - url: '/snapshot/saveas', - data: { - title: newName, - }, - success: function (resp) { - if (! resp.ok) { - return - } - self.pedalboardPresetId = resp.id - self.pedalboardPresetName = resp.title - self.titleBox.text((self.title || 'Untitled') + " - " + resp.title) - new Notification('info', 'Pedalboard snapshot saved', 2000) - }, - error: function () { - new Bug("Failed to save pedalboard snapshot") - }, - cache: false, - dataType: 'json', - }) - }) - }) - elements.snapshotManageButton.click(function () { - var addressed = !!self.hardwareManager.addressingsByPortSymbol['/pedalboard/:presets'] - var feedback = true - - if (addressed) { - console.log(self.hardwareManager.addressingsData['/pedalboard/:presets']) - feedback = self.hardwareManager.addressingsData['/pedalboard/:presets'].feedback - } - - self.pedalPresets.start(self.pedalboardPresetId, addressed, feedback) - }) - - elements.bypassLeftButton.click(function () { - self.triggerTrueBypass("Left", !$(this).hasClass("bypassed")) - }) - elements.bypassRightButton.click(function () { - self.triggerTrueBypass("Right", !$(this).hasClass("bypassed")) - }) - elements.bufferSizeButton.click(function () { - var newsize - if ($(this).text() == "128 frames") { - newsize = '256' - } else { - newsize = '128' - } - - $.ajax({ - url: '/set_buffersize/' + newsize, - method: 'POST', - cache: false, - success: function (resp) { - if (! resp.ok) { - new Bug("Couldn't set new buffer size") - } - }, - error: function () { - new Bug("Communication failure") - }, - }) - }) - elements.xrunsButton.click(function () { - if (cached_xruns == 0) { - return - } - $.ajax({ - url: '/reset_xruns/', - method: 'POST', - cache: false, - success: function (ok) { - if (ok) { - cached_xruns = 0 - $("#mod-xruns").text("0 Xruns") - } - } - }) - }) - elements.cpuStatsButton.click(function () { - $.ajax({ - url: '/switch_cpu_freq/', - method: 'POST', - cache: false, - success: function (ok) { - if (! ok) { - new Bug("Couldn't set new cpu frequency") - } - }, - error: function () { - new Bug("Communication failure") - }, - }) - }) - - elements.shareButton.click(function () { - var share = function () { - if (self.pedalboardEmpty) { - return new Notification('warn', 'Nothing to share', 1500) - } - - var uris = self.pedalboard.pedalboard('getLoadedPluginURIs') - - if (uris.length == 0) { - return new Notification('warn', 'No plugins loaded, cannot share', 1500) - } - - self.validatePlugins(uris, function (stable) { - elements.shareWindow.shareBox('open', self.pedalboardBundle, self.title, stable) - }) - } - - if (self.pedalboardModified || ! (self.pedalboardEmpty || self.pedalboardBundle)) { - if (confirm('There are unsaved modifications, pedalboard must first be saved. Save it?')) { - self.saveCurrentPedalboard(false, share) - } - } else { - share() - } - }) - - elements.shareWindow.shareBox({ - recordStart: ajaxFactory('/recording/start', "Can't record. Probably a connection problem."), - recordStop: ajaxFactory('/recording/stop', "Can't stop record. Probably a connection problem. Please try stopping again"), - playStart: function (startCallback, stopCallback) { - $.ajax({ - url: '/recording/play/start', - success: function (resp) { - $.ajax({ - url: '/recording/play/wait', - success: stopCallback, - error: function () { - new Error("Couln't check when sample playing has ended") - }, - cache: false, - dataType: 'json' - }) - startCallback(resp) - }, - error: function () { - new Error("Can't play. Probably a connection problem.") - }, - cache: false, - dataType: 'json' - }) - }, - playStop: ajaxFactory('/recording/play/stop', "Can't stop playing. Probably a connection problem. Please try stopping again"), - recordDownload: ajaxFactory('/recording/download', "Can't download recording. Probably a connection problem."), - recordReset: ajaxFactory('/recording/reset', "Can't reset your recording. Probably a connection problem."), - - share: function (data, callback) { - if (! data.reauthorized) { - // save user data - $.ajax({ - url: '/save_user_id/', - method: 'POST', - data: data, - success: function () {}, - error: function () {}, - cache: false, - global: false, - dataType: 'json', - }) - } - - if (! CLOUD_TERMS_ACCEPTED) { - return - } - - if (self.cloudAccessToken == null) { - self.authenticateDevice(function (ok) { - if (ok && self.cloudAccessToken != null) { - elements.shareWindow.shareBox('share', data, callback) - } else { - callback({ - ok: false, - error: "authentication failure" - }) - } - }) - return - } - - // pack & upload to cloud - $.ajax({ - url: SITEURL + '/pedalboards/', - method: 'POST', - contentType: 'application/json', - headers: { 'Authorization' : 'MOD ' + self.cloudAccessToken }, - data: JSON.stringify({ - author : data.name, - email : data.email, - description: data.description, - title : data.title, - hidden : data.hidden, - }), - success: function (resp) { - var transfer = new SimpleTransference('/pedalboard/pack_bundle/?bundlepath=' + escape(self.pedalboardBundle), - resp.upload_href, - { to_args: { headers: - { 'Authorization' : 'MOD ' + self.cloudAccessToken } - }}) - - transfer.reauthorizeUpload = self.authenticateDevice; - - transfer.reportFinished = function (resp2) { - callback({ - ok: true, - id: resp.id, - }) - } - - transfer.reportError = function (error) { - callback({ - ok: false, - error: "Failed to upload pedalboard to cloud (missing screenshot?)", - }) - } - - transfer.start() - }, - error: function (resp) { - if (resp.status == 401 && ! data.reauthorized) { - console.log("Pedalboard share unauthorized, retrying authentication...") - data.reauthorized = true - self.authenticateDevice(function (ok, options) { - if (ok) { - console.log("Authentication succeeded") - self.options = $.extend(self.options, options) - elements.shareWindow.shareBox('share', data, callback) - } else { - console.log("Authentication failed") - callback({ - ok: false, - error: resp.statusText - }) - } - }) - return; - } - - callback({ - ok: false, - error: resp.statusText - }) - }, - cache: false, - dataType: 'json' - }) - }, - - waitForScreenshot: self.waitForScreenshot, - }) - - elements.statusIcon.statusTooltip() - this.networkStatus = new NetworkStatus({ - icon: elements.statusIcon, - notify: function (msg) { - elements.statusIcon.statusTooltip('message', msg, true) - } - }) - - elements.settingsIcon.click(function() { - document.location.href = '/settings'; - }) - - elements.settingsIcon.statusTooltip() - elements.pedalboardTrigger.statusTooltip() - elements.pedalboardBoxTrigger.statusTooltip() - elements.bankBoxTrigger.statusTooltip() - elements.cloudPluginBoxTrigger.statusTooltip() - elements.fileManagerBoxTrigger.statusTooltip() - - this.upgradeWindow = elements.upgradeWindow.upgradeWindow({ - icon: elements.upgradeIcon, - windowManager: self.windowManager, - startUpgrade: function (callback) { - $.ajax({ - type: 'POST', - url: '/update/begin', - success: function (ok) { - callback(ok) - }, - error: function () { - callback(false) - }, - cache: false, - dataType: 'json', - }) - }, - startDeviceUpgrade: function () { - self.ccDeviceManager.showUpdateWindow() - }, - }) - - var prevent = function (ev) { - ev.preventDefault() - } - $('body')[0].addEventListener('gesturestart', prevent) - $('body')[0].addEventListener('gesturechange', prevent) - $('body')[0].addEventListener('touchmove', prevent) - $('body')[0].addEventListener('dblclick', prevent) -} - -Desktop.prototype.makePedalboard = function (el, effectBox) { - var self = this - el.pedalboard({ - windowManager: self.windowManager, - hardwareManager: self.hardwareManager, - bottomMargin: effectBox.height(), - cvAddressing: self.cvAddressing, - pluginLoad: function (uri, instance, x, y, callback, errorCallback) { - var firstTry = true - var add = function () { - $.ajax({ - url: '/effect/add/' + instance + '?x=' + x + '&y=' + y + '&uri=' + escape(uri), - success: function (pluginData) { - if (pluginData) { - callback(pluginData) - } else { - new Notification('error', 'Error adding effect') - if (errorCallback) - errorCallback() - } - }, - error: function (resp) { - new Notification('error', 'Error adding effect. Probably a connection problem.') - if (errorCallback) - errorCallback() - }, - cache: false, - dataType: 'json' - }) - } - add() - }, - - pluginRemove: function (instance, callback) { - $.ajax({ - url: '/effect/remove/' + instance, - success: function (resp) { - if (resp) - callback() - else - new Notification("error", "Couldn't remove effect") - }, - cache: false, - dataType: 'json' - }) - }, - - pluginPresetLoad: function (instance, uri, callback) { - $.ajax({ - url: '/effect/preset/load/' + instance, - data: { - uri: uri - }, - success: function (resp) { - callback(resp) - }, - error: function () { - }, - cache: false, - dataType: 'json' - }) - }, - - pluginPresetSaveNew: function (instance, name, callback) { - $.ajax({ - url: '/effect/preset/save_new/' + instance, - data: { - name: name - }, - success: function (resp) { - callback(resp) - }, - error: function () { - }, - cache: false, - dataType: 'json' - }) - }, - - pluginPresetSaveReplace: function (instance, uri, bundlepath, name, callback) { - $.ajax({ - url: '/effect/preset/save_replace/' + instance, - data: { - uri : uri, - bundle: bundlepath, - name : name - }, - success: function (resp) { - callback(resp) - }, - error: function () { - }, - cache: false, - dataType: 'json' - }) - }, - - pluginPresetDelete: function (instance, uri, bundlepath, callback) { - $.ajax({ - url: '/effect/preset/delete/' + instance, - data: { - uri : uri, - bundle: bundlepath - }, - success: function (resp) { - callback(resp) - }, - error: function () { - }, - cache: false, - dataType: 'json' - }) - }, - - portConnect: function (fromPort, toPort, callback) { - var urlParam = fromPort + ',' + toPort - $.ajax({ - url: '/effect/connect/' + urlParam, - success: function (resp) { - callback(resp) - if (!resp) { - console.log('erro') - } - }, - cache: false, - dataType: 'json' - }) - }, - - portDisconnect: function (fromPort, toPort, callback) { - var urlParam = fromPort + ',' + toPort - $.ajax({ - url: '/effect/disconnect/' + urlParam, - success: function () { - callback(true) - }, - cache: false, - dataType: 'json' - }) - }, - - reset: function (callback) { - $.ajax({ - url: '/reset', - success: function (resp) { - if (!resp) { - return new Notification('error', "Couldn't reset pedalboard") - } - - self.title = '' - self.pedalboardBundle = null - self.pedalboardEmpty = true - self.pedalboardPresetId = 0 - self.pedalboardPresetName = '' - self.pedalboardDemoPluginsNotified = false - self.titleBox.text('Untitled') - self.titleBox.addClass("blend") - self.transportControls.resetControlsEnabled() - self.setPedalboardAsModified(false) - - callback(true) - }, - error: function () { - new Bug("Couldn't reset pedalboard") - }, - cache: false - }) - }, - - getPluginsData: self.getPluginsData, - - showPluginInfo: function (pluginData) { - pluginData.installedVersion = [pluginData.builder, - pluginData.minorVersion, - pluginData.microVersion, - pluginData.release] - self.effectBox.effectBox('showPluginInfo', pluginData) - }, - - showExternalUI: function (instance) { - ws.send(sprintf("show_external_ui %s", instance)) - }, - - pluginParameterChange: function (port, value) { - self.setPedalboardAsModified(true) - ws.send(sprintf("param_set %s %f", port, value)) - }, - - pluginPatchGet: function (instance, uri) { - ws.send(sprintf("patch_get %s %s", instance, uri)) - }, - - pluginPatchSet: function (instance, uri, valuetype, value) { - self.setPedalboardAsModified(true) - ws.send(sprintf("patch_set %s %s %s %s", instance, uri, valuetype, value)) - }, - - pluginMove: function (instance, x, y) { - self.setPedalboardAsModified(true) - ws.send(sprintf("plugin_pos %s %f %f", instance, x, y)) - }, - - windowSize: function (width, height) { - // FIXME - if (ws && width > 0 && height > 0) { - ws.send(sprintf("pb_size %f %f", width, height)) - } - }, - - pedalboardFinishedLoading: function (callback) { - if (! self.loadingPeldaboardForFirstTime) { - callback() - return - } - - self.loadingPeldaboardForFirstTime = false - self.effectBox.effectBox('search', function () { - setTimeout(function () { - callback() - }, 500) - }) - }, - - addCVAddressingPluginPort: function (uri, name, callback) { - $.ajax({ - url: '/pedalboard/cv_addressing_plugin_port/add', - type: 'POST', - data: { - uri: uri, - name: name, - }, - success: function (resp) { - if (!resp) { - return new Notification('error', "Couldn't add CV port") - } - callback(resp) - }, - error: function () { - new Bug("Couldn't add CV port") - }, - cache: false, - dataType: 'json' - }) - }, - - removeCVAddressingPluginPort: function (uri, callback) { - $.ajax({ - url: '/pedalboard/cv_addressing_plugin_port/remove', - type: 'POST', - data: { - uri: uri, - }, - success: function (resp) { - if (!resp) { - return new Notification('error', "Couldn't remove CV port") - } - callback(resp) - }, - error: function () { - new Bug("Couldn't remove CV port") - }, - cache: false, - dataType: 'json' - }) - }, - - notifyDemoPluginLoaded: function () { - if (self.pedalboardDemoPluginsNotified) { - return - } - self.pedalboardDemoPluginsNotified = true - new Notification('warn', 'This pedalboard contains a trial plugin.
    Using trial plugins will intentionally mute the audio at regular intervals.') - }, - }); - - // Bind events - el.bind('modified', function () { - self.pedalboardEmpty = false - self.setPedalboardAsModified(true) - }) - /* - el.bind('dragStart', function () { - self.windowManager.closeWindows(null, true) - }) - */ - - el.bind('pluginDragStart', function () { - self.effectBox.addClass('fade') - }) - el.bind('pluginDragStop', function () { - self.effectBox.removeClass('fade') - }) - - return el -} - -Desktop.prototype.makePedalboardBox = function (el, trigger) { - var self = this - return el.pedalboardBox({ - trigger: trigger, - windowManager: this.windowManager, - list: self.pedalboardListFunction, - search: self.pedalboardSearchFunction, - saveConfigValue: self.saveConfigValue, - remove: function (pedalboard, callback) { - if (!confirm(sprintf('The pedalboard "%s" will be permanently removed! Confirm?', pedalboard.title))) - return - $.ajax({ - url: '/pedalboard/remove/', - data: { - bundlepath: pedalboard.bundle - }, - success: function () { - new Notification("info", sprintf('Pedalboard "%s" removed', pedalboard.title), 1000) - self.previousPedalboardList = null - callback() - }, - error: function () { - new Bug("Couldn't remove pedalboard") - }, - cache: false - }) - }, - load: function (bundlepath, broken, callback) { - if (!broken) { - self.loadPedalboard(bundlepath, callback) - return - } - $.ajax({ - url: '/pedalboard/info/', - data: { - bundlepath: bundlepath - }, - success: function (pbinfo) { - self.reset(function () { - self.installMissingPlugins(pbinfo.plugins, function (ok) { - if (ok) { - self.loadPedalboard(bundlepath, callback) - } else { - self.pedalboard.data('wait').stop() - } - }) - }) - }, - error: function () { - new Bug("Couldn't load pedalboard") - }, - cache: false - }) - }, - }) -} - -Desktop.prototype.makeEffectBox = function (el, trigger) { - var self = this - return el.effectBox({ - trigger: trigger, - windowManager: this.windowManager, - pedalboard: this.pedalboard, - saveConfigValue: this.saveConfigValue, - }) -} - -Desktop.prototype.makeCloudPluginBox = function (el, trigger) { - var self = this - return el.cloudPluginBox({ - trigger: trigger, - windowManager: this.windowManager, - list: self.cloudPluginListFunction, - removePluginBundles: function (bundles, callback) { - if (!confirm('You are about to remove this plugin and any other in the same bundle. This may break pedalboards that depend on them.')) - return - self.previousPedalboardList = null - $.ajax({ - url: '/package/uninstall', - data: JSON.stringify(bundles), - method: 'POST', - success: function(resp) { - if (resp.ok) { - callback(resp) - } else { - new Notification('error', "Could not uninstall bundle: " + resp.error) - } - }, - error: function () { - new Notification('error', "Failed to uninstall plugin") - }, - cache: false, - dataType: 'json' - }) - }, - upgradePluginURI: function (uri, usingLabs, callback) { - self.previousPedalboardList = null - self.installationQueue.installUsingURI(uri, usingLabs, callback) - }, - installPluginURI: function (uri, usingLabs, callback) { - self.previousPedalboardList = null - self.installationQueue.installUsingURI(uri, usingLabs, callback) - } - }) -} - -Desktop.prototype.makeBankBox = function (el, trigger) { - var self = this - el.bankBox({ - trigger: trigger, - windowManager: this.windowManager, - list: self.pedalboardListFunction, - search: self.pedalboardSearchFunction, - load: function (callback) { - $.ajax({ - url: '/banks', - success: callback, - error: function () { - new Bug("Couldn't load banks") - }, - cache: false, - dataType: 'json', - }) - }, - save: function (data, callback) { - $.ajax({ - type: 'POST', - url: '/banks/save', - data: JSON.stringify(data), - success: callback, - error: function () { - new Bug("Couldn't save banks") - }, - cache: false, - }) - }, - copyFactoryPedalboard: function (bundlepath, title, callback) { - $.ajax({ - url: '/pedalboard/factorycopy/', - data: { - bundlepath: bundlepath, - title: title, - }, - success: function (resp) { - if (resp) { - self.previousPedalboardList = null - new Notification('warning', 'Factory pedalboard was duplicated into the User Pedalboards Library') - callback(resp) - } else { - new Bug("Could not copy factory pedalboard") - } - }, - error: function () { - new Bug("Failed to copy factory pedalboard") - }, - cache: false - }) - }, - }) -} - -Desktop.prototype.makeFileManagerBox = function (el, trigger) { - var self = this - el.fileManagerBox({ - trigger: trigger, - windowManager: this.windowManager, - }) -} - -Desktop.prototype.reset = function (callback, skipConfirmDialog) { - if (this.pedalboardModified && !skipConfirmDialog && !confirm("There are unsaved modifications that will be lost. Are you sure?")) { - return - } - - this.pedalboard.data('wait').start('Loading pedalboard...') - this.pedalboard.pedalboard('reset', callback) -} - -Desktop.prototype.updateAllPlugins = function () { - this.effectBox.effectBox('search') -} - -Desktop.prototype.updatePluginList = function (added, removed) { - // TODO - console.log("ADDED:", added) - console.log("REMOVED:", removed) - for (var i in added) { - var uri = added[i] - } - for (var i in removed) { - var uri = removed[i] - } - this.effectBox.effectBox('search') -} - -Desktop.prototype.showMidiDeviceList = function () { - this.midiDevices.start() -} - -Desktop.prototype.triggerTrueBypass = function (channelName, bypassed) { - var self = this; - $.ajax({ - url: '/truebypass/' + channelName + '/' + (bypassed ? "true" : "false"), - cache: false, - dataType: 'json', - success: function (ok) { - if (ok) { - self.setTrueBypassButton(channelName, bypassed); - } - } - }) -} - -Desktop.prototype.setTrueBypassButton = function (channelName, state) { - if (typeof state === "string") state = eval(state); - var b = $("#mod-bypass" + channelName); - b[(state ? "add" : "remove") + "Class"]("bypassed"); -} - -Desktop.prototype.loadPedalboard = function (bundlepath, callback) { - var self = this - - self.reset(function () { - $.ajax({ - url: '/pedalboard/load_bundle/', - type: 'POST', - data: { - bundlepath: bundlepath - }, - success: function (resp) { - if (! resp.ok) { - callback(false) - return - } - self.title = resp.name - self.pedalboardBundle = bundlepath - self.pedalboardEmpty = false - self.pedalboardDemoPluginsNotified = false - self.setPedalboardAsModified(false) - self.titleBox.text(resp.name); - self.titleBox.removeClass("blend"); - - callback(true) - _paq.push(['trackEvent', 'pedalboard', 'pedalboard-load']); - }, - error: function () { - new Bug("Couldn't load pedalboard") - }, - cache: false, - dataType: 'json' - }) - }) -} - -Desktop.prototype.saveCurrentPedalboard = function (asNew, callback) { - var self = this - - if (self.pedalboardEmpty && ! self.pedalboardModified) { - new Notification('warn', 'Nothing to save', 1500) - return - } - - self.saveBox.saveBox('save', "", self.title, asNew, - function (ok, errorOrPath, title) { - if (!ok) { - new Error(errorOrPath) - return - } - - if (asNew || title || ! self.title) { - self.titleBox.removeClass("blend"); - self.previousPedalboardList = null - } - - self.title = title - self.pedalboardBundle = errorOrPath - self.pedalboardEmpty = false - self.setPedalboardAsModified(false) - self.titleBox.text(title + " - " + self.pedalboardPresetName) - - if (self.previousPedalboardList != null) { - for (var i=0; i').appendTo($('body')) - tooltip.data('arrow', $('
    ').appendTo(tooltip)) - $('
    ').appendTo(tooltip) - tooltip.hide() - self.data('tooltip', tooltip) - self.bind('mouseover', function () { - self.statusTooltip('showTooltip') - }) - self.bind('mouseout', function () { - tooltip.stop().animate({ - opacity: 0 - }, 200, - function () { - $(this).hide() - }) - }) - - // Special case for bottom left mod-plugins icon - // arrow should be on the left, not on the right - if (self.attr('id') === "mod-plugins") { - var arrow = tooltip.data('arrow'); - arrow.css('left', 14); - } - - return self - }, - - status: function (status) { - var self = $(this) - if (self.data('status')) - self.removeClass(self.data('status')) - self.data('status', status) - self.addClass(status) - }, - - message: function (message, silent, timeout) { - var self = $(this) - var oldMsg = self.data('message') - self.data('message', message) - if (!silent && oldMsg != message) - self.statusTooltip('showTooltip', timeout || 1500) - }, - - showTooltip: function (timeout) { - var self = $(this) - var msg = self.data('message') - if (!msg) - return - var tooltip = self.data('tooltip') - tooltip.find('.text').html(self.data('message')) - tooltip.show().stop().animate({ - opacity: 1 - }, 200) - - // Adjust tooltip position in case window has been resized - self.statusTooltip('updatePosition') - - if (timeout) { - setTimeout(function () { - tooltip.stop().animate({ - opacity: 0 - }, 200, - function () { - $(this).hide() - }) - }, timeout) - } - }, - - updatePosition: function() { - var self = $(this) - var tooltip = self.data('tooltip') - tooltip.css('right', $(window).width() - self.position().left - self.width()) - - // Special case for bottom left mod-plugins icon - if (self.attr('id') === "mod-plugins") { - tooltip.css('right', $(window).width() - self.position().left - self.width() + tooltip.position().left); - } - } -}) - -function enable_dev_mode(skipSaveConfig) { - // install/update all plugins - $('#cloud_install_all').show() - $('#cloud_update_all').show() - - // network and controller ping times - $('#mod-status').show().statusTooltip('updatePosition') - - // adjust position - $('#mod-devices').statusTooltip('updatePosition') - $('#mod-settings').statusTooltip('updatePosition') - - // xrun counter - $('#mod-xruns').show() - - // buffer size button - $('#mod-buffersize').show() - - // CPU speed and temperature, not available on the Duo - if (PLATFORM != "duo") { - $('#mod-cpu-stats').show() - } - - // transport parameters - $('#mod-transport-window').css({ - right: '592px' - }) - - if (!skipSaveConfig) { - // save settings - desktop.saveConfigValue("dev-mode", "on") - } - - // echo to you - return "Dev mode enabled!" -} - -function disable_dev_mode() { - // install/update all plugins - $('#cloud_install_all').hide() - $('#cloud_update_all').hide() - - // network and controller ping times - $('#mod-status').hide() - - // adjust position - $('#mod-devices').statusTooltip('updatePosition') - $('#mod-settings').statusTooltip('updatePosition') - - // xrun counter - $('#mod-xruns').hide() - - // buffer size button - $('#mod-buffersize').hide() - - // CPU speed and temperature - $('#mod-cpu-stats').hide() - - // transport parameters - $('#mod-transport-window').css({ - right: '310px' - }) - - // save settings - desktop.saveConfigValue("dev-mode", "off") - - // echo to you - return "Dev mode disabled!" -} diff --git a/html/js/effects.js b/html/js/effects.js deleted file mode 100644 index 81654b92c..000000000 --- a/html/js/effects.js +++ /dev/null @@ -1,680 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -/* - * effectBox - * - * The interface for searching, selecting and installing plugins - * - * Properties: - * - mode: The search mode, indicated by top buttons - * - searchbox: dom of search's input - * - resultCanvas: dom div in which results will be shown - * - categoryBrowse: dom div with category menu - * - results: dictionary containing detailed data of all plugins - * displayed - */ -JqueryClass('effectBox', { - init: function (options) { - var self = $(this) - - options = $.extend({ - pedalboard: $('
    '), - windowManager: null, - saveConfigValue: function (key, value) {}, - }, options) - - self.data(options) - self.data('showPluginsRenderId', 0) - - var searchbox = self.find('input[type=search]') - - // make sure searchbox is empty on init - searchbox.val("") - - self.data('searchbox', searchbox) - searchbox.cleanableInput() - - var lastKeyTimeout = null - searchbox.keydown(function (e) { - if (e.keyCode == 13) { // detect enter - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - lastKeyTimeout = null - } - self.effectBox('search') - return false - } - else if (e.keyCode == 8 || e.keyCode == 46) { // detect delete and backspace - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - } - lastKeyTimeout = setTimeout(function () { - self.effectBox('search') - }, 400); - } - }) - searchbox.keypress(function (e) { // keypress won't detect delete and backspace but will only allow inputable keys - if (e.which == 13) { - return - } - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - } - lastKeyTimeout = setTimeout(function () { - self.effectBox('search') - }, 400); - }) - searchbox.on('cut', function(e) { - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - } - lastKeyTimeout = setTimeout(function () { - self.effectBox('search') - }, 400); - }) - searchbox.on('paste', function(e) { - if (lastKeyTimeout != null) { - clearTimeout(lastKeyTimeout) - } - lastKeyTimeout = setTimeout(function () { - self.effectBox('search') - }, 400); - }) - - var settingsBox = self.find('#plugins-library-settings-window') - settingsBox.window({ - windowName: "Plugin Library", - windowManager: options.windowManager, - trigger: self.find('.js-settings-trigger') - }) - self.find('.js-settings-trigger').click(function(){ - $('#effectSearch').focus() // will focus the input when clicking the search icon - }) - - self.droppable({ - accept: '.js-available-effect', - drop: function (event, ui) { - //ui.helper.consumed = true - } - }) - - self.data('category', null) - // CATEGORY TABS - self.find('ul.js-category-tabs li').click(function () { - var category = $(this).attr('id').replace(/^effect-tab-/, '') - self.effectBox('setCategory', category) - }) - - self.find('.js-effects-fold').click(function () { - self.effectBox('toggle') - options.saveConfigValue("plugins-folded", self.hasClass('folded') ? "true" : "false") - }) - - self.find('.nav-left').click(function () { - self.effectBox('shiftLeft') - }) - self.find('.nav-right').click(function () { - self.effectBox('shiftRight') - }) - - // CATEGORY WRAPPERS - self.find(".plugins-wrapper").each(function () { - $(this).data("pos", 0); - $(this).data("plug", 0); - }) - - // CATEGORY SCROLL - self.on('DOMMouseScroll mousewheel', function ( event ) { - if( event.originalEvent.detail > 0 || event.originalEvent.wheelDelta < 0 ) - self.effectBox('shiftNext'); - else - self.effectBox('shiftPrev'); - self.effectBox('scrolling'); - return false; - }); - self.data("scrollTO", false); - - //self.effectBox('fold') - if (FAVORITES.length > 0) { - self.effectBox('setCategory', 'Favorites') - } else { - self.effectBox('setCategory', 'All') - } - - // don't search just yet. - // it's a little expensive, let init time go for loading the pedalboard first - self.effectBox('showPlugins', []) - - self.mouseenter(function () { self.effectBox('mouseEnter'); }); - $("#main-menu").mouseenter(function () { self.trigger("mouseenter") }); - return self - }, - - fold: function () { - var self = $(this) - //self.find('.js-effects-list').hide() - self.addClass('folded') - //self.find('.js-effects-fold').hide() - }, - - unfold: function () { - var self = $(this) - //self.find('.js-effects-list').show() - self.removeClass('folded') - //self.find('.js-effects-fold').show() - }, - - toggle: function () { - var self = $(this); - if (self.hasClass('auto')) { - self.trigger("mouseleave"); - self.effectBox('unfold') - } else - self.effectBox('fold') - self.toggleClass("auto"); - }, - - mouseEnter: function (e) { - var self = $(this); - if (self.hasClass('auto')) { - self.one("mouseleave", function () { self.effectBox('fold'); }); - self.effectBox('unfold'); - } - }, - - setCategory: function (category) { - var self = $(this) - self.find('ul.js-category-tabs li').removeClass('selected') - self.find('.plugins-wrapper').removeClass("selected"); - self.find('#effect-tab-' + category).addClass('selected') - self.find('#effect-content-' + category).addClass("selected"); - self.data('category', category) - self.effectBox('unfold') - self.effectBox('calculateNavigation') - }, - - search: function (callback) { - var self = $(this) - var searchbox = self.data('searchbox') - var term = searchbox.val() - - if (term) - { - var allplugins = desktop.pluginIndexerData - var plugins = [] - - var ret = desktop.pluginIndexer.search(term) - for (var i in ret) { - var uri = ret[i].ref - plugins.push(allplugins[uri]) - } - - self.effectBox('showPlugins', plugins) - } - else - { - $.ajax({ - method: 'GET', - url: '/effect/list', - success: function (plugins) { - var i, plugin, allplugins = {} - for (i in plugins) { - plugin = plugins[i] - plugin.installedVersion = [plugin.builder, plugin.minorVersion, plugin.microVersion, plugin.release] - allplugins[plugin.uri] = plugin - } - desktop.resetPluginIndexer(allplugins) - self.effectBox('showPlugins', plugins, callback) - }, - cache: false, - dataType: 'json' - }); - } - }, - - showPlugins: function (plugins, callback) { - var self = $(this) - self.effectBox('cleanResults') - plugins.sort(function (a, b) { - a = a.label.toLowerCase() - b = b.label.toLowerCase() - if (a > b) { - return 1 - } - if (a < b) { - return -1 - } - return 0 - }) - - // count plugins first - var pluginCount = plugins.length - var categories = { - 'Favorites': 0, - 'All': 0, - 'ControlVoltage': 0, - 'Delay': 0, - 'Distortion': 0, - 'Dynamics': 0, - 'Filter': 0, - 'Generator': 0, - 'MIDI': 0, - 'Modulator': 0, - 'Reverb': 0, - 'Simulator': 0, - 'Spatial': 0, - 'Spectral': 0, - 'Utility': 0, - 'MaxGen': 0, - 'Camomile': 0, - } - var category - for (i in plugins) { - category = plugins[i].category[0] - if (category) { - if (categories[category] == null) - categories[category] = 1 - else - categories[category] += 1 - } - if (FAVORITES.indexOf(plugins[i].uri) >= 0) { - categories.Favorites += 1 - } - categories.All += 1 - } - - // display plugin count - for (category in categories) { - var tab = self.find('#effect-tab-' + category) - tab.find('.count').text('(' + categories[category] + ')') - } - - if (categories[category] == 0) { - self.find('#effect-tab-MaxGen').hide() - } else { - self.find('#effect-tab-MaxGen').show() - } - - // disable navigation while we render plugins - self.find('.nav-left').addClass('disabled') - self.find('.nav-right').addClass('disabled') - - var renderedIndex = 0 - - // current render id, to check if another render has been called - var currentRenderId = self.data('showPluginsRenderId')+1 - self.data('showPluginsRenderId', currentRenderId) - - // render plugins - var plugin - function renderNextPlugin() { - if (self.data('showPluginsRenderId') != currentRenderId) { - // another render is in place, stop this one - if (callback) { callback() } - return - } - - if (renderedIndex >= pluginCount) { - // if we get here it means we finished rendering - self.effectBox('calculateNavigation') - - if (self.data('showPluginsRenderId') == currentRenderId) { - // no other renders in queue, take the chance and reset the id - self.data('showPluginsRenderId', 0) - } - if (callback) { callback() } - return - } - - plugin = plugins[renderedIndex] - category = plugin.category[0] - - self.effectBox('renderPlugin', plugin, self.find('#effect-content-All')) - - if (FAVORITES.indexOf(plugin.uri) >= 0) { - self.effectBox('renderPlugin', plugin, self.find('#effect-content-Favorites')) - } - - if (category && category != 'All') { - self.effectBox('renderPlugin', plugin, self.find('#effect-content-' + category)) - } - - renderedIndex += 1 - setTimeout(renderNextPlugin, 1); - } - - renderNextPlugin(0) - }, - - renderPlugin: function (plugin, container, replace) { - var self = $(this) - if (container.length == 0) - return - var uri = escape(plugin.uri) - var ver = [plugin.builder, plugin.microVersion, plugin.minorVersion, plugin.release].join('_') - - var plugin_data = { - uri : uri, - brand : plugin.brand || " ", - label : plugin.label, - thumbnail_href: (plugin.gui && plugin.gui.thumbnail) - ? ("/effect/image/thumbnail.png?uri=" + uri + "&v=" + ver) - : "/resources/pedals/default-thumbnail.png", - } - - if (window.devicePixelRatio && window.devicePixelRatio >= 2) { - plugin_data.thumbnail_href = plugin_data.thumbnail_href.replace("thumbnail","screenshot") - } - - var div = document.createElement("div"); - div.innerHTML = Mustache.render(TEMPLATES.plugin, plugin_data); - var rendered = $(Array.prototype.slice.call(div.childNodes, 0)); - - self.data('pedalboard').pedalboard('registerAvailablePlugin', rendered, plugin, { - distance: 2, - delay: 100, - start: function () { - if (self.data('info')) - self.data('info').remove() - self.data('windowManager').closeWindows(null, true) - self.window('fade') - }, - stop: function () { - self.window('unfade') - } - }) - - rendered.click(function () { - self.effectBox('showPluginInfo', plugin) - }) - - if (replace) { - rendered.insertAfter(replace) - replace.remove() - } else { - container.append(rendered) - } - - var index = self.data('index') - if (!index[plugin.uri]) - index[plugin.uri] = [] - index[plugin.uri].push([plugin, rendered, container]) - }, - - showPluginInfo: function (plugin) { - var self = $(this) - var uri = escape(plugin.uri) - - var showInfo = function() { - - // formating numbers and flooring ranges up to two decimal cases - for (var i = 0; i < plugin.ports.control.input.length; i++) { - plugin.ports.control.input[i].formatted = format(plugin.ports.control.input[i]) - } - - if (plugin.ports.cv && plugin.ports.cv.input) { - for (var i = 0; i < plugin.ports.cv.input.length; i++) { - plugin.ports.cv.input[i].formatted = format(plugin.ports.cv.input[i]) - } - } - - if (plugin.ports.cv && plugin.ports.cv.output) { - for (var i = 0; i < plugin.ports.cv.output.length; i++) { - plugin.ports.cv.output[i].formatted = format(plugin.ports.cv.output[i]) - } - } - - var ver = [plugin.builder, plugin.microVersion, plugin.minorVersion, plugin.release].join('_') - - var metadata = { - author: plugin.author, - uri: plugin.uri, - thumbnail_href: (plugin.gui && plugin.gui.thumbnail) - ? "/effect/image/thumbnail.png?uri=" + uri + "&v=" + ver - : "/resources/pedals/default-thumbnail.png", - screenshot_href: (plugin.gui && plugin.gui.screenshot) - ? "/effect/image/screenshot.png?uri=" + uri + "&v=" + ver - : "/resources/pedals/default-screenshot.png", - category: plugin.category[0] || "None", - installed_version: version(plugin.installedVersion), - latest_version: "DO NOT SHOW THIS!!", // not shown on local plugin bar - package_name: plugin.bundles[0].replace(/\.lv2$/, ''), - comment: plugin.comment.trim() || "No description available", - brand : plugin.brand, - name : plugin.name, - label : plugin.label, - ports : plugin.ports, - installed: true, - favorite_class: FAVORITES.indexOf(plugin.uri) >= 0 ? "favorite" : "", - plugin_href: PLUGINS_URL + '/' + btoa(plugin.uri), - pedalboard_href: desktop.getPedalboardHref(plugin.uri), - discussion_href: plugin.gui.discussionURL, - documentation_href: (plugin.gui && plugin.gui.documentation) - ? '/effect/file/documentation?uri=' + uri + '&v=' + ver - : '', - build_env_uppercase: (plugin.buildEnvironment || "LOCAL").toUpperCase(), - show_build_env: plugin.buildEnvironment !== "prod", - }; - - var render = function(metadata) { - var info = $(Mustache.render(TEMPLATES.cloudplugin_info, metadata)) - - // hide install etc buttons - info.find('.js-remove').hide() - info.find('.js-install').hide() - info.find('.js-upgrade').hide() - info.find('.js-latest-version').hide() - - // hide control ports table if none available - if (plugin.ports.control.input.length == 0) { - info.find('.plugin-controlports').hide() - } - - // hide cv inputs table if none available - if (!plugin.ports.cv || (plugin.ports.cv && plugin.ports.cv.input && plugin.ports.cv.input.length == 0)) { - info.find('.plugin-cvinputs').hide() - } - - // hide cv ouputs ports table if none available - if (!plugin.ports.cv || (plugin.ports.cv && plugin.ports.cv.output && plugin.ports.cv.output.length == 0)) { - info.find('.plugin-cvoutputs').hide() - } - - info.find('.favorite-button').on('click', function () { - var isFavorite = $(this).hasClass('favorite'), - widget = $(this) - - $.ajax({ - url: '/favorites/' + (isFavorite ? 'remove' : 'add'), - type: 'POST', - data: { - uri: plugin.uri, - }, - success: function (ok) { - if (! ok) { - console.log("favorite action failed") - return - } - - if (isFavorite) { - // was favorite, not anymore - widget.removeClass('favorite'); - remove_from_array(FAVORITES, plugin.uri) - self.find('#effect-content-Favorites').find('[mod-uri="'+escape(plugin.uri)+'"]').remove() - - } else { - // was not favorite, now is - widget.addClass('favorite'); - FAVORITES.push(plugin.uri) - self.effectBox('renderPlugin', plugin, self.find('#effect-content-Favorites')) - } - - self.find('#effect-tab-Favorites').find('.count').text('(' + FAVORITES.length + ')') - }, - cache: false, - dataType: 'json' - }) - }); - - info.window({ - windowName: "Plugin Info", - windowManager: self.data('windowManager'), - close: function () { - info.remove() - self.data('info', null) - } - }) - - info.appendTo($('body')) - info.window('open') - self.data('info', info) - } - - render(metadata) - } - - if (plugin.bundles) { - showInfo() - } else { - var renderedVersion = [plugin.builder, - plugin.microVersion, - plugin.minorVersion, - plugin.release].join('_'); - $.ajax({ - url: "/effect/get", - data: { - uri: plugin.uri, - version: VERSION, - plugin_version: renderedVersion, - }, - success: function (pluginData) { - plugin = $.extend(plugin, pluginData) - // FIXME: needed? - desktop.pluginIndexerData[plugin.uri] = plugin - showInfo() - }, - cache: !!plugin.buildEnvironment, - dataType: 'json' - }) - } - }, - - cleanResults: function () { - var self = $(this) - self.find('.plugins-wrapper').html('') - self.find('ul.js-category-tabs li span.count').each(function () { - $(this).text() - }); - self.effectBox('resetShift') - self.data('index', {}) - //$('#js-effect-info').hide() - }, - - calculateNavigation: function () { - var self = $(this) - var wrapper = self.find('.plugins-wrapper.selected') - if (wrapper.length == 0) - return - var shift = wrapper.position().left - var maxShift = Math.max(0, wrapper.width() - wrapper.parent().width()) - if (shift == 0) - self.find('.nav-left').addClass('disabled') - else - self.find('.nav-left').removeClass('disabled') - if (shift == maxShift) - self.find('.nav-right').addClass('disabled') - else - self.find('.nav-right').removeClass('disabled') - }, - - resetShift: function () { - $(this).find('.plugins-wrapper').css('left', 0) - }, - - shiftLeft: function () { - $(this).effectBox('shiftDir', -1); - }, - - shiftRight: function () { - $(this).effectBox('shiftDir', 1); - }, - - - // This whole scrolling and shifting thing is very expensive due - // to lots of relayouts and redraws. This is because we want to - // snap to plugins on the left border of the container. We should - // switch to a less greedy concept. Maybe next century. - - shiftDir: function (dir) { - var self = $(this); - var wrapper = self.find('.plugins-wrapper.selected'); - var parent = wrapper.parent().parent(); - var plugins = wrapper.children(); - var pos = wrapper.data("pos"); - var pw = parent.width(); - var ww = wrapper.width(); - var pos = Math.min(0, - Math.max(-(ww - pw), pos - pw * dir + 64)); - var shift = 0; - if (pos != -(ww - pw)) { - for (var i = 0; i < plugins.length; i++) { - var plugw = $(plugins[i]).outerWidth(); - if (shift + plugw >= -pos) { - pos = -shift; - wrapper.data("plug", i); - break; - } - shift += plugw; - } - } - wrapper.data("pos", pos); - wrapper[0].style.left = pos + "px"; - }, - - shiftPrev: function () { - $(this).effectBox('shiftAlter', -1); - }, - - shiftNext: function () { - $(this).effectBox('shiftAlter', 1); - }, - - shiftAlter: function (dir) { - var self = $(this); - var wrapper = self.find('.plugins-wrapper.selected'); - var parent = wrapper.parent().parent(); - var children = wrapper.children(); - var plug = wrapper.data("plug"); - var pw = parent.width(); - var ww = wrapper.width(); - if (ww < pw) return; - plug = Math.min(children.length-1, Math.max(0, plug + dir)); - var pos = Math.max(-(ww - pw), - -$(children[plug]).position().left); - while (-$(children[plug]).position().left < pos) - plug--; - wrapper[0].style.left = pos + "px"; - wrapper.data("pos", pos); - wrapper.data("plug", plug); - }, - scrolling: function () { - var self = $(this); - var scrollTO = self.data("scrollTO"); - if (scrollTO) { - clearTimeout(scrollTO); - } else { - self.addClass("scrolling"); - } - self.data("scrollTO", setTimeout(function () { - self.data("scrollTO", false); - self.removeClass("scrolling"); - }, 200)); - } -}) - -function version(v) { - if (!v || !v.length) - return '0.0-0' - return ""+v[1]+"."+v[2]+"-"+v[3] -} diff --git a/html/js/file_manager.js b/html/js/file_manager.js deleted file mode 100644 index 79263149a..000000000 --- a/html/js/file_manager.js +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -JqueryClass('fileManagerBox', { - init: function (options) { - var self = $(this) - - options = $.extend({ - isMainWindow: true, - windowName: "File Manager", - }, options) - - self.data(options) - - options.open = function () { - console.log("FileManager open") - if (! self.data('loaded')) { - var url = window.location.protocol + '//' + window.location.hostname + ':8081/' - self.find('iframe').attr('src', url) - self.data('loaded', true) - } - return false - } - - self.window(options) - }, - - setCategory: function (category) { - var self = $(this) - }, -}) diff --git a/html/js/file_transfer.js b/html/js/file_transfer.js deleted file mode 100644 index 21035724d..000000000 --- a/html/js/file_transfer.js +++ /dev/null @@ -1,180 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -/* - * the following function is based on jquery.binarytransport.js - * made by Henry Algus - */ -$.ajaxTransport("+binary", function(options, originalOptions, jqXHR){ - // check for conditions and support for blob / arraybuffer response type - if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) - { - return { - // create new XMLHttpRequest - send: function(headers, callback){ - // setup all variables - var xhr = new XMLHttpRequest(), - url = options.url, - type = options.type, - async = options.async || true, - // blob or arraybuffer. Default is blob - dataType = options.responseType || "blob", - data = options.data || null, - username = options.username || null, - password = options.password || null; - - xhr.addEventListener('load', function(){ - var data = {}; - data[options.dataType] = xhr.response; - // make callback and send data - callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders()); - }); - - xhr.addEventListener('progress', function(event){ - if (! event.lengthComputable) { - return - } - var percentComplete = event.loaded / event.total; - originalOptions.percentageStatus(percentComplete) - }); - - xhr.open(type, url, async, username, password); - - // setup custom headers - for (var i in headers ) { - xhr.setRequestHeader(i, headers[i]); - } - - xhr.responseType = dataType; - xhr.send(data); - }, - abort: function(){ - jqXHR.abort(); - } - }; - } -}); - -var isInstallingPackage = false - -function SimpleTransference(from, to, options) { - this.origin = from.replace(/\/?$/, '/') - this.destination = to.replace(/\/?$/, '/') - this.options = $.extend({ from_args: {}, - to_args: {} - }, options) - - this.request = null; - - // download reauthorize - this.reauthorizeDownload = null; - this.reauthorizedDownload = false; - - // upload reauthorize - this.reauthorizeUpload = null; - this.reauthorizedUpload = false; - - var self = this - - this.start = function () { - isInstallingPackage = true - self.reauthorizedUpload = false - var req = $.ajax($.extend({ - type: 'GET', - url: self.origin, - success: self.upload, - dataType: 'binary', - cache: false, - global: false, - error: function (resp) { - if (resp.status == 401 && self.reauthorizeDownload != null && ! self.reauthorizedDownload) { - console.log("[TRANSFERENCE] download unauthorized, retrying authentication...") - self.reauthorizedDownload = true - self.reauthorizeDownload(function (ok, options) { - if (ok) { - console.log("[TRANSFERENCE] authentication succeeded") - self.options = $.extend(self.options, options) - self.start() - } else { - console.log("[TRANSFERENCE] authentication failed") - self.abort(resp.statusText) - } - }) - return; - } - self.abort(resp.statusText) - }, - percentageStatus: function (percentage) { - self.percentageStatus(percentage) - }, - }, self.options.from_args)) - self.request = req - } - - this.upload = function (file) { - self.reauthorizedDownload = false - var req = $.ajax($.extend({ - method: 'POST', - url: self.destination, - data: file, - contentType: file.type, - success: self.success, - processData: false, - error: function (resp) { - if (resp.status == 401 && self.reauthorizeUpload != null && ! self.reauthorizedUpload) { - console.log("[TRANSFERENCE] upload unauthorized, retrying authentication...") - self.reauthorizedUpload = true - self.reauthorizeUpload(function (ok, options) { - if (ok) { - console.log("[TRANSFERENCE] authentication succeeded") - self.options = $.extend(self.options, options) - self.upload() - } else { - console.log("[TRANSFERENCE] authentication failed") - self.abort(resp.statusText) - } - }) - return; - } - self.abort(resp.statusText) - }, - dataType: 'json', - cache: false, - global: false, - }, self.options.to_args)) - self.request = req - } - - this.percentageStatus = function (percentage) { - self.reportPercentageStatus(percentage) - } - - this.success = function (resp) { - isInstallingPackage = false - self.reportFinished(resp) - } - - this.abort = function (error) { - isInstallingPackage = false - for (var i in self.requests) { - self.requests[i].abort() - } - self.reportError(error) - } - - this.endRequest = function (request, xis, ypis) { - var i = self.requests.indexOf(request) - if (i >= 0) - self.requests.splice(i, 1) - } - - this.release = function () { - for (attr in this) { - delete this[attr] - } - } - - this.reportPercentageStatus = function (percentage) {} - this.reportFinished = function () {} - this.reportError = function (error) {} -} diff --git a/html/js/hardware.js b/html/js/hardware.js deleted file mode 100644 index b2096239a..000000000 --- a/html/js/hardware.js +++ /dev/null @@ -1,1503 +0,0 @@ -// SPDX-FileCopyrightText: 2012-2023 MOD Audio UG -// SPDX-License-Identifier: AGPL-3.0-or-later - -// Special URI for non-addressed controls -var kNullAddressURI = "null" - -// Special URIs for midi-learn -var kMidiLearnURI = "/midi-learn" -var kMidiUnlearnURI = "/midi-unlearn" -var kMidiCustomPrefixURI = "/midi-custom_" // to show current one, ignored on save - -// URI for BPM sync (for non-addressed control ports) -var kBpmURI ="/bpm" - -// Grouped options -var deviceOption = "/hmi" -var ccOption = "/cc" -var cvOption = "/cv" - -// Port types supported by cv addressing -var cvModes = ":float:integer:bypass:toggled:" - -// use pitchbend as midi cc, with an invalid MIDI controller number -var MIDI_PITCHBEND_AS_CC = 131 - -function create_midi_cc_uri (channel, controller) { - if (controller == MIDI_PITCHBEND_AS_CC) { - return sprintf("%sCh.%d_Pbend", kMidiCustomPrefixURI, channel+1) - } - return sprintf("%sCh.%d_CC#%d", kMidiCustomPrefixURI, channel+1, controller) -} - -function startsWith (value, pattern) { - return value != null && value.indexOf(pattern) === 0; -}; - -function is_control_chain_uri (uri) { - if (startsWith(uri, deviceOption)) { - return false; - } - if (uri == kMidiLearnURI || startsWith(uri, kMidiCustomPrefixURI)) { - return false; - } - if (isCvUri(uri)) { - return false; - } - return true; -} - -function isCvUri (uri) { - if (startsWith(uri, cvOption)) { - return true; - } - return false; -} - -function isHwCvUri (uri) { - if (startsWith(uri, cvOption + '/graph/cv_')) { - return true; - } - return false; -} - -// Units supported for tap tempo (lowercase) -var kTapTempoUnits = ['bpm'] - -function HardwareManager(options) { - var self = this - - options = $.extend({ - // This is the function that will actually make the addressing - address: function (instanceAndSymbol, addressing, callback) { callback(true) }, - - // Callback to enable or disable a control in GUI - setEnabled: function (instance, portSymbol, enabled, feedback, momentaryMode) {}, - - // Renders the address html template - renderForm: function (instance, port) {}, - - // Running as mod-app - isApp: function () { return false }, - - }, options) - - this.beatsPerMinutePort = { - ranges: { // XXX would be good to have a centralized place for this data, currently it's also in transport.js and others - minimum: 20.0, - maximum: 280.0 - }, - value: null - } - - this.cvOutputPorts = [] - - this.setBeatsPerMinuteValue = function (bpm) { - if (self.beatsPerMinutePort.value === bpm) { - return - } - self.beatsPerMinutePort.value = bpm - } - - this.reset = function () { - var addressingsByActuator = $.extend({}, self.addressingsByActuator) - var cvOutputPorts = self.cvOutputPorts.slice() - - /* All adressings indexed by actuator - key : "/actuator-uri" - value: list("/instance/symbol") - */ - self.addressingsByActuator = {} - self.cvOutputPorts = [] - - if (cvOutputPorts) { - for (var i = 0; i < cvOutputPorts.length; i++) { - // if hw cv port, keep it - if (isHwCvUri(cvOutputPorts[i].uri)) { - self.cvOutputPorts.push(cvOutputPorts[i]) - } - } - } - - if (addressingsByActuator) { - for (var act in addressingsByActuator) { - if (isCvUri(act) && cvOutputPorts.find(function (port) { return port.uri === act })) { - self.addressingsByActuator[act] = [] - } - } - } - - /* All addressings indexed by instance + port symbol - key : "/instance/symbol" - value: "/actuator-uri" - */ - self.addressingsByPortSymbol = {} - - /* Saved addressing data - key : "/instance/symbol" - value: dict(AddressData) - */ - self.addressingsData = {} - // Initializes actuators - if (HARDWARE_PROFILE) { - var uri - for (var i in HARDWARE_PROFILE) { - uri = HARDWARE_PROFILE[i].uri - self.addressingsByActuator[uri] = [] - } - } - self.addressingsByActuator[kMidiLearnURI] = [] - self.addressingsByActuator[kBpmURI] = [] - } - - this.reset() - - // Get all addressing types that can be used for a port - // Most of these are 1:1 match to LV2 hints, but we have extra details. - this.availableAddressingTypes = function (port, tempo) { - if (tempo) { - return ["enumeration"] - } - - var properties = port.properties - var available = [] - - // prevent some properties from going together - if (properties.indexOf("trigger") >= 0) { - available.push("trigger") - } else if (properties.indexOf("enumeration") >= 0) { - available.push("enumeration") - } else if (properties.indexOf("toggled") >= 0) { - available.push("toggled") - } else if (properties.indexOf("integer") >= 0) { - available.push("integer") - } else { - available.push("float") - } - - if (properties.indexOf("logarithmic") >= 0) - available.push("logarithmic") - - if (port.symbol === ":bpm" && properties.indexOf("tapTempo") >= 0 && kTapTempoUnits.indexOf(port.units.symbol.toLowerCase()) >= 0) - available.push("taptempo") - - if (port.scalePoints.length >= 2) - available.push("scalepoints") - if (port.symbol == ":bypass") - available.push("bypass") - - return available - } - - this.availableActuatorsWithModes = function (list, types) { - var available = {} - if (list) { - for (var i in list) { - actuator = list[i] - modes = actuator.modes - - // usedAddressings = self.addressingsByActuator[actuator.uri] - // if (ADDRESSING_PAGES == 0 && usedAddressings.length >= actuator.max_assigns && usedAddressings.indexOf(key) < 0) { - // continue - // } - - if ( - (types.indexOf("integer" ) >= 0 && modes.search(":integer:" ) >= 0) || - (types.indexOf("float" ) >= 0 && modes.search(":float:" ) >= 0) || - (types.indexOf("enumeration") >= 0 && modes.search(":enumeration:") >= 0) || - (types.indexOf("logarithmic") >= 0 && modes.search(":logarithmic:") >= 0) || - (types.indexOf("toggled" ) >= 0 && modes.search(":toggled:" ) >= 0) || - (types.indexOf("trigger" ) >= 0 && modes.search(":trigger:" ) >= 0) || - (types.indexOf("taptempo" ) >= 0 && modes.search(":taptempo:" ) >= 0) || - (types.indexOf("scalepoints") >= 0 && modes.search(":scalepoints:") >= 0) || - (types.indexOf("bypass" ) >= 0 && modes.search(":bypass:" ) >= 0) - ) - { - available[actuator.uri] = actuator - } - } - } - return available - } - - this.isCvAvailable = function (port) { - var defaultTypes = self.availableAddressingTypes(port, false) - var available = self.availableActuatorsWithModes([{ uri: cvOption, modes: cvModes }], defaultTypes) - return available.hasOwnProperty(cvOption) - } - - // Gets a list of available actuators for a port - this.availableActuators = function (instance, port, tempo) { - var key = instance+"/"+port.symbol - var defaultTypes = self.availableAddressingTypes(port, false) - var types = tempo ? self.availableAddressingTypes(port, tempo) : defaultTypes - - var available = self.availableActuatorsWithModes(HARDWARE_PROFILE, types) - - // midi-learn is always available, except for enumeration - if (defaultTypes.indexOf("enumeration") < 0 || port.scalePoints.length == 2) - { - available[kMidiLearnURI] = { - uri : kMidiLearnURI, - name : "MIDI Learn...", - modes: ":float:trigger:bypass:integer:toggled:", - steps: [], - max_assigns: 99 - } - } - - available = $.extend(self.availableActuatorsWithModes(self.cvOutputPorts, defaultTypes), available) - - return available - } - - this.buildDividerOptions = function (select, port, curDividers) { - select.children().remove() - - var filteredDividers = getDividerOptions(port, self.beatsPerMinutePort.ranges.minimum, self.beatsPerMinutePort.ranges.maximum) - - // And build html select options - for (i = 0; i < filteredDividers.length; i++) { - $('
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/bounce-effect.html b/html/js/lib/development-bundle/docs/bounce-effect.html deleted file mode 100644 index 8a97e32db..000000000 --- a/html/js/lib/development-bundle/docs/bounce-effect.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - jQuery UI bounce-effect documentation - - - - - -

    Bounce Effect

    -
    -

    Description: - The bounce effect bounces an element. When used with hide or show, the last or first bounce will also fade in/out. -

    -
    • -

      bounce

      -
        -
      • -
        -distance (default: 20)
        -
        Type: Number -
        -
        The distance of the largest "bounce" in pixels.
        -
      • -
      • -
        -times (default: 5)
        -
        Type: Integer -
        -
        The number of times the element will bounce. When used with hide or show, there is an extra "half" bounce for the fade in/out.
        -
      • -
      -
    -

    Example:

    -

    Toggle a div using the bounce effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>bounce demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "bounce", { times: 3 }, "slow" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/clip-effect.html b/html/js/lib/development-bundle/docs/clip-effect.html deleted file mode 100644 index dd942ecdb..000000000 --- a/html/js/lib/development-bundle/docs/clip-effect.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - jQuery UI clip-effect documentation - - - - - -

    Clip Effect

    -
    -

    Description: - The clip effect will hide or show an element by clipping the element vertically or horizontally. -

    -
    • -

      clip

      -
      • -
        -direction (default: "up")
        -
        Type: String -
        -
        -

        The plane in which the clip effect will hide or show its element.

        -

        vertical clips the top and bottom edges, while horizontal clips the right and left edges.

        -
        -
      -
    -

    Example:

    -

    Toggle a div using the clip effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>clip demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "clip" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/drop-effect.html b/html/js/lib/development-bundle/docs/drop-effect.html deleted file mode 100644 index 38e8a74c0..000000000 --- a/html/js/lib/development-bundle/docs/drop-effect.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - jQuery UI drop-effect documentation - - - - - -

    Drop Effect

    -
    -

    Description: - The drop effect hides or shows an element fading in/out and sliding in a direction. -

    -
    • -

      drop

      -
      • -
        -direction (default: "left")
        -
        Type: String -
        -
        -

        The direction the element will fall to hide the element, or the direction from which the element will be revealed.

        -

        Possible Values: up, down, left, right.

        -
        -
      -
    -

    Example:

    -

    Toggle a div using the drop effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>drop demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "drop" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/explode-effect.html b/html/js/lib/development-bundle/docs/explode-effect.html deleted file mode 100644 index 1f8804678..000000000 --- a/html/js/lib/development-bundle/docs/explode-effect.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jQuery UI explode-effect documentation - - - - - -

    Explode Effect

    -
    -

    Description: - The explode effect hides or shows an element by splitting it into pieces. -

    -
    • -

      explode

      -
      • -
        -pieces (default: 9)
        -
        Type: Integer -
        -
        The number of pieces to explode, should be a perfect square, any other values are rounded to the nearest square.
        -
      -
    -

    Example:

    -

    Toggle a div using the explode effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>explode demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "explode" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/fade-effect.html b/html/js/lib/development-bundle/docs/fade-effect.html deleted file mode 100644 index 77cde8061..000000000 --- a/html/js/lib/development-bundle/docs/fade-effect.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - jQuery UI fade-effect documentation - - - - - -

    Fade Effect

    -
    -

    Description: - The fade effect hides or shows an element by fading it. -

    -
    • fade

    -

    Example:

    -

    Toggle a div using the fade effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>fade demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "fade" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/fold-effect.html b/html/js/lib/development-bundle/docs/fold-effect.html deleted file mode 100644 index b8b8466df..000000000 --- a/html/js/lib/development-bundle/docs/fold-effect.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - jQuery UI fold-effect documentation - - - - - -

    Fold Effect

    -
    -

    Description: - The fold effect hides or shows an element by folding it. -

    -
    • -

      fold

      -
        -
      • -
        -size (default: 15)
        -
        Type: Number or String -
        -
        The size of the "folded" element.
        -
      • -
      • -
        -horizFirst (default: false)
        -
        Type: Boolean -
        -
        Whether the horizontal direction happens first when hiding. Remember, showing inverts hiding.
        -
      • -
      -
    -

    Example:

    -

    Toggle a div using the fold effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>fold demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "fold" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/highlight-effect.html b/html/js/lib/development-bundle/docs/highlight-effect.html deleted file mode 100644 index 4c702e987..000000000 --- a/html/js/lib/development-bundle/docs/highlight-effect.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jQuery UI highlight-effect documentation - - - - - -

    Highlight Effect

    -
    -

    Description: - The highlight effect hides or shows an element by animating its background color first. -

    -
    • -

      highlight

      -
      • -
        -color (default: "#ffff99")
        -
        Type: String -
        -
        The background color used during the animation.
        -
      -
    -

    Example:

    -

    Toggle a div using the highlight effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>highlight demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "highlight" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/jQuery.widget.html b/html/js/lib/development-bundle/docs/jQuery.widget.html deleted file mode 100644 index bc32c363c..000000000 --- a/html/js/lib/development-bundle/docs/jQuery.widget.html +++ /dev/null @@ -1,611 +0,0 @@ - - - - - jQuery UI jQuery documentation - - - - - -
    -

    Contents:

    - -

    jQuery.widget( name [, base ], prototype )

    -
    -

    Description: Create stateful jQuery plugins using the same abstraction as all jQuery UI widgets.

    -
    • -

      jQuery.widget( name [, base ], prototype )

      -
        -
      • -
        name
        -
        Type: String -
        -
        The name of the widget to create, including the namespace.
        -
      • -
      • -
        base
        -
        Type: Function()
        -
        The base widget to inherit from. This must be a constructor that can be instantiated with the `new` keyword. Defaults to jQuery.Widget.
        -
      • -
      • -
        prototype
        -
        Type: PlainObject -
        -
        The object to use as a prototype for the widget.
        -
      • -
      -
    -
    -

    You can create new widgets from scratch, using just the $.Widget object as a base to inherit from, or you can explicitly inherit from existing jQuery UI or third-party widgets. Defining a widget with the same name as you inherit from even allows you to extend widgets in place.

    - -

    jQuery UI contains many widgets that maintain state and therefore have a slightly different usage pattern than typical jQuery plugins. All of jQuery UI's widgets use the same patterns, which is defined by the widget factory. So if you learn how to use one widget, then you'll know how to use all of them.

    - -

    Note: This documentation shows examples using the progressbar widget but the syntax is the same for every widget.

    - -

    Initialization

    - -

    In order to track the state of the widget, we must introduce a full life cycle for the widget. The life cycle starts when the widget is initalized. To initialize a widget, we simply call the plugin on one or more elements.

    - -
    $( "#elem" ).progressbar();
    - -

    This will initialize each element in the jQuery object, in this case the element with an id of "elem". Because we called the progressbar() method with no parameters, the widget is initialized with its default options. We can pass a set of options during initialization in order to override the default options.

    - -
    $( "#elem" ).progressbar({ value: 20 });
    - -

    We can pass as many or as few options as we want during initialization. Any options that we don't pass will just use their default values.

    - -

    The options are part of the widget's state, so we can set options after initialization as well. We'll see this later with the option method.

    - -

    Methods

    - -

    Now that the widget is initialized, we can query its state or perform actions on the widget. All actions after initialization take the form of a method call. To call a method on a widget, we pass the name of the method to the jQuery plugin. For example, to call the value() method on our progressbar widget, we would use:

    - -
    $( "#elem" ).progressbar( "value" );
    - -

    If the method accepts parameters, we can pass them after the method name. For example, to pass the parameter 40 to the value() method, we can use:

    - -
    $( "#elem" ).progressbar( "value", 40 );
    - -

    Just like other methods in jQuery, most widget methods return the jQuery object for chaining.

    - -
    $( "#elem" )
        .progressbar( "value", 90 )
        .addClass( "almost-done" );
    - -

    Each widget will have its own set of methods based on the functionality that the widget provides. However, there are a few methods that exist on all widgets, which are documented below.

    - -

    Events

    - -

    All widgets have events associated with their various behaviors to notify you when the state is changing. For most widgets, when the events are triggered, the names are prefixed with the widget name. For example, we can bind to progressbar's change event which is triggered whenever the value changes.

    - -
    $( "#elem" ).bind( "progressbarchange", function() {
        alert( "The value has changed!" );
    });
    - -

    Each event has a corresponding callback, which is exposed as an option. We can hook into progressbar's change callback instead of binding to the progressbarchange event, if we want to.

    - -
    $( "#elem" ).progressbar({
        change: function() {
            alert( "The value has changed!" );
        }
    });
    - -

    All widgets have a create event which is triggered upon instantiation.

    -
    -

    Base Widget

    -
    -

    Description: The base widget used by the widget factory.

    -

    QuickNav

    -

    Options

    - - - -
    - -
    -

    Events

    - -

    Options

    -

    disabledType: Boolean -

    -
    -Default: false -
    -
    Disables the jQuery.Widget if set to true.
    -Code examples:

    Initialize the jQuery.Widget with the disabled option specified:

    -
    $( ".selector" ).jQuery.Widget({ disabled: true });
    -

    Get or set the disabled option, after initialization:

    -
    // getter
    var disabled = $( ".selector" ).jQuery.Widget( "option", "disabled" );
     
    // setter
    $( ".selector" ).jQuery.Widget( "option", "disabled", true );
    -
    -
    -

    hideType: Boolean or Number or String or Object -

    -
    -Default: null -
    -
    If and how to animate the hiding of the element.
    -Multiple types supported:
      -
    • -Boolean: - When set to false, no animation will be used and the element will be hidden immediately. - When set to true, the element will fade out with the default duration and the default easing. -
    • -
    • -Number: - The element will fade out with the specified duration and the default easing. -
    • -
    • -String: - The element will be hidden using the specified effect. - The value can either be the name of a built-in jQuery animateion method, such as "slideUp", or the name of a jQuery UI effect, such as "fold". - In either case the effect will be used with the default duration and the default easing. -
    • -
    • -Object: If the value is an object, then effect, duration, and easing properties may be provided. If the effect property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If duration or easing is omitted, then the default values will be used. If effect is omitted, then "fadeOut" will be used.
    • -
    -Code examples:

    Initialize the jQuery.Widget with the hide option specified:

    -
    $( ".selector" ).jQuery.Widget({ hide: { effect: "explode", duration: 1000 } });
    -

    Get or set the hide option, after initialization:

    -
    // getter
    var hide = $( ".selector" ).jQuery.Widget( "option", "hide" );
     
    // setter
    $( ".selector" ).jQuery.Widget( "option", "hide", { effect: "explode", duration: 1000 } );
    -
    -
    -

    showType: Boolean or Number or String or Object -

    -
    -Default: null -
    -
    If and how to animate the showing of the element.
    -Multiple types supported:
      -
    • -Boolean: - When set to false, no animation will be used and the element will be shown immediately. - When set to true, the element will fade in with the default duration and the default easing. -
    • -
    • -Number: - The element will fade in with the specified duration and the default easing. -
    • -
    • -String: - The element will be shown using the specified effect. - The value can either be the name of a built-in jQuery animateion method, such as "slideDown", or the name of a jQuery UI effect, such as "fold". - In either case the effect will be used with the default duration and the default easing. -
    • -
    • -Object: If the value is an object, then effect, duration, and easing properties may be provided. If the effect property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If duration or easing is omitted, then the default values will be used. If effect is omitted, then "fadeIn" will be used.
    • -
    -Code examples:

    Initialize the jQuery.Widget with the show option specified:

    -
    $( ".selector" ).jQuery.Widget({ show: { effect: "blind", duration: 800 } });
    -

    Get or set the show option, after initialization:

    -
    // getter
    var show = $( ".selector" ).jQuery.Widget( "option", "show" );
     
    // setter
    $( ".selector" ).jQuery.Widget( "option", "show", { effect: "blind", duration: 800 } );
    -

    Methods

    -

    _create()

    -
    - The _create() method is the widget's constructor. - There are no parameters, but this.element and this.options are already set. -
    -
    • This method does not accept any arguments.
    -
    -
    -

    _delay( fn [, delay ] )Returns: Number -

    -
    - Invokes the provided function after a specified delay. Keeps this context correct. Essentially setTimeout(). -

    Returns the timeout ID for use with clearTimeout().

    -
    -
      -
    • -
      fn
      -
      Type: Function() or String -
      -
      The function to invoke. Can also be the name of a method on the widget.
      -
    • -
    • -
      delay
      -
      Type: Number -
      -
      The number of milliseconds to wait before invoking the function. Deafults to 0.
      -
    • -
    -
    -
    -

    _destroy()

    -
    - The public destroy() method cleans up all common data, events, etc. and then delegates out to _destroy() for custom, widget-specific, cleanup. -
    -
    • This method does not accept any arguments.
    -
    -
    -

    _focusable( element )

    -
    - Sets up element to apply the ui-state-focus class on focus. -

    The event handlers are automatically cleaned up on destroy.

    -
    -
    • -
      element
      -
      Type: jQuery -
      -
      The element(s) to apply the focusable behavior to.
      -
    -
    -
    -

    _getCreateEventData()Returns: Object -

    -
    - All widgets trigger the create event. By default, no data is provided in the event, but this method can return an object which will be passed as the create event's data. -
    -
    • This method does not accept any arguments.
    -
    -
    -

    _getCreateOptions()Returns: Object -

    -
    - This method allows the widget to define a custom method for defining options during instantiation. This user-provided options override the options returned by this method which override the default options. -
    -
    • This method does not accept any arguments.
    -
    -
    -

    _hide( element, option [, callback ] )

    -
    - Hides an element immediately, using built-in animation methods, or using custom effects. - See the hide option for possible option values. -
    -
      -
    • -
      element
      -
      Type: jQuery -
      -
      The element(s) to hide.
      -
    • -
    • -
      option
      -
      Type: Object -
      -
      The settings defining how to hide the element.
      -
    • -
    • -
      callback
      -
      Type: Function()
      -
      Callback to invoke after the element has been fully hidden.
      -
    • -
    -
    -
    -

    _hoverable( element )

    -
    - Sets up element to apply the ui-state-hover class on hover. -

    The event handlers are automatically cleaned up on destroy.

    -
    -
    • -
      element
      -
      Type: jQuery -
      -
      The element(s) to apply the hoverable behavior to.
      -
    -
    -
    -

    _init()

    -
    - Widgets have the concept of initialization that is distinct from creation. Any time the plugin is called with no arguments or with only an option hash, the widget is initialized; this includes when the widget is created. - -

    Note: Initialization should only be handled if there is a logical action to perform on successive calls to the widget with no arguments.

    -
    -
    • This method does not accept any arguments.
    -
    -
    -

    _off( element, eventName )

    -
    - Unbinds event handlers from the specified element(s). -
    -
      -
    • -
      element
      -
      Type: jQuery -
      -
      - The element(s) to unbind the event handlers from. Unlike the _on() method, the elements are required for _off(). -
      -
    • -
    • -
      eventName
      -
      Type: String -
      -
      One or more space-separated event types.
      -
    • -
    -
    -
    -

    _on( [element ], handlers )

    -
    - Binds event handlers to the specified element(s). Delegation is supported via selectors inside the event names, e.g., "click .foo". The _on() method provides several benefits of direct event binding: -
      -
    • Maintains proper this context inside the handlers.
    • -
    • Automatically handles disabled widgets: If the widget is disabled or the event occurs on an element with the ui-state-disabled class, the event handler is not invoked.
    • -
    • Event handlers are automatically namespaced and cleaned up on destroy.
    • -
    -
    -
      -
    • -
      element
      -
      Type: jQuery -
      -
      Which element(s) to bind the event handlers to. If no element is provided, this.element is used.
      -
    • -
    • -
      handlers
      -
      Type: Object -
      -
      - A map in which the string keys represent the event type and optional selector for delegation, and the values represent a handler function to be called for the event. -
      -
    • -
    -
    -
    -

    _setOption( key, value )

    -
    - Called from the _setOptions() method for each individual option. Widget state should be updated based on changes. -
    -
      -
    • -
      key
      -
      Type: String -
      -
      The name of the option to set.
      -
    • -
    • -
      value
      -
      Type: Object -
      -
      A value to set for the option.
      -
    • -
    -
    -
    -

    _setOptions( options )

    -
    - Called whenever the option() method is called, regardless of the form in which the option() method was called. -

    Overriding this is useful if you can defer processor-intensive changes for multiple option changes.

    -
    -
    • -
      options
      -
      Type: Object -
      -
      A map of option-value pairs to set.
      -
    -
    -
    -

    _show( element, option [, callback ] )

    -
    - Shows an element immediately, using built-in animation methods, or using custom effects. - See the show option for possible option values. -
    -
      -
    • -
      element
      -
      Type: jQuery -
      -
      The element(s) to show.
      -
    • -
    • -
      option
      -
      Type: Object -
      -
      The settings defining how to show the element.
      -
    • -
    • -
      callback
      -
      Type: Function()
      -
      Callback to invoke after the element has been fully shown.
      -
    • -
    -
    -
    -

    _super()

    -
    - Invokes the method of the same name from the parent widget, with any specified arguments. Essentially .call(). -
    -
    • This method does not accept any arguments.
    -
    -
    -

    _superApply( arguments )

    -
    - Invokes the method of the same name from the parent widget, with the array of arguments. Essentially .apply(). -
    -
    • -
      arguments
      -
      Type: Array -
      -
      Array of arguments to pass to the parent method.
      -
    -
    -
    -

    _trigger( type [, event ] [, data ] )

    -
    - Triggers an event and its associated callback. -

    The option with the name equal to type is invoked as the callback.

    -

    The event name is the widget name + type.

    -

    Note: When providing data, you must provide all three parameters. If there is no event to pass along, just pass null.

    -
    -
      -
    • -
      type
      -
      Type: String -
      -
      The type should match the name of a callback option. The full event type will be generated automatically.
      -
    • -
    • -
      event
      -
      Type: Event -
      -
      The original event that caused this event to occur; useful for providing context to the listener.
      -
    • -
    • -
      data
      -
      Type: Object -
      -
      A hash of data associated with the event.
      -
    • -
    -
    -
    -

    destroy()

    -
    - Removes the jQuery.Widget functionality completely. This will return the element back to its pre-init state. -
    -
    • This method does not accept any arguments.
    -
    -
    -

    disable()

    -
    - Disables the jQuery.Widget. -
    -
    • This method does not accept any arguments.
    -
    -
    -

    enable()

    -
    - Enables the jQuery.Widget. -
    -
    • This method does not accept any arguments.
    -
    -
    -
    -

    option( optionName )Returns: Object -

    -
    Gets the value currently associated with the specified optionName.
    -
    • -
      optionName
      -
      Type: String -
      -
      The name of the option to get.
      -
    -
    -Code examples:

    Invoke the method:

    -
    var isDisabled = $( ".selector" ).jQuery.Widget( "option", "disabled" );
    -
    -
    -
    -

    option()Returns: PlainObject -

    -
    Gets an object containing key/value pairs representing the current jQuery.Widget options hash.
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the method:

    -
    var options = $( ".selector" ).jQuery.Widget( "option" );
    -
    -
    -
    -

    option( optionName, value )

    -
    Sets the value of the jQuery.Widget option associated with the specified optionName.
    -
      -
    • -
      optionName
      -
      Type: String -
      -
      The name of the option to set.
      -
    • -
    • -
      value
      -
      Type: Object -
      -
      A value to set for the option.
      -
    • -
    -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).jQuery.Widget( "option", "disabled", true );
    -
    -
    -
    -

    option( options )

    -
    Sets one or more options for the jQuery.Widget.
    -
    • -
      options
      -
      Type: Object -
      -
      A map of option-value pairs to set.
      -
    -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).jQuery.Widget( "option", { disabled: true } );
    -
    -
    -
    -
    -

    widget()Returns: jQuery -

    -
    - Returns a jQuery object containing the original element or other relevant generated element. -
    -
    • This method does not accept any arguments.
    -

    Events

    -

    create( event, ui )Type: jQuery.Widgetcreate -

    -
    - Triggered when the jQuery.Widget is created. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
    • -
    -
    -Code examples:

    Initialize the jQuery.Widget with the create callback specified:

    -
    $( ".selector" ).jQuery.Widget({
        create: function( event, ui ) {}
    });
    -

    Bind an event listener to the jQuery.Widgetcreate event:

    -
    $( ".selector" ).on( "jQuery.Widgetcreate", function( event, ui ) {} );
    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/menu.html b/html/js/lib/development-bundle/docs/menu.html deleted file mode 100644 index 8c3884b2f..000000000 --- a/html/js/lib/development-bundle/docs/menu.html +++ /dev/null @@ -1,644 +0,0 @@ - - - - - jQuery UI menu documentation - - - - - -

    -Menu Widgetversion added: 1.9 -

    -
    -

    Description: - Themeable menu with mouse and keyboard interactions for navigation. -

    -

    QuickNavExamples -

    -

    Options

    - - - - - -
    - -
    -

    Events

    - - - - -
    -

    A menu can be created from any valid markup as long as the elements have a strict parent/child relationship and each menu item has an anchor. The most commonly used element is the unordered list (<ul>):

    - -
    -<ul id="menu">
    -	<li><a href="#">Item 1</a></li>
    -	<li><a href="#">Item 2</a></li>
    -	<li><a href="#">Item 3</a>
    -		<ul>
    -			<li><a href="#">Item 3-1</a></li>
    -			<li><a href="#">Item 3-2</a></li>
    -			<li><a href="#">Item 3-3</a></li>
    -			<li><a href="#">Item 3-4</a></li>
    -			<li><a href="#">Item 3-5</a></li>
    -		</ul>
    -	</li>
    -	<li><a href="#">Item 4</a></li>
    -	<li><a href="#">Item 5</a></li>
    -</ul>
    -
    - -

    If you use a structure other than <ul>/<li>, including using the same element for the menu and the menu items, use the menus option to specify a way to differentiate the two elements, e.g., menus: "div.menuElement".

    - -

    Any menu item can be disabled by adding the ui-state-disabled class to that element.

    - -

    To add icons to the menu, include them in the markup:

    - -
    -<ul id="menu">
    -	<li><a href="#"><span class="ui-icon ui-icon-disk"></span>Save</a></li>
    -</ul>
    -
    -

    Menu automatically adds the necessary padding to items without icons.

    - -

    Keyboard interaction

    - -
      -
    • ENTER/SPACE: Invoke the focused menu item's action, which may be opening a submenu.
    • -
    • UP: Move focus to the previous menu item.
    • -
    • DOWN: Move focus to the next menu item.
    • -
    • RIGHT: Open the submenu, if available.
    • -
    • LEFT: Close the current submenu and move focus to the parent menu item. If not in a submenu, do nothing.
    • -
    • ESCAPE: Close the current submenu and move focus to the parent menu item. If not in a submenu, do nothing.
    • -
    - -

    Typing a letter moves focus to the first item whose title starts with that character. Repeating the same character cycles through matching items. Typing more characters within the one second timer matches those characters.

    - -

    Disabled items can receive keyboard focus, but do not allow any other interaction.

    -
    -

    Additional Notes:

    -
    • - This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point. -
    -

    Options

    -

    disabledType: Boolean -

    -
    -Default: false -
    -
    Disables the menu if set to true.
    -Code examples:

    Initialize the menu with the disabled option specified:

    -
    $( ".selector" ).menu({ disabled: true });
    -

    Get or set the disabled option, after initialization:

    -
    // getter
    var disabled = $( ".selector" ).menu( "option", "disabled" );
     
    // setter
    $( ".selector" ).menu( "option", "disabled", true );
    -
    -
    -

    iconsType: Object -

    -
    -Default: { submenu: "ui-icon-carat-1-e" } -
    -
    - Icons to use for submenus, matching an icon defined by the jQuery UI CSS Framework. -
      -
    • submenu (string, default: "ui-icon-carat-1-e")
    • -
    -
    -Code examples:

    Initialize the menu with the icons option specified:

    -
    $( ".selector" ).menu({ icons: { submenu: "ui-icon-circle-triangle-e" } });
    -

    Get or set the icons option, after initialization:

    -
    // getter
    var icons = $( ".selector" ).menu( "option", "icons" );
     
    // setter
    $( ".selector" ).menu( "option", "icons", { submenu: "ui-icon-circle-triangle-e" } );
    -
    -
    -

    menusType: String -

    -
    -Default: "ul" -
    -
    Selector for the elements that serve as the menu container, including sub-menus.
    -Code examples:

    Initialize the menu with the menus option specified:

    -
    $( ".selector" ).menu({ menus: "div" });
    -

    Get or set the menus option, after initialization:

    -
    // getter
    var menus = $( ".selector" ).menu( "option", "menus" );
     
    // setter
    $( ".selector" ).menu( "option", "menus", "div" );
    -
    -
    -

    positionType: Object -

    -
    -Default: { my: "left top", at: "right top" } -
    -
    Identifies the position of submenus in relation to the associated parent menu item. The of option defaults to the parent menu item, but you can specify another element to position against. You can refer to the jQuery UI Position utility for more details about the various options.
    -Code examples:

    Initialize the menu with the position option specified:

    -
    $( ".selector" ).menu({ position: { my: "left top", at: "right-5 top+5" } });
    -

    Get or set the position option, after initialization:

    -
    // getter
    var position = $( ".selector" ).menu( "option", "position" );
     
    // setter
    $( ".selector" ).menu( "option", "position", { my: "left top", at: "right-5 top+5" } );
    -
    -
    -

    roleType: String -

    -
    -Default: "menu" -
    -
    Customize the ARIA roles used for the menu and menu items. The default uses "menuitem" for items. Setting the role option to "listbox" will use "option" for items. If set to null, no roles will be set, which is useful if the menu is being controlled by another element that is maintaining focus.
    -Code examples:

    Initialize the menu with the role option specified:

    -
    $( ".selector" ).menu({ role: null });
    -

    Get or set the role option, after initialization:

    -
    // getter
    var role = $( ".selector" ).menu( "option", "role" );
     
    // setter
    $( ".selector" ).menu( "option", "role", null );
    -

    Methods

    -

    blur( [event ] )

    -
    - Removes focus from a menu, resets any active element styles and triggers the menu's blur event. -
    -
    • -
      event
      -
      Type: Event -
      -
      What triggered the menu to blur.
      -
    -
    -Code examples:

    Invoke the blur method:

    -
    $( ".selector" ).menu( "blur" );
    -
    -
    -
    -

    collapse( [event ] )

    -
    - Closes the currently active sub-menu. -
    -
    • -
      event
      -
      Type: Event -
      -
      What triggered the menu to collapse.
      -
    -
    -Code examples:

    Invoke the collapse method:

    -
    $( ".selector" ).menu( "collapse" );
    -
    -
    -
    -

    collapseAll( [event ] [, all ] )

    -
    - Closes all open sub-menus. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      What triggered the menu to collapse.
      -
    • -
    • -
      all
      -
      Type: Boolean -
      -
      Indicates whether all sub-menus should be closed or only sub-menus below and including the menu that is or contains the target of the triggering event.
      -
    • -
    -
    -Code examples:

    Invoke the collapseAll method:

    -
    $( ".selector" ).menu( "collapseAll", null, true );
    -
    -
    -
    -

    destroy()

    -
    - Removes the menu functionality completely. This will return the element back to its pre-init state. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the destroy method:

    -
    $( ".selector" ).menu( "destroy" );
    -
    -
    -
    -

    disable()

    -
    - Disables the menu. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the disable method:

    -
    $( ".selector" ).menu( "disable" );
    -
    -
    -
    -

    enable()

    -
    - Enables the menu. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the enable method:

    -
    $( ".selector" ).menu( "enable" );
    -
    -
    -
    -

    expand( [event ] )

    -
    - Opens the sub-menu below the currently active item, if one exists. -
    -
    • -
      event
      -
      Type: Event -
      -
      What triggered the menu to expand.
      -
    -
    -Code examples:

    Invoke the expand method:

    -
    $( ".selector" ).menu( "expand" );
    -
    -
    -
    -

    focus( [event ], item )

    -
    - Activates a particular menu item, begins opening any sub-menu if present and triggers the menu's focus event. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      What triggered the menu item to gain focus.
      -
    • -
    • -
      item
      -
      Type: jQuery -
      -
      The menu item to focus/activate.
      -
    • -
    -
    -Code examples:

    Invoke the focus method:

    -
    $( ".selector" ).menu( "focus", null, menu.find( ".ui-menu-item:last" ) );
    -
    -
    -
    -

    isFirstItem()

    -
    - Returns a boolean value stating whether or not the currently active item is the first item in the menu. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the isFirstItem method:

    -
    var firstItem = $( ".selector" ).menu( "isFirstItem" );
    -
    -
    -
    -

    isLastItem()

    -
    - Returns a boolean value stating whether or not the currently active item is the last item in the menu. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the isLastItem method:

    -
    var lastItem = $( ".selector" ).menu( "isLastItem" );
    -
    -
    -
    -

    next( [event ] )

    -
    - Moves active state to next menu item. -
    -
    • -
      event
      -
      Type: Event -
      -
      What triggered the focus to move.
      -
    -
    -Code examples:

    Invoke the next method:

    -
    $( ".selector" ).menu( "next" );
    -
    -
    -
    -

    nextPage( [event ] )

    -
    - Moves active state to first menu item below the bottom of a scrollable menu or the last item if not scrollable. -
    -
    • -
      event
      -
      Type: Event -
      -
      What triggered the focus to move.
      -
    -
    -Code examples:

    Invoke the nextPage method:

    -
    $( ".selector" ).menu( "nextPage" );
    -
    -
    -
    -
    -

    option( optionName )Returns: Object -

    -
    Gets the value currently associated with the specified optionName.
    -
    • -
      optionName
      -
      Type: String -
      -
      The name of the option to get.
      -
    -
    -Code examples:

    Invoke the method:

    -
    var isDisabled = $( ".selector" ).menu( "option", "disabled" );
    -
    -
    -
    -

    option()Returns: PlainObject -

    -
    Gets an object containing key/value pairs representing the current menu options hash.
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the method:

    -
    var options = $( ".selector" ).menu( "option" );
    -
    -
    -
    -

    option( optionName, value )

    -
    Sets the value of the menu option associated with the specified optionName.
    -
      -
    • -
      optionName
      -
      Type: String -
      -
      The name of the option to set.
      -
    • -
    • -
      value
      -
      Type: Object -
      -
      A value to set for the option.
      -
    • -
    -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).menu( "option", "disabled", true );
    -
    -
    -
    -

    option( options )

    -
    Sets one or more options for the menu.
    -
    • -
      options
      -
      Type: Object -
      -
      A map of option-value pairs to set.
      -
    -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).menu( "option", { disabled: true } );
    -
    -
    -
    -
    -

    previous( [event ] )

    -
    - Moves active state to previous menu item. -
    -
    • -
      event
      -
      Type: Event -
      -
      What triggered the focus to move.
      -
    -
    -Code examples:

    Invoke the previous method:

    -
    $( ".selector" ).menu( "previous" );
    -
    -
    -
    -

    previousPage( [event ] )

    -
    - Moves active state to first menu item above the top of a scrollable menu or the first item if not scrollable. -
    -
    • -
      event
      -
      Type: Event -
      -
      What triggered the focus to move.
      -
    -
    -Code examples:

    Invoke the previousPage method:

    -
    $( ".selector" ).menu( "previousPage" );
    -
    -
    -
    -

    refresh()

    -
    - Initializes sub-menus and menu items that have not already been initialized. New menu items, including sub-menus can be added to the menu or all of the contents of the menu can be replaced and then initialized with the refresh() method. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the refresh method:

    -
    $( ".selector" ).menu( "refresh" );
    -
    -
    -
    -

    select( [event ] )

    -
    - Selects the currently active menu item, collapses all sub-menus and triggers the menu's select event. -
    -
    • -
      event
      -
      Type: Event -
      -
      What triggered the selection.
      -
    -
    -Code examples:

    Invoke the select method:

    -
    $( ".selector" ).menu( "select" );
    -
    -
    -
    -

    widget()Returns: jQuery -

    -
    - Returns a jQuery object containing the menu. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the widget method:

    -
    var widget = $( ".selector" ).menu( "widget" );
    -
    -

    Events

    -

    blur( event, ui )Type: menublur -

    -
    - Triggered when the menu loses focus. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
      • -
        item
        -
        Type: jQuery -
        -
        - The currently active menu item. -
        -
      -
    • -
    -
    -Code examples:

    Initialize the menu with the blur callback specified:

    -
    $( ".selector" ).menu({
        blur: function( event, ui ) {}
    });
    -

    Bind an event listener to the menublur event:

    -
    $( ".selector" ).on( "menublur", function( event, ui ) {} );
    -
    -
    -
    -

    create( event, ui )Type: menucreate -

    -
    - Triggered when the menu is created. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
    • -
    -
    -Code examples:

    Initialize the menu with the create callback specified:

    -
    $( ".selector" ).menu({
        create: function( event, ui ) {}
    });
    -

    Bind an event listener to the menucreate event:

    -
    $( ".selector" ).on( "menucreate", function( event, ui ) {} );
    -
    -
    -
    -

    focus( event, ui )Type: menufocus -

    -
    - Triggered when a menu gains focus or when any menu item is activated. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
      • -
        item
        -
        Type: jQuery -
        -
        - The currently active menu item. -
        -
      -
    • -
    -
    -Code examples:

    Initialize the menu with the focus callback specified:

    -
    $( ".selector" ).menu({
        focus: function( event, ui ) {}
    });
    -

    Bind an event listener to the menufocus event:

    -
    $( ".selector" ).on( "menufocus", function( event, ui ) {} );
    -
    -
    -
    -

    select( event, ui )Type: menuselect -

    -
    - Triggered when a menu item is selected. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
      • -
        item
        -
        Type: jQuery -
        -
        - The currently active menu item. -
        -
      -
    • -
    -
    -Code examples:

    Initialize the menu with the select callback specified:

    -
    $( ".selector" ).menu({
        select: function( event, ui ) {}
    });
    -

    Bind an event listener to the menuselect event:

    -
    $( ".selector" ).on( "menuselect", function( event, ui ) {} );
    -
    -

    Example:

    -

    A simple jQuery UI Menu

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>menu demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        .ui-menu {
            width: 200px;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <ul id="menu">
        <li><a href="#">Item 1</a></li>
        <li><a href="#">Item 2</a></li>
        <li><a href="#">Item 3</a>
            <ul>
                <li><a href="#">Item 3-1</a></li>
                <li><a href="#">Item 3-2</a></li>
                <li><a href="#">Item 3-3</a></li>
                <li><a href="#">Item 3-4</a></li>
                <li><a href="#">Item 3-5</a></li>
            </ul>
        </li>
        <li><a href="#">Item 4</a></li>
        <li><a href="#">Item 5</a></li>
    </ul>
     
    <script>
    $( "#menu" ).menu();
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/mouse.html b/html/js/lib/development-bundle/docs/mouse.html deleted file mode 100644 index 043e6435f..000000000 --- a/html/js/lib/development-bundle/docs/mouse.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - jQuery UI mouse documentation - - - - - -

    Mouse Interaction

    -
    -

    Description: The base interaction layer.

    -

    QuickNav

    -

    Options

    - - - -
    - -

    Events

    -

    Similar to jQuery.Widget, the mouse interaction is not intended to be used directly. It is purely a base layer for other widgets to inherit from. This page only documents what is added to jQuery.Widget, but it does include internal methods that are not intended to be overwritten. The intended public API is _mouseStart(), _mouseDrag(), _mouseStop(), and _mouseCapture().

    -
    -

    Options

    -

    cancelType: Selector -

    -
    -Default: "input,textarea,button,select,option" -
    -
    Prevents interactions from starting on specified elements.
    -Code examples:

    Initialize the jQuery.ui.mouse with the cancel option specified:

    -
    $( ".selector" ).jQuery.ui.mouse({ cancel: ".title" });
    -

    Get or set the cancel option, after initialization:

    -
    // getter
    var cancel = $( ".selector" ).jQuery.ui.mouse( "option", "cancel" );
     
    // setter
    $( ".selector" ).jQuery.ui.mouse( "option", "cancel", ".title" );
    -
    -
    -

    delayType: Number -

    -
    -Default: 0 -
    -
    Time in milliseconds after mousedown until the interaction should start. This option can be used to prevent unwanted interactions when clicking on an element.
    -Code examples:

    Initialize the jQuery.ui.mouse with the delay option specified:

    -
    $( ".selector" ).jQuery.ui.mouse({ delay: 300 });
    -

    Get or set the delay option, after initialization:

    -
    // getter
    var delay = $( ".selector" ).jQuery.ui.mouse( "option", "delay" );
     
    // setter
    $( ".selector" ).jQuery.ui.mouse( "option", "delay", 300 );
    -
    -
    -

    distanceType: Number -

    -
    -Default: 1 -
    -
    Distance in pixels after mousedown the mouse must move before the interaction should start. This option can be used to prevent unwanted interactions when clicking on an element.
    -Code examples:

    Initialize the jQuery.ui.mouse with the distance option specified:

    -
    $( ".selector" ).jQuery.ui.mouse({ distance: 10 });
    -

    Get or set the distance option, after initialization:

    -
    // getter
    var distance = $( ".selector" ).jQuery.ui.mouse( "option", "distance" );
     
    // setter
    $( ".selector" ).jQuery.ui.mouse( "option", "distance", 10 );
    -

    Methods

    -

    _mouseCapture()Returns: Boolean -

    -
    - Determines whether an interaction should start based on event target of the interaction. The default implementation always returns true. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseCapture method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseCapture" );
    -
    -
    -
    -

    _mouseDelayMet()Returns: Boolean -

    -
    - Determines whether the delay option has been met for the current interaction. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseDelayMet method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseDelayMet" );
    -
    -
    -
    -

    _mouseDestroy()

    -
    - Destroys the interaction event handlers. This must be called from the extending widget's _destroy() method. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseDestroy method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseDestroy" );
    -
    -
    -
    -

    _mouseDistanceMet()Returns: Boolean -

    -
    - Determines whether the distance option has been met for the current interaction. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseDistanceMet method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseDistanceMet" );
    -
    -
    -
    -

    _mouseDown()

    -
    - Handles the beginning of an interaction. Verifies that the event is associated with the primary mouse button and ensures that the delay and distance options are met prior to starting the interaction. When the interaction is ready to start, invokes the _mouseStart() method for the extending widget to handle. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseDown method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseDown" );
    -
    -
    -
    -

    _mouseDrag()

    -
    - The extending widget should implement a _mouseDrag() method to handle each movement of an interaction. This method will receive the mouse event associated with the movement. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseDrag method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseDrag" );
    -
    -
    -
    -

    _mouseInit()

    -
    - Initializes the interaction event handlers. This must be called from the extending widget's _create() method. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseInit method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseInit" );
    -
    -
    -
    -

    _mouseMove()

    -
    - Handles each movement of the interaction. Invokes the mouseDrag() method for the extending widget to handle. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseMove method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseMove" );
    -
    -
    -
    -

    _mouseStart()

    -
    - The extending widget should implement a _mouseStart() method to handle the beginning of an interaction. This method will receive the mouse event associated with the start of the interaction. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseStart method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseStart" );
    -
    -
    -
    -

    _mouseStop()

    -
    - The extending widget should implement a _mouseStop() method to handle the end of an interaction. This method will receive the mouse event associated with the end of the interaction. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseStop method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseStop" );
    -
    -
    -
    -

    _mouseUp()

    -
    - Handles the end of the interaction. Invokes the mouseStop() method for the extending widget to handle. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the _mouseUp method:

    -
    $( ".selector" ).jQuery.ui.mouse( "_mouseUp" );
    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/puff-effect.html b/html/js/lib/development-bundle/docs/puff-effect.html deleted file mode 100644 index ab134dbdd..000000000 --- a/html/js/lib/development-bundle/docs/puff-effect.html +++ /dev/null @@ -1,32 +0,0 @@ -

    Puff Effect

    -
    -

    Description: - Creates a puff effect by scaling the element up and hiding it at the same time. -

    -
    • -

      puff

      -
      • -
        -percent (default: 150)
        -
        Type: Number -
        -
        The percentage to scale to.
        -
      -
    -

    Example:

    -

    Toggle a div using the puff effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>puff demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "puff" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    \ No newline at end of file diff --git a/html/js/lib/development-bundle/docs/pulsate-effect.html b/html/js/lib/development-bundle/docs/pulsate-effect.html deleted file mode 100644 index 50dc8e4b8..000000000 --- a/html/js/lib/development-bundle/docs/pulsate-effect.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jQuery UI pulsate-effect documentation - - - - - -

    Pulsate Effect

    -
    -

    Description: - The pulsate effect hides or shows an element by pulsing it in or out. -

    -
    • -

      pulsate

      -
      • -
        -times (default: 5)
        -
        Type: Integer -
        -
        The number of times the element should pulse. An extra half pulse is added for hide/show.
        -
      -
    -

    Example:

    -

    Toggle a div using the pulsate effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>pulsate demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "pulsate" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/scale-effect.html b/html/js/lib/development-bundle/docs/scale-effect.html deleted file mode 100644 index 4a744804d..000000000 --- a/html/js/lib/development-bundle/docs/scale-effect.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - jQuery UI scale-effect documentation - - - - - -

    Scale Effect

    -
    -

    Description: - Shrink or grow an element by a percentage factor. -

    -
    • -

      scale

      -
        -
      • -
        -direction (default: "both")
        -
        Type: String -
        -
        The direction of the effect. Possible values: "both", "vertical" or "horizontal".
        -
      • -
      • -
        -origin (default: [ "middle", "center" ])
        -
        Type: Array -
        -
        The vanishing point.
        -
      • -
      • -
        percent
        -
        Type: Number -
        -
        The percentage to scale to.
        -
      • -
      • -
        -scale (default: "both")
        -
        Type: String -
        -
        Which areas of the element will be resized: "both", "box", "content". Box resizes the border and padding of the element; content resizes any content inside of the element.
        -
      • -
      -
    -

    Examples:

    -

    Example: Toggle a div using the scale effect. -

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>scale demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "scale" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    -

    Example: Toggle a div using the scale effect in just one direction. -

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>scale demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle({ effect: "scale", direction: "horizontal" });
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/shake-effect.html b/html/js/lib/development-bundle/docs/shake-effect.html deleted file mode 100644 index a9afe1a87..000000000 --- a/html/js/lib/development-bundle/docs/shake-effect.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - jQuery UI shake-effect documentation - - - - - -

    Shake Effect

    -
    -

    Description: Shakes the element multiple times, vertically or horizontally.

    -
    • -

      shake

      -
        -
      • -
        -direction (default: "both")
        -
        Type: String -
        -
        The direction of the effect. Possible values: "left", "right", "up", "down".
        -
      • -
      • -
        -distance (default: 20)
        -
        Type: Number -
        -
        Distance to shake.
        -
      • -
      • -
        -times (default: 3)
        -
        Type: Integer -
        -
        Times to shake.
        -
      • -
      -
    -

    Example:

    -

    Shake a div.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>shake demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to shake the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).effect( "shake" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/size-effect.html b/html/js/lib/development-bundle/docs/size-effect.html deleted file mode 100644 index 2df248352..000000000 --- a/html/js/lib/development-bundle/docs/size-effect.html +++ /dev/null @@ -1,45 +0,0 @@ -

    Size Effect

    -
    -

    Description: Resize an element to a specified width and height.

    -
    • -

      size

      -
        -
      • -
        to
        -
        Type: Object -
        -
        Height and width to resize to.
        -
      • -
      • -
        -origin (default: [ "top", "left" ])
        -
        Type: Array -
        -
        The vanishing point.
        -
      • -
      • -
        -scale (default: "both")
        -
        Type: String -
        -
        Which areas of the element will be resized: "both", "box", "content". Box resizes the border and padding of the element; content resizes any content inside of the element.
        -
      • -
      -
    -

    Example:

    -

    Resize the element using the size effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>size demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to resize the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).effect( "size", {
            to: { width: 200, height: 60 }
        }, 1000 );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    \ No newline at end of file diff --git a/html/js/lib/development-bundle/docs/slide-effect.html b/html/js/lib/development-bundle/docs/slide-effect.html deleted file mode 100644 index 4619bb463..000000000 --- a/html/js/lib/development-bundle/docs/slide-effect.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - jQuery UI slide-effect documentation - - - - - -

    Slide Effect

    -
    -

    Description: Slides the element out of the viewport.

    -
    • -

      slide

      -
        -
      • -
        -direction (default: "both")
        -
        Type: String -
        -
        The direction of the effect. Possible values: "left", "right", "up", "down".
        -
      • -
      • -
        -distance (default: element's outerWidth)
        -
        Type: Number -
        -
        The distance of the effect. Defaults to either the height or width of the elemenet depending on the direction argument. Can be set to any integer less than the width/height of the element.
        -
      • -
      -
    -

    Example:

    -

    Toggle a div using the slide effect.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>slide demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        #toggle {
            width: 100px;
            height: 100px;
            background: #ccc;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>Click anywhere to toggle the box.</p>
    <div id="toggle"></div>
     
    <script>
    $( document ).click(function() {
        $( "#toggle" ).toggle( "slide" );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/spinner.html b/html/js/lib/development-bundle/docs/spinner.html deleted file mode 100644 index b6ab6e4aa..000000000 --- a/html/js/lib/development-bundle/docs/spinner.html +++ /dev/null @@ -1,572 +0,0 @@ - - - - - jQuery UI spinner documentation - - - - - -

    -Spinner Widgetversion added: 1.9 -

    -
    -

    Description: - Enhance a text input for entering numeric values, with up/down buttons and arrow key handling. -

    -

    QuickNavExamples -

    - -
    -

    Events

    - - - - - -
    -

    Spinner, or number stepper, widget is perfect for handling all kinds of numeric input. It allow users to type a value directly or modify an existing value by spinning with the keyboard, mouse or scrollwheel. When combined with Globalize, you can even spin currencies and dates in a variety of locales.

    - -

    Spinner wraps a text input, adds two buttons to increment and decrement the current value, along with handling key events for the same purpose. It delegates to Globalize for number formatting and parsing.

    - -

    Keyboard interaction

    - -
      -
    • UP: Increment the value by one step.
    • -
    • DOWN: Decrement the value by one step.
    • -
    • PAGE UP: Increment the value by one page.
    • -
    • PAGE DOWN: Decrement the value by one page.
    • -
    - -

    Focus stays in the text field, even after using the mouse to click one of the spin buttons.

    -
    -

    Additional Notes:

    -
    • - This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point. -
    -

    Options

    -

    cultureType: String -

    -
    -Default: null -
    -
    Sets the culture to use for parsing and formatting the value. If null, the currently set culture in Globalize is used, see Globalize docs for available cultures. Only relevant if the numberFormat option is set. Requires Globalize to be included.
    -Code examples:

    Initialize the spinner with the culture option specified:

    -
    $( ".selector" ).spinner({ culture: "fr" });
    -

    Get or set the culture option, after initialization:

    -
    // getter
    var culture = $( ".selector" ).spinner( "option", "culture" );
     
    // setter
    $( ".selector" ).spinner( "option", "culture", "fr" );
    -
    -
    -

    disabledType: Boolean -

    -
    -Default: false -
    -
    Disables the spinner if set to true.
    -Code examples:

    Initialize the spinner with the disabled option specified:

    -
    $( ".selector" ).spinner({ disabled: true });
    -

    Get or set the disabled option, after initialization:

    -
    // getter
    var disabled = $( ".selector" ).spinner( "option", "disabled" );
     
    // setter
    $( ".selector" ).spinner( "option", "disabled", true );
    -
    -
    -

    iconsType: Object -

    -
    -Default: { down: "ui-icon-triangle-1-s", up: "ui-icon-triangle-1-n" } -
    -
    - Icons to use for buttons, matching an icon defined by the jQuery UI CSS Framework. -
      -
    • up (string, default: "ui-icon-triangle-1-n")
    • -
    • down (string, default: "ui-icon-triangle-1-s")
    • -
    -
    -Code examples:

    Initialize the spinner with the icons option specified:

    -
    $( ".selector" ).spinner({ icons: { down: "custom-down-icon", up: "custom-up-icon" } });
    -

    Get or set the icons option, after initialization:

    -
    // getter
    var icons = $( ".selector" ).spinner( "option", "icons" );
     
    // setter
    $( ".selector" ).spinner( "option", "icons", { down: "custom-down-icon", up: "custom-up-icon" } );
    -
    -
    -

    incrementalType: Boolean or Function() -

    -
    -Default: true -
    -
    Controls the number of steps taken when holding down a spin button.
    -Multiple types supported:
      -
    • -Boolean: When set to true, the stepping delta will increase when spun incessantly. When set to false, all steps are equal (as defined by the step option).
    • -
    • -Function: Receives one parameter: the number of spins that have occurred. Must return the number of steps that should occur for the current spin.
    • -
    -Code examples:

    Initialize the spinner with the incremental option specified:

    -
    $( ".selector" ).spinner({ incremental: false });
    -

    Get or set the incremental option, after initialization:

    -
    // getter
    var incremental = $( ".selector" ).spinner( "option", "incremental" );
     
    // setter
    $( ".selector" ).spinner( "option", "incremental", false );
    -
    -
    -

    maxType: Number or String -

    -
    -Default: null -
    -
    The maximum allowed value. The element's max attribute is used if it exists and the option is not explicitly set. If null, there is no maximum enforced.
    -Multiple types supported:
      -
    • -Number: The maximum value.
    • -
    • -String: If Globalize is included, the max option can be passed as a string which will be parsed based on the numberFormat and culture options; otherwise it will fall back to the native parseFloat() method.
    • -
    -Code examples:

    Initialize the spinner with the max option specified:

    -
    $( ".selector" ).spinner({ max: 50 });
    -

    Get or set the max option, after initialization:

    -
    // getter
    var max = $( ".selector" ).spinner( "option", "max" );
     
    // setter
    $( ".selector" ).spinner( "option", "max", 50 );
    -
    -
    -

    minType: Number or String -

    -
    -Default: null -
    -
    The minimum allowed value. The element's min attribute is used if it exists and the option is not explicitly set. If null, there is no minimum enforced.
    -Multiple types supported:
      -
    • -Number: The minimum value.
    • -
    • -String: If Globalize is included, the min option can be passed as a string which will be parsed based on the numberFormat and culture options; otherwise it will fall back to the native parseFloat() method.
    • -
    -Code examples:

    Initialize the spinner with the min option specified:

    -
    $( ".selector" ).spinner({ min: 0 });
    -

    Get or set the min option, after initialization:

    -
    // getter
    var min = $( ".selector" ).spinner( "option", "min" );
     
    // setter
    $( ".selector" ).spinner( "option", "min", 0 );
    -
    -
    -

    numberFormatType: String -

    -
    -Default: null -
    -
    Format of numbers passed to Globalize, if available. Most common are "n" for a decimal number and "C" for a currency value. Also see the culture option.
    -Code examples:

    Initialize the spinner with the numberFormat option specified:

    -
    $( ".selector" ).spinner({ numberFormat: "n" });
    -

    Get or set the numberFormat option, after initialization:

    -
    // getter
    var numberFormat = $( ".selector" ).spinner( "option", "numberFormat" );
     
    // setter
    $( ".selector" ).spinner( "option", "numberFormat", "n" );
    -
    -
    -

    pageType: Number -

    -
    -Default: 10 -
    -
    The number of steps to take when paging via the pageUp/pageDown methods.
    -Code examples:

    Initialize the spinner with the page option specified:

    -
    $( ".selector" ).spinner({ page: 5 });
    -

    Get or set the page option, after initialization:

    -
    // getter
    var page = $( ".selector" ).spinner( "option", "page" );
     
    // setter
    $( ".selector" ).spinner( "option", "page", 5 );
    -
    -
    -

    stepType: Number or String -

    -
    -Default: 1 -
    -
    The size of the step to take when spinning via buttons or via the stepUp()/stepDown() methods. The element's step attribute is used if it exists and the option is not explicitly set.
    -Multiple types supported:
      -
    • -Number: The size of the step.
    • -
    • -String: If Globalize is included, the step option can be passed as a string which will be parsed based on the numberFormat and culture options, otherwise it will fall back to the native parseFloat.
    • -
    -Code examples:

    Initialize the spinner with the step option specified:

    -
    $( ".selector" ).spinner({ step: 2 });
    -

    Get or set the step option, after initialization:

    -
    // getter
    var step = $( ".selector" ).spinner( "option", "step" );
     
    // setter
    $( ".selector" ).spinner( "option", "step", 2 );
    -

    Methods

    -

    destroy()

    -
    - Removes the spinner functionality completely. This will return the element back to its pre-init state. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the destroy method:

    -
    $( ".selector" ).spinner( "destroy" );
    -
    -
    -
    -

    disable()

    -
    - Disables the spinner. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the disable method:

    -
    $( ".selector" ).spinner( "disable" );
    -
    -
    -
    -

    enable()

    -
    - Enables the spinner. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the enable method:

    -
    $( ".selector" ).spinner( "enable" );
    -
    -
    -
    -
    -

    option( optionName )Returns: Object -

    -
    Gets the value currently associated with the specified optionName.
    -
    • -
      optionName
      -
      Type: String -
      -
      The name of the option to get.
      -
    -
    -Code examples:

    Invoke the method:

    -
    var isDisabled = $( ".selector" ).spinner( "option", "disabled" );
    -
    -
    -
    -

    option()Returns: PlainObject -

    -
    Gets an object containing key/value pairs representing the current spinner options hash.
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the method:

    -
    var options = $( ".selector" ).spinner( "option" );
    -
    -
    -
    -

    option( optionName, value )

    -
    Sets the value of the spinner option associated with the specified optionName.
    -
      -
    • -
      optionName
      -
      Type: String -
      -
      The name of the option to set.
      -
    • -
    • -
      value
      -
      Type: Object -
      -
      A value to set for the option.
      -
    • -
    -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).spinner( "option", "disabled", true );
    -
    -
    -
    -

    option( options )

    -
    Sets one or more options for the spinner.
    -
    • -
      options
      -
      Type: Object -
      -
      A map of option-value pairs to set.
      -
    -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).spinner( "option", { disabled: true } );
    -
    -
    -
    -
    -

    pageDown( [pages ] )

    -
    - Decrements the value by the specified number of pages, as defined by the page option. Without the parameter, a single page is decremented. -
    -
    • -
      pages
      -
      Type: Number -
      -
      Number of pages to decrement, defaults to 1.
      -
    -
    -Code examples:

    Invoke the pageDown method:

    -
    $( ".selector" ).spinner( "pageDown" );
    -
    -
    -
    -

    pageUp( [pages ] )

    -
    - Increments the value by the specified number of pages, as defined by the page option. Without the parameter, a single page is incremented. -
    -
    • -
      pages
      -
      Type: Number -
      -
      Number of pages to increment, defaults to 1.
      -
    -
    -Code examples:

    Invoke the pageUp method:

    -
    $( ".selector" ).spinner( "pageUp", 10 );
    -
    -
    -
    -

    stepDown( [steps ] )

    -
    - Decrements the value by the specified number of steps. Without the parameter, a single step is decremented. -

    If the resulting value is above the max, below the min, or reuslts in a step mismatch, the value will be adjusted to the closest valid value.

    -
    -
    • -
      steps
      -
      Type: Number -
      -
      Number of steps to decrement, defaults to 1.
      -
    -
    -Code examples:

    Invoke the stepDown method:

    -
    $( ".selector" ).spinner( "stepDown" );
    -
    -
    -
    -

    stepUp( [steps ] )

    -
    - Increments the value by the specified number of steps. Without the parameter, a single step is incremented. -

    If the resulting value is above the max, below the min, or reuslts in a step mismatch, the value will be adjusted to the closest valid value.

    -
    -
    • -
      steps
      -
      Type: Number -
      -
      Number of steps to increment, defaults to 1.
      -
    -
    -Code examples:

    Invoke the stepUp method:

    -
    $( ".selector" ).spinner( "stepUp", 5 );
    -
    -
    -
    -
    -

    value()Returns: Number -

    -
    Gets the current value as a number. The value is parsed based on the numberFormat and culture options.
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the method:

    -
    var value = $( ".selector" ).spinner( "value" );
    -
    -
    -
    -

    value( value )

    -
    - -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).spinner( "value", 50 );
    -
    -
    -
    -
    -

    widget()Returns: jQuery -

    -
    - Returns a jQuery object containing the generated wrapper. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the widget method:

    -
    var widget = $( ".selector" ).spinner( "widget" );
    -
    -

    Events

    -

    change( event, ui )Type: spinchange -

    -
    - Triggered when the value of the spinner has changed and the input is no longer focused. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
    • -
    -
    -Code examples:

    Initialize the spinner with the change callback specified:

    -
    $( ".selector" ).spinner({
        change: function( event, ui ) {}
    });
    -

    Bind an event listener to the spinchange event:

    -
    $( ".selector" ).on( "spinchange", function( event, ui ) {} );
    -
    -
    -
    -

    create( event, ui )Type: spincreate -

    -
    - Triggered when the spinner is created. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
    • -
    -
    -Code examples:

    Initialize the spinner with the create callback specified:

    -
    $( ".selector" ).spinner({
        create: function( event, ui ) {}
    });
    -

    Bind an event listener to the spincreate event:

    -
    $( ".selector" ).on( "spincreate", function( event, ui ) {} );
    -
    -
    -
    -

    spin( event, ui )Type: spin -

    -
    - Triggered during increment/decrement (to determine direction of spin compare current value with ui.value). -

    Can be canceled, preventing the value from being updated.

    -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
      • -
        value
        -
        Type: Number -
        -
        The new value to be set, unless the event is cancelled.
        -
      -
    • -
    -
    -Code examples:

    Initialize the spinner with the spin callback specified:

    -
    $( ".selector" ).spinner({
        spin: function( event, ui ) {}
    });
    -

    Bind an event listener to the spin event:

    -
    $( ".selector" ).on( "spin", function( event, ui ) {} );
    -
    -
    -
    -

    start( event, ui )Type: spinstart -

    -
    - Triggered before a spin. Can be canceled, preventing the spin from occurring. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
    • -
    -
    -Code examples:

    Initialize the spinner with the start callback specified:

    -
    $( ".selector" ).spinner({
        start: function( event, ui ) {}
    });
    -

    Bind an event listener to the spinstart event:

    -
    $( ".selector" ).on( "spinstart", function( event, ui ) {} );
    -
    -
    -
    -

    stop( event, ui )Type: spinstop -

    -
    Triggered after a spin.
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
    • -
    -
    -Code examples:

    Initialize the spinner with the stop callback specified:

    -
    $( ".selector" ).spinner({
        stop: function( event, ui ) {}
    });
    -

    Bind an event listener to the spinstop event:

    -
    $( ".selector" ).on( "spinstop", function( event, ui ) {} );
    -
    -

    Example:

    -

    Plain number spinner

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>spinner demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <input id="spinner">
     
    <script>
    $( "#spinner" ).spinner();
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/tooltip.html b/html/js/lib/development-bundle/docs/tooltip.html deleted file mode 100644 index ed39a848f..000000000 --- a/html/js/lib/development-bundle/docs/tooltip.html +++ /dev/null @@ -1,465 +0,0 @@ - - - - - jQuery UI tooltip documentation - - - - - -

    -Tooltip Widgetversion added: 1.9 -

    -
    -

    Description: Customizable, themeable tooltips, replacing native tooltips.

    -

    QuickNavExamples -

    - -
    -

    Events

    - - - -
    -

    Tooltip replaces native tooltips, making them themable as well as allowing various customizations:

    - -
      -
    • Display other content than just the title, like inline footnotes or extra content retrieved via Ajax.
    • -
    • Customize the positioning, e.g., to center the tooltip above elements.
    • -
    • Add extra styling to customize the appearance, for warning or error fields.
    • -
    - -

    A fade animation is used by default to show and hide the tooltip, making the appearance a bit more organic, compared to just toggling the visiblity. This can be customized with the show and hide options.

    - -

    The items and content options need to stay in-sync. If you change one of them, you need to change the other.

    - -

    In general, disabled elements do not trigger any DOM events. Therefore, it is not possible to properly control tooltips for disabled elements, since we need to listen to events to determine when to show and hide the tooltip. As a result, jQuery UI does not guarantee any level of support for tooltips attached to disabled elements. Unfortunately, this means that if you require tooltips on disabled elements, you may end up with a mixture of native tooltips and jQuery UI tooltips.

    -
    -

    Additional Notes:

    -
    • - This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point. -
    -

    Options

    -

    contentType: Function() or String -

    -
    -Default: function returning the title attribute -
    -
    -

    The content of the tooltip.

    - -

    When changing this option, you likely need to also change the items option.

    -
    -Multiple types supported:
      -
    • -Function: A callback which can either return the content directly, or call the first argument, passing in the content, e.g., for Ajax content.
    • -
    • -String: A string of HTML to use for the tooltip content.
    • -
    -Code examples:

    Initialize the tooltip with the content option specified:

    -
    $( ".selector" ).tooltip({ content: "Awesome title!" });
    -

    Get or set the content option, after initialization:

    -
    // getter
    var content = $( ".selector" ).tooltip( "option", "content" );
     
    // setter
    $( ".selector" ).tooltip( "option", "content", "Awesome title!" );
    -
    -
    -

    disabledType: Boolean -

    -
    -Default: false -
    -
    Disables the tooltip if set to true.
    -Code examples:

    Initialize the tooltip with the disabled option specified:

    -
    $( ".selector" ).tooltip({ disabled: true });
    -

    Get or set the disabled option, after initialization:

    -
    // getter
    var disabled = $( ".selector" ).tooltip( "option", "disabled" );
     
    // setter
    $( ".selector" ).tooltip( "option", "disabled", true );
    -
    -
    -

    hideType: Boolean or Number or String or Object -

    -
    -Default: null -
    -
    If and how to animate the hiding of the tooltip.
    -Multiple types supported:
      -
    • -Boolean: - When set to false, no animation will be used and the tooltip will be hidden immediately. - When set to true, the tooltip will fade out with the default duration and the default easing. -
    • -
    • -Number: - The tooltip will fade out with the specified duration and the default easing. -
    • -
    • -String: - The tooltip will be hidden using the specified effect. - The value can either be the name of a built-in jQuery animateion method, such as "slideUp", or the name of a jQuery UI effect, such as "fold". - In either case the effect will be used with the default duration and the default easing. -
    • -
    • -Object: If the value is an object, then effect, duration, and easing properties may be provided. If the effect property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If duration or easing is omitted, then the default values will be used. If effect is omitted, then "fadeOut" will be used.
    • -
    -Code examples:

    Initialize the tooltip with the hide option specified:

    -
    $( ".selector" ).tooltip({ hide: { effect: "explode", duration: 1000 } });
    -

    Get or set the hide option, after initialization:

    -
    // getter
    var hide = $( ".selector" ).tooltip( "option", "hide" );
     
    // setter
    $( ".selector" ).tooltip( "option", "hide", { effect: "explode", duration: 1000 } );
    -
    -
    -

    itemsType: Selector -

    -
    -Default: [title] -
    -
    -

    A selector indicating which items should show tooltips. Customize if you're using something other then the title attribute for the tooltip content, or if you need a different selector for event delegation.

    - -

    When changing this option, you likely need to also change the content option.

    -
    -Code examples:

    Initialize the tooltip with the items option specified:

    -
    $( ".selector" ).tooltip({ items: "img[alt]" });
    -

    Get or set the items option, after initialization:

    -
    // getter
    var items = $( ".selector" ).tooltip( "option", "items" );
     
    // setter
    $( ".selector" ).tooltip( "option", "items", "img[alt]" );
    -
    -
    -

    positionType: Object -

    -
    -Default: { my: "left top+15", at: "left bottom", collision: "flipfit" } -
    -
    -

    Configuration for the Position utility. The of property defaults to the target element, but can also be overriden.

    - -

    Note: In 1.9.0, the default value was { my: "left+15 center", at: "right center", collision: "flipfit" }, but this was changed to more closely match native tooltip positioning.

    -
    -Code examples:

    Initialize the tooltip with the position option specified:

    -
    $( ".selector" ).tooltip({ position: { my: "left+15 center", at: "right center" } });
    -

    Get or set the position option, after initialization:

    -
    // getter
    var position = $( ".selector" ).tooltip( "option", "position" );
     
    // setter
    $( ".selector" ).tooltip( "option", "position", { my: "left+15 center", at: "right center" } );
    -
    -
    -

    showType: Boolean or Number or String or Object -

    -
    -Default: null -
    -
    If and how to animate the showing of the tooltip.
    -Multiple types supported:
      -
    • -Boolean: - When set to false, no animation will be used and the tooltip will be shown immediately. - When set to true, the tooltip will fade in with the default duration and the default easing. -
    • -
    • -Number: - The tooltip will fade in with the specified duration and the default easing. -
    • -
    • -String: - The tooltip will be shown using the specified effect. - The value can either be the name of a built-in jQuery animateion method, such as "slideDown", or the name of a jQuery UI effect, such as "fold". - In either case the effect will be used with the default duration and the default easing. -
    • -
    • -Object: If the value is an object, then effect, duration, and easing properties may be provided. If the effect property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If duration or easing is omitted, then the default values will be used. If effect is omitted, then "fadeIn" will be used.
    • -
    -Code examples:

    Initialize the tooltip with the show option specified:

    -
    $( ".selector" ).tooltip({ show: { effect: "blind", duration: 800 } });
    -

    Get or set the show option, after initialization:

    -
    // getter
    var show = $( ".selector" ).tooltip( "option", "show" );
     
    // setter
    $( ".selector" ).tooltip( "option", "show", { effect: "blind", duration: 800 } );
    -
    -
    -

    tooltipClassType: String -

    -
    -Default: null -
    -
    - A class to add to the widget, can be used to display various tooltip types, like warnings or errors. -

    This may get replaced by the classes option.

    -
    -Code examples:

    Initialize the tooltip with the tooltipClass option specified:

    -
    $( ".selector" ).tooltip({ tooltipClass: "custom-tooltip-styling" });
    -

    Get or set the tooltipClass option, after initialization:

    -
    // getter
    var tooltipClass = $( ".selector" ).tooltip( "option", "tooltipClass" );
     
    // setter
    $( ".selector" ).tooltip( "option", "tooltipClass", "custom-tooltip-styling" );
    -
    -
    -

    trackType: Boolean -

    -
    -Default: false -
    -
    - Whether the tooltip should track (follow) the mouse. -
    -Code examples:

    Initialize the tooltip with the track option specified:

    -
    $( ".selector" ).tooltip({ track: true });
    -

    Get or set the track option, after initialization:

    -
    // getter
    var track = $( ".selector" ).tooltip( "option", "track" );
     
    // setter
    $( ".selector" ).tooltip( "option", "track", true );
    -

    Methods

    -

    close()

    -
    - Closes a tooltip. This is only intended to be called for non-delegated tooltips. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the close method:

    -
    $( ".selector" ).tooltip( "close" );
    -
    -
    -
    -

    destroy()

    -
    - Removes the tooltip functionality completely. This will return the element back to its pre-init state. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the destroy method:

    -
    $( ".selector" ).tooltip( "destroy" );
    -
    -
    -
    -

    disable()

    -
    - Disables the tooltip. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the disable method:

    -
    $( ".selector" ).tooltip( "disable" );
    -
    -
    -
    -

    enable()

    -
    - Enables the tooltip. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the enable method:

    -
    $( ".selector" ).tooltip( "enable" );
    -
    -
    -
    -

    open()

    -
    - Programmatically open a tooltip. This is only intended to be called for non-delegated tooltips. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the open method:

    -
    $( ".selector" ).tooltip( "open" );
    -
    -
    -
    -
    -

    option( optionName )Returns: Object -

    -
    Gets the value currently associated with the specified optionName.
    -
    • -
      optionName
      -
      Type: String -
      -
      The name of the option to get.
      -
    -
    -Code examples:

    Invoke the method:

    -
    var isDisabled = $( ".selector" ).tooltip( "option", "disabled" );
    -
    -
    -
    -

    option()Returns: PlainObject -

    -
    Gets an object containing key/value pairs representing the current tooltip options hash.
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the method:

    -
    var options = $( ".selector" ).tooltip( "option" );
    -
    -
    -
    -

    option( optionName, value )

    -
    Sets the value of the tooltip option associated with the specified optionName.
    -
      -
    • -
      optionName
      -
      Type: String -
      -
      The name of the option to set.
      -
    • -
    • -
      value
      -
      Type: Object -
      -
      A value to set for the option.
      -
    • -
    -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).tooltip( "option", "disabled", true );
    -
    -
    -
    -

    option( options )

    -
    Sets one or more options for the tooltip.
    -
    • -
      options
      -
      Type: Object -
      -
      A map of option-value pairs to set.
      -
    -
    -Code examples:

    Invoke the method:

    -
    $( ".selector" ).tooltip( "option", { disabled: true } );
    -
    -
    -
    -
    -

    widget()Returns: jQuery -

    -
    - Returns a jQuery object containing the original element. -
    -
    • This method does not accept any arguments.
    -
    -Code examples:

    Invoke the widget method:

    -
    var widget = $( ".selector" ).tooltip( "widget" );
    -
    -

    Events

    -

    close( event, ui )Type: tooltipclose -

    -
    - Triggered when a tooltip is closed, triggered on focusout or mouseleave. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
      • -
        tooltip
        -
        Type: jQuery -
        -
        The generated tooltip element.
        -
      -
    • -
    -
    -Code examples:

    Initialize the tooltip with the close callback specified:

    -
    $( ".selector" ).tooltip({
        close: function( event, ui ) {}
    });
    -

    Bind an event listener to the tooltipclose event:

    -
    $( ".selector" ).on( "tooltipclose", function( event, ui ) {} );
    -
    -
    -
    -

    create( event, ui )Type: tooltipcreate -

    -
    - Triggered when the tooltip is created. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
    • -
    -
    -Code examples:

    Initialize the tooltip with the create callback specified:

    -
    $( ".selector" ).tooltip({
        create: function( event, ui ) {}
    });
    -

    Bind an event listener to the tooltipcreate event:

    -
    $( ".selector" ).on( "tooltipcreate", function( event, ui ) {} );
    -
    -
    -
    -

    open( event, ui )Type: tooltipopen -

    -
    - Triggered when a tooltip is shown, triggered on focusin or mouseover. -
    -
      -
    • -
      event
      -
      Type: Event -
      -
      -
    • -
    • -
      ui
      -
      Type: Object -
      -
      -
      • -
        tooltip
        -
        Type: jQuery -
        -
        The generated tooltip element.
        -
      -
    • -
    -
    -Code examples:

    Initialize the tooltip with the open callback specified:

    -
    $( ".selector" ).tooltip({
        open: function( event, ui ) {}
    });
    -

    Bind an event listener to the tooltipopen event:

    -
    $( ".selector" ).on( "tooltipopen", function( event, ui ) {} );
    -
    -

    Example:

    -

    Create a tooltip on the document, using event delegation for all elements with a title attribute.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>tooltip demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <p>
        <a href="#" title="Anchor description">Anchor text</a>
        <input title="Input help">
    </p>
    <script>
        $( document ).tooltip();
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/docs/transfer-effect.html b/html/js/lib/development-bundle/docs/transfer-effect.html deleted file mode 100644 index ed597e156..000000000 --- a/html/js/lib/development-bundle/docs/transfer-effect.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - jQuery UI transfer-effect documentation - - - - - -

    Transfer Effect

    -
    -

    Description: Transfers the outline of an element to another element

    -
    • -

      transfer

      -
        -
      • -
        className
        -
        Type: String -
        -
        argumental class name the transfer element will receive.
        -
      • -
      • -
        to
        -
        Type: String -
        -
        jQuery selector, the element to transfer to.
        -
      • -
      -
    -
    -

    Very useful when trying to visualize interaction between two elements.

    -

    The transfer element iself has the class ui-effects-transfer, and needs to be styled by you, for example by adding a background or border.

    -
    -

    Example:

    -

    Clicking on the green element transfers to the other.

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>transfer demo</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
        <style>
        div.green {
            width: 100px;
            height: 80px;
            background: green;
            border: 1px solid black;
            position: relative;
        }
        div.red {
            margin-top: 10px;
            width: 50px;
            height: 30px;
            background: red;
            border: 1px solid black;
            position: relative;
        }
        .ui-effects-transfer {
            border: 1px dotted black;
        }
        </style>
        <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    </head>
    <body>
     
    <div class="green"></div>
    <div class="red"></div>
     
    <script>
    $( "div" ).click(function() {
        var i = 1 - $( "div" ).index( this );
        $( this ).effect( "transfer", { to: $( "div" ).eq( i ) }, 1000 );
    });
    </script>
     
    </body>
    </html>
    -

    Demo:

    -
    -
    -
    - - - diff --git a/html/js/lib/development-bundle/external/globalize.culture.de-DE.js b/html/js/lib/development-bundle/external/globalize.culture.de-DE.js deleted file mode 100644 index 5466bd75e..000000000 --- a/html/js/lib/development-bundle/external/globalize.culture.de-DE.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Globalize Culture de-DE - * - * http://github.com/jquery/globalize - * - * Copyright Software Freedom Conservancy, Inc. - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * This file was generated by the Globalize Culture Generator - * Translation: bugs found in this file need to be fixed in the generator - */ - -(function( window, undefined ) { - -var Globalize; - -if ( typeof require !== "undefined" - && typeof exports !== "undefined" - && typeof module !== "undefined" ) { - // Assume CommonJS - Globalize = require( "globalize" ); -} else { - // Global variable - Globalize = window.Globalize; -} - -Globalize.addCultureInfo( "de-DE", "default", { - name: "de-DE", - englishName: "German (Germany)", - nativeName: "Deutsch (Deutschland)", - language: "de", - numberFormat: { - ",": ".", - ".": ",", - NaN: "n. def.", - negativeInfinity: "-unendlich", - positiveInfinity: "+unendlich", - percent: { - pattern: ["-n%","n%"], - ",": ".", - ".": "," - }, - currency: { - pattern: ["-n $","n $"], - ",": ".", - ".": ",", - symbol: "€" - } - }, - calendars: { - standard: { - "/": ".", - firstDay: 1, - days: { - names: ["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"], - namesAbbr: ["So","Mo","Di","Mi","Do","Fr","Sa"], - namesShort: ["So","Mo","Di","Mi","Do","Fr","Sa"] - }, - months: { - names: ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember",""], - namesAbbr: ["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez",""] - }, - AM: null, - PM: null, - eras: [{"name":"n. Chr.","start":null,"offset":0}], - patterns: { - d: "dd.MM.yyyy", - D: "dddd, d. MMMM yyyy", - t: "HH:mm", - T: "HH:mm:ss", - f: "dddd, d. MMMM yyyy HH:mm", - F: "dddd, d. MMMM yyyy HH:mm:ss", - M: "dd MMMM", - Y: "MMMM yyyy" - } - } - } -}); - -}( this )); diff --git a/html/js/lib/development-bundle/external/globalize.culture.ja-JP.js b/html/js/lib/development-bundle/external/globalize.culture.ja-JP.js deleted file mode 100644 index a9469d709..000000000 --- a/html/js/lib/development-bundle/external/globalize.culture.ja-JP.js +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Globalize Culture ja-JP - * - * http://github.com/jquery/globalize - * - * Copyright Software Freedom Conservancy, Inc. - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * This file was generated by the Globalize Culture Generator - * Translation: bugs found in this file need to be fixed in the generator - */ - -(function( window, undefined ) { - -var Globalize; - -if ( typeof require !== "undefined" - && typeof exports !== "undefined" - && typeof module !== "undefined" ) { - // Assume CommonJS - Globalize = require( "globalize" ); -} else { - // Global variable - Globalize = window.Globalize; -} - -Globalize.addCultureInfo( "ja-JP", "default", { - name: "ja-JP", - englishName: "Japanese (Japan)", - nativeName: "日本語 (日本)", - language: "ja", - numberFormat: { - NaN: "NaN (非数値)", - negativeInfinity: "-∞", - positiveInfinity: "+∞", - percent: { - pattern: ["-n%","n%"] - }, - currency: { - pattern: ["-$n","$n"], - decimals: 0, - symbol: "¥" - } - }, - calendars: { - standard: { - days: { - names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"], - namesAbbr: ["日","月","火","水","木","金","土"], - namesShort: ["日","月","火","水","木","金","土"] - }, - months: { - names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""], - namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""] - }, - AM: ["午前","午前","午前"], - PM: ["午後","午後","午後"], - eras: [{"name":"西暦","start":null,"offset":0}], - patterns: { - d: "yyyy/MM/dd", - D: "yyyy'年'M'月'd'日'", - t: "H:mm", - T: "H:mm:ss", - f: "yyyy'年'M'月'd'日' H:mm", - F: "yyyy'年'M'月'd'日' H:mm:ss", - M: "M'月'd'日'", - Y: "yyyy'年'M'月'" - } - }, - Japanese: { - name: "Japanese", - days: { - names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"], - namesAbbr: ["日","月","火","水","木","金","土"], - namesShort: ["日","月","火","水","木","金","土"] - }, - months: { - names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""], - namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""] - }, - AM: ["午前","午前","午前"], - PM: ["午後","午後","午後"], - eras: [{"name":"平成","start":null,"offset":1867},{"name":"昭和","start":-1812153600000,"offset":1911},{"name":"大正","start":-1357603200000,"offset":1925},{"name":"明治","start":60022080000,"offset":1988}], - twoDigitYearMax: 99, - patterns: { - d: "gg y/M/d", - D: "gg y'年'M'月'd'日'", - t: "H:mm", - T: "H:mm:ss", - f: "gg y'年'M'月'd'日' H:mm", - F: "gg y'年'M'月'd'日' H:mm:ss", - M: "M'月'd'日'", - Y: "gg y'年'M'月'" - } - } - } -}); - -}( this )); diff --git a/html/js/lib/development-bundle/external/globalize.js b/html/js/lib/development-bundle/external/globalize.js deleted file mode 100644 index ebaca1748..000000000 --- a/html/js/lib/development-bundle/external/globalize.js +++ /dev/null @@ -1,1573 +0,0 @@ -/*! - * Globalize - * - * http://github.com/jquery/globalize - * - * Copyright Software Freedom Conservancy, Inc. - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - */ - -(function( window, undefined ) { - -var Globalize, - // private variables - regexHex, - regexInfinity, - regexParseFloat, - regexTrim, - // private JavaScript utility functions - arrayIndexOf, - endsWith, - extend, - isArray, - isFunction, - isObject, - startsWith, - trim, - truncate, - zeroPad, - // private Globalization utility functions - appendPreOrPostMatch, - expandFormat, - formatDate, - formatNumber, - getTokenRegExp, - getEra, - getEraYear, - parseExact, - parseNegativePattern; - -// Global variable (Globalize) or CommonJS module (globalize) -Globalize = function( cultureSelector ) { - return new Globalize.prototype.init( cultureSelector ); -}; - -if ( typeof require !== "undefined" - && typeof exports !== "undefined" - && typeof module !== "undefined" ) { - // Assume CommonJS - module.exports = Globalize; -} else { - // Export as global variable - window.Globalize = Globalize; -} - -Globalize.cultures = {}; - -Globalize.prototype = { - constructor: Globalize, - init: function( cultureSelector ) { - this.cultures = Globalize.cultures; - this.cultureSelector = cultureSelector; - - return this; - } -}; -Globalize.prototype.init.prototype = Globalize.prototype; - -// 1. When defining a culture, all fields are required except the ones stated as optional. -// 2. Each culture should have a ".calendars" object with at least one calendar named "standard" -// which serves as the default calendar in use by that culture. -// 3. Each culture should have a ".calendar" object which is the current calendar being used, -// it may be dynamically changed at any time to one of the calendars in ".calendars". -Globalize.cultures[ "default" ] = { - // A unique name for the culture in the form - - name: "en", - // the name of the culture in the english language - englishName: "English", - // the name of the culture in its own language - nativeName: "English", - // whether the culture uses right-to-left text - isRTL: false, - // "language" is used for so-called "specific" cultures. - // For example, the culture "es-CL" means "Spanish, in Chili". - // It represents the Spanish-speaking culture as it is in Chili, - // which might have different formatting rules or even translations - // than Spanish in Spain. A "neutral" culture is one that is not - // specific to a region. For example, the culture "es" is the generic - // Spanish culture, which may be a more generalized version of the language - // that may or may not be what a specific culture expects. - // For a specific culture like "es-CL", the "language" field refers to the - // neutral, generic culture information for the language it is using. - // This is not always a simple matter of the string before the dash. - // For example, the "zh-Hans" culture is netural (Simplified Chinese). - // And the "zh-SG" culture is Simplified Chinese in Singapore, whose lanugage - // field is "zh-CHS", not "zh". - // This field should be used to navigate from a specific culture to it's - // more general, neutral culture. If a culture is already as general as it - // can get, the language may refer to itself. - language: "en", - // numberFormat defines general number formatting rules, like the digits in - // each grouping, the group separator, and how negative numbers are displayed. - numberFormat: { - // [negativePattern] - // Note, numberFormat.pattern has no "positivePattern" unlike percent and currency, - // but is still defined as an array for consistency with them. - // negativePattern: one of "(n)|-n|- n|n-|n -" - pattern: [ "-n" ], - // number of decimal places normally shown - decimals: 2, - // string that separates number groups, as in 1,000,000 - ",": ",", - // string that separates a number from the fractional portion, as in 1.99 - ".": ".", - // array of numbers indicating the size of each number group. - // TODO: more detailed description and example - groupSizes: [ 3 ], - // symbol used for positive numbers - "+": "+", - // symbol used for negative numbers - "-": "-", - // symbol used for NaN (Not-A-Number) - NaN: "NaN", - // symbol used for Negative Infinity - negativeInfinity: "-Infinity", - // symbol used for Positive Infinity - positiveInfinity: "Infinity", - percent: { - // [negativePattern, positivePattern] - // negativePattern: one of "-n %|-n%|-%n|%-n|%n-|n-%|n%-|-% n|n %-|% n-|% -n|n- %" - // positivePattern: one of "n %|n%|%n|% n" - pattern: [ "-n %", "n %" ], - // number of decimal places normally shown - decimals: 2, - // array of numbers indicating the size of each number group. - // TODO: more detailed description and example - groupSizes: [ 3 ], - // string that separates number groups, as in 1,000,000 - ",": ",", - // string that separates a number from the fractional portion, as in 1.99 - ".": ".", - // symbol used to represent a percentage - symbol: "%" - }, - currency: { - // [negativePattern, positivePattern] - // negativePattern: one of "($n)|-$n|$-n|$n-|(n$)|-n$|n-$|n$-|-n $|-$ n|n $-|$ n-|$ -n|n- $|($ n)|(n $)" - // positivePattern: one of "$n|n$|$ n|n $" - pattern: [ "($n)", "$n" ], - // number of decimal places normally shown - decimals: 2, - // array of numbers indicating the size of each number group. - // TODO: more detailed description and example - groupSizes: [ 3 ], - // string that separates number groups, as in 1,000,000 - ",": ",", - // string that separates a number from the fractional portion, as in 1.99 - ".": ".", - // symbol used to represent currency - symbol: "$" - } - }, - // calendars defines all the possible calendars used by this culture. - // There should be at least one defined with name "standard", and is the default - // calendar used by the culture. - // A calendar contains information about how dates are formatted, information about - // the calendar's eras, a standard set of the date formats, - // translations for day and month names, and if the calendar is not based on the Gregorian - // calendar, conversion functions to and from the Gregorian calendar. - calendars: { - standard: { - // name that identifies the type of calendar this is - name: "Gregorian_USEnglish", - // separator of parts of a date (e.g. "/" in 11/05/1955) - "/": "/", - // separator of parts of a time (e.g. ":" in 05:44 PM) - ":": ":", - // the first day of the week (0 = Sunday, 1 = Monday, etc) - firstDay: 0, - days: { - // full day names - names: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], - // abbreviated day names - namesAbbr: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], - // shortest day names - namesShort: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ] - }, - months: { - // full month names (13 months for lunar calendards -- 13th month should be "" if not lunar) - names: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" ], - // abbreviated month names - namesAbbr: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" ] - }, - // AM and PM designators in one of these forms: - // The usual view, and the upper and lower case versions - // [ standard, lowercase, uppercase ] - // The culture does not use AM or PM (likely all standard date formats use 24 hour time) - // null - AM: [ "AM", "am", "AM" ], - PM: [ "PM", "pm", "PM" ], - eras: [ - // eras in reverse chronological order. - // name: the name of the era in this culture (e.g. A.D., C.E.) - // start: when the era starts in ticks (gregorian, gmt), null if it is the earliest supported era. - // offset: offset in years from gregorian calendar - { - "name": "A.D.", - "start": null, - "offset": 0 - } - ], - // when a two digit year is given, it will never be parsed as a four digit - // year greater than this year (in the appropriate era for the culture) - // Set it as a full year (e.g. 2029) or use an offset format starting from - // the current year: "+19" would correspond to 2029 if the current year 2010. - twoDigitYearMax: 2029, - // set of predefined date and time patterns used by the culture - // these represent the format someone in this culture would expect - // to see given the portions of the date that are shown. - patterns: { - // short date pattern - d: "M/d/yyyy", - // long date pattern - D: "dddd, MMMM dd, yyyy", - // short time pattern - t: "h:mm tt", - // long time pattern - T: "h:mm:ss tt", - // long date, short time pattern - f: "dddd, MMMM dd, yyyy h:mm tt", - // long date, long time pattern - F: "dddd, MMMM dd, yyyy h:mm:ss tt", - // month/day pattern - M: "MMMM dd", - // month/year pattern - Y: "yyyy MMMM", - // S is a sortable format that does not vary by culture - S: "yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss" - } - // optional fields for each calendar: - /* - monthsGenitive: - Same as months but used when the day preceeds the month. - Omit if the culture has no genitive distinction in month names. - For an explaination of genitive months, see http://blogs.msdn.com/michkap/archive/2004/12/25/332259.aspx - convert: - Allows for the support of non-gregorian based calendars. This convert object is used to - to convert a date to and from a gregorian calendar date to handle parsing and formatting. - The two functions: - fromGregorian( date ) - Given the date as a parameter, return an array with parts [ year, month, day ] - corresponding to the non-gregorian based year, month, and day for the calendar. - toGregorian( year, month, day ) - Given the non-gregorian year, month, and day, return a new Date() object - set to the corresponding date in the gregorian calendar. - */ - } - }, - // For localized strings - messages: {} -}; - -Globalize.cultures[ "default" ].calendar = Globalize.cultures[ "default" ].calendars.standard; - -Globalize.cultures[ "en" ] = Globalize.cultures[ "default" ]; - -Globalize.cultureSelector = "en"; - -// -// private variables -// - -regexHex = /^0x[a-f0-9]+$/i; -regexInfinity = /^[+-]?infinity$/i; -regexParseFloat = /^[+-]?\d*\.?\d*(e[+-]?\d+)?$/; -regexTrim = /^\s+|\s+$/g; - -// -// private JavaScript utility functions -// - -arrayIndexOf = function( array, item ) { - if ( array.indexOf ) { - return array.indexOf( item ); - } - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[i] === item ) { - return i; - } - } - return -1; -}; - -endsWith = function( value, pattern ) { - return value.substr( value.length - pattern.length ) === pattern; -}; - -extend = function( deep ) { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction(target) ) { - target = {}; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( isObject(copy) || (copyIsArray = isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && isArray(src) ? src : []; - - } else { - clone = src && isObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -isArray = Array.isArray || function( obj ) { - return Object.prototype.toString.call( obj ) === "[object Array]"; -}; - -isFunction = function( obj ) { - return Object.prototype.toString.call( obj ) === "[object Function]" -} - -isObject = function( obj ) { - return Object.prototype.toString.call( obj ) === "[object Object]"; -}; - -startsWith = function( value, pattern ) { - return value.indexOf( pattern ) === 0; -}; - -trim = function( value ) { - return ( value + "" ).replace( regexTrim, "" ); -}; - -truncate = function( value ) { - return value | 0; -}; - -zeroPad = function( str, count, left ) { - var l; - for ( l = str.length; l < count; l += 1 ) { - str = ( left ? ("0" + str) : (str + "0") ); - } - return str; -}; - -// -// private Globalization utility functions -// - -appendPreOrPostMatch = function( preMatch, strings ) { - // appends pre- and post- token match strings while removing escaped characters. - // Returns a single quote count which is used to determine if the token occurs - // in a string literal. - var quoteCount = 0, - escaped = false; - for ( var i = 0, il = preMatch.length; i < il; i++ ) { - var c = preMatch.charAt( i ); - switch ( c ) { - case "\'": - if ( escaped ) { - strings.push( "\'" ); - } - else { - quoteCount++; - } - escaped = false; - break; - case "\\": - if ( escaped ) { - strings.push( "\\" ); - } - escaped = !escaped; - break; - default: - strings.push( c ); - escaped = false; - break; - } - } - return quoteCount; -}; - -expandFormat = function( cal, format ) { - // expands unspecified or single character date formats into the full pattern. - format = format || "F"; - var pattern, - patterns = cal.patterns, - len = format.length; - if ( len === 1 ) { - pattern = patterns[ format ]; - if ( !pattern ) { - throw "Invalid date format string \'" + format + "\'."; - } - format = pattern; - } - else if ( len === 2 && format.charAt(0) === "%" ) { - // %X escape format -- intended as a custom format string that is only one character, not a built-in format. - format = format.charAt( 1 ); - } - return format; -}; - -formatDate = function( value, format, culture ) { - var cal = culture.calendar, - convert = cal.convert; - - if ( !format || !format.length || format === "i" ) { - var ret; - if ( culture && culture.name.length ) { - if ( convert ) { - // non-gregorian calendar, so we cannot use built-in toLocaleString() - ret = formatDate( value, cal.patterns.F, culture ); - } - else { - var eraDate = new Date( value.getTime() ), - era = getEra( value, cal.eras ); - eraDate.setFullYear( getEraYear(value, cal, era) ); - ret = eraDate.toLocaleString(); - } - } - else { - ret = value.toString(); - } - return ret; - } - - var eras = cal.eras, - sortable = format === "s"; - format = expandFormat( cal, format ); - - // Start with an empty string - ret = []; - var hour, - zeros = [ "0", "00", "000" ], - foundDay, - checkedDay, - dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g, - quoteCount = 0, - tokenRegExp = getTokenRegExp(), - converted; - - function padZeros( num, c ) { - var r, s = num + ""; - if ( c > 1 && s.length < c ) { - r = ( zeros[c - 2] + s); - return r.substr( r.length - c, c ); - } - else { - r = s; - } - return r; - } - - function hasDay() { - if ( foundDay || checkedDay ) { - return foundDay; - } - foundDay = dayPartRegExp.test( format ); - checkedDay = true; - return foundDay; - } - - function getPart( date, part ) { - if ( converted ) { - return converted[ part ]; - } - switch ( part ) { - case 0: return date.getFullYear(); - case 1: return date.getMonth(); - case 2: return date.getDate(); - } - } - - if ( !sortable && convert ) { - converted = convert.fromGregorian( value ); - } - - for ( ; ; ) { - // Save the current index - var index = tokenRegExp.lastIndex, - // Look for the next pattern - ar = tokenRegExp.exec( format ); - - // Append the text before the pattern (or the end of the string if not found) - var preMatch = format.slice( index, ar ? ar.index : format.length ); - quoteCount += appendPreOrPostMatch( preMatch, ret ); - - if ( !ar ) { - break; - } - - // do not replace any matches that occur inside a string literal. - if ( quoteCount % 2 ) { - ret.push( ar[0] ); - continue; - } - - var current = ar[ 0 ], - clength = current.length; - - switch ( current ) { - case "ddd": - //Day of the week, as a three-letter abbreviation - case "dddd": - // Day of the week, using the full name - var names = ( clength === 3 ) ? cal.days.namesAbbr : cal.days.names; - ret.push( names[value.getDay()] ); - break; - case "d": - // Day of month, without leading zero for single-digit days - case "dd": - // Day of month, with leading zero for single-digit days - foundDay = true; - ret.push( - padZeros( getPart(value, 2), clength ) - ); - break; - case "MMM": - // Month, as a three-letter abbreviation - case "MMMM": - // Month, using the full name - var part = getPart( value, 1 ); - ret.push( - ( cal.monthsGenitive && hasDay() ) - ? - cal.monthsGenitive[ clength === 3 ? "namesAbbr" : "names" ][ part ] - : - cal.months[ clength === 3 ? "namesAbbr" : "names" ][ part ] - ); - break; - case "M": - // Month, as digits, with no leading zero for single-digit months - case "MM": - // Month, as digits, with leading zero for single-digit months - ret.push( - padZeros( getPart(value, 1) + 1, clength ) - ); - break; - case "y": - // Year, as two digits, but with no leading zero for years less than 10 - case "yy": - // Year, as two digits, with leading zero for years less than 10 - case "yyyy": - // Year represented by four full digits - part = converted ? converted[ 0 ] : getEraYear( value, cal, getEra(value, eras), sortable ); - if ( clength < 4 ) { - part = part % 100; - } - ret.push( - padZeros( part, clength ) - ); - break; - case "h": - // Hours with no leading zero for single-digit hours, using 12-hour clock - case "hh": - // Hours with leading zero for single-digit hours, using 12-hour clock - hour = value.getHours() % 12; - if ( hour === 0 ) hour = 12; - ret.push( - padZeros( hour, clength ) - ); - break; - case "H": - // Hours with no leading zero for single-digit hours, using 24-hour clock - case "HH": - // Hours with leading zero for single-digit hours, using 24-hour clock - ret.push( - padZeros( value.getHours(), clength ) - ); - break; - case "m": - // Minutes with no leading zero for single-digit minutes - case "mm": - // Minutes with leading zero for single-digit minutes - ret.push( - padZeros( value.getMinutes(), clength ) - ); - break; - case "s": - // Seconds with no leading zero for single-digit seconds - case "ss": - // Seconds with leading zero for single-digit seconds - ret.push( - padZeros( value.getSeconds(), clength ) - ); - break; - case "t": - // One character am/pm indicator ("a" or "p") - case "tt": - // Multicharacter am/pm indicator - part = value.getHours() < 12 ? ( cal.AM ? cal.AM[0] : " " ) : ( cal.PM ? cal.PM[0] : " " ); - ret.push( clength === 1 ? part.charAt(0) : part ); - break; - case "f": - // Deciseconds - case "ff": - // Centiseconds - case "fff": - // Milliseconds - ret.push( - padZeros( value.getMilliseconds(), 3 ).substr( 0, clength ) - ); - break; - case "z": - // Time zone offset, no leading zero - case "zz": - // Time zone offset with leading zero - hour = value.getTimezoneOffset() / 60; - ret.push( - ( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), clength ) - ); - break; - case "zzz": - // Time zone offset with leading zero - hour = value.getTimezoneOffset() / 60; - ret.push( - ( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), 2 ) - // Hard coded ":" separator, rather than using cal.TimeSeparator - // Repeated here for consistency, plus ":" was already assumed in date parsing. - + ":" + padZeros( Math.abs(value.getTimezoneOffset() % 60), 2 ) - ); - break; - case "g": - case "gg": - if ( cal.eras ) { - ret.push( - cal.eras[ getEra(value, eras) ].name - ); - } - break; - case "/": - ret.push( cal["/"] ); - break; - default: - throw "Invalid date format pattern \'" + current + "\'."; - break; - } - } - return ret.join( "" ); -}; - -// formatNumber -(function() { - var expandNumber; - - expandNumber = function( number, precision, formatInfo ) { - var groupSizes = formatInfo.groupSizes, - curSize = groupSizes[ 0 ], - curGroupIndex = 1, - factor = Math.pow( 10, precision ), - rounded = Math.round( number * factor ) / factor; - - if ( !isFinite(rounded) ) { - rounded = number; - } - number = rounded; - - var numberString = number+"", - right = "", - split = numberString.split( /e/i ), - exponent = split.length > 1 ? parseInt( split[1], 10 ) : 0; - numberString = split[ 0 ]; - split = numberString.split( "." ); - numberString = split[ 0 ]; - right = split.length > 1 ? split[ 1 ] : ""; - - var l; - if ( exponent > 0 ) { - right = zeroPad( right, exponent, false ); - numberString += right.slice( 0, exponent ); - right = right.substr( exponent ); - } - else if ( exponent < 0 ) { - exponent = -exponent; - numberString = zeroPad( numberString, exponent + 1 ); - right = numberString.slice( -exponent, numberString.length ) + right; - numberString = numberString.slice( 0, -exponent ); - } - - if ( precision > 0 ) { - right = formatInfo[ "." ] + - ( (right.length > precision) ? right.slice(0, precision) : zeroPad(right, precision) ); - } - else { - right = ""; - } - - var stringIndex = numberString.length - 1, - sep = formatInfo[ "," ], - ret = ""; - - while ( stringIndex >= 0 ) { - if ( curSize === 0 || curSize > stringIndex ) { - return numberString.slice( 0, stringIndex + 1 ) + ( ret.length ? (sep + ret + right) : right ); - } - ret = numberString.slice( stringIndex - curSize + 1, stringIndex + 1 ) + ( ret.length ? (sep + ret) : "" ); - - stringIndex -= curSize; - - if ( curGroupIndex < groupSizes.length ) { - curSize = groupSizes[ curGroupIndex ]; - curGroupIndex++; - } - } - - return numberString.slice( 0, stringIndex + 1 ) + sep + ret + right; - }; - - formatNumber = function( value, format, culture ) { - if ( !isFinite(value) ) { - if ( value === Infinity ) { - return culture.numberFormat.positiveInfinity; - } - if ( value === -Infinity ) { - return culture.numberFormat.negativeInfinity; - } - return culture.numberFormat.NaN; - } - if ( !format || format === "i" ) { - return culture.name.length ? value.toLocaleString() : value.toString(); - } - format = format || "D"; - - var nf = culture.numberFormat, - number = Math.abs( value ), - precision = -1, - pattern; - if ( format.length > 1 ) precision = parseInt( format.slice(1), 10 ); - - var current = format.charAt( 0 ).toUpperCase(), - formatInfo; - - switch ( current ) { - case "D": - pattern = "n"; - number = truncate( number ); - if ( precision !== -1 ) { - number = zeroPad( "" + number, precision, true ); - } - if ( value < 0 ) number = "-" + number; - break; - case "N": - formatInfo = nf; - // fall through - case "C": - formatInfo = formatInfo || nf.currency; - // fall through - case "P": - formatInfo = formatInfo || nf.percent; - pattern = value < 0 ? formatInfo.pattern[ 0 ] : ( formatInfo.pattern[1] || "n" ); - if ( precision === -1 ) precision = formatInfo.decimals; - number = expandNumber( number * (current === "P" ? 100 : 1), precision, formatInfo ); - break; - default: - throw "Bad number format specifier: " + current; - } - - var patternParts = /n|\$|-|%/g, - ret = ""; - for ( ; ; ) { - var index = patternParts.lastIndex, - ar = patternParts.exec( pattern ); - - ret += pattern.slice( index, ar ? ar.index : pattern.length ); - - if ( !ar ) { - break; - } - - switch ( ar[0] ) { - case "n": - ret += number; - break; - case "$": - ret += nf.currency.symbol; - break; - case "-": - // don't make 0 negative - if ( /[1-9]/.test(number) ) { - ret += nf[ "-" ]; - } - break; - case "%": - ret += nf.percent.symbol; - break; - } - } - - return ret; - }; - -}()); - -getTokenRegExp = function() { - // regular expression for matching date and time tokens in format strings. - return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g; -}; - -getEra = function( date, eras ) { - if ( !eras ) return 0; - var start, ticks = date.getTime(); - for ( var i = 0, l = eras.length; i < l; i++ ) { - start = eras[ i ].start; - if ( start === null || ticks >= start ) { - return i; - } - } - return 0; -}; - -getEraYear = function( date, cal, era, sortable ) { - var year = date.getFullYear(); - if ( !sortable && cal.eras ) { - // convert normal gregorian year to era-shifted gregorian - // year by subtracting the era offset - year -= cal.eras[ era ].offset; - } - return year; -}; - -// parseExact -(function() { - var expandYear, - getDayIndex, - getMonthIndex, - getParseRegExp, - outOfRange, - toUpper, - toUpperArray; - - expandYear = function( cal, year ) { - // expands 2-digit year into 4 digits. - var now = new Date(), - era = getEra( now ); - if ( year < 100 ) { - var twoDigitYearMax = cal.twoDigitYearMax; - twoDigitYearMax = typeof twoDigitYearMax === "string" ? new Date().getFullYear() % 100 + parseInt( twoDigitYearMax, 10 ) : twoDigitYearMax; - var curr = getEraYear( now, cal, era ); - year += curr - ( curr % 100 ); - if ( year > twoDigitYearMax ) { - year -= 100; - } - } - return year; - }; - - getDayIndex = function ( cal, value, abbr ) { - var ret, - days = cal.days, - upperDays = cal._upperDays; - if ( !upperDays ) { - cal._upperDays = upperDays = [ - toUpperArray( days.names ), - toUpperArray( days.namesAbbr ), - toUpperArray( days.namesShort ) - ]; - } - value = toUpper( value ); - if ( abbr ) { - ret = arrayIndexOf( upperDays[1], value ); - if ( ret === -1 ) { - ret = arrayIndexOf( upperDays[2], value ); - } - } - else { - ret = arrayIndexOf( upperDays[0], value ); - } - return ret; - }; - - getMonthIndex = function( cal, value, abbr ) { - var months = cal.months, - monthsGen = cal.monthsGenitive || cal.months, - upperMonths = cal._upperMonths, - upperMonthsGen = cal._upperMonthsGen; - if ( !upperMonths ) { - cal._upperMonths = upperMonths = [ - toUpperArray( months.names ), - toUpperArray( months.namesAbbr ) - ]; - cal._upperMonthsGen = upperMonthsGen = [ - toUpperArray( monthsGen.names ), - toUpperArray( monthsGen.namesAbbr ) - ]; - } - value = toUpper( value ); - var i = arrayIndexOf( abbr ? upperMonths[1] : upperMonths[0], value ); - if ( i < 0 ) { - i = arrayIndexOf( abbr ? upperMonthsGen[1] : upperMonthsGen[0], value ); - } - return i; - }; - - getParseRegExp = function( cal, format ) { - // converts a format string into a regular expression with groups that - // can be used to extract date fields from a date string. - // check for a cached parse regex. - var re = cal._parseRegExp; - if ( !re ) { - cal._parseRegExp = re = {}; - } - else { - var reFormat = re[ format ]; - if ( reFormat ) { - return reFormat; - } - } - - // expand single digit formats, then escape regular expression characters. - var expFormat = expandFormat( cal, format ).replace( /([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1" ), - regexp = [ "^" ], - groups = [], - index = 0, - quoteCount = 0, - tokenRegExp = getTokenRegExp(), - match; - - // iterate through each date token found. - while ( (match = tokenRegExp.exec(expFormat)) !== null ) { - var preMatch = expFormat.slice( index, match.index ); - index = tokenRegExp.lastIndex; - - // don't replace any matches that occur inside a string literal. - quoteCount += appendPreOrPostMatch( preMatch, regexp ); - if ( quoteCount % 2 ) { - regexp.push( match[0] ); - continue; - } - - // add a regex group for the token. - var m = match[ 0 ], - len = m.length, - add; - switch ( m ) { - case "dddd": case "ddd": - case "MMMM": case "MMM": - case "gg": case "g": - add = "(\\D+)"; - break; - case "tt": case "t": - add = "(\\D*)"; - break; - case "yyyy": - case "fff": - case "ff": - case "f": - add = "(\\d{" + len + "})"; - break; - case "dd": case "d": - case "MM": case "M": - case "yy": case "y": - case "HH": case "H": - case "hh": case "h": - case "mm": case "m": - case "ss": case "s": - add = "(\\d\\d?)"; - break; - case "zzz": - add = "([+-]?\\d\\d?:\\d{2})"; - break; - case "zz": case "z": - add = "([+-]?\\d\\d?)"; - break; - case "/": - add = "(\\" + cal[ "/" ] + ")"; - break; - default: - throw "Invalid date format pattern \'" + m + "\'."; - break; - } - if ( add ) { - regexp.push( add ); - } - groups.push( match[0] ); - } - appendPreOrPostMatch( expFormat.slice(index), regexp ); - regexp.push( "$" ); - - // allow whitespace to differ when matching formats. - var regexpStr = regexp.join( "" ).replace( /\s+/g, "\\s+" ), - parseRegExp = { "regExp": regexpStr, "groups": groups }; - - // cache the regex for this format. - return re[ format ] = parseRegExp; - }; - - outOfRange = function( value, low, high ) { - return value < low || value > high; - }; - - toUpper = function( value ) { - // "he-IL" has non-breaking space in weekday names. - return value.split( "\u00A0" ).join( " " ).toUpperCase(); - }; - - toUpperArray = function( arr ) { - var results = []; - for ( var i = 0, l = arr.length; i < l; i++ ) { - results[ i ] = toUpper( arr[i] ); - } - return results; - }; - - parseExact = function( value, format, culture ) { - // try to parse the date string by matching against the format string - // while using the specified culture for date field names. - value = trim( value ); - var cal = culture.calendar, - // convert date formats into regular expressions with groupings. - // use the regexp to determine the input format and extract the date fields. - parseInfo = getParseRegExp( cal, format ), - match = new RegExp( parseInfo.regExp ).exec( value ); - if ( match === null ) { - return null; - } - // found a date format that matches the input. - var groups = parseInfo.groups, - era = null, year = null, month = null, date = null, weekDay = null, - hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null, - pmHour = false; - // iterate the format groups to extract and set the date fields. - for ( var j = 0, jl = groups.length; j < jl; j++ ) { - var matchGroup = match[ j + 1 ]; - if ( matchGroup ) { - var current = groups[ j ], - clength = current.length, - matchInt = parseInt( matchGroup, 10 ); - switch ( current ) { - case "dd": case "d": - // Day of month. - date = matchInt; - // check that date is generally in valid range, also checking overflow below. - if ( outOfRange(date, 1, 31) ) return null; - break; - case "MMM": case "MMMM": - month = getMonthIndex( cal, matchGroup, clength === 3 ); - if ( outOfRange(month, 0, 11) ) return null; - break; - case "M": case "MM": - // Month. - month = matchInt - 1; - if ( outOfRange(month, 0, 11) ) return null; - break; - case "y": case "yy": - case "yyyy": - year = clength < 4 ? expandYear( cal, matchInt ) : matchInt; - if ( outOfRange(year, 0, 9999) ) return null; - break; - case "h": case "hh": - // Hours (12-hour clock). - hour = matchInt; - if ( hour === 12 ) hour = 0; - if ( outOfRange(hour, 0, 11) ) return null; - break; - case "H": case "HH": - // Hours (24-hour clock). - hour = matchInt; - if ( outOfRange(hour, 0, 23) ) return null; - break; - case "m": case "mm": - // Minutes. - min = matchInt; - if ( outOfRange(min, 0, 59) ) return null; - break; - case "s": case "ss": - // Seconds. - sec = matchInt; - if ( outOfRange(sec, 0, 59) ) return null; - break; - case "tt": case "t": - // AM/PM designator. - // see if it is standard, upper, or lower case PM. If not, ensure it is at least one of - // the AM tokens. If not, fail the parse for this format. - pmHour = cal.PM && ( matchGroup === cal.PM[0] || matchGroup === cal.PM[1] || matchGroup === cal.PM[2] ); - if ( - !pmHour && ( - !cal.AM || ( matchGroup !== cal.AM[0] && matchGroup !== cal.AM[1] && matchGroup !== cal.AM[2] ) - ) - ) return null; - break; - case "f": - // Deciseconds. - case "ff": - // Centiseconds. - case "fff": - // Milliseconds. - msec = matchInt * Math.pow( 10, 3 - clength ); - if ( outOfRange(msec, 0, 999) ) return null; - break; - case "ddd": - // Day of week. - case "dddd": - // Day of week. - weekDay = getDayIndex( cal, matchGroup, clength === 3 ); - if ( outOfRange(weekDay, 0, 6) ) return null; - break; - case "zzz": - // Time zone offset in +/- hours:min. - var offsets = matchGroup.split( /:/ ); - if ( offsets.length !== 2 ) return null; - hourOffset = parseInt( offsets[0], 10 ); - if ( outOfRange(hourOffset, -12, 13) ) return null; - var minOffset = parseInt( offsets[1], 10 ); - if ( outOfRange(minOffset, 0, 59) ) return null; - tzMinOffset = ( hourOffset * 60 ) + ( startsWith(matchGroup, "-") ? -minOffset : minOffset ); - break; - case "z": case "zz": - // Time zone offset in +/- hours. - hourOffset = matchInt; - if ( outOfRange(hourOffset, -12, 13) ) return null; - tzMinOffset = hourOffset * 60; - break; - case "g": case "gg": - var eraName = matchGroup; - if ( !eraName || !cal.eras ) return null; - eraName = trim( eraName.toLowerCase() ); - for ( var i = 0, l = cal.eras.length; i < l; i++ ) { - if ( eraName === cal.eras[i].name.toLowerCase() ) { - era = i; - break; - } - } - // could not find an era with that name - if ( era === null ) return null; - break; - } - } - } - var result = new Date(), defaultYear, convert = cal.convert; - defaultYear = convert ? convert.fromGregorian( result )[ 0 ] : result.getFullYear(); - if ( year === null ) { - year = defaultYear; - } - else if ( cal.eras ) { - // year must be shifted to normal gregorian year - // but not if year was not specified, its already normal gregorian - // per the main if clause above. - year += cal.eras[( era || 0 )].offset; - } - // set default day and month to 1 and January, so if unspecified, these are the defaults - // instead of the current day/month. - if ( month === null ) { - month = 0; - } - if ( date === null ) { - date = 1; - } - // now have year, month, and date, but in the culture's calendar. - // convert to gregorian if necessary - if ( convert ) { - result = convert.toGregorian( year, month, date ); - // conversion failed, must be an invalid match - if ( result === null ) return null; - } - else { - // have to set year, month and date together to avoid overflow based on current date. - result.setFullYear( year, month, date ); - // check to see if date overflowed for specified month (only checked 1-31 above). - if ( result.getDate() !== date ) return null; - // invalid day of week. - if ( weekDay !== null && result.getDay() !== weekDay ) { - return null; - } - } - // if pm designator token was found make sure the hours fit the 24-hour clock. - if ( pmHour && hour < 12 ) { - hour += 12; - } - result.setHours( hour, min, sec, msec ); - if ( tzMinOffset !== null ) { - // adjust timezone to utc before applying local offset. - var adjustedMin = result.getMinutes() - ( tzMinOffset + result.getTimezoneOffset() ); - // Safari limits hours and minutes to the range of -127 to 127. We need to use setHours - // to ensure both these fields will not exceed this range. adjustedMin will range - // somewhere between -1440 and 1500, so we only need to split this into hours. - result.setHours( result.getHours() + parseInt(adjustedMin / 60, 10), adjustedMin % 60 ); - } - return result; - }; -}()); - -parseNegativePattern = function( value, nf, negativePattern ) { - var neg = nf[ "-" ], - pos = nf[ "+" ], - ret; - switch ( negativePattern ) { - case "n -": - neg = " " + neg; - pos = " " + pos; - // fall through - case "n-": - if ( endsWith(value, neg) ) { - ret = [ "-", value.substr(0, value.length - neg.length) ]; - } - else if ( endsWith(value, pos) ) { - ret = [ "+", value.substr(0, value.length - pos.length) ]; - } - break; - case "- n": - neg += " "; - pos += " "; - // fall through - case "-n": - if ( startsWith(value, neg) ) { - ret = [ "-", value.substr(neg.length) ]; - } - else if ( startsWith(value, pos) ) { - ret = [ "+", value.substr(pos.length) ]; - } - break; - case "(n)": - if ( startsWith(value, "(") && endsWith(value, ")") ) { - ret = [ "-", value.substr(1, value.length - 2) ]; - } - break; - } - return ret || [ "", value ]; -}; - -// -// public instance functions -// - -Globalize.prototype.findClosestCulture = function( cultureSelector ) { - return Globalize.findClosestCulture.call( this, cultureSelector ); -}; - -Globalize.prototype.format = function( value, format, cultureSelector ) { - return Globalize.format.call( this, value, format, cultureSelector ); -}; - -Globalize.prototype.localize = function( key, cultureSelector ) { - return Globalize.localize.call( this, key, cultureSelector ); -}; - -Globalize.prototype.parseInt = function( value, radix, cultureSelector ) { - return Globalize.parseInt.call( this, value, radix, cultureSelector ); -}; - -Globalize.prototype.parseFloat = function( value, radix, cultureSelector ) { - return Globalize.parseFloat.call( this, value, radix, cultureSelector ); -}; - -Globalize.prototype.culture = function( cultureSelector ) { - return Globalize.culture.call( this, cultureSelector ); -}; - -// -// public singleton functions -// - -Globalize.addCultureInfo = function( cultureName, baseCultureName, info ) { - - var base = {}, - isNew = false; - - if ( typeof cultureName !== "string" ) { - // cultureName argument is optional string. If not specified, assume info is first - // and only argument. Specified info deep-extends current culture. - info = cultureName; - cultureName = this.culture().name; - base = this.cultures[ cultureName ]; - } else if ( typeof baseCultureName !== "string" ) { - // baseCultureName argument is optional string. If not specified, assume info is second - // argument. Specified info deep-extends specified culture. - // If specified culture does not exist, create by deep-extending default - info = baseCultureName; - isNew = ( this.cultures[ cultureName ] == null ); - base = this.cultures[ cultureName ] || this.cultures[ "default" ]; - } else { - // cultureName and baseCultureName specified. Assume a new culture is being created - // by deep-extending an specified base culture - isNew = true; - base = this.cultures[ baseCultureName ]; - } - - this.cultures[ cultureName ] = extend(true, {}, - base, - info - ); - // Make the standard calendar the current culture if it's a new culture - if ( isNew ) { - this.cultures[ cultureName ].calendar = this.cultures[ cultureName ].calendars.standard; - } -}; - -Globalize.findClosestCulture = function( name ) { - var match; - if ( !name ) { - return this.cultures[ this.cultureSelector ] || this.cultures[ "default" ]; - } - if ( typeof name === "string" ) { - name = name.split( "," ); - } - if ( isArray(name) ) { - var lang, - cultures = this.cultures, - list = name, - i, l = list.length, - prioritized = []; - for ( i = 0; i < l; i++ ) { - name = trim( list[i] ); - var pri, parts = name.split( ";" ); - lang = trim( parts[0] ); - if ( parts.length === 1 ) { - pri = 1; - } - else { - name = trim( parts[1] ); - if ( name.indexOf("q=") === 0 ) { - name = name.substr( 2 ); - pri = parseFloat( name ); - pri = isNaN( pri ) ? 0 : pri; - } - else { - pri = 1; - } - } - prioritized.push({ lang: lang, pri: pri }); - } - prioritized.sort(function( a, b ) { - return a.pri < b.pri ? 1 : -1; - }); - - // exact match - for ( i = 0; i < l; i++ ) { - lang = prioritized[ i ].lang; - match = cultures[ lang ]; - if ( match ) { - return match; - } - } - - // neutral language match - for ( i = 0; i < l; i++ ) { - lang = prioritized[ i ].lang; - do { - var index = lang.lastIndexOf( "-" ); - if ( index === -1 ) { - break; - } - // strip off the last part. e.g. en-US => en - lang = lang.substr( 0, index ); - match = cultures[ lang ]; - if ( match ) { - return match; - } - } - while ( 1 ); - } - - // last resort: match first culture using that language - for ( i = 0; i < l; i++ ) { - lang = prioritized[ i ].lang; - for ( var cultureKey in cultures ) { - var culture = cultures[ cultureKey ]; - if ( culture.language == lang ) { - return culture; - } - } - } - } - else if ( typeof name === "object" ) { - return name; - } - return match || null; -}; - -Globalize.format = function( value, format, cultureSelector ) { - culture = this.findClosestCulture( cultureSelector ); - if ( value instanceof Date ) { - value = formatDate( value, format, culture ); - } - else if ( typeof value === "number" ) { - value = formatNumber( value, format, culture ); - } - return value; -}; - -Globalize.localize = function( key, cultureSelector ) { - return this.findClosestCulture( cultureSelector ).messages[ key ] || - this.cultures[ "default" ].messages[ key ]; -}; - -Globalize.parseDate = function( value, formats, culture ) { - culture = this.findClosestCulture( culture ); - - var date, prop, patterns; - if ( formats ) { - if ( typeof formats === "string" ) { - formats = [ formats ]; - } - if ( formats.length ) { - for ( var i = 0, l = formats.length; i < l; i++ ) { - var format = formats[ i ]; - if ( format ) { - date = parseExact( value, format, culture ); - if ( date ) { - break; - } - } - } - } - } else { - patterns = culture.calendar.patterns; - for ( prop in patterns ) { - date = parseExact( value, patterns[prop], culture ); - if ( date ) { - break; - } - } - } - - return date || null; -}; - -Globalize.parseInt = function( value, radix, cultureSelector ) { - return truncate( Globalize.parseFloat(value, radix, cultureSelector) ); -}; - -Globalize.parseFloat = function( value, radix, cultureSelector ) { - // radix argument is optional - if ( typeof radix !== "number" ) { - cultureSelector = radix; - radix = 10; - } - - var culture = this.findClosestCulture( cultureSelector ); - var ret = NaN, - nf = culture.numberFormat; - - if ( value.indexOf(culture.numberFormat.currency.symbol) > -1 ) { - // remove currency symbol - value = value.replace( culture.numberFormat.currency.symbol, "" ); - // replace decimal seperator - value = value.replace( culture.numberFormat.currency["."], culture.numberFormat["."] ); - } - - // trim leading and trailing whitespace - value = trim( value ); - - // allow infinity or hexidecimal - if ( regexInfinity.test(value) ) { - ret = parseFloat( value ); - } - else if ( !radix && regexHex.test(value) ) { - ret = parseInt( value, 16 ); - } - else { - - // determine sign and number - var signInfo = parseNegativePattern( value, nf, nf.pattern[0] ), - sign = signInfo[ 0 ], - num = signInfo[ 1 ]; - - // #44 - try parsing as "(n)" - if ( sign === "" && nf.pattern[0] !== "(n)" ) { - signInfo = parseNegativePattern( value, nf, "(n)" ); - sign = signInfo[ 0 ]; - num = signInfo[ 1 ]; - } - - // try parsing as "-n" - if ( sign === "" && nf.pattern[0] !== "-n" ) { - signInfo = parseNegativePattern( value, nf, "-n" ); - sign = signInfo[ 0 ]; - num = signInfo[ 1 ]; - } - - sign = sign || "+"; - - // determine exponent and number - var exponent, - intAndFraction, - exponentPos = num.indexOf( "e" ); - if ( exponentPos < 0 ) exponentPos = num.indexOf( "E" ); - if ( exponentPos < 0 ) { - intAndFraction = num; - exponent = null; - } - else { - intAndFraction = num.substr( 0, exponentPos ); - exponent = num.substr( exponentPos + 1 ); - } - // determine decimal position - var integer, - fraction, - decSep = nf[ "." ], - decimalPos = intAndFraction.indexOf( decSep ); - if ( decimalPos < 0 ) { - integer = intAndFraction; - fraction = null; - } - else { - integer = intAndFraction.substr( 0, decimalPos ); - fraction = intAndFraction.substr( decimalPos + decSep.length ); - } - // handle groups (e.g. 1,000,000) - var groupSep = nf[ "," ]; - integer = integer.split( groupSep ).join( "" ); - var altGroupSep = groupSep.replace( /\u00A0/g, " " ); - if ( groupSep !== altGroupSep ) { - integer = integer.split( altGroupSep ).join( "" ); - } - // build a natively parsable number string - var p = sign + integer; - if ( fraction !== null ) { - p += "." + fraction; - } - if ( exponent !== null ) { - // exponent itself may have a number patternd - var expSignInfo = parseNegativePattern( exponent, nf, "-n" ); - p += "e" + ( expSignInfo[0] || "+" ) + expSignInfo[ 1 ]; - } - if ( regexParseFloat.test(p) ) { - ret = parseFloat( p ); - } - } - return ret; -}; - -Globalize.culture = function( cultureSelector ) { - // setter - if ( typeof cultureSelector !== "undefined" ) { - this.cultureSelector = cultureSelector; - } - // getter - return this.findClosestCulture( cultureSelector ) || this.culture[ "default" ]; -}; - -}( this )); diff --git a/html/js/lib/development-bundle/external/jquery.mousewheel.js b/html/js/lib/development-bundle/external/jquery.mousewheel.js deleted file mode 100644 index bf766be6d..000000000 --- a/html/js/lib/development-bundle/external/jquery.mousewheel.js +++ /dev/null @@ -1,84 +0,0 @@ -/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) - * Licensed under the MIT License (LICENSE.txt). - * - * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. - * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. - * Thanks to: Seamus Leahy for adding deltaX and deltaY - * - * Version: 3.0.6 - * - * Requires: 1.2.2+ - */ - -(function($) { - -var types = ['DOMMouseScroll', 'mousewheel']; - -if ($.event.fixHooks) { - for ( var i=types.length; i; ) { - $.event.fixHooks[ types[--i] ] = $.event.mouseHooks; - } -} - -$.event.special.mousewheel = { - setup: function() { - if ( this.addEventListener ) { - for ( var i=types.length; i; ) { - this.addEventListener( types[--i], handler, false ); - } - } else { - this.onmousewheel = handler; - } - }, - - teardown: function() { - if ( this.removeEventListener ) { - for ( var i=types.length; i; ) { - this.removeEventListener( types[--i], handler, false ); - } - } else { - this.onmousewheel = null; - } - } -}; - -$.fn.extend({ - mousewheel: function(fn) { - return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); - }, - - unmousewheel: function(fn) { - return this.unbind("mousewheel", fn); - } -}); - - -function handler(event) { - var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; - event = $.event.fix(orgEvent); - event.type = "mousewheel"; - - // Old school scrollwheel delta - if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; } - if ( orgEvent.detail ) { delta = -orgEvent.detail/3; } - - // New school multidimensional scroll (touchpads) deltas - deltaY = delta; - - // Gecko - if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { - deltaY = 0; - deltaX = -1*delta; - } - - // Webkit - if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; } - if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; } - - // Add event and delta to the front of the arguments - args.unshift(event, delta, deltaX, deltaY); - - return ($.event.dispatch || $.event.handle).apply(this, args); -} - -})(jQuery); \ No newline at end of file diff --git a/html/js/lib/development-bundle/external/jshint.js b/html/js/lib/development-bundle/external/jshint.js deleted file mode 100644 index 8f06d9be0..000000000 --- a/html/js/lib/development-bundle/external/jshint.js +++ /dev/null @@ -1,4835 +0,0 @@ -/*! - * JSHint, by JSHint Community. - * - * This file (and this file only) is licensed under the same slightly modified - * MIT license that JSLint is. It stops evil-doers everywhere. - * - * JSHint is a derivative work of JSLint: - * - * Copyright (c) 2002 Douglas Crockford (www.JSLint.com) - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * The Software shall be used for Good, not Evil. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - */ - -/* - JSHINT is a global function. It takes two parameters. - - var myResult = JSHINT(source, option); - - The first parameter is either a string or an array of strings. If it is a - string, it will be split on '\n' or '\r'. If it is an array of strings, it - is assumed that each string represents one line. The source can be a - JavaScript text or a JSON text. - - The second parameter is an optional object of options which control the - operation of JSHINT. Most of the options are booleans: They are all - optional and have a default value of false. One of the options, predef, - can be an array of names, which will be used to declare global variables, - or an object whose keys are used as global names, with a boolean value - that determines if they are assignable. - - If it checks out, JSHINT returns true. Otherwise, it returns false. - - If false, you can inspect JSHINT.errors to find out the problems. - JSHINT.errors is an array of objects containing these members: - - { - line : The line (relative to 1) at which the lint was found - character : The character (relative to 1) at which the lint was found - reason : The problem - evidence : The text line in which the problem occurred - raw : The raw message before the details were inserted - a : The first detail - b : The second detail - c : The third detail - d : The fourth detail - } - - If a fatal error was found, a null will be the last element of the - JSHINT.errors array. - - You can request a data structure which contains JSHint's results. - - var myData = JSHINT.data(); - - It returns a structure with this form: - - { - errors: [ - { - line: NUMBER, - character: NUMBER, - reason: STRING, - evidence: STRING - } - ], - functions: [ - name: STRING, - line: NUMBER, - character: NUMBER, - last: NUMBER, - lastcharacter: NUMBER, - param: [ - STRING - ], - closure: [ - STRING - ], - var: [ - STRING - ], - exception: [ - STRING - ], - outer: [ - STRING - ], - unused: [ - STRING - ], - global: [ - STRING - ], - label: [ - STRING - ] - ], - globals: [ - STRING - ], - member: { - STRING: NUMBER - }, - unused: [ - { - name: STRING, - line: NUMBER - } - ], - implieds: [ - { - name: STRING, - line: NUMBER - } - ], - urls: [ - STRING - ], - json: BOOLEAN - } - - Empty arrays will not be included. - -*/ - -/*jshint - evil: true, nomen: false, onevar: false, regexp: false, strict: true, boss: true, - undef: true, maxlen: 100, indent: 4, quotmark: double, unused: true -*/ - -/*members "\b", "\t", "\n", "\f", "\r", "!=", "!==", "\"", "%", "(begin)", - "(breakage)", "(character)", "(context)", "(error)", "(explicitNewcap)", "(global)", - "(identifier)", "(last)", "(lastcharacter)", "(line)", "(loopage)", "(metrics)", - "(name)", "(onevar)", "(params)", "(scope)", "(statement)", "(verb)", "(tokens)", "(catch)", - "*", "+", "++", "-", "--", "\/", "<", "<=", "==", - "===", ">", ">=", $, $$, $A, $F, $H, $R, $break, $continue, $w, Abstract, Ajax, - __filename, __dirname, ActiveXObject, Array, ArrayBuffer, ArrayBufferView, Audio, - Autocompleter, Asset, Boolean, Builder, Buffer, Browser, Blob, COM, CScript, Canvas, - CustomAnimation, Class, Control, ComplexityCount, Chain, Color, Cookie, Core, DataView, Date, - Debug, Draggable, Draggables, Droppables, Document, DomReady, DOMEvent, DOMReady, DOMParser, - Drag, E, Enumerator, Enumerable, Element, Elements, Error, Effect, EvalError, Event, - Events, FadeAnimation, Field, Flash, Float32Array, Float64Array, Form, - FormField, Frame, FormData, Function, Fx, GetObject, Group, Hash, HotKey, - HTMLElement, HTMLAnchorElement, HTMLBaseElement, HTMLBlockquoteElement, - HTMLBodyElement, HTMLBRElement, HTMLButtonElement, HTMLCanvasElement, HTMLDirectoryElement, - HTMLDivElement, HTMLDListElement, HTMLFieldSetElement, - HTMLFontElement, HTMLFormElement, HTMLFrameElement, HTMLFrameSetElement, - HTMLHeadElement, HTMLHeadingElement, HTMLHRElement, HTMLHtmlElement, - HTMLIFrameElement, HTMLImageElement, HTMLInputElement, HTMLIsIndexElement, - HTMLLabelElement, HTMLLayerElement, HTMLLegendElement, HTMLLIElement, - HTMLLinkElement, HTMLMapElement, HTMLMenuElement, HTMLMetaElement, - HTMLModElement, HTMLObjectElement, HTMLOListElement, HTMLOptGroupElement, - HTMLOptionElement, HTMLParagraphElement, HTMLParamElement, HTMLPreElement, - HTMLQuoteElement, HTMLScriptElement, HTMLSelectElement, HTMLStyleElement, - HtmlTable, HTMLTableCaptionElement, HTMLTableCellElement, HTMLTableColElement, - HTMLTableElement, HTMLTableRowElement, HTMLTableSectionElement, - HTMLTextAreaElement, HTMLTitleElement, HTMLUListElement, HTMLVideoElement, - Iframe, IframeShim, Image, importScripts, Int16Array, Int32Array, Int8Array, - Insertion, InputValidator, JSON, Keyboard, Locale, LN10, LN2, LOG10E, LOG2E, - MAX_VALUE, MIN_VALUE, Map, Mask, Math, MenuItem, MessageChannel, MessageEvent, MessagePort, - MoveAnimation, MooTools, MutationObserver, NaN, Native, NEGATIVE_INFINITY, Node, NodeFilter, - Number, Object, ObjectRange, - Option, Options, OverText, PI, POSITIVE_INFINITY, PeriodicalExecuter, Point, Position, Prototype, - RangeError, Rectangle, ReferenceError, RegExp, ResizeAnimation, Request, RotateAnimation, Set, - SQRT1_2, SQRT2, ScrollBar, ScriptEngine, ScriptEngineBuildVersion, - ScriptEngineMajorVersion, ScriptEngineMinorVersion, Scriptaculous, Scroller, - Slick, Slider, Selector, SharedWorker, String, Style, SyntaxError, Sortable, Sortables, - SortableObserver, Sound, Spinner, System, Swiff, Text, TextArea, Template, - Timer, Tips, Type, TypeError, Toggle, Try, "use strict", unescape, URI, URIError, URL, - VBArray, WeakMap, WSH, WScript, XDomainRequest, Web, Window, XMLDOM, XMLHttpRequest, XMLSerializer, - XPathEvaluator, XPathException, XPathExpression, XPathNamespace, XPathNSResolver, XPathResult, - "\\", a, abs, addEventListener, address, alert, apply, applicationCache, arguments, arity, - asi, atob, b, basic, basicToken, bitwise, blacklist, block, blur, boolOptions, boss, - browser, btoa, c, call, callee, caller, camelcase, cases, charAt, charCodeAt, character, - clearInterval, clearTimeout, close, closed, closure, comment, complexityCount, condition, - confirm, console, constructor, content, couch, create, css, curly, d, data, datalist, dd, debug, - decodeURI, decodeURIComponent, defaultStatus, defineClass, deserialize, devel, document, - dojo, dijit, dojox, define, else, emit, encodeURI, encodeURIComponent, elem, - eqeq, eqeqeq, eqnull, errors, es5, escape, esnext, eval, event, evidence, evil, - ex, exception, exec, exps, expr, exports, FileReader, first, floor, focus, forEach, - forin, fragment, frames, from, fromCharCode, fud, funcscope, funct, function, functions, - g, gc, getComputedStyle, getRow, getter, getterToken, GLOBAL, global, globals, globalstrict, - hasOwnProperty, help, history, i, id, identifier, immed, implieds, importPackage, include, - indent, indexOf, init, ins, internals, instanceOf, isAlpha, isApplicationRunning, isArray, - isDigit, isFinite, isNaN, iterator, java, join, jshint, - JSHINT, json, jquery, jQuery, keys, label, labelled, last, lastcharacter, lastsemic, laxbreak, - laxcomma, latedef, lbp, led, left, length, line, load, loadClass, localStorage, location, - log, loopfunc, m, match, max, maxcomplexity, maxdepth, maxerr, maxlen, maxstatements, maxparams, - member, message, meta, module, moveBy, moveTo, mootools, multistr, name, navigator, new, newcap, - nestedBlockDepth, noarg, node, noempty, nomen, nonew, nonstandard, nud, onbeforeunload, onblur, - onerror, onevar, onecase, onfocus, onload, onresize, onunload, open, openDatabase, openURL, - opener, opera, options, outer, param, parent, parseFloat, parseInt, passfail, plusplus, - postMessage, pop, predef, print, process, prompt, proto, prototype, prototypejs, provides, push, - quit, quotmark, range, raw, reach, reason, regexp, readFile, readUrl, regexdash, - removeEventListener, replace, report, require, reserved, resizeBy, resizeTo, resolvePath, - resumeUpdates, respond, rhino, right, runCommand, scroll, scope, screen, scripturl, scrollBy, - scrollTo, scrollbar, search, seal, self, send, serialize, sessionStorage, setInterval, setTimeout, - setter, setterToken, shift, slice, smarttabs, sort, spawn, split, statement, statementCount, stack, - status, start, strict, sub, substr, supernew, shadow, supplant, sum, sync, test, toLowerCase, - toString, toUpperCase, toint32, token, tokens, top, trailing, type, typeOf, Uint16Array, - Uint32Array, Uint8Array, undef, undefs, unused, urls, validthis, value, valueOf, var, vars, - version, verifyMaxParametersPerFunction, verifyMaxStatementsPerFunction, - verifyMaxComplexityPerFunction, verifyMaxNestedBlockDepthPerFunction, WebSocket, withstmt, white, - window, windows, Worker, worker, wsh, yui, YUI, Y, YUI_config*/ - -/*global exports: false */ - -// We build the application inside a function so that we produce only a single -// global variable. That function will be invoked immediately, and its return -// value is the JSHINT function itself. - -var JSHINT = (function () { - "use strict"; - - var anonname, // The guessed name for anonymous functions. - -// These are operators that should not be used with the ! operator. - - bang = { - "<" : true, - "<=" : true, - "==" : true, - "===": true, - "!==": true, - "!=" : true, - ">" : true, - ">=" : true, - "+" : true, - "-" : true, - "*" : true, - "/" : true, - "%" : true - }, - - // These are the JSHint boolean options. - boolOptions = { - asi : true, // if automatic semicolon insertion should be tolerated - bitwise : true, // if bitwise operators should not be allowed - boss : true, // if advanced usage of assignments should be allowed - browser : true, // if the standard browser globals should be predefined - camelcase : true, // if identifiers should be required in camel case - couch : true, // if CouchDB globals should be predefined - curly : true, // if curly braces around all blocks should be required - debug : true, // if debugger statements should be allowed - devel : true, // if logging globals should be predefined (console, - // alert, etc.) - dojo : true, // if Dojo Toolkit globals should be predefined - eqeqeq : true, // if === should be required - eqnull : true, // if == null comparisons should be tolerated - es5 : true, // if ES5 syntax should be allowed - esnext : true, // if es.next specific syntax should be allowed - evil : true, // if eval should be allowed - expr : true, // if ExpressionStatement should be allowed as Programs - forin : true, // if for in statements must filter - funcscope : true, // if only function scope should be used for scope tests - globalstrict: true, // if global "use strict"; should be allowed (also - // enables 'strict') - immed : true, // if immediate invocations must be wrapped in parens - iterator : true, // if the `__iterator__` property should be allowed - jquery : true, // if jQuery globals should be predefined - lastsemic : true, // if semicolons may be ommitted for the trailing - // statements inside of a one-line blocks. - latedef : true, // if the use before definition should not be tolerated - laxbreak : true, // if line breaks should not be checked - laxcomma : true, // if line breaks should not be checked around commas - loopfunc : true, // if functions should be allowed to be defined within - // loops - mootools : true, // if MooTools globals should be predefined - multistr : true, // allow multiline strings - newcap : true, // if constructor names must be capitalized - noarg : true, // if arguments.caller and arguments.callee should be - // disallowed - node : true, // if the Node.js environment globals should be - // predefined - noempty : true, // if empty blocks should be disallowed - nonew : true, // if using `new` for side-effects should be disallowed - nonstandard : true, // if non-standard (but widely adopted) globals should - // be predefined - nomen : true, // if names should be checked - onevar : true, // if only one var statement per function should be - // allowed - onecase : true, // if one case switch statements should be allowed - passfail : true, // if the scan should stop on first error - plusplus : true, // if increment/decrement should not be allowed - proto : true, // if the `__proto__` property should be allowed - prototypejs : true, // if Prototype and Scriptaculous globals should be - // predefined - regexdash : true, // if unescaped first/last dash (-) inside brackets - // should be tolerated - regexp : true, // if the . should not be allowed in regexp literals - rhino : true, // if the Rhino environment globals should be predefined - undef : true, // if variables should be declared before used - unused : true, // if variables should be always used - scripturl : true, // if script-targeted URLs should be tolerated - shadow : true, // if variable shadowing should be tolerated - smarttabs : true, // if smarttabs should be tolerated - // (http://www.emacswiki.org/emacs/SmartTabs) - strict : true, // require the "use strict"; pragma - sub : true, // if all forms of subscript notation are tolerated - supernew : true, // if `new function () { ... };` and `new Object;` - // should be tolerated - trailing : true, // if trailing whitespace rules apply - validthis : true, // if 'this' inside a non-constructor function is valid. - // This is a function scoped option only. - withstmt : true, // if with statements should be allowed - white : true, // if strict whitespace rules apply - worker : true, // if Web Worker script symbols should be allowed - wsh : true, // if the Windows Scripting Host environment globals - // should be predefined - yui : true // YUI variables should be predefined - }, - - // These are the JSHint options that can take any value - // (we use this object to detect invalid options) - valOptions = { - maxlen : false, - indent : false, - maxerr : false, - predef : false, - quotmark : false, //'single'|'double'|true - scope : false, - maxstatements: false, // {int} max statements per function - maxdepth : false, // {int} max nested block depth per function - maxparams : false, // {int} max params per function - maxcomplexity: false // {int} max cyclomatic complexity per function - }, - - // These are JSHint boolean options which are shared with JSLint - // where the definition in JSHint is opposite JSLint - invertedOptions = { - bitwise : true, - forin : true, - newcap : true, - nomen : true, - plusplus : true, - regexp : true, - undef : true, - white : true, - - // Inverted and renamed, use JSHint name here - eqeqeq : true, - onevar : true - }, - - // These are JSHint boolean options which are shared with JSLint - // where the name has been changed but the effect is unchanged - renamedOptions = { - eqeq : "eqeqeq", - vars : "onevar", - windows : "wsh" - }, - - - // browser contains a set of global names which are commonly provided by a - // web browser environment. - browser = { - ArrayBuffer : false, - ArrayBufferView : false, - Audio : false, - Blob : false, - addEventListener : false, - applicationCache : false, - atob : false, - blur : false, - btoa : false, - clearInterval : false, - clearTimeout : false, - close : false, - closed : false, - DataView : false, - DOMParser : false, - defaultStatus : false, - document : false, - event : false, - FileReader : false, - Float32Array : false, - Float64Array : false, - FormData : false, - focus : false, - frames : false, - getComputedStyle : false, - HTMLElement : false, - HTMLAnchorElement : false, - HTMLBaseElement : false, - HTMLBlockquoteElement : false, - HTMLBodyElement : false, - HTMLBRElement : false, - HTMLButtonElement : false, - HTMLCanvasElement : false, - HTMLDirectoryElement : false, - HTMLDivElement : false, - HTMLDListElement : false, - HTMLFieldSetElement : false, - HTMLFontElement : false, - HTMLFormElement : false, - HTMLFrameElement : false, - HTMLFrameSetElement : false, - HTMLHeadElement : false, - HTMLHeadingElement : false, - HTMLHRElement : false, - HTMLHtmlElement : false, - HTMLIFrameElement : false, - HTMLImageElement : false, - HTMLInputElement : false, - HTMLIsIndexElement : false, - HTMLLabelElement : false, - HTMLLayerElement : false, - HTMLLegendElement : false, - HTMLLIElement : false, - HTMLLinkElement : false, - HTMLMapElement : false, - HTMLMenuElement : false, - HTMLMetaElement : false, - HTMLModElement : false, - HTMLObjectElement : false, - HTMLOListElement : false, - HTMLOptGroupElement : false, - HTMLOptionElement : false, - HTMLParagraphElement : false, - HTMLParamElement : false, - HTMLPreElement : false, - HTMLQuoteElement : false, - HTMLScriptElement : false, - HTMLSelectElement : false, - HTMLStyleElement : false, - HTMLTableCaptionElement : false, - HTMLTableCellElement : false, - HTMLTableColElement : false, - HTMLTableElement : false, - HTMLTableRowElement : false, - HTMLTableSectionElement : false, - HTMLTextAreaElement : false, - HTMLTitleElement : false, - HTMLUListElement : false, - HTMLVideoElement : false, - history : false, - Int16Array : false, - Int32Array : false, - Int8Array : false, - Image : false, - length : false, - localStorage : false, - location : false, - MessageChannel : false, - MessageEvent : false, - MessagePort : false, - moveBy : false, - moveTo : false, - MutationObserver : false, - name : false, - Node : false, - NodeFilter : false, - navigator : false, - onbeforeunload : true, - onblur : true, - onerror : true, - onfocus : true, - onload : true, - onresize : true, - onunload : true, - open : false, - openDatabase : false, - opener : false, - Option : false, - parent : false, - print : false, - removeEventListener : false, - resizeBy : false, - resizeTo : false, - screen : false, - scroll : false, - scrollBy : false, - scrollTo : false, - sessionStorage : false, - setInterval : false, - setTimeout : false, - SharedWorker : false, - status : false, - top : false, - Uint16Array : false, - Uint32Array : false, - Uint8Array : false, - WebSocket : false, - window : false, - Worker : false, - XMLHttpRequest : false, - XMLSerializer : false, - XPathEvaluator : false, - XPathException : false, - XPathExpression : false, - XPathNamespace : false, - XPathNSResolver : false, - XPathResult : false - }, - - couch = { - "require" : false, - respond : false, - getRow : false, - emit : false, - send : false, - start : false, - sum : false, - log : false, - exports : false, - module : false, - provides : false - }, - - declared, // Globals that were declared using /*global ... */ syntax. - - devel = { - alert : false, - confirm : false, - console : false, - Debug : false, - opera : false, - prompt : false - }, - - dojo = { - dojo : false, - dijit : false, - dojox : false, - define : false, - "require" : false - }, - - funct, // The current function - - functionicity = [ - "closure", "exception", "global", "label", - "outer", "unused", "var" - ], - - functions, // All of the functions - - global, // The global scope - implied, // Implied globals - inblock, - indent, - jsonmode, - - jquery = { - "$" : false, - jQuery : false - }, - - lines, - lookahead, - member, - membersOnly, - - mootools = { - "$" : false, - "$$" : false, - Asset : false, - Browser : false, - Chain : false, - Class : false, - Color : false, - Cookie : false, - Core : false, - Document : false, - DomReady : false, - DOMEvent : false, - DOMReady : false, - Drag : false, - Element : false, - Elements : false, - Event : false, - Events : false, - Fx : false, - Group : false, - Hash : false, - HtmlTable : false, - Iframe : false, - IframeShim : false, - InputValidator : false, - instanceOf : false, - Keyboard : false, - Locale : false, - Mask : false, - MooTools : false, - Native : false, - Options : false, - OverText : false, - Request : false, - Scroller : false, - Slick : false, - Slider : false, - Sortables : false, - Spinner : false, - Swiff : false, - Tips : false, - Type : false, - typeOf : false, - URI : false, - Window : false - }, - - nexttoken, - - node = { - __filename : false, - __dirname : false, - Buffer : false, - console : false, - exports : true, // In Node it is ok to exports = module.exports = foo(); - GLOBAL : false, - global : false, - module : false, - process : false, - require : false, - setTimeout : false, - clearTimeout : false, - setInterval : false, - clearInterval : false - }, - - noreach, - option, - predefined, // Global variables defined by option - prereg, - prevtoken, - - prototypejs = { - "$" : false, - "$$" : false, - "$A" : false, - "$F" : false, - "$H" : false, - "$R" : false, - "$break" : false, - "$continue" : false, - "$w" : false, - Abstract : false, - Ajax : false, - Class : false, - Enumerable : false, - Element : false, - Event : false, - Field : false, - Form : false, - Hash : false, - Insertion : false, - ObjectRange : false, - PeriodicalExecuter: false, - Position : false, - Prototype : false, - Selector : false, - Template : false, - Toggle : false, - Try : false, - Autocompleter : false, - Builder : false, - Control : false, - Draggable : false, - Draggables : false, - Droppables : false, - Effect : false, - Sortable : false, - SortableObserver : false, - Sound : false, - Scriptaculous : false - }, - - quotmark, - - rhino = { - defineClass : false, - deserialize : false, - gc : false, - help : false, - importPackage: false, - "java" : false, - load : false, - loadClass : false, - print : false, - quit : false, - readFile : false, - readUrl : false, - runCommand : false, - seal : false, - serialize : false, - spawn : false, - sync : false, - toint32 : false, - version : false - }, - - scope, // The current scope - stack, - - // standard contains the global names that are provided by the - // ECMAScript standard. - standard = { - Array : false, - Boolean : false, - Date : false, - decodeURI : false, - decodeURIComponent : false, - encodeURI : false, - encodeURIComponent : false, - Error : false, - "eval" : false, - EvalError : false, - Function : false, - hasOwnProperty : false, - isFinite : false, - isNaN : false, - JSON : false, - Map : false, - Math : false, - NaN : false, - Number : false, - Object : false, - parseInt : false, - parseFloat : false, - RangeError : false, - ReferenceError : false, - RegExp : false, - Set : false, - String : false, - SyntaxError : false, - TypeError : false, - URIError : false, - WeakMap : false - }, - - // widely adopted global names that are not part of ECMAScript standard - nonstandard = { - escape : false, - unescape : false - }, - - directive, - syntax = {}, - tab, - token, - unuseds, - urls, - useESNextSyntax, - warnings, - - worker = { - importScripts : true, - postMessage : true, - self : true - }, - - wsh = { - ActiveXObject : true, - Enumerator : true, - GetObject : true, - ScriptEngine : true, - ScriptEngineBuildVersion : true, - ScriptEngineMajorVersion : true, - ScriptEngineMinorVersion : true, - VBArray : true, - WSH : true, - WScript : true, - XDomainRequest : true - }, - - yui = { - YUI : false, - Y : false, - YUI_config : false - }; - // Regular expressions. Some of these are stupidly long. - var ax, cx, tx, nx, nxg, lx, ix, jx, ft; - (function () { - /*jshint maxlen:300 */ - - // unsafe comment or string - ax = /@cc|<\/?|script|\]\s*\]|<\s*!|</i; - - // unsafe characters that are silently deleted by one or more browsers - cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/; - - // token - tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/=(?!(\S*\/[gim]?))|\/(\*(jshint|jslint|members?|global)?|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/; - - // characters in strings that need escapement - nx = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/; - nxg = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; - - // star slash - lx = /\*\//; - - // identifier - ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/; - - // javascript url - jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i; - - // catches /* falls through */ comments - ft = /^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/; - }()); - - function F() {} // Used by Object.create - - function is_own(object, name) { - // The object.hasOwnProperty method fails when the property under consideration - // is named 'hasOwnProperty'. So we have to use this more convoluted form. - return Object.prototype.hasOwnProperty.call(object, name); - } - - function checkOption(name, t) { - if (valOptions[name] === undefined && boolOptions[name] === undefined) { - warning("Bad option: '" + name + "'.", t); - } - } - - function isString(obj) { - return Object.prototype.toString.call(obj) === "[object String]"; - } - - // Provide critical ES5 functions to ES3. - - if (typeof Array.isArray !== "function") { - Array.isArray = function (o) { - return Object.prototype.toString.apply(o) === "[object Array]"; - }; - } - - if (!Array.prototype.forEach) { - Array.prototype.forEach = function (fn, scope) { - var len = this.length; - - for (var i = 0; i < len; i++) { - fn.call(scope || this, this[i], i, this); - } - }; - } - - if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { - if (this === null || this === undefined) { - throw new TypeError(); - } - - var t = new Object(this); - var len = t.length >>> 0; - - if (len === 0) { - return -1; - } - - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n != n) { // shortcut for verifying if it's NaN - n = 0; - } else if (n !== 0 && n != Infinity && n != -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - - if (n >= len) { - return -1; - } - - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - - return -1; - }; - } - - if (typeof Object.create !== "function") { - Object.create = function (o) { - F.prototype = o; - return new F(); - }; - } - - if (typeof Object.keys !== "function") { - Object.keys = function (o) { - var a = [], k; - for (k in o) { - if (is_own(o, k)) { - a.push(k); - } - } - return a; - }; - } - - // Non standard methods - - function isAlpha(str) { - return (str >= "a" && str <= "z\uffff") || - (str >= "A" && str <= "Z\uffff"); - } - - function isDigit(str) { - return (str >= "0" && str <= "9"); - } - - function isIdentifier(token, value) { - if (!token) - return false; - - if (!token.identifier || token.value !== value) - return false; - - return true; - } - - function supplant(str, data) { - return str.replace(/\{([^{}]*)\}/g, function (a, b) { - var r = data[b]; - return typeof r === "string" || typeof r === "number" ? r : a; - }); - } - - function combine(t, o) { - var n; - for (n in o) { - if (is_own(o, n) && !is_own(JSHINT.blacklist, n)) { - t[n] = o[n]; - } - } - } - - function updatePredefined() { - Object.keys(JSHINT.blacklist).forEach(function (key) { - delete predefined[key]; - }); - } - - function assume() { - if (option.couch) { - combine(predefined, couch); - } - - if (option.rhino) { - combine(predefined, rhino); - } - - if (option.prototypejs) { - combine(predefined, prototypejs); - } - - if (option.node) { - combine(predefined, node); - option.globalstrict = true; - } - - if (option.devel) { - combine(predefined, devel); - } - - if (option.dojo) { - combine(predefined, dojo); - } - - if (option.browser) { - combine(predefined, browser); - } - - if (option.nonstandard) { - combine(predefined, nonstandard); - } - - if (option.jquery) { - combine(predefined, jquery); - } - - if (option.mootools) { - combine(predefined, mootools); - } - - if (option.worker) { - combine(predefined, worker); - } - - if (option.wsh) { - combine(predefined, wsh); - } - - if (option.esnext) { - useESNextSyntax(); - } - - if (option.globalstrict && option.strict !== false) { - option.strict = true; - } - - if (option.yui) { - combine(predefined, yui); - } - } - - - // Produce an error warning. - function quit(message, line, chr) { - var percentage = Math.floor((line / lines.length) * 100); - - throw { - name: "JSHintError", - line: line, - character: chr, - message: message + " (" + percentage + "% scanned).", - raw: message - }; - } - - function isundef(scope, m, t, a) { - return JSHINT.undefs.push([scope, m, t, a]); - } - - function warning(m, t, a, b, c, d) { - var ch, l, w; - t = t || nexttoken; - if (t.id === "(end)") { // `~ - t = token; - } - l = t.line || 0; - ch = t.from || 0; - w = { - id: "(error)", - raw: m, - evidence: lines[l - 1] || "", - line: l, - character: ch, - scope: JSHINT.scope, - a: a, - b: b, - c: c, - d: d - }; - w.reason = supplant(m, w); - JSHINT.errors.push(w); - if (option.passfail) { - quit("Stopping. ", l, ch); - } - warnings += 1; - if (warnings >= option.maxerr) { - quit("Too many errors.", l, ch); - } - return w; - } - - function warningAt(m, l, ch, a, b, c, d) { - return warning(m, { - line: l, - from: ch - }, a, b, c, d); - } - - function error(m, t, a, b, c, d) { - warning(m, t, a, b, c, d); - } - - function errorAt(m, l, ch, a, b, c, d) { - return error(m, { - line: l, - from: ch - }, a, b, c, d); - } - - // Tracking of "internal" scripts, like eval containing a static string - function addInternalSrc(elem, src) { - var i; - i = { - id: "(internal)", - elem: elem, - value: src - }; - JSHINT.internals.push(i); - return i; - } - - -// lexical analysis and token construction - - var lex = (function lex() { - var character, from, line, s; - -// Private lex methods - - function nextLine() { - var at, - match, - tw; // trailing whitespace check - - if (line >= lines.length) - return false; - - character = 1; - s = lines[line]; - line += 1; - - // If smarttabs option is used check for spaces followed by tabs only. - // Otherwise check for any occurence of mixed tabs and spaces. - // Tabs and one space followed by block comment is allowed. - if (option.smarttabs) { - // negative look-behind for "//" - match = s.match(/(\/\/)? \t/); - at = match && !match[1] ? 0 : -1; - } else { - at = s.search(/ \t|\t [^\*]/); - } - - if (at >= 0) - warningAt("Mixed spaces and tabs.", line, at + 1); - - s = s.replace(/\t/g, tab); - at = s.search(cx); - - if (at >= 0) - warningAt("Unsafe character.", line, at); - - if (option.maxlen && option.maxlen < s.length) - warningAt("Line too long.", line, s.length); - - // Check for trailing whitespaces - tw = option.trailing && s.match(/^(.*?)\s+$/); - if (tw && !/^\s+$/.test(s)) { - warningAt("Trailing whitespace.", line, tw[1].length + 1); - } - return true; - } - -// Produce a token object. The token inherits from a syntax symbol. - - function it(type, value) { - var i, t; - - function checkName(name) { - if (!option.proto && name === "__proto__") { - warningAt("The '{a}' property is deprecated.", line, from, name); - return; - } - - if (!option.iterator && name === "__iterator__") { - warningAt("'{a}' is only available in JavaScript 1.7.", line, from, name); - return; - } - - // Check for dangling underscores unless we're in Node - // environment and this identifier represents built-in - // Node globals with underscores. - - var hasDangling = /^(_+.*|.*_+)$/.test(name); - - if (option.nomen && hasDangling && name !== "_") { - if (option.node && token.id !== "." && /^(__dirname|__filename)$/.test(name)) - return; - - warningAt("Unexpected {a} in '{b}'.", line, from, "dangling '_'", name); - return; - } - - // Check for non-camelcase names. Names like MY_VAR and - // _myVar are okay though. - - if (option.camelcase) { - if (name.replace(/^_+/, "").indexOf("_") > -1 && !name.match(/^[A-Z0-9_]*$/)) { - warningAt("Identifier '{a}' is not in camel case.", line, from, value); - } - } - } - - if (type === "(color)" || type === "(range)") { - t = {type: type}; - } else if (type === "(punctuator)" || - (type === "(identifier)" && is_own(syntax, value))) { - t = syntax[value] || syntax["(error)"]; - } else { - t = syntax[type]; - } - - t = Object.create(t); - - if (type === "(string)" || type === "(range)") { - if (!option.scripturl && jx.test(value)) { - warningAt("Script URL.", line, from); - } - } - - if (type === "(identifier)") { - t.identifier = true; - checkName(value); - } - - t.value = value; - t.line = line; - t.character = character; - t.from = from; - i = t.id; - if (i !== "(endline)") { - prereg = i && - (("(,=:[!&|?{};".indexOf(i.charAt(i.length - 1)) >= 0) || - i === "return" || - i === "case"); - } - return t; - } - - // Public lex methods - return { - init: function (source) { - if (typeof source === "string") { - lines = source - .replace(/\r\n/g, "\n") - .replace(/\r/g, "\n") - .split("\n"); - } else { - lines = source; - } - - // If the first line is a shebang (#!), make it a blank and move on. - // Shebangs are used by Node scripts. - if (lines[0] && lines[0].substr(0, 2) === "#!") - lines[0] = ""; - - line = 0; - nextLine(); - from = 1; - }, - - range: function (begin, end) { - var c, value = ""; - from = character; - if (s.charAt(0) !== begin) { - errorAt("Expected '{a}' and instead saw '{b}'.", - line, character, begin, s.charAt(0)); - } - for (;;) { - s = s.slice(1); - character += 1; - c = s.charAt(0); - switch (c) { - case "": - errorAt("Missing '{a}'.", line, character, c); - break; - case end: - s = s.slice(1); - character += 1; - return it("(range)", value); - case "\\": - warningAt("Unexpected '{a}'.", line, character, c); - } - value += c; - } - - }, - - - // token -- this is called by advance to get the next token - token: function () { - var b, c, captures, d, depth, high, i, l, low, q, t, isLiteral, isInRange, n; - - function match(x) { - var r = x.exec(s), r1; - - if (r) { - l = r[0].length; - r1 = r[1]; - c = r1.charAt(0); - s = s.substr(l); - from = character + l - r1.length; - character += l; - return r1; - } - } - - function string(x) { - var c, j, r = "", allowNewLine = false; - - if (jsonmode && x !== "\"") { - warningAt("Strings must use doublequote.", - line, character); - } - - if (option.quotmark) { - if (option.quotmark === "single" && x !== "'") { - warningAt("Strings must use singlequote.", - line, character); - } else if (option.quotmark === "double" && x !== "\"") { - warningAt("Strings must use doublequote.", - line, character); - } else if (option.quotmark === true) { - quotmark = quotmark || x; - if (quotmark !== x) { - warningAt("Mixed double and single quotes.", - line, character); - } - } - } - - function esc(n) { - var i = parseInt(s.substr(j + 1, n), 16); - j += n; - if (i >= 32 && i <= 126 && - i !== 34 && i !== 92 && i !== 39) { - warningAt("Unnecessary escapement.", line, character); - } - character += n; - c = String.fromCharCode(i); - } - - j = 0; - -unclosedString: - for (;;) { - while (j >= s.length) { - j = 0; - - var cl = line, cf = from; - if (!nextLine()) { - errorAt("Unclosed string.", cl, cf); - break unclosedString; - } - - if (allowNewLine) { - allowNewLine = false; - } else { - warningAt("Unclosed string.", cl, cf); - } - } - - c = s.charAt(j); - if (c === x) { - character += 1; - s = s.substr(j + 1); - return it("(string)", r, x); - } - - if (c < " ") { - if (c === "\n" || c === "\r") { - break; - } - warningAt("Control character in string: {a}.", - line, character + j, s.slice(0, j)); - } else if (c === "\\") { - j += 1; - character += 1; - c = s.charAt(j); - n = s.charAt(j + 1); - switch (c) { - case "\\": - case "\"": - case "/": - break; - case "\'": - if (jsonmode) { - warningAt("Avoid \\'.", line, character); - } - break; - case "b": - c = "\b"; - break; - case "f": - c = "\f"; - break; - case "n": - c = "\n"; - break; - case "r": - c = "\r"; - break; - case "t": - c = "\t"; - break; - case "0": - c = "\0"; - // Octal literals fail in strict mode - // check if the number is between 00 and 07 - // where 'n' is the token next to 'c' - if (n >= 0 && n <= 7 && directive["use strict"]) { - warningAt( - "Octal literals are not allowed in strict mode.", - line, character); - } - break; - case "u": - esc(4); - break; - case "v": - if (jsonmode) { - warningAt("Avoid \\v.", line, character); - } - c = "\v"; - break; - case "x": - if (jsonmode) { - warningAt("Avoid \\x-.", line, character); - } - esc(2); - break; - case "": - // last character is escape character - // always allow new line if escaped, but show - // warning if option is not set - allowNewLine = true; - if (option.multistr) { - if (jsonmode) { - warningAt("Avoid EOL escapement.", line, character); - } - c = ""; - character -= 1; - break; - } - warningAt("Bad escapement of EOL. Use option multistr if needed.", - line, character); - break; - case "!": - if (s.charAt(j - 2) === "<") - break; - /*falls through*/ - default: - warningAt("Bad escapement.", line, character); - } - } - r += c; - character += 1; - j += 1; - } - } - - for (;;) { - if (!s) { - return it(nextLine() ? "(endline)" : "(end)", ""); - } - - t = match(tx); - - if (!t) { - t = ""; - c = ""; - while (s && s < "!") { - s = s.substr(1); - } - if (s) { - errorAt("Unexpected '{a}'.", line, character, s.substr(0, 1)); - s = ""; - } - } else { - - // identifier - - if (isAlpha(c) || c === "_" || c === "$") { - return it("(identifier)", t); - } - - // number - - if (isDigit(c)) { - if (!isFinite(Number(t))) { - warningAt("Bad number '{a}'.", - line, character, t); - } - if (isAlpha(s.substr(0, 1))) { - warningAt("Missing space after '{a}'.", - line, character, t); - } - if (c === "0") { - d = t.substr(1, 1); - if (isDigit(d)) { - if (token.id !== ".") { - warningAt("Don't use extra leading zeros '{a}'.", - line, character, t); - } - } else if (jsonmode && (d === "x" || d === "X")) { - warningAt("Avoid 0x-. '{a}'.", - line, character, t); - } - } - if (t.substr(t.length - 1) === ".") { - warningAt( -"A trailing decimal point can be confused with a dot '{a}'.", line, character, t); - } - return it("(number)", t); - } - switch (t) { - - // string - - case "\"": - case "'": - return string(t); - - // // comment - - case "//": - s = ""; - token.comment = true; - break; - - // /* comment - - case "/*": - for (;;) { - i = s.search(lx); - if (i >= 0) { - break; - } - if (!nextLine()) { - errorAt("Unclosed comment.", line, character); - } - } - s = s.substr(i + 2); - token.comment = true; - break; - - // /*members /*jshint /*global - - case "/*members": - case "/*member": - case "/*jshint": - case "/*jslint": - case "/*global": - case "*/": - return { - value: t, - type: "special", - line: line, - character: character, - from: from - }; - - case "": - break; - // / - case "/": - if (s.charAt(0) === "=") { - errorAt("A regular expression literal can be confused with '/='.", - line, from); - } - - if (prereg) { - depth = 0; - captures = 0; - l = 0; - for (;;) { - b = true; - c = s.charAt(l); - l += 1; - switch (c) { - case "": - errorAt("Unclosed regular expression.", line, from); - return quit("Stopping.", line, from); - case "/": - if (depth > 0) { - warningAt("{a} unterminated regular expression " + - "group(s).", line, from + l, depth); - } - c = s.substr(0, l - 1); - q = { - g: true, - i: true, - m: true - }; - while (q[s.charAt(l)] === true) { - q[s.charAt(l)] = false; - l += 1; - } - character += l; - s = s.substr(l); - q = s.charAt(0); - if (q === "/" || q === "*") { - errorAt("Confusing regular expression.", - line, from); - } - return it("(regexp)", c); - case "\\": - c = s.charAt(l); - if (c < " ") { - warningAt( -"Unexpected control character in regular expression.", line, from + l); - } else if (c === "<") { - warningAt( -"Unexpected escaped character '{a}' in regular expression.", line, from + l, c); - } - l += 1; - break; - case "(": - depth += 1; - b = false; - if (s.charAt(l) === "?") { - l += 1; - switch (s.charAt(l)) { - case ":": - case "=": - case "!": - l += 1; - break; - default: - warningAt( -"Expected '{a}' and instead saw '{b}'.", line, from + l, ":", s.charAt(l)); - } - } else { - captures += 1; - } - break; - case "|": - b = false; - break; - case ")": - if (depth === 0) { - warningAt("Unescaped '{a}'.", - line, from + l, ")"); - } else { - depth -= 1; - } - break; - case " ": - q = 1; - while (s.charAt(l) === " ") { - l += 1; - q += 1; - } - if (q > 1) { - warningAt( -"Spaces are hard to count. Use {{a}}.", line, from + l, q); - } - break; - case "[": - c = s.charAt(l); - if (c === "^") { - l += 1; - if (s.charAt(l) === "]") { - errorAt("Unescaped '{a}'.", - line, from + l, "^"); - } - } - if (c === "]") { - warningAt("Empty class.", line, - from + l - 1); - } - isLiteral = false; - isInRange = false; -klass: - do { - c = s.charAt(l); - l += 1; - switch (c) { - case "[": - case "^": - warningAt("Unescaped '{a}'.", - line, from + l, c); - if (isInRange) { - isInRange = false; - } else { - isLiteral = true; - } - break; - case "-": - if (isLiteral && !isInRange) { - isLiteral = false; - isInRange = true; - } else if (isInRange) { - isInRange = false; - } else if (s.charAt(l) === "]") { - isInRange = true; - } else { - if (option.regexdash !== (l === 2 || (l === 3 && - s.charAt(1) === "^"))) { - warningAt("Unescaped '{a}'.", - line, from + l - 1, "-"); - } - isLiteral = true; - } - break; - case "]": - if (isInRange && !option.regexdash) { - warningAt("Unescaped '{a}'.", - line, from + l - 1, "-"); - } - break klass; - case "\\": - c = s.charAt(l); - if (c < " ") { - warningAt( -"Unexpected control character in regular expression.", line, from + l); - } else if (c === "<") { - warningAt( -"Unexpected escaped character '{a}' in regular expression.", line, from + l, c); - } - l += 1; - - // \w, \s and \d are never part of a character range - if (/[wsd]/i.test(c)) { - if (isInRange) { - warningAt("Unescaped '{a}'.", - line, from + l, "-"); - isInRange = false; - } - isLiteral = false; - } else if (isInRange) { - isInRange = false; - } else { - isLiteral = true; - } - break; - case "/": - warningAt("Unescaped '{a}'.", - line, from + l - 1, "/"); - - if (isInRange) { - isInRange = false; - } else { - isLiteral = true; - } - break; - case "<": - if (isInRange) { - isInRange = false; - } else { - isLiteral = true; - } - break; - default: - if (isInRange) { - isInRange = false; - } else { - isLiteral = true; - } - } - } while (c); - break; - case ".": - if (option.regexp) { - warningAt("Insecure '{a}'.", line, - from + l, c); - } - break; - case "]": - case "?": - case "{": - case "}": - case "+": - case "*": - warningAt("Unescaped '{a}'.", line, - from + l, c); - } - if (b) { - switch (s.charAt(l)) { - case "?": - case "+": - case "*": - l += 1; - if (s.charAt(l) === "?") { - l += 1; - } - break; - case "{": - l += 1; - c = s.charAt(l); - if (c < "0" || c > "9") { - warningAt( -"Expected a number and instead saw '{a}'.", line, from + l, c); - break; // No reason to continue checking numbers. - } - l += 1; - low = +c; - for (;;) { - c = s.charAt(l); - if (c < "0" || c > "9") { - break; - } - l += 1; - low = +c + (low * 10); - } - high = low; - if (c === ",") { - l += 1; - high = Infinity; - c = s.charAt(l); - if (c >= "0" && c <= "9") { - l += 1; - high = +c; - for (;;) { - c = s.charAt(l); - if (c < "0" || c > "9") { - break; - } - l += 1; - high = +c + (high * 10); - } - } - } - if (s.charAt(l) !== "}") { - warningAt( -"Expected '{a}' and instead saw '{b}'.", line, from + l, "}", c); - } else { - l += 1; - } - if (s.charAt(l) === "?") { - l += 1; - } - if (low > high) { - warningAt( -"'{a}' should not be greater than '{b}'.", line, from + l, low, high); - } - } - } - } - c = s.substr(0, l - 1); - character += l; - s = s.substr(l); - return it("(regexp)", c); - } - return it("(punctuator)", t); - - // punctuator - - case "#": - return it("(punctuator)", t); - default: - return it("(punctuator)", t); - } - } - } - } - }; - }()); - - - function addlabel(t, type, token) { - if (t === "hasOwnProperty") { - warning("'hasOwnProperty' is a really bad name."); - } - - // Define t in the current function in the current scope. - if (type === "exception") { - if (is_own(funct["(context)"], t)) { - if (funct[t] !== true && !option.node) { - warning("Value of '{a}' may be overwritten in IE.", nexttoken, t); - } - } - } - - if (is_own(funct, t) && !funct["(global)"]) { - if (funct[t] === true) { - if (option.latedef) - warning("'{a}' was used before it was defined.", nexttoken, t); - } else { - if (!option.shadow && type !== "exception") { - warning("'{a}' is already defined.", nexttoken, t); - } - } - } - - funct[t] = type; - - if (token) { - funct["(tokens)"][t] = token; - } - - if (funct["(global)"]) { - global[t] = funct; - if (is_own(implied, t)) { - if (option.latedef) - warning("'{a}' was used before it was defined.", nexttoken, t); - delete implied[t]; - } - } else { - scope[t] = funct; - } - } - - - function doOption() { - var nt = nexttoken; - var o = nt.value; - var quotmarkValue = option.quotmark; - var predef = {}; - var b, obj, filter, t, tn, v, minus; - - switch (o) { - case "*/": - error("Unbegun comment."); - break; - case "/*members": - case "/*member": - o = "/*members"; - if (!membersOnly) { - membersOnly = {}; - } - obj = membersOnly; - option.quotmark = false; - break; - case "/*jshint": - case "/*jslint": - obj = option; - filter = boolOptions; - break; - case "/*global": - obj = predef; - break; - default: - error("What?"); - } - - t = lex.token(); - -loop: - for (;;) { - minus = false; - for (;;) { - if (t.type === "special" && t.value === "*/") { - break loop; - } - if (t.id !== "(endline)" && t.id !== ",") { - break; - } - t = lex.token(); - } - - if (o === "/*global" && t.value === "-") { - minus = true; - t = lex.token(); - } - - if (t.type !== "(string)" && t.type !== "(identifier)" && o !== "/*members") { - error("Bad option.", t); - } - - v = lex.token(); - if (v.id === ":") { - v = lex.token(); - - if (obj === membersOnly) { - error("Expected '{a}' and instead saw '{b}'.", t, "*/", ":"); - } - - if (o === "/*jshint") { - checkOption(t.value, t); - } - - var numericVals = [ - "maxstatements", - "maxparams", - "maxdepth", - "maxcomplexity", - "maxerr", - "maxlen", - "indent" - ]; - - if (numericVals.indexOf(t.value) > -1 && (o === "/*jshint" || o === "/*jslint")) { - b = +v.value; - - if (typeof b !== "number" || !isFinite(b) || b <= 0 || Math.floor(b) !== b) { - error("Expected a small integer and instead saw '{a}'.", v, v.value); - } - - if (t.value === "indent") - obj.white = true; - - obj[t.value] = b; - } else if (t.value === "validthis") { - if (funct["(global)"]) { - error("Option 'validthis' can't be used in a global scope."); - } else { - if (v.value === "true" || v.value === "false") - obj[t.value] = v.value === "true"; - else - error("Bad option value.", v); - } - } else if (t.value === "quotmark" && (o === "/*jshint")) { - switch (v.value) { - case "true": - obj.quotmark = true; - break; - case "false": - obj.quotmark = false; - break; - case "double": - case "single": - obj.quotmark = v.value; - break; - default: - error("Bad option value.", v); - } - } else if (v.value === "true" || v.value === "false") { - if (o === "/*jslint") { - tn = renamedOptions[t.value] || t.value; - obj[tn] = v.value === "true"; - if (invertedOptions[tn] !== undefined) { - obj[tn] = !obj[tn]; - } - } else { - obj[t.value] = v.value === "true"; - } - - if (t.value === "newcap") - obj["(explicitNewcap)"] = true; - } else { - error("Bad option value.", v); - } - t = lex.token(); - } else { - if (o === "/*jshint" || o === "/*jslint") { - error("Missing option value.", t); - } - - obj[t.value] = false; - - if (o === "/*global" && minus === true) { - JSHINT.blacklist[t.value] = t.value; - updatePredefined(); - } - - t = v; - } - } - - if (o === "/*members") { - option.quotmark = quotmarkValue; - } - - combine(predefined, predef); - - for (var key in predef) { - if (is_own(predef, key)) { - declared[key] = nt; - } - } - - if (filter) { - assume(); - } - } - - -// We need a peek function. If it has an argument, it peeks that much farther -// ahead. It is used to distinguish -// for ( var i in ... -// from -// for ( var i = ... - - function peek(p) { - var i = p || 0, j = 0, t; - - while (j <= i) { - t = lookahead[j]; - if (!t) { - t = lookahead[j] = lex.token(); - } - j += 1; - } - return t; - } - - - -// Produce the next token. It looks for programming errors. - - function advance(id, t) { - switch (token.id) { - case "(number)": - if (nexttoken.id === ".") { - warning("A dot following a number can be confused with a decimal point.", token); - } - break; - case "-": - if (nexttoken.id === "-" || nexttoken.id === "--") { - warning("Confusing minusses."); - } - break; - case "+": - if (nexttoken.id === "+" || nexttoken.id === "++") { - warning("Confusing plusses."); - } - break; - } - - if (token.type === "(string)" || token.identifier) { - anonname = token.value; - } - - if (id && nexttoken.id !== id) { - if (t) { - if (nexttoken.id === "(end)") { - warning("Unmatched '{a}'.", t, t.id); - } else { - warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.", - nexttoken, id, t.id, t.line, nexttoken.value); - } - } else if (nexttoken.type !== "(identifier)" || - nexttoken.value !== id) { - warning("Expected '{a}' and instead saw '{b}'.", - nexttoken, id, nexttoken.value); - } - } - - prevtoken = token; - token = nexttoken; - for (;;) { - nexttoken = lookahead.shift() || lex.token(); - if (nexttoken.id === "(end)" || nexttoken.id === "(error)") { - return; - } - if (nexttoken.type === "special") { - doOption(); - } else { - if (nexttoken.id !== "(endline)") { - break; - } - } - } - } - - -// This is the heart of JSHINT, the Pratt parser. In addition to parsing, it -// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is -// like .nud except that it is only used on the first token of a statement. -// Having .fud makes it much easier to define statement-oriented languages like -// JavaScript. I retained Pratt's nomenclature. - -// .nud Null denotation -// .fud First null denotation -// .led Left denotation -// lbp Left binding power -// rbp Right binding power - -// They are elements of the parsing method called Top Down Operator Precedence. - - function expression(rbp, initial) { - var left, isArray = false, isObject = false; - - if (nexttoken.id === "(end)") - error("Unexpected early end of program.", token); - - advance(); - if (initial) { - anonname = "anonymous"; - funct["(verb)"] = token.value; - } - if (initial === true && token.fud) { - left = token.fud(); - } else { - if (token.nud) { - left = token.nud(); - } else { - if (nexttoken.type === "(number)" && token.id === ".") { - warning("A leading decimal point can be confused with a dot: '.{a}'.", - token, nexttoken.value); - advance(); - return token; - } else { - error("Expected an identifier and instead saw '{a}'.", - token, token.id); - } - } - while (rbp < nexttoken.lbp) { - isArray = token.value === "Array"; - isObject = token.value === "Object"; - - // #527, new Foo.Array(), Foo.Array(), new Foo.Object(), Foo.Object() - // Line breaks in IfStatement heads exist to satisfy the checkJSHint - // "Line too long." error. - if (left && (left.value || (left.first && left.first.value))) { - // If the left.value is not "new", or the left.first.value is a "." - // then safely assume that this is not "new Array()" and possibly - // not "new Object()"... - if (left.value !== "new" || - (left.first && left.first.value && left.first.value === ".")) { - isArray = false; - // ...In the case of Object, if the left.value and token.value - // are not equal, then safely assume that this not "new Object()" - if (left.value !== token.value) { - isObject = false; - } - } - } - - advance(); - if (isArray && token.id === "(" && nexttoken.id === ")") - warning("Use the array literal notation [].", token); - if (isObject && token.id === "(" && nexttoken.id === ")") - warning("Use the object literal notation {}.", token); - if (token.led) { - left = token.led(left); - } else { - error("Expected an operator and instead saw '{a}'.", - token, token.id); - } - } - } - return left; - } - - -// Functions for conformance of style. - - function adjacent(left, right) { - left = left || token; - right = right || nexttoken; - if (option.white) { - if (left.character !== right.from && left.line === right.line) { - left.from += (left.character - left.from); - warning("Unexpected space after '{a}'.", left, left.value); - } - } - } - - function nobreak(left, right) { - left = left || token; - right = right || nexttoken; - if (option.white && (left.character !== right.from || left.line !== right.line)) { - warning("Unexpected space before '{a}'.", right, right.value); - } - } - - function nospace(left, right) { - left = left || token; - right = right || nexttoken; - if (option.white && !left.comment) { - if (left.line === right.line) { - adjacent(left, right); - } - } - } - - function nonadjacent(left, right) { - if (option.white) { - left = left || token; - right = right || nexttoken; - if (left.value === ";" && right.value === ";") { - return; - } - if (left.line === right.line && left.character === right.from) { - left.from += (left.character - left.from); - warning("Missing space after '{a}'.", - left, left.value); - } - } - } - - function nobreaknonadjacent(left, right) { - left = left || token; - right = right || nexttoken; - if (!option.laxbreak && left.line !== right.line) { - warning("Bad line breaking before '{a}'.", right, right.id); - } else if (option.white) { - left = left || token; - right = right || nexttoken; - if (left.character === right.from) { - left.from += (left.character - left.from); - warning("Missing space after '{a}'.", - left, left.value); - } - } - } - - function indentation(bias) { - var i; - if (option.white && nexttoken.id !== "(end)") { - i = indent + (bias || 0); - if (nexttoken.from !== i) { - warning( -"Expected '{a}' to have an indentation at {b} instead at {c}.", - nexttoken, nexttoken.value, i, nexttoken.from); - } - } - } - - function nolinebreak(t) { - t = t || token; - if (t.line !== nexttoken.line) { - warning("Line breaking error '{a}'.", t, t.value); - } - } - - - function comma() { - if (token.line !== nexttoken.line) { - if (!option.laxcomma) { - if (comma.first) { - warning("Comma warnings can be turned off with 'laxcomma'"); - comma.first = false; - } - warning("Bad line breaking before '{a}'.", token, nexttoken.id); - } - } else if (!token.comment && token.character !== nexttoken.from && option.white) { - token.from += (token.character - token.from); - warning("Unexpected space after '{a}'.", token, token.value); - } - advance(","); - nonadjacent(token, nexttoken); - } - - -// Functional constructors for making the symbols that will be inherited by -// tokens. - - function symbol(s, p) { - var x = syntax[s]; - if (!x || typeof x !== "object") { - syntax[s] = x = { - id: s, - lbp: p, - value: s - }; - } - return x; - } - - - function delim(s) { - return symbol(s, 0); - } - - - function stmt(s, f) { - var x = delim(s); - x.identifier = x.reserved = true; - x.fud = f; - return x; - } - - - function blockstmt(s, f) { - var x = stmt(s, f); - x.block = true; - return x; - } - - - function reserveName(x) { - var c = x.id.charAt(0); - if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) { - x.identifier = x.reserved = true; - } - return x; - } - - - function prefix(s, f) { - var x = symbol(s, 150); - reserveName(x); - x.nud = (typeof f === "function") ? f : function () { - this.right = expression(150); - this.arity = "unary"; - if (this.id === "++" || this.id === "--") { - if (option.plusplus) { - warning("Unexpected use of '{a}'.", this, this.id); - } else if ((!this.right.identifier || this.right.reserved) && - this.right.id !== "." && this.right.id !== "[") { - warning("Bad operand.", this); - } - } - return this; - }; - return x; - } - - - function type(s, f) { - var x = delim(s); - x.type = s; - x.nud = f; - return x; - } - - - function reserve(s, f) { - var x = type(s, f); - x.identifier = x.reserved = true; - return x; - } - - - function reservevar(s, v) { - return reserve(s, function () { - if (typeof v === "function") { - v(this); - } - return this; - }); - } - - - function infix(s, f, p, w) { - var x = symbol(s, p); - reserveName(x); - x.led = function (left) { - if (!w) { - nobreaknonadjacent(prevtoken, token); - nonadjacent(token, nexttoken); - } - if (s === "in" && left.id === "!") { - warning("Confusing use of '{a}'.", left, "!"); - } - if (typeof f === "function") { - return f(left, this); - } else { - this.left = left; - this.right = expression(p); - return this; - } - }; - return x; - } - - - function relation(s, f) { - var x = symbol(s, 100); - x.led = function (left) { - nobreaknonadjacent(prevtoken, token); - nonadjacent(token, nexttoken); - var right = expression(100); - - if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) { - warning("Use the isNaN function to compare with NaN.", this); - } else if (f) { - f.apply(this, [left, right]); - } - if (left.id === "!") { - warning("Confusing use of '{a}'.", left, "!"); - } - if (right.id === "!") { - warning("Confusing use of '{a}'.", right, "!"); - } - this.left = left; - this.right = right; - return this; - }; - return x; - } - - - function isPoorRelation(node) { - return node && - ((node.type === "(number)" && +node.value === 0) || - (node.type === "(string)" && node.value === "") || - (node.type === "null" && !option.eqnull) || - node.type === "true" || - node.type === "false" || - node.type === "undefined"); - } - - - function assignop(s) { - symbol(s, 20).exps = true; - - return infix(s, function (left, that) { - that.left = left; - - if (predefined[left.value] === false && - scope[left.value]["(global)"] === true) { - warning("Read only.", left); - } else if (left["function"]) { - warning("'{a}' is a function.", left, left.value); - } - - if (left) { - if (option.esnext && funct[left.value] === "const") { - warning("Attempting to override '{a}' which is a constant", left, left.value); - } - - if (left.id === "." || left.id === "[") { - if (!left.left || left.left.value === "arguments") { - warning("Bad assignment.", that); - } - that.right = expression(19); - return that; - } else if (left.identifier && !left.reserved) { - if (funct[left.value] === "exception") { - warning("Do not assign to the exception parameter.", left); - } - that.right = expression(19); - return that; - } - - if (left === syntax["function"]) { - warning( -"Expected an identifier in an assignment and instead saw a function invocation.", - token); - } - } - - error("Bad assignment.", that); - }, 20); - } - - - function bitwise(s, f, p) { - var x = symbol(s, p); - reserveName(x); - x.led = (typeof f === "function") ? f : function (left) { - if (option.bitwise) { - warning("Unexpected use of '{a}'.", this, this.id); - } - this.left = left; - this.right = expression(p); - return this; - }; - return x; - } - - - function bitwiseassignop(s) { - symbol(s, 20).exps = true; - return infix(s, function (left, that) { - if (option.bitwise) { - warning("Unexpected use of '{a}'.", that, that.id); - } - nonadjacent(prevtoken, token); - nonadjacent(token, nexttoken); - if (left) { - if (left.id === "." || left.id === "[" || - (left.identifier && !left.reserved)) { - expression(19); - return that; - } - if (left === syntax["function"]) { - warning( -"Expected an identifier in an assignment, and instead saw a function invocation.", - token); - } - return that; - } - error("Bad assignment.", that); - }, 20); - } - - - function suffix(s) { - var x = symbol(s, 150); - x.led = function (left) { - if (option.plusplus) { - warning("Unexpected use of '{a}'.", this, this.id); - } else if ((!left.identifier || left.reserved) && - left.id !== "." && left.id !== "[") { - warning("Bad operand.", this); - } - this.left = left; - return this; - }; - return x; - } - - - // fnparam means that this identifier is being defined as a function - // argument (see identifier()) - function optionalidentifier(fnparam) { - if (nexttoken.identifier) { - advance(); - if (token.reserved && !option.es5) { - // `undefined` as a function param is a common pattern to protect - // against the case when somebody does `undefined = true` and - // help with minification. More info: https://gist.github.com/315916 - if (!fnparam || token.value !== "undefined") { - warning("Expected an identifier and instead saw '{a}' (a reserved word).", - token, token.id); - } - } - return token.value; - } - } - - // fnparam means that this identifier is being defined as a function - // argument - function identifier(fnparam) { - var i = optionalidentifier(fnparam); - if (i) { - return i; - } - if (token.id === "function" && nexttoken.id === "(") { - warning("Missing name in function declaration."); - } else { - error("Expected an identifier and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - } - - - function reachable(s) { - var i = 0, t; - if (nexttoken.id !== ";" || noreach) { - return; - } - for (;;) { - t = peek(i); - if (t.reach) { - return; - } - if (t.id !== "(endline)") { - if (t.id === "function") { - if (!option.latedef) { - break; - } - warning( -"Inner functions should be listed at the top of the outer function.", t); - break; - } - warning("Unreachable '{a}' after '{b}'.", t, t.value, s); - break; - } - i += 1; - } - } - - - function statement(noindent) { - var i = indent, r, s = scope, t = nexttoken; - - if (t.id === ";") { - advance(";"); - return; - } - - // Is this a labelled statement? - - if (t.identifier && !t.reserved && peek().id === ":") { - advance(); - advance(":"); - scope = Object.create(s); - addlabel(t.value, "label"); - - if (!nexttoken.labelled && nexttoken.value !== "{") { - warning("Label '{a}' on {b} statement.", nexttoken, t.value, nexttoken.value); - } - - if (jx.test(t.value + ":")) { - warning("Label '{a}' looks like a javascript url.", t, t.value); - } - - nexttoken.label = t.value; - t = nexttoken; - } - - // Is it a lonely block? - - if (t.id === "{") { - block(true, true); - return; - } - - // Parse the statement. - - if (!noindent) { - indentation(); - } - r = expression(0, true); - - // Look for the final semicolon. - - if (!t.block) { - if (!option.expr && (!r || !r.exps)) { - warning("Expected an assignment or function call and instead saw an expression.", - token); - } else if (option.nonew && r.id === "(" && r.left.id === "new") { - warning("Do not use 'new' for side effects.", t); - } - - if (nexttoken.id === ",") { - return comma(); - } - - if (nexttoken.id !== ";") { - if (!option.asi) { - // If this is the last statement in a block that ends on - // the same line *and* option lastsemic is on, ignore the warning. - // Otherwise, complain about missing semicolon. - if (!option.lastsemic || nexttoken.id !== "}" || - nexttoken.line !== token.line) { - warningAt("Missing semicolon.", token.line, token.character); - } - } - } else { - adjacent(token, nexttoken); - advance(";"); - nonadjacent(token, nexttoken); - } - } - -// Restore the indentation. - - indent = i; - scope = s; - return r; - } - - - function statements(startLine) { - var a = [], p; - - while (!nexttoken.reach && nexttoken.id !== "(end)") { - if (nexttoken.id === ";") { - p = peek(); - if (!p || p.id !== "(") { - warning("Unnecessary semicolon."); - } - advance(";"); - } else { - a.push(statement(startLine === nexttoken.line)); - } - } - return a; - } - - - /* - * read all directives - * recognizes a simple form of asi, but always - * warns, if it is used - */ - function directives() { - var i, p, pn; - - for (;;) { - if (nexttoken.id === "(string)") { - p = peek(0); - if (p.id === "(endline)") { - i = 1; - do { - pn = peek(i); - i = i + 1; - } while (pn.id === "(endline)"); - - if (pn.id !== ";") { - if (pn.id !== "(string)" && pn.id !== "(number)" && - pn.id !== "(regexp)" && pn.identifier !== true && - pn.id !== "}") { - break; - } - warning("Missing semicolon.", nexttoken); - } else { - p = pn; - } - } else if (p.id === "}") { - // directive with no other statements, warn about missing semicolon - warning("Missing semicolon.", p); - } else if (p.id !== ";") { - break; - } - - indentation(); - advance(); - if (directive[token.value]) { - warning("Unnecessary directive \"{a}\".", token, token.value); - } - - if (token.value === "use strict") { - if (!option["(explicitNewcap)"]) - option.newcap = true; - option.undef = true; - } - - // there's no directive negation, so always set to true - directive[token.value] = true; - - if (p.id === ";") { - advance(";"); - } - continue; - } - break; - } - } - - - /* - * Parses a single block. A block is a sequence of statements wrapped in - * braces. - * - * ordinary - true for everything but function bodies and try blocks. - * stmt - true if block can be a single statement (e.g. in if/for/while). - * isfunc - true if block is a function body - */ - function block(ordinary, stmt, isfunc) { - var a, - b = inblock, - old_indent = indent, - m, - s = scope, - t, - line, - d; - - inblock = ordinary; - - if (!ordinary || !option.funcscope) - scope = Object.create(scope); - - nonadjacent(token, nexttoken); - t = nexttoken; - - var metrics = funct["(metrics)"]; - metrics.nestedBlockDepth += 1; - metrics.verifyMaxNestedBlockDepthPerFunction(); - - if (nexttoken.id === "{") { - advance("{"); - line = token.line; - if (nexttoken.id !== "}") { - indent += option.indent; - while (!ordinary && nexttoken.from > indent) { - indent += option.indent; - } - - if (isfunc) { - m = {}; - for (d in directive) { - if (is_own(directive, d)) { - m[d] = directive[d]; - } - } - directives(); - - if (option.strict && funct["(context)"]["(global)"]) { - if (!m["use strict"] && !directive["use strict"]) { - warning("Missing \"use strict\" statement."); - } - } - } - - a = statements(line); - - metrics.statementCount += a.length; - - if (isfunc) { - directive = m; - } - - indent -= option.indent; - if (line !== nexttoken.line) { - indentation(); - } - } else if (line !== nexttoken.line) { - indentation(); - } - advance("}", t); - indent = old_indent; - } else if (!ordinary) { - error("Expected '{a}' and instead saw '{b}'.", - nexttoken, "{", nexttoken.value); - } else { - if (!stmt || option.curly) - warning("Expected '{a}' and instead saw '{b}'.", - nexttoken, "{", nexttoken.value); - - noreach = true; - indent += option.indent; - // test indentation only if statement is in new line - a = [statement(nexttoken.line === token.line)]; - indent -= option.indent; - noreach = false; - } - funct["(verb)"] = null; - if (!ordinary || !option.funcscope) scope = s; - inblock = b; - if (ordinary && option.noempty && (!a || a.length === 0)) { - warning("Empty block."); - } - metrics.nestedBlockDepth -= 1; - return a; - } - - - function countMember(m) { - if (membersOnly && typeof membersOnly[m] !== "boolean") { - warning("Unexpected /*member '{a}'.", token, m); - } - if (typeof member[m] === "number") { - member[m] += 1; - } else { - member[m] = 1; - } - } - - - function note_implied(token) { - var name = token.value, line = token.line, a = implied[name]; - if (typeof a === "function") { - a = false; - } - - if (!a) { - a = [line]; - implied[name] = a; - } else if (a[a.length - 1] !== line) { - a.push(line); - } - } - - - // Build the syntax table by declaring the syntactic elements of the language. - - type("(number)", function () { - return this; - }); - - type("(string)", function () { - return this; - }); - - syntax["(identifier)"] = { - type: "(identifier)", - lbp: 0, - identifier: true, - nud: function () { - var v = this.value, - s = scope[v], - f; - - if (typeof s === "function") { - // Protection against accidental inheritance. - s = undefined; - } else if (typeof s === "boolean") { - f = funct; - funct = functions[0]; - addlabel(v, "var"); - s = funct; - funct = f; - } - - // The name is in scope and defined in the current function. - if (funct === s) { - // Change 'unused' to 'var', and reject labels. - switch (funct[v]) { - case "unused": - funct[v] = "var"; - break; - case "unction": - funct[v] = "function"; - this["function"] = true; - break; - case "function": - this["function"] = true; - break; - case "label": - warning("'{a}' is a statement label.", token, v); - break; - } - } else if (funct["(global)"]) { - // The name is not defined in the function. If we are in the global - // scope, then we have an undefined variable. - // - // Operators typeof and delete do not raise runtime errors even if - // the base object of a reference is null so no need to display warning - // if we're inside of typeof or delete. - - if (option.undef && typeof predefined[v] !== "boolean") { - // Attempting to subscript a null reference will throw an - // error, even within the typeof and delete operators - if (!(anonname === "typeof" || anonname === "delete") || - (nexttoken && (nexttoken.value === "." || nexttoken.value === "["))) { - - isundef(funct, "'{a}' is not defined.", token, v); - } - } - - note_implied(token); - } else { - // If the name is already defined in the current - // function, but not as outer, then there is a scope error. - - switch (funct[v]) { - case "closure": - case "function": - case "var": - case "unused": - warning("'{a}' used out of scope.", token, v); - break; - case "label": - warning("'{a}' is a statement label.", token, v); - break; - case "outer": - case "global": - break; - default: - // If the name is defined in an outer function, make an outer entry, - // and if it was unused, make it var. - if (s === true) { - funct[v] = true; - } else if (s === null) { - warning("'{a}' is not allowed.", token, v); - note_implied(token); - } else if (typeof s !== "object") { - // Operators typeof and delete do not raise runtime errors even - // if the base object of a reference is null so no need to - // display warning if we're inside of typeof or delete. - if (option.undef) { - // Attempting to subscript a null reference will throw an - // error, even within the typeof and delete operators - if (!(anonname === "typeof" || anonname === "delete") || - (nexttoken && - (nexttoken.value === "." || nexttoken.value === "["))) { - - isundef(funct, "'{a}' is not defined.", token, v); - } - } - funct[v] = true; - note_implied(token); - } else { - switch (s[v]) { - case "function": - case "unction": - this["function"] = true; - s[v] = "closure"; - funct[v] = s["(global)"] ? "global" : "outer"; - break; - case "var": - case "unused": - s[v] = "closure"; - funct[v] = s["(global)"] ? "global" : "outer"; - break; - case "closure": - funct[v] = s["(global)"] ? "global" : "outer"; - break; - case "label": - warning("'{a}' is a statement label.", token, v); - } - } - } - } - return this; - }, - led: function () { - error("Expected an operator and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - }; - - type("(regexp)", function () { - return this; - }); - - -// ECMAScript parser - - delim("(endline)"); - delim("(begin)"); - delim("(end)").reach = true; - delim(""); - delim("(error)").reach = true; - delim("}").reach = true; - delim(")"); - delim("]"); - delim("\"").reach = true; - delim("'").reach = true; - delim(";"); - delim(":").reach = true; - delim(","); - delim("#"); - delim("@"); - reserve("else"); - reserve("case").reach = true; - reserve("catch"); - reserve("default").reach = true; - reserve("finally"); - reservevar("arguments", function (x) { - if (directive["use strict"] && funct["(global)"]) { - warning("Strict violation.", x); - } - }); - reservevar("eval"); - reservevar("false"); - reservevar("Infinity"); - reservevar("null"); - reservevar("this", function (x) { - if (directive["use strict"] && !option.validthis && ((funct["(statement)"] && - funct["(name)"].charAt(0) > "Z") || funct["(global)"])) { - warning("Possible strict violation.", x); - } - }); - reservevar("true"); - reservevar("undefined"); - assignop("=", "assign", 20); - assignop("+=", "assignadd", 20); - assignop("-=", "assignsub", 20); - assignop("*=", "assignmult", 20); - assignop("/=", "assigndiv", 20).nud = function () { - error("A regular expression literal can be confused with '/='."); - }; - assignop("%=", "assignmod", 20); - bitwiseassignop("&=", "assignbitand", 20); - bitwiseassignop("|=", "assignbitor", 20); - bitwiseassignop("^=", "assignbitxor", 20); - bitwiseassignop("<<=", "assignshiftleft", 20); - bitwiseassignop(">>=", "assignshiftright", 20); - bitwiseassignop(">>>=", "assignshiftrightunsigned", 20); - infix("?", function (left, that) { - that.left = left; - that.right = expression(10); - advance(":"); - that["else"] = expression(10); - return that; - }, 30); - - infix("||", "or", 40); - infix("&&", "and", 50); - bitwise("|", "bitor", 70); - bitwise("^", "bitxor", 80); - bitwise("&", "bitand", 90); - relation("==", function (left, right) { - var eqnull = option.eqnull && (left.value === "null" || right.value === "null"); - - if (!eqnull && option.eqeqeq) - warning("Expected '{a}' and instead saw '{b}'.", this, "===", "=="); - else if (isPoorRelation(left)) - warning("Use '{a}' to compare with '{b}'.", this, "===", left.value); - else if (isPoorRelation(right)) - warning("Use '{a}' to compare with '{b}'.", this, "===", right.value); - - return this; - }); - relation("==="); - relation("!=", function (left, right) { - var eqnull = option.eqnull && - (left.value === "null" || right.value === "null"); - - if (!eqnull && option.eqeqeq) { - warning("Expected '{a}' and instead saw '{b}'.", - this, "!==", "!="); - } else if (isPoorRelation(left)) { - warning("Use '{a}' to compare with '{b}'.", - this, "!==", left.value); - } else if (isPoorRelation(right)) { - warning("Use '{a}' to compare with '{b}'.", - this, "!==", right.value); - } - return this; - }); - relation("!=="); - relation("<"); - relation(">"); - relation("<="); - relation(">="); - bitwise("<<", "shiftleft", 120); - bitwise(">>", "shiftright", 120); - bitwise(">>>", "shiftrightunsigned", 120); - infix("in", "in", 120); - infix("instanceof", "instanceof", 120); - infix("+", function (left, that) { - var right = expression(130); - if (left && right && left.id === "(string)" && right.id === "(string)") { - left.value += right.value; - left.character = right.character; - if (!option.scripturl && jx.test(left.value)) { - warning("JavaScript URL.", left); - } - return left; - } - that.left = left; - that.right = right; - return that; - }, 130); - prefix("+", "num"); - prefix("+++", function () { - warning("Confusing pluses."); - this.right = expression(150); - this.arity = "unary"; - return this; - }); - infix("+++", function (left) { - warning("Confusing pluses."); - this.left = left; - this.right = expression(130); - return this; - }, 130); - infix("-", "sub", 130); - prefix("-", "neg"); - prefix("---", function () { - warning("Confusing minuses."); - this.right = expression(150); - this.arity = "unary"; - return this; - }); - infix("---", function (left) { - warning("Confusing minuses."); - this.left = left; - this.right = expression(130); - return this; - }, 130); - infix("*", "mult", 140); - infix("/", "div", 140); - infix("%", "mod", 140); - - suffix("++", "postinc"); - prefix("++", "preinc"); - syntax["++"].exps = true; - - suffix("--", "postdec"); - prefix("--", "predec"); - syntax["--"].exps = true; - prefix("delete", function () { - var p = expression(0); - if (!p || (p.id !== "." && p.id !== "[")) { - warning("Variables should not be deleted."); - } - this.first = p; - return this; - }).exps = true; - - prefix("~", function () { - if (option.bitwise) { - warning("Unexpected '{a}'.", this, "~"); - } - expression(150); - return this; - }); - - prefix("!", function () { - this.right = expression(150); - this.arity = "unary"; - if (bang[this.right.id] === true) { - warning("Confusing use of '{a}'.", this, "!"); - } - return this; - }); - prefix("typeof", "typeof"); - prefix("new", function () { - var c = expression(155), i; - if (c && c.id !== "function") { - if (c.identifier) { - c["new"] = true; - switch (c.value) { - case "Number": - case "String": - case "Boolean": - case "Math": - case "JSON": - warning("Do not use {a} as a constructor.", prevtoken, c.value); - break; - case "Function": - if (!option.evil) { - warning("The Function constructor is eval."); - } - break; - case "Date": - case "RegExp": - break; - default: - if (c.id !== "function") { - i = c.value.substr(0, 1); - if (option.newcap && (i < "A" || i > "Z") && !is_own(global, c.value)) { - warning("A constructor name should start with an uppercase letter.", - token); - } - } - } - } else { - if (c.id !== "." && c.id !== "[" && c.id !== "(") { - warning("Bad constructor.", token); - } - } - } else { - if (!option.supernew) - warning("Weird construction. Delete 'new'.", this); - } - adjacent(token, nexttoken); - if (nexttoken.id !== "(" && !option.supernew) { - warning("Missing '()' invoking a constructor.", - token, token.value); - } - this.first = c; - return this; - }); - syntax["new"].exps = true; - - prefix("void").exps = true; - - infix(".", function (left, that) { - adjacent(prevtoken, token); - nobreak(); - var m = identifier(); - if (typeof m === "string") { - countMember(m); - } - that.left = left; - that.right = m; - if (left && left.value === "arguments" && (m === "callee" || m === "caller")) { - if (option.noarg) - warning("Avoid arguments.{a}.", left, m); - else if (directive["use strict"]) - error("Strict violation."); - } else if (!option.evil && left && left.value === "document" && - (m === "write" || m === "writeln")) { - warning("document.write can be a form of eval.", left); - } - if (!option.evil && (m === "eval" || m === "execScript")) { - warning("eval is evil."); - } - return that; - }, 160, true); - - infix("(", function (left, that) { - if (prevtoken.id !== "}" && prevtoken.id !== ")") { - nobreak(prevtoken, token); - } - nospace(); - if (option.immed && !left.immed && left.id === "function") { - warning("Wrap an immediate function invocation in parentheses " + - "to assist the reader in understanding that the expression " + - "is the result of a function, and not the function itself."); - } - var n = 0, - p = []; - if (left) { - if (left.type === "(identifier)") { - if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) { - if ("Number String Boolean Date Object".indexOf(left.value) === -1) { - if (left.value === "Math") { - warning("Math is not a function.", left); - } else if (option.newcap) { - warning("Missing 'new' prefix when invoking a constructor.", left); - } - } - } - } - } - if (nexttoken.id !== ")") { - for (;;) { - p[p.length] = expression(10); - n += 1; - if (nexttoken.id !== ",") { - break; - } - comma(); - } - } - advance(")"); - nospace(prevtoken, token); - if (typeof left === "object") { - if (left.value === "parseInt" && n === 1) { - warning("Missing radix parameter.", token); - } - if (!option.evil) { - if (left.value === "eval" || left.value === "Function" || - left.value === "execScript") { - warning("eval is evil.", left); - - if (p[0] && [0].id === "(string)") { - addInternalSrc(left, p[0].value); - } - } else if (p[0] && p[0].id === "(string)" && - (left.value === "setTimeout" || - left.value === "setInterval")) { - warning( - "Implied eval is evil. Pass a function instead of a string.", left); - addInternalSrc(left, p[0].value); - - // window.setTimeout/setInterval - } else if (p[0] && p[0].id === "(string)" && - left.value === "." && - left.left.value === "window" && - (left.right === "setTimeout" || - left.right === "setInterval")) { - warning( - "Implied eval is evil. Pass a function instead of a string.", left); - addInternalSrc(left, p[0].value); - } - } - if (!left.identifier && left.id !== "." && left.id !== "[" && - left.id !== "(" && left.id !== "&&" && left.id !== "||" && - left.id !== "?") { - warning("Bad invocation.", left); - } - } - that.left = left; - return that; - }, 155, true).exps = true; - - prefix("(", function () { - nospace(); - if (nexttoken.id === "function") { - nexttoken.immed = true; - } - var v = expression(0); - advance(")", this); - nospace(prevtoken, token); - if (option.immed && v.id === "function") { - if (nexttoken.id !== "(" && - (nexttoken.id !== "." || (peek().value !== "call" && peek().value !== "apply"))) { - warning( -"Do not wrap function literals in parens unless they are to be immediately invoked.", - this); - } - } - - return v; - }); - - infix("[", function (left, that) { - nobreak(prevtoken, token); - nospace(); - var e = expression(0), s; - if (e && e.type === "(string)") { - if (!option.evil && (e.value === "eval" || e.value === "execScript")) { - warning("eval is evil.", that); - } - countMember(e.value); - if (!option.sub && ix.test(e.value)) { - s = syntax[e.value]; - if (!s || !s.reserved) { - warning("['{a}'] is better written in dot notation.", - prevtoken, e.value); - } - } - } - advance("]", that); - nospace(prevtoken, token); - that.left = left; - that.right = e; - return that; - }, 160, true); - - prefix("[", function () { - var b = token.line !== nexttoken.line; - this.first = []; - if (b) { - indent += option.indent; - if (nexttoken.from === indent + option.indent) { - indent += option.indent; - } - } - while (nexttoken.id !== "(end)") { - while (nexttoken.id === ",") { - if (!option.es5) - warning("Extra comma."); - advance(","); - } - if (nexttoken.id === "]") { - break; - } - if (b && token.line !== nexttoken.line) { - indentation(); - } - this.first.push(expression(10)); - if (nexttoken.id === ",") { - comma(); - if (nexttoken.id === "]" && !option.es5) { - warning("Extra comma.", token); - break; - } - } else { - break; - } - } - if (b) { - indent -= option.indent; - indentation(); - } - advance("]", this); - return this; - }, 160); - - - function property_name() { - var id = optionalidentifier(true); - if (!id) { - if (nexttoken.id === "(string)") { - id = nexttoken.value; - advance(); - } else if (nexttoken.id === "(number)") { - id = nexttoken.value.toString(); - advance(); - } - } - return id; - } - - - function functionparams() { - var next = nexttoken; - var params = []; - var ident; - - advance("("); - nospace(); - - if (nexttoken.id === ")") { - advance(")"); - return; - } - - for (;;) { - ident = identifier(true); - params.push(ident); - addlabel(ident, "unused", token); - if (nexttoken.id === ",") { - comma(); - } else { - advance(")", next); - nospace(prevtoken, token); - return params; - } - } - } - - - function doFunction(name, statement) { - var f; - var oldOption = option; - var oldScope = scope; - - option = Object.create(option); - scope = Object.create(scope); - - funct = { - "(name)" : name || "\"" + anonname + "\"", - "(line)" : nexttoken.line, - "(character)": nexttoken.character, - "(context)" : funct, - "(breakage)" : 0, - "(loopage)" : 0, - "(metrics)" : createMetrics(nexttoken), - "(scope)" : scope, - "(statement)": statement, - "(tokens)" : {} - }; - - f = funct; - token.funct = funct; - - functions.push(funct); - - if (name) { - addlabel(name, "function"); - } - - funct["(params)"] = functionparams(); - funct["(metrics)"].verifyMaxParametersPerFunction(funct["(params)"]); - - block(false, false, true); - - funct["(metrics)"].verifyMaxStatementsPerFunction(); - funct["(metrics)"].verifyMaxComplexityPerFunction(); - - scope = oldScope; - option = oldOption; - funct["(last)"] = token.line; - funct["(lastcharacter)"] = token.character; - funct = funct["(context)"]; - - return f; - } - - function createMetrics(functionStartToken) { - return { - statementCount: 0, - nestedBlockDepth: -1, - ComplexityCount: 1, - verifyMaxStatementsPerFunction: function () { - if (option.maxstatements && - this.statementCount > option.maxstatements) { - var message = "Too many statements per function (" + this.statementCount + ")."; - warning(message, functionStartToken); - } - }, - - verifyMaxParametersPerFunction: function (params) { - params = params || []; - - if (option.maxparams && params.length > option.maxparams) { - var message = "Too many parameters per function (" + params.length + ")."; - warning(message, functionStartToken); - } - }, - - verifyMaxNestedBlockDepthPerFunction: function () { - if (option.maxdepth && - this.nestedBlockDepth > 0 && - this.nestedBlockDepth === option.maxdepth + 1) { - var message = "Blocks are nested too deeply (" + this.nestedBlockDepth + ")."; - warning(message); - } - }, - - verifyMaxComplexityPerFunction: function () { - var max = option.maxcomplexity; - var cc = this.ComplexityCount; - if (max && cc > max) { - var message = "Cyclomatic complexity is too high per function (" + cc + ")."; - warning(message, functionStartToken); - } - } - }; - } - - function increaseComplexityCount() { - funct["(metrics)"].ComplexityCount += 1; - } - - - (function (x) { - x.nud = function () { - var b, f, i, p, t; - var props = {}; // All properties, including accessors - - function saveProperty(name, token) { - if (props[name] && is_own(props, name)) - warning("Duplicate member '{a}'.", nexttoken, i); - else - props[name] = {}; - - props[name].basic = true; - props[name].basicToken = token; - } - - function saveSetter(name, token) { - if (props[name] && is_own(props, name)) { - if (props[name].basic || props[name].setter) - warning("Duplicate member '{a}'.", nexttoken, i); - } else { - props[name] = {}; - } - - props[name].setter = true; - props[name].setterToken = token; - } - - function saveGetter(name) { - if (props[name] && is_own(props, name)) { - if (props[name].basic || props[name].getter) - warning("Duplicate member '{a}'.", nexttoken, i); - } else { - props[name] = {}; - } - - props[name].getter = true; - props[name].getterToken = token; - } - - b = token.line !== nexttoken.line; - if (b) { - indent += option.indent; - if (nexttoken.from === indent + option.indent) { - indent += option.indent; - } - } - for (;;) { - if (nexttoken.id === "}") { - break; - } - if (b) { - indentation(); - } - if (nexttoken.value === "get" && peek().id !== ":") { - advance("get"); - if (!option.es5) { - error("get/set are ES5 features."); - } - i = property_name(); - if (!i) { - error("Missing property name."); - } - saveGetter(i); - t = nexttoken; - adjacent(token, nexttoken); - f = doFunction(); - p = f["(params)"]; - if (p) { - warning("Unexpected parameter '{a}' in get {b} function.", t, p[0], i); - } - adjacent(token, nexttoken); - } else if (nexttoken.value === "set" && peek().id !== ":") { - advance("set"); - if (!option.es5) { - error("get/set are ES5 features."); - } - i = property_name(); - if (!i) { - error("Missing property name."); - } - saveSetter(i, nexttoken); - t = nexttoken; - adjacent(token, nexttoken); - f = doFunction(); - p = f["(params)"]; - if (!p || p.length !== 1) { - warning("Expected a single parameter in set {a} function.", t, i); - } - } else { - i = property_name(); - saveProperty(i, nexttoken); - if (typeof i !== "string") { - break; - } - advance(":"); - nonadjacent(token, nexttoken); - expression(10); - } - - countMember(i); - if (nexttoken.id === ",") { - comma(); - if (nexttoken.id === ",") { - warning("Extra comma.", token); - } else if (nexttoken.id === "}" && !option.es5) { - warning("Extra comma.", token); - } - } else { - break; - } - } - if (b) { - indent -= option.indent; - indentation(); - } - advance("}", this); - - // Check for lonely setters if in the ES5 mode. - if (option.es5) { - for (var name in props) { - if (is_own(props, name) && props[name].setter && !props[name].getter) { - warning("Setter is defined without getter.", props[name].setterToken); - } - } - } - return this; - }; - x.fud = function () { - error("Expected to see a statement and instead saw a block.", token); - }; - }(delim("{"))); - -// This Function is called when esnext option is set to true -// it adds the `const` statement to JSHINT - - useESNextSyntax = function () { - var conststatement = stmt("const", function (prefix) { - var id, name, value; - - this.first = []; - for (;;) { - nonadjacent(token, nexttoken); - id = identifier(); - if (funct[id] === "const") { - warning("const '" + id + "' has already been declared"); - } - if (funct["(global)"] && predefined[id] === false) { - warning("Redefinition of '{a}'.", token, id); - } - addlabel(id, "const"); - if (prefix) { - break; - } - name = token; - this.first.push(token); - - if (nexttoken.id !== "=") { - warning("const " + - "'{a}' is initialized to 'undefined'.", token, id); - } - - if (nexttoken.id === "=") { - nonadjacent(token, nexttoken); - advance("="); - nonadjacent(token, nexttoken); - if (nexttoken.id === "undefined") { - warning("It is not necessary to initialize " + - "'{a}' to 'undefined'.", token, id); - } - if (peek(0).id === "=" && nexttoken.identifier) { - error("Constant {a} was not declared correctly.", - nexttoken, nexttoken.value); - } - value = expression(0); - name.first = value; - } - - if (nexttoken.id !== ",") { - break; - } - comma(); - } - return this; - }); - conststatement.exps = true; - }; - - var varstatement = stmt("var", function (prefix) { - // JavaScript does not have block scope. It only has function scope. So, - // declaring a variable in a block can have unexpected consequences. - var id, name, value; - - if (funct["(onevar)"] && option.onevar) { - warning("Too many var statements."); - } else if (!funct["(global)"]) { - funct["(onevar)"] = true; - } - - this.first = []; - - for (;;) { - nonadjacent(token, nexttoken); - id = identifier(); - - if (option.esnext && funct[id] === "const") { - warning("const '" + id + "' has already been declared"); - } - - if (funct["(global)"] && predefined[id] === false) { - warning("Redefinition of '{a}'.", token, id); - } - - addlabel(id, "unused", token); - - if (prefix) { - break; - } - - name = token; - this.first.push(token); - - if (nexttoken.id === "=") { - nonadjacent(token, nexttoken); - advance("="); - nonadjacent(token, nexttoken); - if (nexttoken.id === "undefined") { - warning("It is not necessary to initialize '{a}' to 'undefined'.", token, id); - } - if (peek(0).id === "=" && nexttoken.identifier) { - error("Variable {a} was not declared correctly.", - nexttoken, nexttoken.value); - } - value = expression(0); - name.first = value; - } - if (nexttoken.id !== ",") { - break; - } - comma(); - } - return this; - }); - varstatement.exps = true; - - blockstmt("function", function () { - if (inblock) { - warning("Function declarations should not be placed in blocks. " + - "Use a function expression or move the statement to the top of " + - "the outer function.", token); - - } - var i = identifier(); - if (option.esnext && funct[i] === "const") { - warning("const '" + i + "' has already been declared"); - } - adjacent(token, nexttoken); - addlabel(i, "unction", token); - - doFunction(i, { statement: true }); - if (nexttoken.id === "(" && nexttoken.line === token.line) { - error( -"Function declarations are not invocable. Wrap the whole function invocation in parens."); - } - return this; - }); - - prefix("function", function () { - var i = optionalidentifier(); - if (i) { - adjacent(token, nexttoken); - } else { - nonadjacent(token, nexttoken); - } - doFunction(i); - if (!option.loopfunc && funct["(loopage)"]) { - warning("Don't make functions within a loop."); - } - return this; - }); - - blockstmt("if", function () { - var t = nexttoken; - increaseComplexityCount(); - advance("("); - nonadjacent(this, t); - nospace(); - expression(20); - if (nexttoken.id === "=") { - if (!option.boss) - warning("Expected a conditional expression and instead saw an assignment."); - advance("="); - expression(20); - } - advance(")", t); - nospace(prevtoken, token); - block(true, true); - if (nexttoken.id === "else") { - nonadjacent(token, nexttoken); - advance("else"); - if (nexttoken.id === "if" || nexttoken.id === "switch") { - statement(true); - } else { - block(true, true); - } - } - return this; - }); - - blockstmt("try", function () { - var b; - - function doCatch() { - var oldScope = scope; - var e; - - advance("catch"); - nonadjacent(token, nexttoken); - advance("("); - - scope = Object.create(oldScope); - - e = nexttoken.value; - if (nexttoken.type !== "(identifier)") { - e = null; - warning("Expected an identifier and instead saw '{a}'.", nexttoken, e); - } - - advance(); - advance(")"); - - funct = { - "(name)" : "(catch)", - "(line)" : nexttoken.line, - "(character)": nexttoken.character, - "(context)" : funct, - "(breakage)" : funct["(breakage)"], - "(loopage)" : funct["(loopage)"], - "(scope)" : scope, - "(statement)": false, - "(metrics)" : createMetrics(nexttoken), - "(catch)" : true, - "(tokens)" : {} - }; - - if (e) { - addlabel(e, "exception"); - } - - token.funct = funct; - functions.push(funct); - - block(false); - - scope = oldScope; - - funct["(last)"] = token.line; - funct["(lastcharacter)"] = token.character; - funct = funct["(context)"]; - } - - block(false); - - if (nexttoken.id === "catch") { - increaseComplexityCount(); - doCatch(); - b = true; - } - - if (nexttoken.id === "finally") { - advance("finally"); - block(false); - return; - } else if (!b) { - error("Expected '{a}' and instead saw '{b}'.", - nexttoken, "catch", nexttoken.value); - } - - return this; - }); - - blockstmt("while", function () { - var t = nexttoken; - funct["(breakage)"] += 1; - funct["(loopage)"] += 1; - increaseComplexityCount(); - advance("("); - nonadjacent(this, t); - nospace(); - expression(20); - if (nexttoken.id === "=") { - if (!option.boss) - warning("Expected a conditional expression and instead saw an assignment."); - advance("="); - expression(20); - } - advance(")", t); - nospace(prevtoken, token); - block(true, true); - funct["(breakage)"] -= 1; - funct["(loopage)"] -= 1; - return this; - }).labelled = true; - - blockstmt("with", function () { - var t = nexttoken; - if (directive["use strict"]) { - error("'with' is not allowed in strict mode.", token); - } else if (!option.withstmt) { - warning("Don't use 'with'.", token); - } - - advance("("); - nonadjacent(this, t); - nospace(); - expression(0); - advance(")", t); - nospace(prevtoken, token); - block(true, true); - - return this; - }); - - blockstmt("switch", function () { - var t = nexttoken, - g = false; - funct["(breakage)"] += 1; - advance("("); - nonadjacent(this, t); - nospace(); - this.condition = expression(20); - advance(")", t); - nospace(prevtoken, token); - nonadjacent(token, nexttoken); - t = nexttoken; - advance("{"); - nonadjacent(token, nexttoken); - indent += option.indent; - this.cases = []; - for (;;) { - switch (nexttoken.id) { - case "case": - switch (funct["(verb)"]) { - case "break": - case "case": - case "continue": - case "return": - case "switch": - case "throw": - break; - default: - // You can tell JSHint that you don't use break intentionally by - // adding a comment /* falls through */ on a line just before - // the next `case`. - if (!ft.test(lines[nexttoken.line - 2])) { - warning( - "Expected a 'break' statement before 'case'.", - token); - } - } - indentation(-option.indent); - advance("case"); - this.cases.push(expression(20)); - increaseComplexityCount(); - g = true; - advance(":"); - funct["(verb)"] = "case"; - break; - case "default": - switch (funct["(verb)"]) { - case "break": - case "continue": - case "return": - case "throw": - break; - default: - if (!ft.test(lines[nexttoken.line - 2])) { - warning( - "Expected a 'break' statement before 'default'.", - token); - } - } - indentation(-option.indent); - advance("default"); - g = true; - advance(":"); - break; - case "}": - indent -= option.indent; - indentation(); - advance("}", t); - if (this.cases.length === 1 || this.condition.id === "true" || - this.condition.id === "false") { - if (!option.onecase) - warning("This 'switch' should be an 'if'.", this); - } - funct["(breakage)"] -= 1; - funct["(verb)"] = undefined; - return; - case "(end)": - error("Missing '{a}'.", nexttoken, "}"); - return; - default: - if (g) { - switch (token.id) { - case ",": - error("Each value should have its own case label."); - return; - case ":": - g = false; - statements(); - break; - default: - error("Missing ':' on a case clause.", token); - return; - } - } else { - if (token.id === ":") { - advance(":"); - error("Unexpected '{a}'.", token, ":"); - statements(); - } else { - error("Expected '{a}' and instead saw '{b}'.", - nexttoken, "case", nexttoken.value); - return; - } - } - } - } - }).labelled = true; - - stmt("debugger", function () { - if (!option.debug) { - warning("All 'debugger' statements should be removed."); - } - return this; - }).exps = true; - - (function () { - var x = stmt("do", function () { - funct["(breakage)"] += 1; - funct["(loopage)"] += 1; - increaseComplexityCount(); - - this.first = block(true); - advance("while"); - var t = nexttoken; - nonadjacent(token, t); - advance("("); - nospace(); - expression(20); - if (nexttoken.id === "=") { - if (!option.boss) - warning("Expected a conditional expression and instead saw an assignment."); - advance("="); - expression(20); - } - advance(")", t); - nospace(prevtoken, token); - funct["(breakage)"] -= 1; - funct["(loopage)"] -= 1; - return this; - }); - x.labelled = true; - x.exps = true; - }()); - - blockstmt("for", function () { - var s, t = nexttoken; - funct["(breakage)"] += 1; - funct["(loopage)"] += 1; - increaseComplexityCount(); - advance("("); - nonadjacent(this, t); - nospace(); - if (peek(nexttoken.id === "var" ? 1 : 0).id === "in") { - if (nexttoken.id === "var") { - advance("var"); - varstatement.fud.call(varstatement, true); - } else { - switch (funct[nexttoken.value]) { - case "unused": - funct[nexttoken.value] = "var"; - break; - case "var": - break; - default: - warning("Bad for in variable '{a}'.", - nexttoken, nexttoken.value); - } - advance(); - } - advance("in"); - expression(20); - advance(")", t); - s = block(true, true); - if (option.forin && s && (s.length > 1 || typeof s[0] !== "object" || - s[0].value !== "if")) { - warning("The body of a for in should be wrapped in an if statement to filter " + - "unwanted properties from the prototype.", this); - } - funct["(breakage)"] -= 1; - funct["(loopage)"] -= 1; - return this; - } else { - if (nexttoken.id !== ";") { - if (nexttoken.id === "var") { - advance("var"); - varstatement.fud.call(varstatement); - } else { - for (;;) { - expression(0, "for"); - if (nexttoken.id !== ",") { - break; - } - comma(); - } - } - } - nolinebreak(token); - advance(";"); - if (nexttoken.id !== ";") { - expression(20); - if (nexttoken.id === "=") { - if (!option.boss) - warning("Expected a conditional expression and instead saw an assignment."); - advance("="); - expression(20); - } - } - nolinebreak(token); - advance(";"); - if (nexttoken.id === ";") { - error("Expected '{a}' and instead saw '{b}'.", - nexttoken, ")", ";"); - } - if (nexttoken.id !== ")") { - for (;;) { - expression(0, "for"); - if (nexttoken.id !== ",") { - break; - } - comma(); - } - } - advance(")", t); - nospace(prevtoken, token); - block(true, true); - funct["(breakage)"] -= 1; - funct["(loopage)"] -= 1; - return this; - } - }).labelled = true; - - - stmt("break", function () { - var v = nexttoken.value; - - if (funct["(breakage)"] === 0) - warning("Unexpected '{a}'.", nexttoken, this.value); - - if (!option.asi) - nolinebreak(this); - - if (nexttoken.id !== ";") { - if (token.line === nexttoken.line) { - if (funct[v] !== "label") { - warning("'{a}' is not a statement label.", nexttoken, v); - } else if (scope[v] !== funct) { - warning("'{a}' is out of scope.", nexttoken, v); - } - this.first = nexttoken; - advance(); - } - } - reachable("break"); - return this; - }).exps = true; - - - stmt("continue", function () { - var v = nexttoken.value; - - if (funct["(breakage)"] === 0) - warning("Unexpected '{a}'.", nexttoken, this.value); - - if (!option.asi) - nolinebreak(this); - - if (nexttoken.id !== ";") { - if (token.line === nexttoken.line) { - if (funct[v] !== "label") { - warning("'{a}' is not a statement label.", nexttoken, v); - } else if (scope[v] !== funct) { - warning("'{a}' is out of scope.", nexttoken, v); - } - this.first = nexttoken; - advance(); - } - } else if (!funct["(loopage)"]) { - warning("Unexpected '{a}'.", nexttoken, this.value); - } - reachable("continue"); - return this; - }).exps = true; - - - stmt("return", function () { - if (this.line === nexttoken.line) { - if (nexttoken.id === "(regexp)") - warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator."); - - if (nexttoken.id !== ";" && !nexttoken.reach) { - nonadjacent(token, nexttoken); - if (peek().value === "=" && !option.boss) { - warningAt("Did you mean to return a conditional instead of an assignment?", - token.line, token.character + 1); - } - this.first = expression(0); - } - } else if (!option.asi) { - nolinebreak(this); // always warn (Line breaking error) - } - reachable("return"); - return this; - }).exps = true; - - - stmt("throw", function () { - nolinebreak(this); - nonadjacent(token, nexttoken); - this.first = expression(20); - reachable("throw"); - return this; - }).exps = true; - -// Superfluous reserved words - - reserve("class"); - reserve("const"); - reserve("enum"); - reserve("export"); - reserve("extends"); - reserve("import"); - reserve("super"); - - reserve("let"); - reserve("yield"); - reserve("implements"); - reserve("interface"); - reserve("package"); - reserve("private"); - reserve("protected"); - reserve("public"); - reserve("static"); - - -// Parse JSON - - function jsonValue() { - - function jsonObject() { - var o = {}, t = nexttoken; - advance("{"); - if (nexttoken.id !== "}") { - for (;;) { - if (nexttoken.id === "(end)") { - error("Missing '}' to match '{' from line {a}.", - nexttoken, t.line); - } else if (nexttoken.id === "}") { - warning("Unexpected comma.", token); - break; - } else if (nexttoken.id === ",") { - error("Unexpected comma.", nexttoken); - } else if (nexttoken.id !== "(string)") { - warning("Expected a string and instead saw {a}.", - nexttoken, nexttoken.value); - } - if (o[nexttoken.value] === true) { - warning("Duplicate key '{a}'.", - nexttoken, nexttoken.value); - } else if ((nexttoken.value === "__proto__" && - !option.proto) || (nexttoken.value === "__iterator__" && - !option.iterator)) { - warning("The '{a}' key may produce unexpected results.", - nexttoken, nexttoken.value); - } else { - o[nexttoken.value] = true; - } - advance(); - advance(":"); - jsonValue(); - if (nexttoken.id !== ",") { - break; - } - advance(","); - } - } - advance("}"); - } - - function jsonArray() { - var t = nexttoken; - advance("["); - if (nexttoken.id !== "]") { - for (;;) { - if (nexttoken.id === "(end)") { - error("Missing ']' to match '[' from line {a}.", - nexttoken, t.line); - } else if (nexttoken.id === "]") { - warning("Unexpected comma.", token); - break; - } else if (nexttoken.id === ",") { - error("Unexpected comma.", nexttoken); - } - jsonValue(); - if (nexttoken.id !== ",") { - break; - } - advance(","); - } - } - advance("]"); - } - - switch (nexttoken.id) { - case "{": - jsonObject(); - break; - case "[": - jsonArray(); - break; - case "true": - case "false": - case "null": - case "(number)": - case "(string)": - advance(); - break; - case "-": - advance("-"); - if (token.character !== nexttoken.from) { - warning("Unexpected space after '-'.", token); - } - adjacent(token, nexttoken); - advance("(number)"); - break; - default: - error("Expected a JSON value.", nexttoken); - } - } - - - // The actual JSHINT function itself. - var itself = function (s, o, g) { - var a, i, k, x; - var optionKeys; - var newOptionObj = {}; - - if (o && o.scope) { - JSHINT.scope = o.scope; - } else { - JSHINT.errors = []; - JSHINT.undefs = []; - JSHINT.internals = []; - JSHINT.blacklist = {}; - JSHINT.scope = "(main)"; - } - - predefined = Object.create(standard); - declared = Object.create(null); - combine(predefined, g || {}); - - if (o) { - a = o.predef; - if (a) { - if (!Array.isArray(a) && typeof a === "object") { - a = Object.keys(a); - } - a.forEach(function (item) { - var slice; - if (item[0] === "-") { - slice = item.slice(1); - JSHINT.blacklist[slice] = slice; - } else { - predefined[item] = true; - } - }); - } - - optionKeys = Object.keys(o); - for (x = 0; x < optionKeys.length; x++) { - newOptionObj[optionKeys[x]] = o[optionKeys[x]]; - - if (optionKeys[x] === "newcap" && o[optionKeys[x]] === false) - newOptionObj["(explicitNewcap)"] = true; - - if (optionKeys[x] === "indent") - newOptionObj.white = true; - } - } - - option = newOptionObj; - - option.indent = option.indent || 4; - option.maxerr = option.maxerr || 50; - - tab = ""; - for (i = 0; i < option.indent; i += 1) { - tab += " "; - } - indent = 1; - global = Object.create(predefined); - scope = global; - funct = { - "(global)": true, - "(name)": "(global)", - "(scope)": scope, - "(breakage)": 0, - "(loopage)": 0, - "(tokens)": {}, - "(metrics)": createMetrics(nexttoken) - }; - functions = [funct]; - urls = []; - stack = null; - member = {}; - membersOnly = null; - implied = {}; - inblock = false; - lookahead = []; - jsonmode = false; - warnings = 0; - lines = []; - unuseds = []; - - if (!isString(s) && !Array.isArray(s)) { - errorAt("Input is neither a string nor an array of strings.", 0); - return false; - } - - if (isString(s) && /^\s*$/g.test(s)) { - errorAt("Input is an empty string.", 0); - return false; - } - - if (s.length === 0) { - errorAt("Input is an empty array.", 0); - return false; - } - - lex.init(s); - - prereg = true; - directive = {}; - - prevtoken = token = nexttoken = syntax["(begin)"]; - - // Check options - for (var name in o) { - if (is_own(o, name)) { - checkOption(name, token); - } - } - - assume(); - - // combine the passed globals after we've assumed all our options - combine(predefined, g || {}); - - //reset values - comma.first = true; - quotmark = undefined; - - try { - advance(); - switch (nexttoken.id) { - case "{": - case "[": - option.laxbreak = true; - jsonmode = true; - jsonValue(); - break; - default: - directives(); - if (directive["use strict"] && !option.globalstrict) { - warning("Use the function form of \"use strict\".", prevtoken); - } - - statements(); - } - advance((nexttoken && nexttoken.value !== ".") ? "(end)" : undefined); - - var markDefined = function (name, context) { - do { - if (typeof context[name] === "string") { - // JSHINT marks unused variables as 'unused' and - // unused function declaration as 'unction'. This - // code changes such instances back 'var' and - // 'closure' so that the code in JSHINT.data() - // doesn't think they're unused. - - if (context[name] === "unused") - context[name] = "var"; - else if (context[name] === "unction") - context[name] = "closure"; - - return true; - } - - context = context["(context)"]; - } while (context); - - return false; - }; - - var clearImplied = function (name, line) { - if (!implied[name]) - return; - - var newImplied = []; - for (var i = 0; i < implied[name].length; i += 1) { - if (implied[name][i] !== line) - newImplied.push(implied[name][i]); - } - - if (newImplied.length === 0) - delete implied[name]; - else - implied[name] = newImplied; - }; - - var warnUnused = function (name, token) { - var line = token.line; - var chr = token.character; - - if (option.unused) - warningAt("'{a}' is defined but never used.", line, chr, name); - - unuseds.push({ - name: name, - line: line, - character: chr - }); - }; - - var checkUnused = function (func, key) { - var type = func[key]; - var token = func["(tokens)"][key]; - - if (key.charAt(0) === "(") - return; - - if (type !== "unused" && type !== "unction") - return; - - // Params are checked separately from other variables. - if (func["(params)"] && func["(params)"].indexOf(key) !== -1) - return; - - warnUnused(key, token); - }; - - // Check queued 'x is not defined' instances to see if they're still undefined. - for (i = 0; i < JSHINT.undefs.length; i += 1) { - k = JSHINT.undefs[i].slice(0); - - if (markDefined(k[2].value, k[0])) { - clearImplied(k[2].value, k[2].line); - } else { - warning.apply(warning, k.slice(1)); - } - } - - functions.forEach(function (func) { - for (var key in func) { - if (is_own(func, key)) { - checkUnused(func, key); - } - } - - if (!func["(params)"]) - return; - - var params = func["(params)"].slice(); - var param = params.pop(); - var type; - - while (param) { - type = func[param]; - - // 'undefined' is a special case for (function (window, undefined) { ... })(); - // patterns. - - if (param === "undefined") - return; - - if (type !== "unused" && type !== "unction") - return; - - warnUnused(param, func["(tokens)"][param]); - param = params.pop(); - } - }); - - for (var key in declared) { - if (is_own(declared, key) && !is_own(global, key)) { - warnUnused(key, declared[key]); - } - } - } catch (e) { - if (e) { - var nt = nexttoken || {}; - JSHINT.errors.push({ - raw : e.raw, - reason : e.message, - line : e.line || nt.line, - character : e.character || nt.from - }, null); - } - } - - // Loop over the listed "internals", and check them as well. - - if (JSHINT.scope === "(main)") { - o = o || {}; - - for (i = 0; i < JSHINT.internals.length; i += 1) { - k = JSHINT.internals[i]; - o.scope = k.elem; - itself(k.value, o, g); - } - } - - return JSHINT.errors.length === 0; - }; - - // Data summary. - itself.data = function () { - var data = { - functions: [], - options: option - }; - var implieds = []; - var members = []; - var fu, f, i, j, n, globals; - - if (itself.errors.length) { - data.errors = itself.errors; - } - - if (jsonmode) { - data.json = true; - } - - for (n in implied) { - if (is_own(implied, n)) { - implieds.push({ - name: n, - line: implied[n] - }); - } - } - - if (implieds.length > 0) { - data.implieds = implieds; - } - - if (urls.length > 0) { - data.urls = urls; - } - - globals = Object.keys(scope); - if (globals.length > 0) { - data.globals = globals; - } - - for (i = 1; i < functions.length; i += 1) { - f = functions[i]; - fu = {}; - - for (j = 0; j < functionicity.length; j += 1) { - fu[functionicity[j]] = []; - } - - for (j = 0; j < functionicity.length; j += 1) { - if (fu[functionicity[j]].length === 0) { - delete fu[functionicity[j]]; - } - } - - fu.name = f["(name)"]; - fu.param = f["(params)"]; - fu.line = f["(line)"]; - fu.character = f["(character)"]; - fu.last = f["(last)"]; - fu.lastcharacter = f["(lastcharacter)"]; - data.functions.push(fu); - } - - if (unuseds.length > 0) { - data.unused = unuseds; - } - - members = []; - for (n in member) { - if (typeof member[n] === "number") { - data.member = member; - break; - } - } - - return data; - }; - - itself.jshint = itself; - - return itself; -}()); - -// Make JSHINT a Node module, if possible. -if (typeof exports === "object" && exports) { - exports.JSHINT = JSHINT; -} \ No newline at end of file diff --git a/html/js/lib/development-bundle/grunt.js b/html/js/lib/development-bundle/grunt.js deleted file mode 100644 index d599496cc..000000000 --- a/html/js/lib/development-bundle/grunt.js +++ /dev/null @@ -1,345 +0,0 @@ -module.exports = function( grunt ) { - -"use strict"; - -var - // files - coreFiles = [ - "jquery.ui.core.js", - "jquery.ui.widget.js", - "jquery.ui.mouse.js", - "jquery.ui.draggable.js", - "jquery.ui.droppable.js", - "jquery.ui.resizable.js", - "jquery.ui.selectable.js", - "jquery.ui.sortable.js", - "jquery.ui.effect.js" - ], - - uiFiles = coreFiles.map(function( file ) { - return "ui/" + file; - }).concat( grunt.file.expandFiles( "ui/*.js" ).filter(function( file ) { - return coreFiles.indexOf( file.substring(3) ) === -1; - })), - - allI18nFiles = grunt.file.expandFiles( "ui/i18n/*.js" ), - - cssFiles = [ - "core", - "accordion", - "autocomplete", - "button", - "datepicker", - "dialog", - "menu", - "progressbar", - "resizable", - "selectable", - "slider", - "spinner", - "tabs", - "tooltip", - "theme" - ].map(function( component ) { - return "themes/base/jquery.ui." + component + ".css"; - }), - - // minified files - minify = { - "dist/jquery-ui.min.js": [ "", "dist/jquery-ui.js" ], - "dist/i18n/jquery-ui-i18n.min.js": [ "", "dist/i18n/jquery-ui-i18n.js" ] - }, - - minifyCSS = { - "dist/jquery-ui.min.css": "dist/jquery-ui.css" - }, - - compareFiles = { - all: [ - "dist/jquery-ui.js", - "dist/jquery-ui.min.js" - ] - }; - -function mapMinFile( file ) { - return "dist/" + file.replace( /\.js$/, ".min.js" ).replace( /ui\//, "minified/" ); -} - -uiFiles.concat( allI18nFiles ).forEach(function( file ) { - minify[ mapMinFile( file ) ] = [ "", file ]; -}); - -cssFiles.forEach(function( file ) { - minifyCSS[ "dist/" + file.replace( /\.css$/, ".min.css" ).replace( /themes\/base\//, "themes/base/minified/" ) ] = [ "", "" ]; -}); - -uiFiles.forEach(function( file ) { - compareFiles[ file ] = [ file, mapMinFile( file ) ]; -}); - -// grunt plugins -grunt.loadNpmTasks( "grunt-css" ); -grunt.loadNpmTasks( "grunt-html" ); -grunt.loadNpmTasks( "grunt-compare-size" ); -grunt.loadNpmTasks( "grunt-junit" ); -grunt.loadNpmTasks( "grunt-git-authors" ); -// local testswarm and build tasks -grunt.loadTasks( "build/tasks" ); - -grunt.registerHelper( "strip_all_banners", function( filepath ) { - return grunt.file.read( filepath ).replace( /^\s*\/\*[\s\S]*?\*\/\s*/g, "" ); -}); - -function stripBanner( files ) { - return files.map(function( file ) { - return ""; - }); -} - -function stripDirectory( file ) { - // TODO: we're receiving the directive, so we need to strip the trailing > - // we should be receving a clean path without the directive - return file.replace( /.+\/(.+?)>?$/, "$1" ); -} -// allow access from banner template -global.stripDirectory = stripDirectory; - -function createBanner( files ) { - // strip folders - var fileNames = files && files.map( stripDirectory ); - return "/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - " + - "<%= grunt.template.today('isoDate') %>\n" + - "<%= pkg.homepage ? '* ' + pkg.homepage + '\n' : '' %>" + - "* Includes: " + (files ? fileNames.join(", ") : "<%= stripDirectory(grunt.task.current.file.src[1]) %>") + "\n" + - "* Copyright <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>;" + - " Licensed <%= _.pluck(pkg.licenses, 'type').join(', ') %> */"; -} - -grunt.initConfig({ - pkg: "", - files: { - dist: "<%= pkg.name %>-<%= pkg.version %>", - cdn: "<%= pkg.name %>-<%= pkg.version %>-cdn", - themes: "<%= pkg.name %>-themes-<%= pkg.version %>" - }, - meta: { - banner: createBanner(), - bannerAll: createBanner( uiFiles ), - bannerI18n: createBanner( allI18nFiles ), - bannerCSS: createBanner( cssFiles ) - }, - compare_size: compareFiles, - concat: { - ui: { - src: [ "", stripBanner( uiFiles ) ], - dest: "dist/jquery-ui.js" - }, - i18n: { - src: [ "", allI18nFiles ], - dest: "dist/i18n/jquery-ui-i18n.js" - }, - css: { - src: [ "", stripBanner( cssFiles ) ], - dest: "dist/jquery-ui.css" - } - }, - min: minify, - cssmin: minifyCSS, - htmllint: { - // ignore files that contain invalid html, used only for ajax content testing - all: grunt.file.expand( [ "demos/**/*.html", "tests/**/*.html" ] ).filter(function( file ) { - return !/(?:ajax\/content\d\.html|tabs\/data\/test\.html|tests\/unit\/core\/core\.html)/.test( file ); - }) - }, - copy: { - dist: { - src: [ - "AUTHORS.txt", - "jquery-*.js", - "MIT-LICENSE.txt", - "README.md", - "grunt.js", - "package.json", - "*.jquery.json", - "ui/**/*", - "ui/.jshintrc", - "demos/**/*", - "themes/**/*", - "external/**/*", - "tests/**/*" - ], - renames: { - "dist/jquery-ui.js": "ui/jquery-ui.js", - "dist/jquery-ui.min.js": "ui/minified/jquery-ui.min.js", - "dist/i18n/jquery-ui-i18n.js": "ui/i18n/jquery-ui-i18n.js", - "dist/i18n/jquery-ui-i18n.min.js": "ui/minified/i18n/jquery-ui-i18n.min.js", - "dist/jquery-ui.css": "themes/base/jquery-ui.css", - "dist/jquery-ui.min.css": "themes/base/minified/jquery-ui.min.css" - }, - dest: "dist/<%= files.dist %>" - }, - dist_min: { - src: "dist/minified/**/*", - strip: /^dist/, - dest: "dist/<%= files.dist %>/ui" - }, - dist_css_min: { - src: "dist/themes/base/minified/*.css", - strip: /^dist/, - dest: "dist/<%= files.dist %>" - }, - dist_units_images: { - src: "themes/base/images/*", - strip: /^themes\/base\//, - dest: "dist/" - }, - dist_min_images: { - src: "themes/base/images/*", - strip: /^themes\/base\//, - dest: "dist/<%= files.dist %>/themes/base/minified" - }, - cdn: { - src: [ - "AUTHORS.txt", - "MIT-LICENSE.txt", - "ui/*.js", - "package.json" - ], - renames: { - "dist/jquery-ui.js": "jquery-ui.js", - "dist/jquery-ui.min.js": "jquery-ui.min.js", - "dist/i18n/jquery-ui-i18n.js": "i18n/jquery-ui-i18n.js", - "dist/i18n/jquery-ui-i18n.min.js": "i18n/jquery-ui-i18n.min.js", - "dist/jquery-ui.css": "themes/base/jquery-ui.css", - "dist/jquery-ui.min.css": "themes/base/minified/jquery-ui.min.css" - }, - dest: "dist/<%= files.cdn %>" - }, - cdn_i18n: { - src: "ui/i18n/jquery.ui.datepicker-*.js", - strip: "ui/", - dest: "dist/<%= files.cdn %>" - }, - cdn_i18n_min: { - src: "dist/minified/i18n/jquery.ui.datepicker-*.js", - strip: "dist/minified", - dest: "dist/<%= files.cdn %>" - }, - cdn_min: { - src: "dist/minified/*.js", - strip: /^dist\/minified/, - dest: "dist/<%= files.cdn %>/ui" - }, - cdn_min_images: { - src: "themes/base/images/*", - strip: /^themes\/base\//, - dest: "dist/<%= files.cdn %>/themes/base/minified" - }, - cdn_themes: { - src: "dist/<%= files.themes %>/themes/**/*", - strip: "dist/<%= files.themes %>", - dest: "dist/<%= files.cdn %>" - }, - themes: { - src: [ - "AUTHORS.txt", - "MIT-LICENSE.txt", - "package.json" - ], - dest: "dist/<%= files.themes %>" - } - }, - zip: { - dist: { - src: "<%= files.dist %>", - dest: "<%= files.dist %>.zip" - }, - cdn: { - src: "<%= files.cdn %>", - dest: "<%= files.cdn %>.zip" - }, - themes: { - src: "<%= files.themes %>", - dest: "<%= files.themes %>.zip" - } - }, - md5: { - dist: { - src: "dist/<%= files.dist %>", - dest: "dist/<%= files.dist %>/MANIFEST" - }, - cdn: { - src: "dist/<%= files.cdn %>", - dest: "dist/<%= files.cdn %>/MANIFEST" - }, - themes: { - src: "dist/<%= files.themes %>", - dest: "dist/<%= files.themes %>/MANIFEST" - } - }, - qunit: { - files: grunt.file.expandFiles( "tests/unit/**/*.html" ).filter(function( file ) { - // disabling everything that doesn't (quite) work with PhantomJS for now - // TODO except for all|index|test, try to include more as we go - return !( /(all|index|test|dialog|dialog_deprecated|tabs|tooltip)\.html$/ ).test( file ); - }) - }, - lint: { - ui: "ui/*.js", - grunt: [ "grunt.js", "build/**/*.js" ], - tests: "tests/unit/**/*.js" - }, - csslint: { - // nothing: [] - // TODO figure out what to check for, then fix and enable - base_theme: { - src: grunt.file.expandFiles( "themes/base/*.css" ).filter(function( file ) { - // TODO remove items from this list once rewritten - return !( /(button|datepicker|core|dialog|theme)\.css$/ ).test( file ); - }), - // TODO consider reenabling some of these rules - rules: { - "adjoining-classes": false, - "import": false, - "outline-none": false, - // especially this one - "overqualified-elements": false, - "compatible-vendor-prefixes": false - } - } - }, - jshint: (function() { - function parserc( path ) { - var rc = grunt.file.readJSON( (path || "") + ".jshintrc" ), - settings = { - options: rc, - globals: {} - }; - - (rc.predef || []).forEach(function( prop ) { - settings.globals[ prop ] = true; - }); - delete rc.predef; - - return settings; - } - - return { - grunt: parserc(), - ui: parserc( "ui/" ), - // TODO: `evil: true` is only for document.write() https://github.com/jshint/jshint/issues/519 - // TODO: don't create so many globals in tests - tests: parserc( "tests/" ) - }; - })() -}); - -grunt.registerTask( "default", "lint csslint htmllint qunit" ); -grunt.registerTask( "sizer", "concat:ui min:dist/jquery-ui.min.js compare_size:all" ); -grunt.registerTask( "sizer_all", "concat:ui min compare_size" ); -grunt.registerTask( "build", "concat min cssmin copy:dist_units_images" ); -grunt.registerTask( "release", "clean build copy:dist copy:dist_min copy:dist_min_images copy:dist_css_min md5:dist zip:dist" ); -grunt.registerTask( "release_themes", "release generate_themes copy:themes md5:themes zip:themes" ); -grunt.registerTask( "release_cdn", "release_themes copy:cdn copy:cdn_min copy:cdn_i18n copy:cdn_i18n_min copy:cdn_min_images copy:cdn_themes md5:cdn zip:cdn" ); - -}; diff --git a/html/js/lib/development-bundle/jquery-1.9.1.js b/html/js/lib/development-bundle/jquery-1.9.1.js deleted file mode 100644 index e2c203fe9..000000000 --- a/html/js/lib/development-bundle/jquery-1.9.1.js +++ /dev/null @@ -1,9597 +0,0 @@ -/*! - * jQuery JavaScript Library v1.9.1 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-2-4 - */ -(function( window, undefined ) { - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -//"use strict"; -var - // The deferred used on DOM ready - readyList, - - // A central reference to the root jQuery(document) - rootjQuery, - - // Support: IE<9 - // For `typeof node.method` instead of `node.method !== undefined` - core_strundefined = typeof undefined, - - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - location = window.location, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // [[Class]] -> type pairs - class2type = {}, - - // List of deleted data cache ids, so we can reuse them - core_deletedIds = [], - - core_version = "1.9.1", - - // Save a reference to some core methods - core_concat = core_deletedIds.concat, - core_push = core_deletedIds.push, - core_slice = core_deletedIds.slice, - core_indexOf = core_deletedIds.indexOf, - core_toString = class2type.toString, - core_hasOwn = class2type.hasOwnProperty, - core_trim = core_version.trim, - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Used for matching numbers - core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, - - // Used for splitting on whitespace - core_rnotwhite = /\S+/g, - - // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, - rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }, - - // The ready event handler - completed = function( event ) { - - // readyState === "complete" is good enough for us to call the dom ready in oldIE - if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { - detach(); - jQuery.ready(); - } - }, - // Clean-up method for dom ready events - detach = function() { - if ( document.addEventListener ) { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - - } else { - document.detachEvent( "onreadystatechange", completed ); - window.detachEvent( "onload", completed ); - } - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: core_version, - - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return core_slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; - }, - - slice: function() { - return this.pushStack( core_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 < len ? [ this[j] ] : [] ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: core_push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var src, copyIsArray, copy, name, options, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger("ready").off("ready"); - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - isWindow: function( obj ) { - return obj != null && obj == obj.window; - }, - - isNumeric: function( obj ) { - return !isNaN( parseFloat(obj) ) && isFinite( obj ); - }, - - type: function( obj ) { - if ( obj == null ) { - return String( obj ); - } - return typeof obj === "object" || typeof obj === "function" ? - class2type[ core_toString.call(obj) ] || "object" : - typeof obj; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - // Not own constructor property must be Object - if ( obj.constructor && - !core_hasOwn.call(obj, "constructor") && - !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || core_hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw new Error( msg ); - }, - - // data: string of html - // context (optional): If specified, the fragment will be created in this context, defaults to document - // keepScripts (optional): If true, will include scripts passed in the html string - 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 && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ); - if ( scripts ) { - jQuery( scripts ).remove(); - } - return jQuery.merge( [], parsed.childNodes ); - }, - - parseJSON: function( data ) { - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - if ( data === null ) { - return data; - } - - if ( typeof data === "string" ) { - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - if ( data ) { - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return ( new Function( "return " + data ) )(); - } - } - } - - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - parseXML: function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - try { - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - 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; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && jQuery.trim( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Use native String.trim function wherever possible - trim: core_trim && !core_trim.call("\uFEFF\xA0") ? - function( text ) { - return text == null ? - "" : - core_trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - core_push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - var len; - - if ( arr ) { - if ( core_indexOf ) { - return core_indexOf.call( arr, elem, i ); - } - - len = arr.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - // Skip accessing in sparse arrays - if ( i in arr && arr[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var l = second.length, - i = first.length, - j = 0; - - if ( typeof l === "number" ) { - for ( ; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var retVal, - ret = [], - i = 0, - length = elems.length; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return core_concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var args, proxy, tmp; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = core_slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - // Multifunctional method to get and set values of a collection - // The value/s can optionally be executed if it's a function - access: function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - length = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < length; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - length ? fn( elems[0], key ) : emptyGet; - }, - - now: function() { - return ( new Date() ).getTime(); - } -}); - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - // Standards-based browsers support DOMContentLoaded - } else if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - - // If IE event model is used - } else { - // Ensure firing before onload, maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", completed ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", completed ); - - // If IE and not a frame - // continually check to see if the document is ready - var top = false; - - try { - top = window.frameElement == null && document.documentElement; - } catch(e) {} - - if ( top && top.doScroll ) { - (function doScrollCheck() { - if ( !jQuery.isReady ) { - - try { - // Use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - top.doScroll("left"); - } catch(e) { - return setTimeout( doScrollCheck, 50 ); - } - - // detach all dom ready events - detach(); - - // and execute any waiting functions - jQuery.ready(); - } - })(); - } - } - } - return readyList.promise( obj ); -}; - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || type !== "function" && - ( length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj ); -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // First callback to fire (used internally by add and fireWith) - firingStart, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( list && ( !fired || stack ) ) { - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "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( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var action = tuple[ 0 ], - fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - 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[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = core_slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; - if( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); -jQuery.support = (function() { - - var support, all, a, - input, select, fragment, - opt, eventName, isSupported, i, - div = document.createElement("div"); - - // Setup - div.setAttribute( "className", "t" ); - div.innerHTML = "
    a"; - - // Support tests won't run in some limited or non-browser environments - all = div.getElementsByTagName("*"); - a = div.getElementsByTagName("a")[ 0 ]; - if ( !all || !a || !all.length ) { - return {}; - } - - // First batch of tests - select = document.createElement("select"); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName("input")[ 0 ]; - - a.style.cssText = "top:1px;float:left;opacity:.5"; - support = { - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - getSetAttribute: div.className !== "t", - - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType === 3, - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName("tbody").length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName("link").length, - - // Get the style information from getAttribute - // (IE uses .cssText instead) - style: /top/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: a.getAttribute("href") === "/a", - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.5/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) - checkOn: !!input.value, - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, - - // Tests for enctype support on a form (#6743) - enctype: !!document.createElement("form").enctype, - - // Makes sure cloning an html5 element does not cause problems - // Where outerHTML is undefined, this still works - html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", - - // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode - boxModel: document.compatMode === "CSS1Compat", - - // Will be defined later - deleteExpando: true, - noCloneEvent: true, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableMarginRight: true, - boxSizingReliable: true, - pixelPosition: false - }; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Support: IE<9 - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - // Check if we can trust getAttribute("value") - input = document.createElement("input"); - input.setAttribute( "value", "" ); - support.input = input.getAttribute( "value" ) === ""; - - // Check if an input maintains its value after becoming a radio - input.value = "t"; - input.setAttribute( "type", "radio" ); - support.radioValue = input.value === "t"; - - // #11217 - WebKit loses check when the name is after the checked attribute - input.setAttribute( "checked", "t" ); - input.setAttribute( "name", "t" ); - - fragment = document.createDocumentFragment(); - fragment.appendChild( input ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<9 - // Opera does not clone events (and typeof div.attachEvent === undefined). - // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() - if ( div.attachEvent ) { - div.attachEvent( "onclick", function() { - support.noCloneEvent = false; - }); - - div.cloneNode( true ).click(); - } - - // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) - // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php - for ( i in { submit: true, change: true, focusin: true }) { - div.setAttribute( eventName = "on" + i, "t" ); - - support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; - } - - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - // Run tests that need a body at doc ready - jQuery(function() { - var container, marginDiv, tds, - divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", - body = document.getElementsByTagName("body")[0]; - - if ( !body ) { - // Return for frameset docs that don't have a body - return; - } - - container = document.createElement("div"); - container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; - - body.appendChild( container ).appendChild( div ); - - // Support: IE8 - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - div.innerHTML = "
    t
    "; - tds = div.getElementsByTagName("td"); - tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Support: IE8 - // Check if empty table cells still have offsetWidth/Height - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - - // Check box-sizing and margin behavior - div.innerHTML = ""; - div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; - support.boxSizing = ( div.offsetWidth === 4 ); - support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); - - // Use window.getComputedStyle because jsdom on node.js will break without it. - if ( window.getComputedStyle ) { - support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; - support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - marginDiv = div.appendChild( document.createElement("div") ); - marginDiv.style.cssText = div.style.cssText = divReset; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - - support.reliableMarginRight = - !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); - } - - if ( typeof div.style.zoom !== core_strundefined ) { - // Support: IE<8 - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - div.innerHTML = ""; - div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); - - // Support: IE6 - // Check if elements with layout shrink-wrap their children - div.style.display = "block"; - div.innerHTML = "
    "; - div.firstChild.style.width = "5px"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); - - if ( support.inlineBlockNeedsLayout ) { - // Prevent IE 6 from affecting layout for positioned elements #11048 - // Prevent IE from shrinking the body in IE 7 mode #12869 - // Support: IE<8 - body.style.zoom = 1; - } - } - - body.removeChild( container ); - - // Null elements to avoid leaks in IE - container = div = tds = marginDiv = null; - }); - - // Null elements to avoid leaks in IE - all = select = fragment = opt = a = input = null; - - return support; -})(); - -var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, - rmultiDash = /([A-Z])/g; - -function internalData( elem, name, data, pvt /* Internal Use Only */ ){ - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, ret, - internalKey = jQuery.expando, - getByName = typeof name === "string", - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++; - } else { - id = internalKey; - } - } - - if ( !cache[ id ] ) { - cache[ id ] = {}; - - // Avoids exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - 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 ]; - - // jQuery data() is stored in a separate object inside the object's internal data - // cache in order to avoid key collisions between internal data and user-defined - // data. - if ( !pvt ) { - if ( !thisCache.data ) { - thisCache.data = {}; - } - - thisCache = thisCache.data; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( getByName ) { - - // First Try to find as-is property data - ret = thisCache[ name ]; - - // Test for null|undefined property data - if ( ret == null ) { - - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } - - return ret; -} - -function internalRemoveData( elem, name, pvt ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var i, l, thisCache, - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - - thisCache = pvt ? cache[ id ] : cache[ id ].data; - - if ( thisCache ) { - - // Support array or space separated string names for data keys - if ( !jQuery.isArray( name ) ) { - - // try the string as a key before any manipulation - if ( name in thisCache ) { - name = [ name ]; - } else { - - // split the camel cased version by spaces unless a key with the spaces exists - name = jQuery.camelCase( name ); - if ( name in thisCache ) { - name = [ name ]; - } else { - name = name.split(" "); - } - } - } else { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = name.concat( jQuery.map( name, jQuery.camelCase ) ); - } - - for ( i = 0, l = name.length; i < l; i++ ) { - delete thisCache[ name[i] ]; - } - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( !pvt ) { - delete cache[ id ].data; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject( cache[ id ] ) ) { - return; - } - } - - // Destroy the cache - if ( isNode ) { - jQuery.cleanData( [ elem ], true ); - - // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) - } else if ( jQuery.support.deleteExpando || cache != cache.window ) { - delete cache[ id ]; - - // When all else fails, null - } else { - cache[ id ] = null; - } -} - -jQuery.extend({ - cache: {}, - - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - 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 ); - }, - - // For internal use only. - _data: function( elem, name, data ) { - return internalData( elem, name, data, true ); - }, - - _removeData: function( elem, name ) { - return internalRemoveData( elem, name, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - // Do not set data on non-element because it will not be cleared (#8335). - if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { - return false; - } - - var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; - - // nodes accept data unless otherwise specified; rejection can be conditional - return !noData || noData !== true && elem.getAttribute("classid") === noData; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var attrs, name, - elem = this[0], - i = 0, - data = null; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = jQuery.data( elem ); - - if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { - attrs = elem.attributes; - for ( ; i < attrs.length; i++ ) { - name = attrs[i].name; - - if ( !name.indexOf( "data-" ) ) { - name = jQuery.camelCase( name.slice(5) ); - - dataAttr( elem, name, data[ name ] ); - } - } - jQuery._data( elem, "parsedAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - return jQuery.access( this, function( value ) { - - if ( value === undefined ) { - // Try to fetch any internally stored data first - return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; - } - - this.each(function() { - jQuery.data( this, key, value ); - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - 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 : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// checks a cache object for emptiness -function isEmptyDataObject( obj ) { - var name; - for ( name in obj ) { - - // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { - continue; - } - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = jQuery._data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - 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 the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - hooks.cur = fn; - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _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 < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while( i-- ) { - tmp = jQuery._data( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var nodeHook, boolHook, - rclass = /[\t\r\n]/g, - rreturn = /\r/g, - rfocusable = /^(?:input|select|textarea|button|object)$/i, - rclickable = /^(?:a|area)$/i, - rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i, - ruseDefault = /^(?:checked|selected)$/i, - getSetAttribute = jQuery.support.getSetAttribute, - getSetInput = jQuery.support.input; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classes, elem, cur, clazz, j, - 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 ) { - // The disjunction here is for better compressibility (see removeClass) - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - " " - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - elem.className = jQuery.trim( cur ); - - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = arguments.length === 0 || typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - "" - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - elem.className = value ? jQuery.trim( cur ) : ""; - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isBool = typeof stateVal === "boolean"; - - 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" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - state = stateVal, - classNames = value.match( core_rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - // Toggle whole class name - } else if ( type === core_strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // If the element has a class name or if we're passed "false", - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var ret, hooks, 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" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var val, - self = jQuery(this); - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, self.val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - 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 set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - }, - 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; - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // oldIE doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - // Don't return options that are disabled or in a disabled optgroup - ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && - ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var values = jQuery.makeArray( value ); - - jQuery(elem).find("option").each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attr: function( elem, name, value ) { - var hooks, notxml, ret, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === core_strundefined ) { - return jQuery.prop( elem, name, value ); - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( notxml ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - - // In IE9+, Flash objects don't have .getAttribute (#12945) - // Support: IE9+ - if ( typeof elem.getAttribute !== core_strundefined ) { - ret = elem.getAttribute( name ); - } - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var name, propName, - i = 0, - attrNames = value && value.match( core_rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( rboolean.test( name ) ) { - // Set corresponding property to false for boolean attributes - // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 - if ( !getSetAttribute && ruseDefault.test( name ) ) { - elem[ jQuery.camelCase( "default-" + name ) ] = - elem[ propName ] = false; - } else { - elem[ propName ] = false; - } - - // See #9699 for explanation of this approach (setting first, then removal) - } else { - jQuery.attr( elem, name, "" ); - } - - elem.removeAttribute( getSetAttribute ? name : propName ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to default in case type is set after value during creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - propFix: { - tabindex: "tabIndex", - readonly: "readOnly", - "for": "htmlFor", - "class": "className", - maxlength: "maxLength", - cellspacing: "cellSpacing", - cellpadding: "cellPadding", - rowspan: "rowSpan", - colspan: "colSpan", - usemap: "useMap", - frameborder: "frameBorder", - contenteditable: "contentEditable" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - return ( elem[ name ] = value ); - } - - } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - return elem[ name ]; - } - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabindex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - } - } -}); - -// Hook for boolean attributes -boolHook = { - get: function( elem, name ) { - var - // Use .prop to determine if this attribute is understood as boolean - prop = jQuery.prop( elem, name ), - - // Fetch it accordingly - attr = typeof prop === "boolean" && elem.getAttribute( name ), - detail = typeof prop === "boolean" ? - - getSetInput && getSetAttribute ? - attr != null : - // oldIE fabricates an empty string for missing boolean attributes - // and conflates checked/selected into attroperties - ruseDefault.test( name ) ? - elem[ jQuery.camelCase( "default-" + name ) ] : - !!attr : - - // fetch an attribute node for properties not recognized as boolean - elem.getAttributeNode( name ); - - return detail && detail.value !== false ? - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { - // IE<8 needs the *property* name - elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); - - // Use defaultChecked and defaultSelected for oldIE - } else { - elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; - } - - return name; - } -}; - -// fix oldIE value attroperty -if ( !getSetInput || !getSetAttribute ) { - jQuery.attrHooks.value = { - get: function( elem, name ) { - var ret = elem.getAttributeNode( name ); - return jQuery.nodeName( elem, "input" ) ? - - // Ignore the value *property* by using defaultValue - elem.defaultValue : - - ret && ret.specified ? ret.value : undefined; - }, - set: function( elem, value, name ) { - if ( jQuery.nodeName( elem, "input" ) ) { - // Does not return so that setAttribute is also used - elem.defaultValue = value; - } else { - // Use nodeHook if defined (#1954); otherwise setAttribute is fine - return nodeHook && nodeHook.set( elem, value, name ); - } - } - }; -} - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !getSetAttribute ) { - - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = jQuery.valHooks.button = { - get: function( elem, name ) { - var ret = elem.getAttributeNode( name ); - return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ? - ret.value : - undefined; - }, - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - elem.setAttributeNode( - (ret = elem.ownerDocument.createAttribute( name )) - ); - } - - ret.value = value += ""; - - // Break association with cloned elements by also using setAttribute (#9646) - return name === "value" || value === elem.getAttribute( name ) ? - value : - undefined; - } - }; - - // Set contenteditable to false on removals(#10429) - // Setting to empty string throws an error as an invalid value - jQuery.attrHooks.contenteditable = { - get: nodeHook.get, - set: function( elem, value, name ) { - nodeHook.set( elem, value === "" ? false : value, name ); - } - }; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }); - }); -} - - -// Some attributes require a special call on IE -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !jQuery.support.hrefNormalized ) { - jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - get: function( elem ) { - var ret = elem.getAttribute( name, 2 ); - return ret == null ? undefined : ret; - } - }); - }); - - // href/src property should get the full normalized URL (#10299/#12915) - jQuery.each([ "href", "src" ], function( i, name ) { - jQuery.propHooks[ name ] = { - get: function( elem ) { - return elem.getAttribute( name, 4 ); - } - }; - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Note: IE uppercases css property names, but if we were to .toLowerCase() - // .cssText, that would destroy case senstitivity in URL's, like in "background" - return elem.style.cssText || undefined; - }, - set: function( elem, value ) { - return ( elem.style.cssText = value + "" ); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - return null; - } - }); -} - -// IE6/7 call enctype encoding -if ( !jQuery.support.enctype ) { - jQuery.propFix.enctype = "encoding"; -} - -// Radios and checkboxes getter/setter -if ( !jQuery.support.checkOn ) { - jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - get: function( elem ) { - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - } - }; - }); -} -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }); -}); -var rformElems = /^(?:input|select|textarea)$/i, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -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 ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - 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 ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - 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; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - // Detach an event or set of events from an element - 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; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - 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("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - 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 ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery._removeData( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - var handle, ontype, cur, - bubbleType, special, tmp, i, - eventPath = [ elem || document ], - type = core_hasOwn.call( event, "type" ) ? event.type : event, - namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - event.isTrigger = true; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - 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; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { - event.preventDefault(); - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && - !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - try { - elem[ type ](); - } catch ( e ) { - // IE<9 dies on focus/blur to hidden element (#1486,#12518) - // only reproducible on winXP IE8 native, not IE9 in IE8 mode - } - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, ret, handleObj, matched, j, - handlerQueue = [], - args = core_slice.call( arguments ), - handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - 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(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - 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; - - // Find delegate handlers - // Black-hole SVG instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - for ( ; cur != this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: IE<9 - // Fix target property (#1925) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Support: Chrome 23+, Safari? - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Support: IE<9 - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) - event.metaKey = !!event.metaKey; - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var body, eventDoc, doc, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { - this.click(); - return false; - } - } - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== document.activeElement && this.focus ) { - try { - this.focus(); - return false; - } catch ( e ) { - // Support: IE<9 - // If we error on focus to hidden element (#1486, #12518), - // let .trigger() run the handlers - } - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === document.activeElement && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - - beforeunload: { - postDispatch: function( event ) { - - // Even when returnValue equals to undefined Firefox will still show alert - if ( event.result !== undefined ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; - - if ( elem.detachEvent ) { - - // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === core_strundefined ) { - elem[ name ] = null; - } - - elem.detachEvent( name, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - if ( !e ) { - return; - } - - // If preventDefault exists, run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // Support: IE - // Otherwise set the returnValue property of the original event to false - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - if ( !e ) { - return; - } - // If stopPropagation exists, run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - - // Support: IE - // Set the cancelBubble property of the original event to true - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// IE submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "submitBubbles" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "submitBubbles", true ); - } - }); - // return undefined since we don't need an event listener - }, - - postDispatch: function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - } - }, - - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !jQuery.support.changeBubbles ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; - } - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - jQuery._data( elem, "changeBubbles", true ); - } - }); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return !rformElems.test( this.nodeName ); - } - }; -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0, - handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var type, origFn; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - 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 ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2012 jQuery Foundation and other contributors - * Released under the MIT license - * http://sizzlejs.com/ - */ -(function( window, undefined ) { - -var i, - cachedruns, - Expr, - getText, - isXML, - compile, - hasDuplicate, - outermostContext, - - // Local document vars - setDocument, - document, - docElem, - documentIsXML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - sortOrder, - - // Instance-specific data - expando = "sizzle" + -(new Date()), - preferredDoc = window.document, - support = {}, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - - // General-purpose constants - strundefined = typeof undefined, - MAX_NEGATIVE = 1 << 31, - - // Array methods - arr = [], - pop = arr.pop, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf if we can't use a native one - indexOf = arr.indexOf || function( elem ) { - var i = 0, - len = this.length; - for ( ; i < len; i++ ) { - if ( this[i] === elem ) { - return i; - } - } - return -1; - }, - - - // Regular expressions - - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", - - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), - - // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors - operators = "([*^$|!~]?=)", - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + - "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", - - // Prefer arguments quoted, - // then not containing pseudos/brackets, - // then attribute selectors/non-parenthetical expressions, - // then anything else - // These preferences are here to reduce the number of selectors - // needing tokenize in the PSEUDO preFilter - pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "NAME": new RegExp( "^\\[name=['\"]?(" + 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" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rsibling = /[\x20\t\r\n\f]*[+~]/, - - rnative = /^[^{]+\{\s*\[native code/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rescape = /'|\\/g, - rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, - funescape = function( _, escaped ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - return high !== high ? - escaped : - // BMP codepoint - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }; - -// Use a stripped-down slice if we can't use a native one -try { - slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType; -} catch ( e ) { - slice = function( i ) { - var elem, - results = []; - while ( (elem = this[i++]) ) { - results.push( elem ); - } - return results; - }; -} - -/** - * For feature detection - * @param {Function} fn The function to test for native support - */ -function isNative( fn ) { - return rnative.test( fn + "" ); -} - -/** - * Create key-value caches of limited size - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var cache, - keys = []; - - return (cache = function( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key += " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key ] = value); - }); -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created div and expects a boolean result - */ -function assert( fn ) { - var div = document.createElement("div"); - - try { - return fn( div ); - } catch (e) { - return false; - } finally { - // release memory in IE - div = null; - } -} - -function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - - context = context || document; - results = results || []; - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( !documentIsXML && !seed ) { - - // Shortcuts - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; - } - } - - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) { - push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); - return results; - } - } - - // QSA path - if ( support.qsa && !rbuggyQSA.test(selector) ) { - old = true; - nid = expando; - newContext = context; - newSelector = nodeType === 9 && selector; - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - 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 ) && context.parentNode || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, slice.call( newContext.querySelectorAll( - newSelector - ), 0 ) ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Detect xml - * @param {Element|Object} elem An element or a document - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var doc = node ? node.ownerDocument || node : preferredDoc; - - // If no document and documentElement is available, return - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Set our document - document = doc; - docElem = doc.documentElement; - - // Support tests - documentIsXML = isXML( doc ); - - // Check if getElementsByTagName("*") returns only elements - support.tagNameNoComments = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Check if attributes should be retrieved by attribute nodes - support.attributes = assert(function( div ) { - div.innerHTML = ""; - var type = typeof div.lastChild.getAttribute("multiple"); - // IE8 returns a string for some attributes even when not present - return type !== "boolean" && type !== "string"; - }); - - // Check if getElementsByClassName can be trusted - support.getByClassName = assert(function( div ) { - // Opera can't find a second classname (in 9.6) - div.innerHTML = ""; - if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { - return false; - } - - // Safari 3.2 caches class attributes and doesn't catch changes - div.lastChild.className = "e"; - return div.getElementsByClassName("e").length === 2; - }); - - // Check if getElementById returns elements by name - // Check if getElementsByName privileges form controls or returns elements by ID - support.getByName = assert(function( div ) { - // Inject content - div.id = expando + 0; - div.innerHTML = "
    "; - docElem.insertBefore( div, docElem.firstChild ); - - // Test - var pass = doc.getElementsByName && - // buggy browsers will return fewer than the correct 2 - doc.getElementsByName( expando ).length === 2 + - // buggy browsers will return more than the correct 0 - doc.getElementsByName( expando + 0 ).length; - support.getIdNotName = !doc.getElementById( expando ); - - // Cleanup - docElem.removeChild( div ); - - return pass; - }); - - // IE6/7 return modified attributes - Expr.attrHandle = assert(function( div ) { - div.innerHTML = ""; - return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && - div.firstChild.getAttribute("href") === "#"; - }) ? - {} : - { - "href": function( elem ) { - return elem.getAttribute( "href", 2 ); - }, - "type": function( elem ) { - return elem.getAttribute("type"); - } - }; - - // ID find and filter - if ( support.getIdNotName ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && !documentIsXML ) { - var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - 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 { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && !documentIsXML ) { - var m = context.getElementById( id ); - - return m ? - m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? - [m] : - undefined : - []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.tagNameNoComments ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { - return context.getElementsByTagName( tag ); - } - } : - function( tag, context ) { - var elem, - tmp = [], - i = 0, - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Name - Expr.find["NAME"] = support.getByName && function( tag, context ) { - if ( typeof context.getElementsByName !== strundefined ) { - return context.getElementsByName( name ); - } - }; - - // Class - Expr.find["CLASS"] = support.getByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) { - return context.getElementsByClassName( className ); - } - }; - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21), - // no need to also add to buggyMatches since matches checks buggyQSA - // A support test would require too much code (would include document ready) - rbuggyQSA = [ ":focus" ]; - - if ( (support.qsa = isNative(doc.querySelectorAll)) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explictly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = ""; - - // IE8 - Some boolean attributes are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - }); - - assert(function( div ) { - - // Opera 10-12/IE8 - ^= $= *= and empty values - // Should not select anything - div.innerHTML = ""; - if ( div.querySelectorAll("[i^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - div.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || - docElem.mozMatchesSelector || - docElem.webkitMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( div, "div" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( div, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = new RegExp( rbuggyMatches.join("|") ); - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? - 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; - }; - - // Document order sorting - sortOrder = docElem.compareDocumentPosition ? - function( a, b ) { - var compare; - - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) { - if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) { - if ( a === doc || contains( preferredDoc, a ) ) { - return -1; - } - if ( b === doc || contains( preferredDoc, b ) ) { - return 1; - } - return 0; - } - return compare & 4 ? -1 : 1; - } - - return a.compareDocumentPosition ? -1 : 1; - } : - function( a, b ) { - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Parentless nodes are either documents or disconnected - } else if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - // Always assume the presence of duplicates if sort doesn't - // pass them to our comparison function (as in Google Chrome). - hasDuplicate = false; - [0, 0].sort( sortOrder ); - support.detectDuplicates = hasDuplicate; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - // rbuggyQSA always contains :focus, so no need for an existence check - if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch(e) {} - } - - return Sizzle( expr, document, null, [elem] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - var val; - - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - if ( !documentIsXML ) { - name = name.toLowerCase(); - } - if ( (val = Expr.attrHandle[ name ]) ) { - return val( elem ); - } - if ( documentIsXML || support.attributes ) { - return elem.getAttribute( name ); - } - return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? - name : - val && val.specified ? val.value : null; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -// Document sorting and removing duplicates -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - i = 1, - j = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - results.sort( sortOrder ); - - if ( hasDuplicate ) { - for ( ; (elem = results[i]); i++ ) { - if ( elem === results[ i - 1 ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - return results; -}; - -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -// Returns a function to use in pseudos for input types -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -// Returns a function to use in pseudos for buttons -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -// Returns a function to use in pseudos for positionals -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - for ( ; (node = elem[i]); i++ ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (see #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - 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 ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - 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" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[5] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[4] ) { - match[2] = match[4]; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeName ) { - if ( nodeName === "*" ) { - return function() { return true; }; - } - - nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); - return 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( elem.className || (typeof elem.getAttribute !== strundefined && 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 + " " ).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 ? - - // Shortcut for :nth-*(n) - 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 ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - // Seek `elem` from a previously-cached index - 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 ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - // Use previously-cached element index if available - } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { - diff = cache[1]; - - // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) - } else { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { - // Cache the index of each encountered element - if ( useCache ) { - (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - 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.call( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - 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; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifider - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsXML ? - elem.getAttribute("xml:lang") || elem.getAttribute("lang") : - elem.lang) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "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); - }, - - // Boolean properties - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), - // not comment, processing instructions, or others - // Thanks to Diego Perini for the nodeName shortcut - // Greater than "@" means alpha characters (specifically not starting with "#" or "?") - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "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; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); - }, - - // Position-in-collection - "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 < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( tokens = [] ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push( { - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -} - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && dir === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var data, cache, outerCache, - dirkey = dirruns + " " + doneName; - - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { - if ( (data = cache[1]) === true || data === cachedruns ) { - return data === true; - } - } else { - cache = outerCache[ dir ] = [ dirkey ]; - cache[1] = matcher( elem, context, xml ) || cachedruns; - if ( cache[1] === true ) { - return true; - } - } - } - } - } - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } 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, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - // A counter to specify which element is currently being matched - var matcherCachedRuns = 0, - bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, expandContext ) { - var elem, j, matcher, - setMatched = [], - matchedCount = 0, - i = "0", - unmatched = seed && [], - outermost = expandContext != null, - contextBackup = outermostContext, - // We must always have either seed elements or context - elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); - - if ( outermost ) { - outermostContext = context !== document && context; - cachedruns = matcherCachedRuns; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - for ( ; (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; - cachedruns = ++matcherCachedRuns; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !group ) { - group = tokenize( selector ); - } - i = group.length; - while ( i-- ) { - cached = matcherFromTokens( group[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - } - return cached; -}; - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function select( selector, context, results, seed ) { - var i, tokens, token, type, find, - match = tokenize( selector ); - - if ( !seed ) { - // Try to minimize operations if there is only one group - if ( match.length === 1 ) { - - // Take a shortcut and set the context if the root selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && !documentIsXML && - Expr.relative[ tokens[1].type ] ) { - - context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0]; - if ( !context ) { - return results; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && context.parentNode || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, slice.call( seed, 0 ) ); - return results; - } - - break; - } - } - } - } - } - - // Compile and execute a filtering function - // Provide `match` to avoid retokenization if we modified the selector above - compile( selector, match )( - seed, - context, - documentIsXML, - results, - rsibling.test( selector ) - ); - return results; -} - -// Deprecated -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Easy API for creating new setFilters -function setFilters() {} -Expr.filters = setFilters.prototype = Expr.pseudos; -Expr.setFilters = new setFilters(); - -// Initialize with the default document -setDocument(); - -// Override sizzle attribute retrieval -Sizzle.attr = jQuery.attr; -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; - - -})( window ); -var runtil = /Until$/, - rparentsprev = /^(?:parents|prev(?:Until|All))/, - isSimple = /^.[^:#\[\.,]*$/, - rneedsContext = jQuery.expr.match.needsContext, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var i, ret, self, - len = this.length; - - if ( typeof selector !== "string" ) { - self = this; - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - ret = []; - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, this[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; - return ret; - }, - - has: function( target ) { - var i, - targets = jQuery( target, this ), - len = targets.length; - - return this.filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false) ); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true) ); - }, - - is: function( selector ) { - return !!selector && ( - typeof selector === "string" ? - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - rneedsContext.test( selector ) ? - jQuery( selector, this.context ).index( this[0] ) >= 0 : - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - ret = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - cur = this[i]; - - while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - } - cur = cur.parentNode; - } - } - - return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); - } - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( jQuery.unique(all) ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -jQuery.fn.andSelf = jQuery.fn.addBack; - -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 ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; - - if ( this.length > 1 && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - 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; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { - - // Can't pass null or undefined to indexOf in Firefox 4 - // Set to 0 to skip string check - qualifier = qualifier || 0; - - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem ) { - return ( elem === qualifier ) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; - }); -} -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} - -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + - "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", - rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
    ", "
    " ], - area: [ 1, "", "" ], - param: [ 1, "", "" ], - thead: [ 1, "", "
    " ], - tr: [ 2, "", "
    " ], - col: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: jQuery.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; - -jQuery.fn.extend({ - text: function( value ) { - return jQuery.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 ); - }, - - wrapAll: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapAll( html.call(this, i) ); - }); - } - - if ( this[0] ) { - // The elements to wrap the target around - 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(); - }, - - append: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.insertBefore( elem, this.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, false, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, false, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { - 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++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - 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 jQuery.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; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1>" ); - - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function( value ) { - var isFunc = jQuery.isFunction( value ); - - // Make sure that the elements are removed from the DOM before they are inserted - // this can help fix replacing a parent with child elements - if ( !isFunc && typeof value !== "string" ) { - value = jQuery( value ).not( this ).detach(); - } - - return this.domManip( [ value ], true, function( elem ) { - var next = this.nextSibling, - parent = this.parentNode; - - if ( parent ) { - jQuery( this ).remove(); - parent.insertBefore( elem, next ); - } - }); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, table, callback ) { - - // Flatten any nested arrays - args = core_concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, table ? self.html() : undefined ); - } - self.domManip( args, table, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - table = table && jQuery.nodeName( first, "tr" ); - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( - table && jQuery.nodeName( this[i], "table" ) ? - findOrAppend( this[i], "tbody" ) : - this[i], - node, - i - ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Hope ajax is available... - jQuery.ajax({ - url: node.src, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -function findOrAppend( elem, tag ) { - return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - var attr = elem.getAttributeNode("type"); - elem.type = ( attr && attr.specified ) + "/" + 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; -} - -// Mark scripts as having already been evaluated -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 < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } -} - -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); - - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } - - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); - } - - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); - - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } - - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { - dest.innerHTML = src.innerHTML; - } - - } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - - dest.defaultChecked = dest.checked = src.checked; - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - core_push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== core_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; -} - -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( manipulation_rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); - - if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); - - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } - - if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); - } - } - } - - // Copy the events from the original to the clone - 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 ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - destElements = srcElements = node = null; - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], - i = 0; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted from table fragments - if ( !jQuery.support.tbody ) { - - // String was a , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - 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 ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !jQuery.support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = jQuery.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 ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== core_strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } - - core_deletedIds.push( id ); - } - } - } - } - } -}); -var iframe, getStyles, curCSS, - ralpha = /alpha\([^)]*\)/i, - ropacity = /opacity\s*=\s*([^)]*)/, - rposition = /^(top|right|bottom|left)$/, - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rmargin = /^margin/, - rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), - rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), - elemdisplay = { BODY: "block" }, - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: 0, - fontWeight: 400 - }, - - cssExpand = [ "Top", "Right", "Bottom", "Left" ], - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // check for vendor prefixed names - 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 isHidden( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = jQuery._data( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); - } - } else { - - if ( !values[ index ] ) { - hidden = isHidden( elem ); - - if ( display && display !== "none" || !hidden ) { - jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.fn.extend({ - css: function( name, value ) { - return jQuery.access( this, function( elem, name, value ) { - var len, styles, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - var bool = typeof state === "boolean"; - - return this.each(function() { - if ( bool ? state : isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Exclude the following css properties to add px - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that NaN and null values aren't set. See: #7116 - if ( value == null || type === "number" && isNaN( value ) ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var num, val, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; - } -}); - -// NOTE: we've included the "window" in window.getComputedStyle -// because jsdom on node.js will break without it. -if ( window.getComputedStyle ) { - getStyles = function( elem ) { - return window.getComputedStyle( elem, null ); - }; - - curCSS = function( elem, name, _computed ) { - var width, minWidth, maxWidth, - computed = _computed || getStyles( elem ), - - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, - style = elem.style; - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right - // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret; - }; -} else if ( document.documentElement.currentStyle ) { - getStyles = function( elem ) { - return elem.currentStyle; - }; - - curCSS = function( elem, name, _computed ) { - var left, rs, rsLeft, - computed = _computed || getStyles( elem ), - ret = computed ? computed[ name ] : undefined, - style = elem.style; - - // Avoid setting ret to empty string here - // so we don't default to auto - if ( ret == null && style && style[ name ] ) { - ret = style[ name ]; - } - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - // but not position css attributes, as those are proportional to the parent element instead - // and we can't measure the parent instead because it might trigger a "stacking dolls" problem - if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { - - // Remember the original values - left = style.left; - rs = elem.runtimeStyle; - rsLeft = rs && rs.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - rs.left = elem.currentStyle.left; - } - style.left = name === "fontSize" ? "1em" : ret; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - rs.left = rsLeft; - } - } - - return ret === "" ? "auto" : ret; - }; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // at this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -// Try to determine the default display value of an element -function css_defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - // Use the already-created iframe if possible - iframe = ( iframe || - jQuery("' : ''); - inst._keyEvent = false; - return html; - }, - - /* Generate the month and year header. */ - _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, - secondary, monthNames, monthNamesShort) { - var changeMonth = this._get(inst, 'changeMonth'); - var changeYear = this._get(inst, 'changeYear'); - var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); - var html = '
    '; - var monthHtml = ''; - // month selection - if (secondary || !changeMonth) - monthHtml += '' + monthNames[drawMonth] + ''; - else { - var inMinYear = (minDate && minDate.getFullYear() == drawYear); - var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); - monthHtml += ''; - } - if (!showMonthAfterYear) - html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); - // year selection - inst.yearshtml = ''; - if (secondary || !changeYear) - html += '' + drawYear + ''; - else { - // determine range of years to display - var years = this._get(inst, 'yearRange').split(':'); - var thisYear = new Date().getFullYear(); - var determineYear = function(value) { - var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : - (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : - parseInt(value, 10))); - return (isNaN(year) ? thisYear : year); - }; - var year = determineYear(years[0]); - var endYear = Math.max(year, determineYear(years[1] || '')); - year = (minDate ? Math.max(year, minDate.getFullYear()) : year); - endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); - inst.yearshtml += ''; - //when showing there is no need for later update - if( ! $.browser.mozilla ){ - html += inst.yearshtml; - inst.yearshtml = null; - } else { - // will be replaced later with inst.yearshtml - html += ''; - } - } - html += this._get(inst, 'yearSuffix'); - if (showMonthAfterYear) - html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; - html += '
    '; // Close datepicker_header - return html; - }, - - /* Adjust one of the date sub-fields. */ - _adjustInstDate: function(inst, offset, period) { - var year = inst.drawYear + (period == 'Y' ? offset : 0); - var month = inst.drawMonth + (period == 'M' ? offset : 0); - var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + - (period == 'D' ? offset : 0); - var date = this._restrictMinMax(inst, - this._daylightSavingAdjust(new Date(year, month, day))); - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); - if (period == 'M' || period == 'Y') - this._notifyChange(inst); - }, - - /* Ensure a date is within any min/max bounds. */ - _restrictMinMax: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - var newDate = (minDate && date < minDate ? minDate : date); - newDate = (maxDate && newDate > maxDate ? maxDate : newDate); - return newDate; - }, - - /* Notify change of month/year. */ - _notifyChange: function(inst) { - var onChange = this._get(inst, 'onChangeMonthYear'); - if (onChange) - onChange.apply((inst.input ? inst.input[0] : null), - [inst.selectedYear, inst.selectedMonth + 1, inst]); - }, - - /* Determine the number of months to show. */ - _getNumberOfMonths: function(inst) { - var numMonths = this._get(inst, 'numberOfMonths'); - return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); - }, - - /* Determine the current maximum date - ensure no time components are set. */ - _getMinMaxDate: function(inst, minMax) { - return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); - }, - - /* Find the number of days in a given month. */ - _getDaysInMonth: function(year, month) { - return 32 - new Date(year, month, 32).getDate(); - }, - - /* Find the day of the week of the first of a month. */ - _getFirstDayOfMonth: function(year, month) { - return new Date(year, month, 1).getDay(); - }, - - /* Determines if we should allow a "next/prev" month display change. */ - _canAdjustMonth: function(inst, offset, curYear, curMonth) { - var numMonths = this._getNumberOfMonths(inst); - var date = this._daylightSavingAdjust(new Date(curYear, - curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); - if (offset < 0) - date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); - return this._isInRange(inst, date); - }, - - /* Is the given date in the accepted range? */ - _isInRange: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - return ((!minDate || date.getTime() >= minDate.getTime()) && - (!maxDate || date.getTime() <= maxDate.getTime())); - }, - - /* Provide the configuration settings for formatting/parsing. */ - _getFormatConfig: function(inst) { - var shortYearCutoff = this._get(inst, 'shortYearCutoff'); - shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : - new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); - return {shortYearCutoff: shortYearCutoff, - dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), - monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; - }, - - /* Format the given date for display. */ - _formatDate: function(inst, day, month, year) { - if (!day) { - inst.currentDay = inst.selectedDay; - inst.currentMonth = inst.selectedMonth; - inst.currentYear = inst.selectedYear; - } - var date = (day ? (typeof day == 'object' ? day : - this._daylightSavingAdjust(new Date(year, month, day))) : - this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); - return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); - } -}); - -/* jQuery extend now ignores nulls! */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) - if (props[name] == null || props[name] == undefined) - target[name] = props[name]; - return target; -}; - -/* Determine whether an object is an array. */ -function isArray(a) { - return (a && (($.browser.safari && typeof a == 'object' && a.length) || - (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); -}; - -/* Invoke the datepicker functionality. - @param options string - a command, optionally followed by additional parameters or - Object - settings for attaching new datepicker functionality - @return jQuery object */ -$.fn.datepicker = function(options){ - - /* Initialise the date picker. */ - if (!$.datepicker.initialized) { - $(document).mousedown($.datepicker._checkExternalClick). - find('body').append($.datepicker.dpDiv); - $.datepicker.initialized = true; - } - - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - return this.each(function() { - typeof options == 'string' ? - $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this].concat(otherArgs)) : - $.datepicker._attachDatepicker(this, options); - }); -}; - -$.datepicker = new Datepicker(); // singleton instance -$.datepicker.initialized = false; -$.datepicker.uuid = new Date().getTime(); -$.datepicker.version = "1.8.7"; - -// Workaround for #4055 -// Add another global to avoid noConflict issues with inline event handlers -window['DP_jQuery_' + dpuuid] = $; - -})(jQuery); -/* - * Note: While Microsoft is not the author of this file, Microsoft is - * offering you a license subject to the terms of the Microsoft Software - * License Terms for Microsoft ASP.NET Model View Controller 3. - * Microsoft reserves all other rights. The notices below are provided - * for informational purposes only and are not the license terms under - * which Microsoft distributed this file. - * - * jQuery UI Dialog 1.8.7 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function( $, undefined ) { - -var uiDialogClasses = - 'ui-dialog ' + - 'ui-widget ' + - 'ui-widget-content ' + - 'ui-corner-all ', - sizeRelatedOptions = { - buttons: true, - height: true, - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true, - width: true - }, - resizableRelatedOptions = { - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true - }; - -$.widget("ui.dialog", { - options: { - autoOpen: true, - buttons: {}, - closeOnEscape: true, - closeText: 'close', - dialogClass: '', - draggable: true, - hide: null, - height: 'auto', - maxHeight: false, - maxWidth: false, - minHeight: 150, - minWidth: 150, - modal: false, - position: { - my: 'center', - at: 'center', - collision: 'fit', - // ensure that the titlebar is never outside the document - using: function(pos) { - var topOffset = $(this).css(pos).offset().top; - if (topOffset < 0) { - $(this).css('top', pos.top - topOffset); - } - } - }, - resizable: true, - show: null, - stack: true, - title: '', - width: 300, - zIndex: 1000 - }, - - _create: function() { - this.originalTitle = this.element.attr('title'); - // #5742 - .attr() might return a DOMElement - if ( typeof this.originalTitle !== "string" ) { - this.originalTitle = ""; - } - - this.options.title = this.options.title || this.originalTitle; - var self = this, - options = self.options, - - title = options.title || ' ', - titleId = $.ui.dialog.getTitleId(self.element), - - uiDialog = (self.uiDialog = $('
    ')) - .appendTo(document.body) - .hide() - .addClass(uiDialogClasses + options.dialogClass) - .css({ - zIndex: options.zIndex - }) - // setting tabIndex makes the div focusable - // setting outline to 0 prevents a border on focus in Mozilla - .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { - if (options.closeOnEscape && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE) { - - self.close(event); - event.preventDefault(); - } - }) - .attr({ - role: 'dialog', - 'aria-labelledby': titleId - }) - .mousedown(function(event) { - self.moveToTop(false, event); - }), - - uiDialogContent = self.element - .show() - .removeAttr('title') - .addClass( - 'ui-dialog-content ' + - 'ui-widget-content') - .appendTo(uiDialog), - - uiDialogTitlebar = (self.uiDialogTitlebar = $('
    ')) - .addClass( - 'ui-dialog-titlebar ' + - 'ui-widget-header ' + - 'ui-corner-all ' + - 'ui-helper-clearfix' - ) - .prependTo(uiDialog), - - uiDialogTitlebarClose = $('') - .addClass( - 'ui-dialog-titlebar-close ' + - 'ui-corner-all' - ) - .attr('role', 'button') - .hover( - function() { - uiDialogTitlebarClose.addClass('ui-state-hover'); - }, - function() { - uiDialogTitlebarClose.removeClass('ui-state-hover'); - } - ) - .focus(function() { - uiDialogTitlebarClose.addClass('ui-state-focus'); - }) - .blur(function() { - uiDialogTitlebarClose.removeClass('ui-state-focus'); - }) - .click(function(event) { - self.close(event); - return false; - }) - .appendTo(uiDialogTitlebar), - - uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('')) - .addClass( - 'ui-icon ' + - 'ui-icon-closethick' - ) - .text(options.closeText) - .appendTo(uiDialogTitlebarClose), - - uiDialogTitle = $('') - .addClass('ui-dialog-title') - .attr('id', titleId) - .html(title) - .prependTo(uiDialogTitlebar); - - //handling of deprecated beforeclose (vs beforeClose) option - //Ticket #4669 http://dev.jqueryui.com/ticket/4669 - //TODO: remove in 1.9pre - if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { - options.beforeClose = options.beforeclose; - } - - uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); - - if (options.draggable && $.fn.draggable) { - self._makeDraggable(); - } - if (options.resizable && $.fn.resizable) { - self._makeResizable(); - } - - self._createButtons(options.buttons); - self._isOpen = false; - - if ($.fn.bgiframe) { - uiDialog.bgiframe(); - } - }, - - _init: function() { - if ( this.options.autoOpen ) { - this.open(); - } - }, - - destroy: function() { - var self = this; - - if (self.overlay) { - self.overlay.destroy(); - } - self.uiDialog.hide(); - self.element - .unbind('.dialog') - .removeData('dialog') - .removeClass('ui-dialog-content ui-widget-content') - .hide().appendTo('body'); - self.uiDialog.remove(); - - if (self.originalTitle) { - self.element.attr('title', self.originalTitle); - } - - return self; - }, - - widget: function() { - return this.uiDialog; - }, - - close: function(event) { - var self = this, - maxZ, thisZ; - - if (false === self._trigger('beforeClose', event)) { - return; - } - - if (self.overlay) { - self.overlay.destroy(); - } - self.uiDialog.unbind('keypress.ui-dialog'); - - self._isOpen = false; - - if (self.options.hide) { - self.uiDialog.hide(self.options.hide, function() { - self._trigger('close', event); - }); - } else { - self.uiDialog.hide(); - self._trigger('close', event); - } - - $.ui.dialog.overlay.resize(); - - // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) - if (self.options.modal) { - maxZ = 0; - $('.ui-dialog').each(function() { - if (this !== self.uiDialog[0]) { - thisZ = $(this).css('z-index'); - if(!isNaN(thisZ)) { - maxZ = Math.max(maxZ, thisZ); - } - } - }); - $.ui.dialog.maxZ = maxZ; - } - - return self; - }, - - isOpen: function() { - return this._isOpen; - }, - - // the force parameter allows us to move modal dialogs to their correct - // position on open - moveToTop: function(force, event) { - var self = this, - options = self.options, - saveScroll; - - if ((options.modal && !force) || - (!options.stack && !options.modal)) { - return self._trigger('focus', event); - } - - if (options.zIndex > $.ui.dialog.maxZ) { - $.ui.dialog.maxZ = options.zIndex; - } - if (self.overlay) { - $.ui.dialog.maxZ += 1; - self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); - } - - //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. - // http://ui.jquery.com/bugs/ticket/3193 - saveScroll = { scrollTop: self.element.attr('scrollTop'), scrollLeft: self.element.attr('scrollLeft') }; - $.ui.dialog.maxZ += 1; - self.uiDialog.css('z-index', $.ui.dialog.maxZ); - self.element.attr(saveScroll); - self._trigger('focus', event); - - return self; - }, - - open: function() { - if (this._isOpen) { return; } - - var self = this, - options = self.options, - uiDialog = self.uiDialog; - - self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; - self._size(); - self._position(options.position); - uiDialog.show(options.show); - self.moveToTop(true); - - // prevent tabbing out of modal dialogs - if (options.modal) { - uiDialog.bind('keypress.ui-dialog', function(event) { - if (event.keyCode !== $.ui.keyCode.TAB) { - return; - } - - var tabbables = $(':tabbable', this), - first = tabbables.filter(':first'), - last = tabbables.filter(':last'); - - if (event.target === last[0] && !event.shiftKey) { - first.focus(1); - return false; - } else if (event.target === first[0] && event.shiftKey) { - last.focus(1); - return false; - } - }); - } - - // set focus to the first tabbable element in the content area or the first button - // if there are no tabbable elements, set focus on the dialog itself - $(self.element.find(':tabbable').get().concat( - uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat( - uiDialog.get()))).eq(0).focus(); - - self._isOpen = true; - self._trigger('open'); - - return self; - }, - - _createButtons: function(buttons) { - var self = this, - hasButtons = false, - uiDialogButtonPane = $('
    ') - .addClass( - 'ui-dialog-buttonpane ' + - 'ui-widget-content ' + - 'ui-helper-clearfix' - ), - uiButtonSet = $( "
    " ) - .addClass( "ui-dialog-buttonset" ) - .appendTo( uiDialogButtonPane ); - - // if we already have a button pane, remove it - self.uiDialog.find('.ui-dialog-buttonpane').remove(); - - if (typeof buttons === 'object' && buttons !== null) { - $.each(buttons, function() { - return !(hasButtons = true); - }); - } - if (hasButtons) { - $.each(buttons, function(name, props) { - props = $.isFunction( props ) ? - { click: props, text: name } : - props; - var button = $('') - .attr( props, true ) - .unbind('click') - .click(function() { - props.click.apply(self.element[0], arguments); - }) - .appendTo(uiButtonSet); - if ($.fn.button) { - button.button(); - } - }); - uiDialogButtonPane.appendTo(self.uiDialog); - } - }, - - _makeDraggable: function() { - var self = this, - options = self.options, - doc = $(document), - heightBeforeDrag; - - function filteredUi(ui) { - return { - position: ui.position, - offset: ui.offset - }; - } - - self.uiDialog.draggable({ - cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', - handle: '.ui-dialog-titlebar', - containment: 'document', - start: function(event, ui) { - heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); - $(this).height($(this).height()).addClass("ui-dialog-dragging"); - self._trigger('dragStart', event, filteredUi(ui)); - }, - drag: function(event, ui) { - self._trigger('drag', event, filteredUi(ui)); - }, - stop: function(event, ui) { - options.position = [ui.position.left - doc.scrollLeft(), - ui.position.top - doc.scrollTop()]; - $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); - self._trigger('dragStop', event, filteredUi(ui)); - $.ui.dialog.overlay.resize(); - } - }); - }, - - _makeResizable: function(handles) { - handles = (handles === undefined ? this.options.resizable : handles); - var self = this, - options = self.options, - // .ui-resizable has position: relative defined in the stylesheet - // but dialogs have to use absolute or fixed positioning - position = self.uiDialog.css('position'), - resizeHandles = (typeof handles === 'string' ? - handles : - 'n,e,s,w,se,sw,ne,nw' - ); - - function filteredUi(ui) { - return { - originalPosition: ui.originalPosition, - originalSize: ui.originalSize, - position: ui.position, - size: ui.size - }; - } - - self.uiDialog.resizable({ - cancel: '.ui-dialog-content', - containment: 'document', - alsoResize: self.element, - maxWidth: options.maxWidth, - maxHeight: options.maxHeight, - minWidth: options.minWidth, - minHeight: self._minHeight(), - handles: resizeHandles, - start: function(event, ui) { - $(this).addClass("ui-dialog-resizing"); - self._trigger('resizeStart', event, filteredUi(ui)); - }, - resize: function(event, ui) { - self._trigger('resize', event, filteredUi(ui)); - }, - stop: function(event, ui) { - $(this).removeClass("ui-dialog-resizing"); - options.height = $(this).height(); - options.width = $(this).width(); - self._trigger('resizeStop', event, filteredUi(ui)); - $.ui.dialog.overlay.resize(); - } - }) - .css('position', position) - .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); - }, - - _minHeight: function() { - var options = this.options; - - if (options.height === 'auto') { - return options.minHeight; - } else { - return Math.min(options.minHeight, options.height); - } - }, - - _position: function(position) { - var myAt = [], - offset = [0, 0], - isVisible; - - if (position) { - // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( - // if (typeof position == 'string' || $.isArray(position)) { - // myAt = $.isArray(position) ? position : position.split(' '); - - if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { - myAt = position.split ? position.split(' ') : [position[0], position[1]]; - if (myAt.length === 1) { - myAt[1] = myAt[0]; - } - - $.each(['left', 'top'], function(i, offsetPosition) { - if (+myAt[i] === myAt[i]) { - offset[i] = myAt[i]; - myAt[i] = offsetPosition; - } - }); - - position = { - my: myAt.join(" "), - at: myAt.join(" "), - offset: offset.join(" ") - }; - } - - position = $.extend({}, $.ui.dialog.prototype.options.position, position); - } else { - position = $.ui.dialog.prototype.options.position; - } - - // need to show the dialog to get the actual offset in the position plugin - isVisible = this.uiDialog.is(':visible'); - if (!isVisible) { - this.uiDialog.show(); - } - this.uiDialog - // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 - .css({ top: 0, left: 0 }) - .position($.extend({ of: window }, position)); - if (!isVisible) { - this.uiDialog.hide(); - } - }, - - _setOptions: function( options ) { - var self = this, - resizableOptions = {}, - resize = false; - - $.each( options, function( key, value ) { - self._setOption( key, value ); - - if ( key in sizeRelatedOptions ) { - resize = true; - } - if ( key in resizableRelatedOptions ) { - resizableOptions[ key ] = value; - } - }); - - if ( resize ) { - this._size(); - } - if ( this.uiDialog.is( ":data(resizable)" ) ) { - this.uiDialog.resizable( "option", resizableOptions ); - } - }, - - _setOption: function(key, value){ - var self = this, - uiDialog = self.uiDialog; - - switch (key) { - //handling of deprecated beforeclose (vs beforeClose) option - //Ticket #4669 http://dev.jqueryui.com/ticket/4669 - //TODO: remove in 1.9pre - case "beforeclose": - key = "beforeClose"; - break; - case "buttons": - self._createButtons(value); - break; - case "closeText": - // ensure that we always pass a string - self.uiDialogTitlebarCloseText.text("" + value); - break; - case "dialogClass": - uiDialog - .removeClass(self.options.dialogClass) - .addClass(uiDialogClasses + value); - break; - case "disabled": - if (value) { - uiDialog.addClass('ui-dialog-disabled'); - } else { - uiDialog.removeClass('ui-dialog-disabled'); - } - break; - case "draggable": - var isDraggable = uiDialog.is( ":data(draggable)" ); - if ( isDraggable && !value ) { - uiDialog.draggable( "destroy" ); - } - - if ( !isDraggable && value ) { - self._makeDraggable(); - } - break; - case "position": - self._position(value); - break; - case "resizable": - // currently resizable, becoming non-resizable - var isResizable = uiDialog.is( ":data(resizable)" ); - if (isResizable && !value) { - uiDialog.resizable('destroy'); - } - - // currently resizable, changing handles - if (isResizable && typeof value === 'string') { - uiDialog.resizable('option', 'handles', value); - } - - // currently non-resizable, becoming resizable - if (!isResizable && value !== false) { - self._makeResizable(value); - } - break; - case "title": - // convert whatever was passed in o a string, for html() to not throw up - $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); - break; - } - - $.Widget.prototype._setOption.apply(self, arguments); - }, - - _size: function() { - /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content - * divs will both have width and height set, so we need to reset them - */ - var options = this.options, - nonContentHeight, - minContentHeight, - isVisible = this.uiDialog.is( ":visible" ); - - // reset content sizing - this.element.show().css({ - width: 'auto', - minHeight: 0, - height: 0 - }); - - if (options.minWidth > options.width) { - options.width = options.minWidth; - } - - // reset wrapper sizing - // determine the height of all the non-content elements - nonContentHeight = this.uiDialog.css({ - height: 'auto', - width: options.width - }) - .height(); - minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); - - if ( options.height === "auto" ) { - // only needed for IE6 support - if ( $.support.minHeight ) { - this.element.css({ - minHeight: minContentHeight, - height: "auto" - }); - } else { - this.uiDialog.show(); - var autoHeight = this.element.css( "height", "auto" ).height(); - if ( !isVisible ) { - this.uiDialog.hide(); - } - this.element.height( Math.max( autoHeight, minContentHeight ) ); - } - } else { - this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); - } - - if (this.uiDialog.is(':data(resizable)')) { - this.uiDialog.resizable('option', 'minHeight', this._minHeight()); - } - } -}); - -$.extend($.ui.dialog, { - version: "1.8.7", - - uuid: 0, - maxZ: 0, - - getTitleId: function($el) { - var id = $el.attr('id'); - if (!id) { - this.uuid += 1; - id = this.uuid; - } - return 'ui-dialog-title-' + id; - }, - - overlay: function(dialog) { - this.$el = $.ui.dialog.overlay.create(dialog); - } -}); - -$.extend($.ui.dialog.overlay, { - instances: [], - // reuse old instances due to IE memory leak with alpha transparency (see #5185) - oldInstances: [], - maxZ: 0, - events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), - function(event) { return event + '.dialog-overlay'; }).join(' '), - create: function(dialog) { - if (this.instances.length === 0) { - // prevent use of anchors and inputs - // we use a setTimeout in case the overlay is created from an - // event that we're going to be cancelling (see #2804) - setTimeout(function() { - // handle $(el).dialog().dialog('close') (see #4065) - if ($.ui.dialog.overlay.instances.length) { - $(document).bind($.ui.dialog.overlay.events, function(event) { - // stop events if the z-index of the target is < the z-index of the overlay - // we cannot return true when we don't want to cancel the event (#3523) - if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { - return false; - } - }); - } - }, 1); - - // allow closing by pressing the escape key - $(document).bind('keydown.dialog-overlay', function(event) { - if (dialog.options.closeOnEscape && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE) { - - dialog.close(event); - event.preventDefault(); - } - }); - - // handle window resize - $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); - } - - var $el = (this.oldInstances.pop() || $('
    ').addClass('ui-widget-overlay')) - .appendTo(document.body) - .css({ - width: this.width(), - height: this.height() - }); - - if ($.fn.bgiframe) { - $el.bgiframe(); - } - - this.instances.push($el); - return $el; - }, - - destroy: function($el) { - var indexOf = $.inArray($el, this.instances); - if (indexOf != -1){ - this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); - } - - if (this.instances.length === 0) { - $([document, window]).unbind('.dialog-overlay'); - } - - $el.remove(); - - // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) - var maxZ = 0; - $.each(this.instances, function() { - maxZ = Math.max(maxZ, this.css('z-index')); - }); - this.maxZ = maxZ; - }, - - height: function() { - var scrollHeight, - offsetHeight; - // handle IE 6 - if ($.browser.msie && $.browser.version < 7) { - scrollHeight = Math.max( - document.documentElement.scrollHeight, - document.body.scrollHeight - ); - offsetHeight = Math.max( - document.documentElement.offsetHeight, - document.body.offsetHeight - ); - - if (scrollHeight < offsetHeight) { - return $(window).height() + 'px'; - } else { - return scrollHeight + 'px'; - } - // handle "good" browsers - } else { - return $(document).height() + 'px'; - } - }, - - width: function() { - var scrollWidth, - offsetWidth; - // handle IE 6 - if ($.browser.msie && $.browser.version < 7) { - scrollWidth = Math.max( - document.documentElement.scrollWidth, - document.body.scrollWidth - ); - offsetWidth = Math.max( - document.documentElement.offsetWidth, - document.body.offsetWidth - ); - - if (scrollWidth < offsetWidth) { - return $(window).width() + 'px'; - } else { - return scrollWidth + 'px'; - } - // handle "good" browsers - } else { - return $(document).width() + 'px'; - } - }, - - resize: function() { - /* If the dialog is draggable and the user drags it past the - * right edge of the window, the document becomes wider so we - * need to stretch the overlay. If the user then drags the - * dialog back to the left, the document will become narrower, - * so we need to shrink the overlay to the appropriate size. - * This is handled by shrinking the overlay before setting it - * to the full document size. - */ - var $overlays = $([]); - $.each($.ui.dialog.overlay.instances, function() { - $overlays = $overlays.add(this); - }); - - $overlays.css({ - width: 0, - height: 0 - }).css({ - width: $.ui.dialog.overlay.width(), - height: $.ui.dialog.overlay.height() - }); - } -}); - -$.extend($.ui.dialog.overlay.prototype, { - destroy: function() { - $.ui.dialog.overlay.destroy(this.$el); - } -}); - -}(jQuery)); -/* - * Note: While Microsoft is not the author of this file, Microsoft is - * offering you a license subject to the terms of the Microsoft Software - * License Terms for Microsoft ASP.NET Model View Controller 3. - * Microsoft reserves all other rights. The notices below are provided - * for informational purposes only and are not the license terms under - * which Microsoft distributed this file. - * - * jQuery UI Position 1.8.7 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * - * http://docs.jquery.com/UI/Position - */ -(function( $, undefined ) { - -$.ui = $.ui || {}; - -var horizontalPositions = /left|center|right/, - verticalPositions = /top|center|bottom/, - center = "center", - _position = $.fn.position, - _offset = $.fn.offset; - -$.fn.position = function( options ) { - if ( !options || !options.of ) { - return _position.apply( this, arguments ); - } - - // make a copy, we don't want to modify arguments - options = $.extend( {}, options ); - - var target = $( options.of ), - targetElem = target[0], - collision = ( options.collision || "flip" ).split( " " ), - offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], - targetWidth, - targetHeight, - basePosition; - - if ( targetElem.nodeType === 9 ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: 0, left: 0 }; - // TODO: use $.isWindow() in 1.9 - } else if ( targetElem.setTimeout ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; - } else if ( targetElem.preventDefault ) { - // force left top to allow flipping - options.at = "left top"; - targetWidth = targetHeight = 0; - basePosition = { top: options.of.pageY, left: options.of.pageX }; - } else { - targetWidth = target.outerWidth(); - targetHeight = target.outerHeight(); - basePosition = target.offset(); - } - - // force my and at to have valid horizontal and veritcal positions - // if a value is missing or invalid, it will be converted to center - $.each( [ "my", "at" ], function() { - var pos = ( options[this] || "" ).split( " " ); - if ( pos.length === 1) { - pos = horizontalPositions.test( pos[0] ) ? - pos.concat( [center] ) : - verticalPositions.test( pos[0] ) ? - [ center ].concat( pos ) : - [ center, center ]; - } - pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; - pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; - options[ this ] = pos; - }); - - // normalize collision option - if ( collision.length === 1 ) { - collision[ 1 ] = collision[ 0 ]; - } - - // normalize offset option - offset[ 0 ] = parseInt( offset[0], 10 ) || 0; - if ( offset.length === 1 ) { - offset[ 1 ] = offset[ 0 ]; - } - offset[ 1 ] = parseInt( offset[1], 10 ) || 0; - - if ( options.at[0] === "right" ) { - basePosition.left += targetWidth; - } else if (options.at[0] === center ) { - basePosition.left += targetWidth / 2; - } - - if ( options.at[1] === "bottom" ) { - basePosition.top += targetHeight; - } else if ( options.at[1] === center ) { - basePosition.top += targetHeight / 2; - } - - basePosition.left += offset[ 0 ]; - basePosition.top += offset[ 1 ]; - - return this.each(function() { - var elem = $( this ), - elemWidth = elem.outerWidth(), - elemHeight = elem.outerHeight(), - marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, - marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, - collisionWidth = elemWidth + marginLeft + - parseInt( $.curCSS( this, "marginRight", true ) ) || 0, - collisionHeight = elemHeight + marginTop + - parseInt( $.curCSS( this, "marginBottom", true ) ) || 0, - position = $.extend( {}, basePosition ), - collisionPosition; - - if ( options.my[0] === "right" ) { - position.left -= elemWidth; - } else if ( options.my[0] === center ) { - position.left -= elemWidth / 2; - } - - if ( options.my[1] === "bottom" ) { - position.top -= elemHeight; - } else if ( options.my[1] === center ) { - position.top -= elemHeight / 2; - } - - // prevent fractions (see #5280) - position.left = Math.round( position.left ); - position.top = Math.round( position.top ); - - collisionPosition = { - left: position.left - marginLeft, - top: position.top - marginTop - }; - - $.each( [ "left", "top" ], function( i, dir ) { - if ( $.ui.position[ collision[i] ] ) { - $.ui.position[ collision[i] ][ dir ]( position, { - targetWidth: targetWidth, - targetHeight: targetHeight, - elemWidth: elemWidth, - elemHeight: elemHeight, - collisionPosition: collisionPosition, - collisionWidth: collisionWidth, - collisionHeight: collisionHeight, - offset: offset, - my: options.my, - at: options.at - }); - } - }); - - if ( $.fn.bgiframe ) { - elem.bgiframe(); - } - elem.offset( $.extend( position, { using: options.using } ) ); - }); -}; - -$.ui.position = { - fit: { - left: function( position, data ) { - var win = $( window ), - over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); - position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); - }, - top: function( position, data ) { - var win = $( window ), - over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); - position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); - } - }, - - flip: { - left: function( position, data ) { - if ( data.at[0] === center ) { - return; - } - var win = $( window ), - over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), - myOffset = data.my[ 0 ] === "left" ? - -data.elemWidth : - data.my[ 0 ] === "right" ? - data.elemWidth : - 0, - atOffset = data.at[ 0 ] === "left" ? - data.targetWidth : - -data.targetWidth, - offset = -2 * data.offset[ 0 ]; - position.left += data.collisionPosition.left < 0 ? - myOffset + atOffset + offset : - over > 0 ? - myOffset + atOffset + offset : - 0; - }, - top: function( position, data ) { - if ( data.at[1] === center ) { - return; - } - var win = $( window ), - over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), - myOffset = data.my[ 1 ] === "top" ? - -data.elemHeight : - data.my[ 1 ] === "bottom" ? - data.elemHeight : - 0, - atOffset = data.at[ 1 ] === "top" ? - data.targetHeight : - -data.targetHeight, - offset = -2 * data.offset[ 1 ]; - position.top += data.collisionPosition.top < 0 ? - myOffset + atOffset + offset : - over > 0 ? - myOffset + atOffset + offset : - 0; - } - } -}; - -// offset setter from jQuery 1.4 -if ( !$.offset.setOffset ) { - $.offset.setOffset = function( elem, options ) { - // set position first, in-case top/left are set even on static elem - if ( /static/.test( $.curCSS( elem, "position" ) ) ) { - elem.style.position = "relative"; - } - var curElem = $( elem ), - curOffset = curElem.offset(), - curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, - curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, - props = { - top: (options.top - curOffset.top) + curTop, - left: (options.left - curOffset.left) + curLeft - }; - - if ( 'using' in options ) { - options.using.call( elem, props ); - } else { - curElem.css( props ); - } - }; - - $.fn.offset = function( options ) { - var elem = this[ 0 ]; - if ( !elem || !elem.ownerDocument ) { return null; } - if ( options ) { - return this.each(function() { - $.offset.setOffset( this, options ); - }); - } - return _offset.call( this ); - }; -} - -}( jQuery )); -/* - * Note: While Microsoft is not the author of this file, Microsoft is - * offering you a license subject to the terms of the Microsoft Software - * License Terms for Microsoft ASP.NET Model View Controller 3. - * Microsoft reserves all other rights. The notices below are provided - * for informational purposes only and are not the license terms under - * which Microsoft distributed this file. - * - * jQuery UI Progressbar 1.8.7 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * - * http://docs.jquery.com/UI/Progressbar - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget( "ui.progressbar", { - options: { - value: 0, - max: 100 - }, - - min: 0, - - _create: function() { - this.element - .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) - .attr({ - role: "progressbar", - "aria-valuemin": this.min, - "aria-valuemax": this.options.max, - "aria-valuenow": this._value() - }); - - this.valueDiv = $( "
    " ) - .appendTo( this.element ); - - this.oldValue = this._value(); - this._refreshValue(); - }, - - destroy: function() { - this.element - .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) - .removeAttr( "role" ) - .removeAttr( "aria-valuemin" ) - .removeAttr( "aria-valuemax" ) - .removeAttr( "aria-valuenow" ); - - this.valueDiv.remove(); - - $.Widget.prototype.destroy.apply( this, arguments ); - }, - - value: function( newValue ) { - if ( newValue === undefined ) { - return this._value(); - } - - this._setOption( "value", newValue ); - return this; - }, - - _setOption: function( key, value ) { - if ( key === "value" ) { - this.options.value = value; - this._refreshValue(); - if ( this._value() === this.options.max ) { - this._trigger( "complete" ); - } - } - - $.Widget.prototype._setOption.apply( this, arguments ); - }, - - _value: function() { - var val = this.options.value; - // normalize invalid value - if ( typeof val !== "number" ) { - val = 0; - } - return Math.min( this.options.max, Math.max( this.min, val ) ); - }, - - _percentage: function() { - return 100 * this._value() / this.options.max; - }, - - _refreshValue: function() { - var value = this.value(); - var percentage = this._percentage(); - - if ( this.oldValue !== value ) { - this.oldValue = value; - this._trigger( "change" ); - } - - this.valueDiv - .toggleClass( "ui-corner-right", value === this.options.max ) - .width( percentage.toFixed(0) + "%" ); - this.element.attr( "aria-valuenow", value ); - } -}); - -$.extend( $.ui.progressbar, { - version: "1.8.7" -}); - -})( jQuery ); -/* - * Note: While Microsoft is not the author of this file, Microsoft is - * offering you a license subject to the terms of the Microsoft Software - * License Terms for Microsoft ASP.NET Model View Controller 3. - * Microsoft reserves all other rights. The notices below are provided - * for informational purposes only and are not the license terms under - * which Microsoft distributed this file. - * - * jQuery UI Slider 1.8.7 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * - * http://docs.jquery.com/UI/Slider - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -// number of pages in a slider -// (how many times can you page up/down to go through the whole range) -var numPages = 5; - -$.widget( "ui.slider", $.ui.mouse, { - - widgetEventPrefix: "slide", - - options: { - animate: false, - distance: 0, - max: 100, - min: 0, - orientation: "horizontal", - range: false, - step: 1, - value: 0, - values: null - }, - - _create: function() { - var self = this, - o = this.options; - - this._keySliding = false; - this._mouseSliding = false; - this._animateOff = true; - this._handleIndex = null; - this._detectOrientation(); - this._mouseInit(); - - this.element - .addClass( "ui-slider" + - " ui-slider-" + this.orientation + - " ui-widget" + - " ui-widget-content" + - " ui-corner-all" ); - - if ( o.disabled ) { - this.element.addClass( "ui-slider-disabled ui-disabled" ); - } - - this.range = $([]); - - if ( o.range ) { - if ( o.range === true ) { - this.range = $( "
    " ); - if ( !o.values ) { - o.values = [ this._valueMin(), this._valueMin() ]; - } - if ( o.values.length && o.values.length !== 2 ) { - o.values = [ o.values[0], o.values[0] ]; - } - } else { - this.range = $( "
    " ); - } - - this.range - .appendTo( this.element ) - .addClass( "ui-slider-range" ); - - if ( o.range === "min" || o.range === "max" ) { - this.range.addClass( "ui-slider-range-" + o.range ); - } - - // note: this isn't the most fittingly semantic framework class for this element, - // but worked best visually with a variety of themes - this.range.addClass( "ui-widget-header" ); - } - - if ( $( ".ui-slider-handle", this.element ).length === 0 ) { - $( "" ) - .appendTo( this.element ) - .addClass( "ui-slider-handle" ); - } - - if ( o.values && o.values.length ) { - while ( $(".ui-slider-handle", this.element).length < o.values.length ) { - $( "" ) - .appendTo( this.element ) - .addClass( "ui-slider-handle" ); - } - } - - this.handles = $( ".ui-slider-handle", this.element ) - .addClass( "ui-state-default" + - " ui-corner-all" ); - - this.handle = this.handles.eq( 0 ); - - this.handles.add( this.range ).filter( "a" ) - .click(function( event ) { - event.preventDefault(); - }) - .hover(function() { - if ( !o.disabled ) { - $( this ).addClass( "ui-state-hover" ); - } - }, function() { - $( this ).removeClass( "ui-state-hover" ); - }) - .focus(function() { - if ( !o.disabled ) { - $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); - $( this ).addClass( "ui-state-focus" ); - } else { - $( this ).blur(); - } - }) - .blur(function() { - $( this ).removeClass( "ui-state-focus" ); - }); - - this.handles.each(function( i ) { - $( this ).data( "index.ui-slider-handle", i ); - }); - - this.handles - .keydown(function( event ) { - var ret = true, - index = $( this ).data( "index.ui-slider-handle" ), - allowed, - curVal, - newVal, - step; - - if ( self.options.disabled ) { - return; - } - - switch ( event.keyCode ) { - case $.ui.keyCode.HOME: - case $.ui.keyCode.END: - case $.ui.keyCode.PAGE_UP: - case $.ui.keyCode.PAGE_DOWN: - case $.ui.keyCode.UP: - case $.ui.keyCode.RIGHT: - case $.ui.keyCode.DOWN: - case $.ui.keyCode.LEFT: - ret = false; - if ( !self._keySliding ) { - self._keySliding = true; - $( this ).addClass( "ui-state-active" ); - allowed = self._start( event, index ); - if ( allowed === false ) { - return; - } - } - break; - } - - step = self.options.step; - if ( self.options.values && self.options.values.length ) { - curVal = newVal = self.values( index ); - } else { - curVal = newVal = self.value(); - } - - switch ( event.keyCode ) { - case $.ui.keyCode.HOME: - newVal = self._valueMin(); - break; - case $.ui.keyCode.END: - newVal = self._valueMax(); - break; - case $.ui.keyCode.PAGE_UP: - newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) ); - break; - case $.ui.keyCode.PAGE_DOWN: - newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) ); - break; - case $.ui.keyCode.UP: - case $.ui.keyCode.RIGHT: - if ( curVal === self._valueMax() ) { - return; - } - newVal = self._trimAlignValue( curVal + step ); - break; - case $.ui.keyCode.DOWN: - case $.ui.keyCode.LEFT: - if ( curVal === self._valueMin() ) { - return; - } - newVal = self._trimAlignValue( curVal - step ); - break; - } - - self._slide( event, index, newVal ); - - return ret; - - }) - .keyup(function( event ) { - var index = $( this ).data( "index.ui-slider-handle" ); - - if ( self._keySliding ) { - self._keySliding = false; - self._stop( event, index ); - self._change( event, index ); - $( this ).removeClass( "ui-state-active" ); - } - - }); - - this._refreshValue(); - - this._animateOff = false; - }, - - destroy: function() { - this.handles.remove(); - this.range.remove(); - - this.element - .removeClass( "ui-slider" + - " ui-slider-horizontal" + - " ui-slider-vertical" + - " ui-slider-disabled" + - " ui-widget" + - " ui-widget-content" + - " ui-corner-all" ) - .removeData( "slider" ) - .unbind( ".slider" ); - - this._mouseDestroy(); - - return this; - }, - - _mouseCapture: function( event ) { - var o = this.options, - position, - normValue, - distance, - closestHandle, - self, - index, - allowed, - offset, - mouseOverHandle; - - if ( o.disabled ) { - return false; - } - - this.elementSize = { - width: this.element.outerWidth(), - height: this.element.outerHeight() - }; - this.elementOffset = this.element.offset(); - - position = { x: event.pageX, y: event.pageY }; - normValue = this._normValueFromMouse( position ); - distance = this._valueMax() - this._valueMin() + 1; - self = this; - this.handles.each(function( i ) { - var thisDistance = Math.abs( normValue - self.values(i) ); - if ( distance > thisDistance ) { - distance = thisDistance; - closestHandle = $( this ); - index = i; - } - }); - - // workaround for bug #3736 (if both handles of a range are at 0, - // the first is always used as the one with least distance, - // and moving it is obviously prevented by preventing negative ranges) - if( o.range === true && this.values(1) === o.min ) { - index += 1; - closestHandle = $( this.handles[index] ); - } - - allowed = this._start( event, index ); - if ( allowed === false ) { - return false; - } - this._mouseSliding = true; - - self._handleIndex = index; - - closestHandle - .addClass( "ui-state-active" ) - .focus(); - - offset = closestHandle.offset(); - mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); - this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { - left: event.pageX - offset.left - ( closestHandle.width() / 2 ), - top: event.pageY - offset.top - - ( closestHandle.height() / 2 ) - - ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - - ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + - ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) - }; - - if ( !this.handles.hasClass( "ui-state-hover" ) ) { - this._slide( event, index, normValue ); - } - this._animateOff = true; - return true; - }, - - _mouseStart: function( event ) { - return true; - }, - - _mouseDrag: function( event ) { - var position = { x: event.pageX, y: event.pageY }, - normValue = this._normValueFromMouse( position ); - - this._slide( event, this._handleIndex, normValue ); - - return false; - }, - - _mouseStop: function( event ) { - this.handles.removeClass( "ui-state-active" ); - this._mouseSliding = false; - - this._stop( event, this._handleIndex ); - this._change( event, this._handleIndex ); - - this._handleIndex = null; - this._clickOffset = null; - this._animateOff = false; - - return false; - }, - - _detectOrientation: function() { - this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; - }, - - _normValueFromMouse: function( position ) { - var pixelTotal, - pixelMouse, - percentMouse, - valueTotal, - valueMouse; - - if ( this.orientation === "horizontal" ) { - pixelTotal = this.elementSize.width; - pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); - } else { - pixelTotal = this.elementSize.height; - pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); - } - - percentMouse = ( pixelMouse / pixelTotal ); - if ( percentMouse > 1 ) { - percentMouse = 1; - } - if ( percentMouse < 0 ) { - percentMouse = 0; - } - if ( this.orientation === "vertical" ) { - percentMouse = 1 - percentMouse; - } - - valueTotal = this._valueMax() - this._valueMin(); - valueMouse = this._valueMin() + percentMouse * valueTotal; - - return this._trimAlignValue( valueMouse ); - }, - - _start: function( event, index ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - return this._trigger( "start", event, uiHash ); - }, - - _slide: function( event, index, newVal ) { - var otherVal, - newValues, - allowed; - - if ( this.options.values && this.options.values.length ) { - otherVal = this.values( index ? 0 : 1 ); - - if ( ( this.options.values.length === 2 && this.options.range === true ) && - ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) - ) { - newVal = otherVal; - } - - if ( newVal !== this.values( index ) ) { - newValues = this.values(); - newValues[ index ] = newVal; - // A slide can be canceled by returning false from the slide callback - allowed = this._trigger( "slide", event, { - handle: this.handles[ index ], - value: newVal, - values: newValues - } ); - otherVal = this.values( index ? 0 : 1 ); - if ( allowed !== false ) { - this.values( index, newVal, true ); - } - } - } else { - if ( newVal !== this.value() ) { - // A slide can be canceled by returning false from the slide callback - allowed = this._trigger( "slide", event, { - handle: this.handles[ index ], - value: newVal - } ); - if ( allowed !== false ) { - this.value( newVal ); - } - } - } - }, - - _stop: function( event, index ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - - this._trigger( "stop", event, uiHash ); - }, - - _change: function( event, index ) { - if ( !this._keySliding && !this._mouseSliding ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - - this._trigger( "change", event, uiHash ); - } - }, - - value: function( newValue ) { - if ( arguments.length ) { - this.options.value = this._trimAlignValue( newValue ); - this._refreshValue(); - this._change( null, 0 ); - } - - return this._value(); - }, - - values: function( index, newValue ) { - var vals, - newValues, - i; - - if ( arguments.length > 1 ) { - this.options.values[ index ] = this._trimAlignValue( newValue ); - this._refreshValue(); - this._change( null, index ); - } - - if ( arguments.length ) { - if ( $.isArray( arguments[ 0 ] ) ) { - vals = this.options.values; - newValues = arguments[ 0 ]; - for ( i = 0; i < vals.length; i += 1 ) { - vals[ i ] = this._trimAlignValue( newValues[ i ] ); - this._change( null, i ); - } - this._refreshValue(); - } else { - if ( this.options.values && this.options.values.length ) { - return this._values( index ); - } else { - return this.value(); - } - } - } else { - return this._values(); - } - }, - - _setOption: function( key, value ) { - var i, - valsLength = 0; - - if ( $.isArray( this.options.values ) ) { - valsLength = this.options.values.length; - } - - $.Widget.prototype._setOption.apply( this, arguments ); - - switch ( key ) { - case "disabled": - if ( value ) { - this.handles.filter( ".ui-state-focus" ).blur(); - this.handles.removeClass( "ui-state-hover" ); - this.handles.attr( "disabled", "disabled" ); - this.element.addClass( "ui-disabled" ); - } else { - this.handles.removeAttr( "disabled" ); - this.element.removeClass( "ui-disabled" ); - } - break; - case "orientation": - this._detectOrientation(); - this.element - .removeClass( "ui-slider-horizontal ui-slider-vertical" ) - .addClass( "ui-slider-" + this.orientation ); - this._refreshValue(); - break; - case "value": - this._animateOff = true; - this._refreshValue(); - this._change( null, 0 ); - this._animateOff = false; - break; - case "values": - this._animateOff = true; - this._refreshValue(); - for ( i = 0; i < valsLength; i += 1 ) { - this._change( null, i ); - } - this._animateOff = false; - break; - } - }, - - //internal value getter - // _value() returns value trimmed by min and max, aligned by step - _value: function() { - var val = this.options.value; - val = this._trimAlignValue( val ); - - return val; - }, - - //internal values getter - // _values() returns array of values trimmed by min and max, aligned by step - // _values( index ) returns single value trimmed by min and max, aligned by step - _values: function( index ) { - var val, - vals, - i; - - if ( arguments.length ) { - val = this.options.values[ index ]; - val = this._trimAlignValue( val ); - - return val; - } else { - // .slice() creates a copy of the array - // this copy gets trimmed by min and max and then returned - vals = this.options.values.slice(); - for ( i = 0; i < vals.length; i+= 1) { - vals[ i ] = this._trimAlignValue( vals[ i ] ); - } - - return vals; - } - }, - - // returns the step-aligned value that val is closest to, between (inclusive) min and max - _trimAlignValue: function( val ) { - if ( val <= this._valueMin() ) { - return this._valueMin(); - } - if ( val >= this._valueMax() ) { - return this._valueMax(); - } - var step = ( this.options.step > 0 ) ? this.options.step : 1, - valModStep = (val - this._valueMin()) % step; - alignValue = val - valModStep; - - if ( Math.abs(valModStep) * 2 >= step ) { - alignValue += ( valModStep > 0 ) ? step : ( -step ); - } - - // Since JavaScript has problems with large floats, round - // the final value to 5 digits after the decimal point (see #4124) - return parseFloat( alignValue.toFixed(5) ); - }, - - _valueMin: function() { - return this.options.min; - }, - - _valueMax: function() { - return this.options.max; - }, - - _refreshValue: function() { - var oRange = this.options.range, - o = this.options, - self = this, - animate = ( !this._animateOff ) ? o.animate : false, - valPercent, - _set = {}, - lastValPercent, - value, - valueMin, - valueMax; - - if ( this.options.values && this.options.values.length ) { - this.handles.each(function( i, j ) { - valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100; - _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; - $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); - if ( self.options.range === true ) { - if ( self.orientation === "horizontal" ) { - if ( i === 0 ) { - self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); - } - if ( i === 1 ) { - self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } else { - if ( i === 0 ) { - self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); - } - if ( i === 1 ) { - self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } - } - lastValPercent = valPercent; - }); - } else { - value = this.value(); - valueMin = this._valueMin(); - valueMax = this._valueMax(); - valPercent = ( valueMax !== valueMin ) ? - ( value - valueMin ) / ( valueMax - valueMin ) * 100 : - 0; - _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; - this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); - - if ( oRange === "min" && this.orientation === "horizontal" ) { - this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); - } - if ( oRange === "max" && this.orientation === "horizontal" ) { - this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - if ( oRange === "min" && this.orientation === "vertical" ) { - this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); - } - if ( oRange === "max" && this.orientation === "vertical" ) { - this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } - } - -}); - -$.extend( $.ui.slider, { - version: "1.8.7" -}); - -}(jQuery)); -/* - * Note: While Microsoft is not the author of this file, Microsoft is - * offering you a license subject to the terms of the Microsoft Software - * License Terms for Microsoft ASP.NET Model View Controller 3. - * Microsoft reserves all other rights. The notices below are provided - * for informational purposes only and are not the license terms under - * which Microsoft distributed this file. - * - * jQuery UI Tabs 1.8.7 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -var tabId = 0, - listId = 0; - -function getNextTabId() { - return ++tabId; -} - -function getNextListId() { - return ++listId; -} - -$.widget( "ui.tabs", { - options: { - add: null, - ajaxOptions: null, - cache: false, - cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } - collapsible: false, - disable: null, - disabled: [], - enable: null, - event: "click", - fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } - idPrefix: "ui-tabs-", - load: null, - panelTemplate: "
    ", - remove: null, - select: null, - show: null, - spinner: "Loading…", - tabTemplate: "
  • #{label}
  • " - }, - - _create: function() { - this._tabify( true ); - }, - - _setOption: function( key, value ) { - if ( key == "selected" ) { - if (this.options.collapsible && value == this.options.selected ) { - return; - } - this.select( value ); - } else { - this.options[ key ] = value; - this._tabify(); - } - }, - - _tabId: function( a ) { - return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) || - this.options.idPrefix + getNextTabId(); - }, - - _sanitizeSelector: function( hash ) { - // we need this because an id may contain a ":" - return hash.replace( /:/g, "\\:" ); - }, - - _cookie: function() { - var cookie = this.cookie || - ( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() ); - return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) ); - }, - - _ui: function( tab, panel ) { - return { - tab: tab, - panel: panel, - index: this.anchors.index( tab ) - }; - }, - - _cleanup: function() { - // restore all former loading tabs labels - this.lis.filter( ".ui-state-processing" ) - .removeClass( "ui-state-processing" ) - .find( "span:data(label.tabs)" ) - .each(function() { - var el = $( this ); - el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" ); - }); - }, - - _tabify: function( init ) { - var self = this, - o = this.options, - fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash - - this.list = this.element.find( "ol,ul" ).eq( 0 ); - this.lis = $( " > li:has(a[href])", this.list ); - this.anchors = this.lis.map(function() { - return $( "a", this )[ 0 ]; - }); - this.panels = $( [] ); - - this.anchors.each(function( i, a ) { - var href = $( a ).attr( "href" ); - // For dynamically created HTML that contains a hash as href IE < 8 expands - // such href to the full page url with hash and then misinterprets tab as ajax. - // Same consideration applies for an added tab with a fragment identifier - // since a[href=#fragment-identifier] does unexpectedly not match. - // Thus normalize href attribute... - var hrefBase = href.split( "#" )[ 0 ], - baseEl; - if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] || - ( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) { - href = a.hash; - a.href = href; - } - - // inline tab - if ( fragmentId.test( href ) ) { - self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) ); - // remote tab - // prevent loading the page itself if href is just "#" - } else if ( href && href !== "#" ) { - // required for restore on destroy - $.data( a, "href.tabs", href ); - - // TODO until #3808 is fixed strip fragment identifier from url - // (IE fails to load from such url) - $.data( a, "load.tabs", href.replace( /#.*$/, "" ) ); - - var id = self._tabId( a ); - a.href = "#" + id; - var $panel = self.element.find( "#" + id ); - if ( !$panel.length ) { - $panel = $( o.panelTemplate ) - .attr( "id", id ) - .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) - .insertAfter( self.panels[ i - 1 ] || self.list ); - $panel.data( "destroy.tabs", true ); - } - self.panels = self.panels.add( $panel ); - // invalid tab href - } else { - o.disabled.push( i ); - } - }); - - // initialization from scratch - if ( init ) { - // attach necessary classes for styling - this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ); - this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); - this.lis.addClass( "ui-state-default ui-corner-top" ); - this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ); - - // Selected tab - // use "selected" option or try to retrieve: - // 1. from fragment identifier in url - // 2. from cookie - // 3. from selected class attribute on
  • - if ( o.selected === undefined ) { - if ( location.hash ) { - this.anchors.each(function( i, a ) { - if ( a.hash == location.hash ) { - o.selected = i; - return false; - } - }); - } - if ( typeof o.selected !== "number" && o.cookie ) { - o.selected = parseInt( self._cookie(), 10 ); - } - if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) { - o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); - } - o.selected = o.selected || ( this.lis.length ? 0 : -1 ); - } else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release - o.selected = -1; - } - - // sanity check - default to first tab... - o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 ) - ? o.selected - : 0; - - // Take disabling tabs via class attribute from HTML - // into account and update option properly. - // A selected tab cannot become disabled. - o.disabled = $.unique( o.disabled.concat( - $.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) { - return self.lis.index( n ); - }) - ) ).sort(); - - if ( $.inArray( o.selected, o.disabled ) != -1 ) { - o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 ); - } - - // highlight selected tab - this.panels.addClass( "ui-tabs-hide" ); - this.lis.removeClass( "ui-tabs-selected ui-state-active" ); - // check for length avoids error when initializing empty list - if ( o.selected >= 0 && this.anchors.length ) { - self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" ); - this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" ); - - // seems to be expected behavior that the show callback is fired - self.element.queue( "tabs", function() { - self._trigger( "show", null, - self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ) ) ); - }); - - this.load( o.selected ); - } - - // clean up to avoid memory leaks in certain versions of IE 6 - // TODO: namespace this event - $( window ).bind( "unload", function() { - self.lis.add( self.anchors ).unbind( ".tabs" ); - self.lis = self.anchors = self.panels = null; - }); - // update selected after add/remove - } else { - o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); - } - - // update collapsible - // TODO: use .toggleClass() - this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" ); - - // set or update cookie after init and add/remove respectively - if ( o.cookie ) { - this._cookie( o.selected, o.cookie ); - } - - // disable tabs - for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) { - $( li )[ $.inArray( i, o.disabled ) != -1 && - // TODO: use .toggleClass() - !$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" ); - } - - // reset cache if switching from cached to not cached - if ( o.cache === false ) { - this.anchors.removeData( "cache.tabs" ); - } - - // remove all handlers before, tabify may run on existing tabs after add or option change - this.lis.add( this.anchors ).unbind( ".tabs" ); - - if ( o.event !== "mouseover" ) { - var addState = function( state, el ) { - if ( el.is( ":not(.ui-state-disabled)" ) ) { - el.addClass( "ui-state-" + state ); - } - }; - var removeState = function( state, el ) { - el.removeClass( "ui-state-" + state ); - }; - this.lis.bind( "mouseover.tabs" , function() { - addState( "hover", $( this ) ); - }); - this.lis.bind( "mouseout.tabs", function() { - removeState( "hover", $( this ) ); - }); - this.anchors.bind( "focus.tabs", function() { - addState( "focus", $( this ).closest( "li" ) ); - }); - this.anchors.bind( "blur.tabs", function() { - removeState( "focus", $( this ).closest( "li" ) ); - }); - } - - // set up animations - var hideFx, showFx; - if ( o.fx ) { - if ( $.isArray( o.fx ) ) { - hideFx = o.fx[ 0 ]; - showFx = o.fx[ 1 ]; - } else { - hideFx = showFx = o.fx; - } - } - - // Reset certain styles left over from animation - // and prevent IE's ClearType bug... - function resetStyle( $el, fx ) { - $el.css( "display", "" ); - if ( !$.support.opacity && fx.opacity ) { - $el[ 0 ].style.removeAttribute( "filter" ); - } - } - - // Show a tab... - var showTab = showFx - ? function( clicked, $show ) { - $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); - $show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way - .animate( showFx, showFx.duration || "normal", function() { - resetStyle( $show, showFx ); - self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); - }); - } - : function( clicked, $show ) { - $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); - $show.removeClass( "ui-tabs-hide" ); - self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); - }; - - // Hide a tab, $show is optional... - var hideTab = hideFx - ? function( clicked, $hide ) { - $hide.animate( hideFx, hideFx.duration || "normal", function() { - self.lis.removeClass( "ui-tabs-selected ui-state-active" ); - $hide.addClass( "ui-tabs-hide" ); - resetStyle( $hide, hideFx ); - self.element.dequeue( "tabs" ); - }); - } - : function( clicked, $hide, $show ) { - self.lis.removeClass( "ui-tabs-selected ui-state-active" ); - $hide.addClass( "ui-tabs-hide" ); - self.element.dequeue( "tabs" ); - }; - - // attach tab event handler, unbind to avoid duplicates from former tabifying... - this.anchors.bind( o.event + ".tabs", function() { - var el = this, - $li = $(el).closest( "li" ), - $hide = self.panels.filter( ":not(.ui-tabs-hide)" ), - $show = self.element.find( self._sanitizeSelector( el.hash ) ); - - // If tab is already selected and not collapsible or tab disabled or - // or is already loading or click callback returns false stop here. - // Check if click handler returns false last so that it is not executed - // for a disabled or loading tab! - if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) || - $li.hasClass( "ui-state-disabled" ) || - $li.hasClass( "ui-state-processing" ) || - self.panels.filter( ":animated" ).length || - self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) { - this.blur(); - return false; - } - - o.selected = self.anchors.index( this ); - - self.abort(); - - // if tab may be closed - if ( o.collapsible ) { - if ( $li.hasClass( "ui-tabs-selected" ) ) { - o.selected = -1; - - if ( o.cookie ) { - self._cookie( o.selected, o.cookie ); - } - - self.element.queue( "tabs", function() { - hideTab( el, $hide ); - }).dequeue( "tabs" ); - - this.blur(); - return false; - } else if ( !$hide.length ) { - if ( o.cookie ) { - self._cookie( o.selected, o.cookie ); - } - - self.element.queue( "tabs", function() { - showTab( el, $show ); - }); - - // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171 - self.load( self.anchors.index( this ) ); - - this.blur(); - return false; - } - } - - if ( o.cookie ) { - self._cookie( o.selected, o.cookie ); - } - - // show new tab - if ( $show.length ) { - if ( $hide.length ) { - self.element.queue( "tabs", function() { - hideTab( el, $hide ); - }); - } - self.element.queue( "tabs", function() { - showTab( el, $show ); - }); - - self.load( self.anchors.index( this ) ); - } else { - throw "jQuery UI Tabs: Mismatching fragment identifier."; - } - - // Prevent IE from keeping other link focussed when using the back button - // and remove dotted border from clicked link. This is controlled via CSS - // in modern browsers; blur() removes focus from address bar in Firefox - // which can become a usability and annoying problem with tabs('rotate'). - if ( $.browser.msie ) { - this.blur(); - } - }); - - // disable click in any case - this.anchors.bind( "click.tabs", function(){ - return false; - }); - }, - - _getIndex: function( index ) { - // meta-function to give users option to provide a href string instead of a numerical index. - // also sanitizes numerical indexes to valid values. - if ( typeof index == "string" ) { - index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) ); - } - - return index; - }, - - destroy: function() { - var o = this.options; - - this.abort(); - - this.element - .unbind( ".tabs" ) - .removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ) - .removeData( "tabs" ); - - this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); - - this.anchors.each(function() { - var href = $.data( this, "href.tabs" ); - if ( href ) { - this.href = href; - } - var $this = $( this ).unbind( ".tabs" ); - $.each( [ "href", "load", "cache" ], function( i, prefix ) { - $this.removeData( prefix + ".tabs" ); - }); - }); - - this.lis.unbind( ".tabs" ).add( this.panels ).each(function() { - if ( $.data( this, "destroy.tabs" ) ) { - $( this ).remove(); - } else { - $( this ).removeClass([ - "ui-state-default", - "ui-corner-top", - "ui-tabs-selected", - "ui-state-active", - "ui-state-hover", - "ui-state-focus", - "ui-state-disabled", - "ui-tabs-panel", - "ui-widget-content", - "ui-corner-bottom", - "ui-tabs-hide" - ].join( " " ) ); - } - }); - - if ( o.cookie ) { - this._cookie( null, o.cookie ); - } - - return this; - }, - - add: function( url, label, index ) { - if ( index === undefined ) { - index = this.anchors.length; - } - - var self = this, - o = this.options, - $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ), - id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] ); - - $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true ); - - // try to find an existing element before creating a new one - var $panel = self.element.find( "#" + id ); - if ( !$panel.length ) { - $panel = $( o.panelTemplate ) - .attr( "id", id ) - .data( "destroy.tabs", true ); - } - $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" ); - - if ( index >= this.lis.length ) { - $li.appendTo( this.list ); - $panel.appendTo( this.list[ 0 ].parentNode ); - } else { - $li.insertBefore( this.lis[ index ] ); - $panel.insertBefore( this.panels[ index ] ); - } - - o.disabled = $.map( o.disabled, function( n, i ) { - return n >= index ? ++n : n; - }); - - this._tabify(); - - if ( this.anchors.length == 1 ) { - o.selected = 0; - $li.addClass( "ui-tabs-selected ui-state-active" ); - $panel.removeClass( "ui-tabs-hide" ); - this.element.queue( "tabs", function() { - self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) ); - }); - - this.load( 0 ); - } - - this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - return this; - }, - - remove: function( index ) { - index = this._getIndex( index ); - var o = this.options, - $li = this.lis.eq( index ).remove(), - $panel = this.panels.eq( index ).remove(); - - // If selected tab was removed focus tab to the right or - // in case the last tab was removed the tab to the left. - if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) { - this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) ); - } - - o.disabled = $.map( - $.grep( o.disabled, function(n, i) { - return n != index; - }), - function( n, i ) { - return n >= index ? --n : n; - }); - - this._tabify(); - - this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) ); - return this; - }, - - enable: function( index ) { - index = this._getIndex( index ); - var o = this.options; - if ( $.inArray( index, o.disabled ) == -1 ) { - return; - } - - this.lis.eq( index ).removeClass( "ui-state-disabled" ); - o.disabled = $.grep( o.disabled, function( n, i ) { - return n != index; - }); - - this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - return this; - }, - - disable: function( index ) { - index = this._getIndex( index ); - var self = this, o = this.options; - // cannot disable already selected tab - if ( index != o.selected ) { - this.lis.eq( index ).addClass( "ui-state-disabled" ); - - o.disabled.push( index ); - o.disabled.sort(); - - this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - } - - return this; - }, - - select: function( index ) { - index = this._getIndex( index ); - if ( index == -1 ) { - if ( this.options.collapsible && this.options.selected != -1 ) { - index = this.options.selected; - } else { - return this; - } - } - this.anchors.eq( index ).trigger( this.options.event + ".tabs" ); - return this; - }, - - load: function( index ) { - index = this._getIndex( index ); - var self = this, - o = this.options, - a = this.anchors.eq( index )[ 0 ], - url = $.data( a, "load.tabs" ); - - this.abort(); - - // not remote or from cache - if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) { - this.element.dequeue( "tabs" ); - return; - } - - // load remote from here on - this.lis.eq( index ).addClass( "ui-state-processing" ); - - if ( o.spinner ) { - var span = $( "span", a ); - span.data( "label.tabs", span.html() ).html( o.spinner ); - } - - this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, { - url: url, - success: function( r, s ) { - self.element.find( self._sanitizeSelector( a.hash ) ).html( r ); - - // take care of tab labels - self._cleanup(); - - if ( o.cache ) { - $.data( a, "cache.tabs", true ); - } - - self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); - try { - o.ajaxOptions.success( r, s ); - } - catch ( e ) {} - }, - error: function( xhr, s, e ) { - // take care of tab labels - self._cleanup(); - - self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); - try { - // Passing index avoid a race condition when this method is - // called after the user has selected another tab. - // Pass the anchor that initiated this request allows - // loadError to manipulate the tab content panel via $(a.hash) - o.ajaxOptions.error( xhr, s, index, a ); - } - catch ( e ) {} - } - } ) ); - - // last, so that load event is fired before show... - self.element.dequeue( "tabs" ); - - return this; - }, - - abort: function() { - // stop possibly running animations - this.element.queue( [] ); - this.panels.stop( false, true ); - - // "tabs" queue must not contain more than two elements, - // which are the callbacks for the latest clicked tab... - this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) ); - - // terminate pending requests from other tabs - if ( this.xhr ) { - this.xhr.abort(); - delete this.xhr; - } - - // take care of tab labels - this._cleanup(); - return this; - }, - - url: function( index, url ) { - this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url ); - return this; - }, - - length: function() { - return this.anchors.length; - } -}); - -$.extend( $.ui.tabs, { - version: "1.8.7" -}); - -/* - * Tabs Extensions - */ - -/* - * Rotate - */ -$.extend( $.ui.tabs.prototype, { - rotation: null, - rotate: function( ms, continuing ) { - var self = this, - o = this.options; - - var rotate = self._rotate || ( self._rotate = function( e ) { - clearTimeout( self.rotation ); - self.rotation = setTimeout(function() { - var t = o.selected; - self.select( ++t < self.anchors.length ? t : 0 ); - }, ms ); - - if ( e ) { - e.stopPropagation(); - } - }); - - var stop = self._unrotate || ( self._unrotate = !continuing - ? function(e) { - if (e.clientX) { // in case of a true click - self.rotate(null); - } - } - : function( e ) { - t = o.selected; - rotate(); - }); - - // start rotation - if ( ms ) { - this.element.bind( "tabsshow", rotate ); - this.anchors.bind( o.event + ".tabs", stop ); - rotate(); - // stop rotation - } else { - clearTimeout( self.rotation ); - this.element.unbind( "tabsshow", rotate ); - this.anchors.unbind( o.event + ".tabs", stop ); - delete this._rotate; - delete this._unrotate; - } - - return this; - } -}); - -})( jQuery ); diff --git a/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.editable.js b/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.editable.js deleted file mode 100644 index 316300732..000000000 --- a/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.editable.js +++ /dev/null @@ -1,702 +0,0 @@ -/* -* File: jquery.dataTables.editable.js -* Version: 1.3. -* Author: Jovan Popovic -* -* Copyright 2010-2011 Jovan Popovic, all rights reserved. -* -* This source file is free software, under either the GPL v2 license or a -* BSD style license, as supplied with this software. -* -* This source file is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -* or FITNESS FOR A PARTICULAR PURPOSE. -* -* Parameters: -* @sUpdateURL String URL of the server-side page used for updating cell. Default value is "UpdateData". -* @sAddURL String URL of the server-side page used for adding new row. Default value is "AddData". -* @sDeleteURL String URL of the server-side page used to delete row by id. Default value is "DeleteData". -* @fnShowError Function function(message, action){...} used to show error message. Action value can be "update", "add" or "delete". -* @sAddNewRowFormId String Id of the form for adding new row. Default id is "formAddNewRow". -* @oAddNewRowFormOptions Object Options that will be set to the "Add new row" dialog -* @sAddNewRowButtonId String Id of the button for adding new row. Default id is "btnAddNewRow". -* @oAddNewRowButtonOptions Object Options that will be set to the "Add new" button -* @sAddNewRowOkButtonId String Id of the OK button placed in add new row dialog. Default value is "btnAddNewRowOk". -* @oAddNewRowOkButtonOptions Object Options that will be set to the Ok button in the "Add new row" form -* @sAddNewRowCancelButtonId String Id of the Cancel button placed in add new row dialog. Default value is "btnAddNewRowCancel". -* @oAddNewRowCancelButtonOptions Object Options that will be set to the Cancel button in the "Add new row" form -* @sDeleteRowButtonId String Id of the button for adding new row. Default id is "btnDeleteRow". -* @oDeleteRowButtonOptions Object Options that will be set to the Delete button -* @sSelectedRowClass String Class that will be associated to the selected row. Default class is "row_selected". -* @sReadOnlyCellClass String Class of the cells that should not be editable. Default value is "read_only". -* @sAddDeleteToolbarSelector String Selector used to identify place where add and delete buttons should be placed. Default value is ".add_delete_toolbar". -* @fnStartProcessingMode Function function(){...} called when AJAX call is started. Use this function to add "Please wait..." message when some button is pressed. -* @fnEndProcessingMode Function function(){...} called when AJAX call is ended. Use this function to close "Please wait..." message. -* @aoColumns Array Array of the JEditable settings that will be applied on the columns -* @sAddHttpMethod String Method used for the Add AJAX request (default is 'POST') -* @sDeleteHttpMethod String Method used for the Delete AJAX request (default is 'POST') -* @fnOnDeleting Function function(tr, id, fnDeleteRow){...} Function called before row is deleted. - tr isJQuery object encapsulating row that will be deleted - id is an id of the record that will be deleted. - fnDeleteRow(id) callback function that should be called to delete row with id - returns true if plugin should continue with deleting row, false will abort delete. -* @fnOnDeleted Function function(status){...} Function called after delete action. Status can be "success" or "failure" -* @fnOnAdding Function function(){...} Function called before row is added. - returns true if plugin should continue with adding row, false will abort add. -* @fnOnNewRowPosted Function function(data) Function that can override default function that is called when server-side sAddURL returns result - You can use this function to add different behaviour when server-side page returns result -* @fnOnAdded Function function(status){...} Function called after delete action. Status can be "success" or "failure" -* @fnOnEditing Function function(input){...} Function called before cell is updated. - input JQuery object wrapping the inut element used for editing value in the cell. - returns true if plugin should continue with sending AJAX request, false will abort update. -* @fnOnEdited Function function(status){...} Function called after edit action. Status can be "success" or "failure" -* @sEditorHeight String Default height of the cell editors -* @sEditorWidth String Default width of the cell editors -* @oDeleteParameters Object Additonal objects added to the DELETE Ajax request -* @sIDToken String Token in the add new row dialog that will be replaced with a returned id of the record that is created -*/ -(function ($) { - - $.fn.makeEditable = function (options) { - - var iDisplayStart = 0; - - ///Utility function used to determine id of the cell - //By default it is assumed that id is placed as an id attribute of
  • that that surround the cell ( - // - // - function fnGetCellID(cell) { - return properties.fnGetRowID($(cell.parentNode)); - } - - ///Utility function used to set id of the new row - //It is assumed that id is placed as an id attribute of that that surround the cell ( - // - // - function _fnSetRowIDInAttribute(row, id) { - row.attr("id", id); - } - - //Utility function used to get id of the row - //It is assumed that id is placed as an id attribute of that that surround the cell ( - // - // - function _fnGetRowIDFromAttribute(row) { - return row.attr("id"); - } - - //Utility function used to set id of the new row - //It is assumed that id is placed as an id attribute of that that surround the cell ( - // - // - function _fnSetRowIDInFirstCell(row, id) { - $("td:first", row).html(id); - } - - //Utility function used to get id of the row - //It is assumed that id is placed as an id attribute of that that surround the cell ( - // - // - function _fnGetRowIDFromFirstCell(row) { - return $("td:first", row).html(); - } - - //Reference to the DataTable object - var oTable; - //Refences to the buttons used for manipulating table data - var oAddNewRowButton, oDeleteRowButton, oConfirmRowAddingButton, oCancelRowAddingButton; - //Reference to the form used for adding new data - var oAddNewRowForm; - - //Plugin options - var properties; - - /// Utility function that shows an error message - ///@param errorText - text that should be shown - ///@param action - action that was executed when error occured e.g. "update", "delete", or "add" - function fnShowError(errorText, action) { - alert(errorText); - } - - //Utility function that put the table into the "Processing" state - function fnStartProcessingMode() { - if (oTable.fnSettings().oFeatures.bProcessing) { - $(".dataTables_processing").css('visibility', 'visible'); - } - } - - //Utility function that put the table in the normal state - function fnEndProcessingMode() { - if (oTable.fnSettings().oFeatures.bProcessing) { - $(".dataTables_processing").css('visibility', 'hidden'); - } - } - - var sOldValue, sNewCellValue, sNewCellDislayValue; - //Utility function used to apply editable plugin on table cells - function _fnApplyEditable(aoNodes) { - if (properties.bDisableEditing) - return; - var oDefaultEditableSettings = { - event: 'dblclick', - "callback": function (sValue, settings) { - properties.fnEndProcessingMode(); - var status = ""; - if (sNewCellValue == sValue) { - var aPos = oTable.fnGetPosition(this); - oTable.fnUpdate(sNewCellDisplayValue, aPos[0], aPos[2]); - status = "success"; - } else { - var aPos = oTable.fnGetPosition(this); - oTable.fnUpdate(sOldValue, aPos[0], aPos[2]); - properties.fnShowError(sValue, "update"); - status = "failure"; - } - - properties.fnOnEdited(status, sOldValue, sNewCellDisplayValue, aPos[0], aPos[1], aPos[2]); - if (settings.fnOnCellUpdated != null) { - settings.fnOnCellUpdated(status, sValue, settings); - } - _fnSetDisplayStart(); - - }, - "onsubmit": function (settings, original) { - var input = $("input,select,textarea", this); - sOldValue = original.revert; - sNewCellValue = $("input,select,textarea", $(this)).val(); - if (input.length == 1) { - var oEditElement = input[0]; - if (oEditElement.nodeName.toLowerCase() == "select" || oEditElement.tagName.toLowerCase() == "select") - sNewCellDisplayValue = $("option:selected", oEditElement).text(); //For select list use selected text instead of value for displaying in table - else - sNewCellDisplayValue = sNewCellValue; - } - - if (!properties.fnOnEditing(input)) - return false; - var x = settings; - if (settings.cssclass != null) { - input.addClass(settings.cssclass); - if (!input.valid() || 0 == input.valid()) - return false; - else - return true; - } - }, - "submitdata": function (value, settings) { - iDisplayStart = _fnGetDisplayStart(); - properties.fnStartProcessingMode(); - var id = fnGetCellID(this); - var rowId = oTable.fnGetPosition(this)[0]; - var columnPosition = oTable.fnGetPosition(this)[1]; - var columnId = oTable.fnGetPosition(this)[2]; - var sColumnName = oTable.fnSettings().aoColumns[columnId].sName; - if (sColumnName == null || sColumnName == "") - sColumnName = oTable.fnSettings().aoColumns[columnId].sTitle; - return { - "id": id, - "rowId": rowId, - "columnPosition": columnPosition, - "columnId": columnId, - "columnName": sColumnName - }; - }, - "onerror": function () { - properties.fnEndProcessingMode(); - properties.fnShowError("Cell cannot be updated(Server error)", "update"); - properties.fnOnEdited("failure"); - }, - "height": properties.sEditorHeight, - "width": properties.sEditorWidth - }; - - var cells = null; - if (properties.aoColumns != null) { - for (var i = 0; i < properties.aoColumns.length; i++) { - if (properties.aoColumns[i] != null) { - cells = $("td:nth-child(" + (i + 1) + ")", aoNodes); - var oColumnSettings = oDefaultEditableSettings; - oColumnSettings = $.extend({}, oDefaultEditableSettings, properties.aoColumns[i]); - var sUpdateURL = properties.sUpdateURL; - try { - if (oColumnSettings.sUpdateURL != null) - sUpdateURL = oColumnSettings.sUpdateURL; - } catch (ex) { - } - cells.editable(sUpdateURL, oColumnSettings); - } - - - } - } else { - cells = $('td:not(.' + properties.sReadOnlyCellClass + ')', aoNodes); - cells.editable(properties.sUpdateURL, oDefaultEditableSettings); - - } - - } - - //Called when user confirm that he want to add new record - function _fnOnRowAdding(event) { - if (properties.fnOnAdding()) { - if (oAddNewRowForm.valid()) { - iDisplayStart = _fnGetDisplayStart(); - properties.fnStartProcessingMode(); - var params = oAddNewRowForm.serialize(); - $.ajax({ 'url': properties.sAddURL, - 'data': params, - 'type': properties.sAddHttpMethod, - "dataType": "text", - success: _fnOnRowAdded, - error: function (response) { - properties.fnEndProcessingMode(); - properties.fnShowError(response.responseText, "add"); - properties.fnOnAdded("failure"); - } - }); - } - } - event.stopPropagation(); - event.preventDefault(); - } - - function _fnOnNewRowPosted(data) { - - return true; - - } - ///Event handler called when a new row is added and response is returned from server - function _fnOnRowAdded(data) { - properties.fnEndProcessingMode(); - - if (properties.fnOnNewRowPosted(data)) { - - var oSettings = oTable.fnSettings(); - var iColumnCount = oSettings.aoColumns.length; - var values = new Array(); - - $("input:text[rel],input:radio[rel][checked],input:hidden[rel],select[rel],textarea[rel],span.datafield[rel]", oAddNewRowForm).each(function () { - var rel = $(this).attr("rel"); - var sCellValue = ""; - if (rel >= iColumnCount) - properties.fnShowError("In the add form is placed input element with the name '" + $(this).attr("name") + "' with the 'rel' attribute that must be less than a column count - " + iColumnCount, "add"); - else { - if (this.nodeName.toLowerCase() == "select" || this.tagName.toLowerCase() == "select") - sCellValue = $("option:selected", this).text(); - else if (this.nodeName.toLowerCase() == "span" || this.tagName.toLowerCase() == "span") - sCellValue = $(this).html(); - else - sCellValue = this.value; - - sCellValue = sCellValue.replace(properties.sIDToken, data); - values[rel] = sCellValue; - } - }); - - //Add values from the form into the table - var rtn = oTable.fnAddData(values); - var oTRAdded = oTable.fnGetNodes(rtn); - //Apply editable plugin on the cells of the table - _fnApplyEditable(oTRAdded); - //add id returned by server page as an TR id attribute - properties.fnSetRowID($(oTRAdded), data); - //Close the dialog - oAddNewRowForm.dialog('close'); - $(oAddNewRowForm)[0].reset(); - $(".error", $(oAddNewRowForm)).html(""); - - _fnSetDisplayStart(); - properties.fnOnAdded("success"); - } - } - - //Called when user cancels adding new record in the popup dialog - function _fnOnCancelRowAdding(event) { - //Clear the validation messages and reset form - $(oAddNewRowForm).validate().resetForm(); // Clears the validation errors - $(oAddNewRowForm)[0].reset(); - - $(".error", $(oAddNewRowForm)).html(""); - $(".error", $(oAddNewRowForm)).hide(); // Hides the error element - - //Close the dialog - oAddNewRowForm.dialog('close'); - event.stopPropagation(); - event.preventDefault(); - } - - - - function _fnDisableDeleteButton() { - if (properties.oDeleteRowButtonOptions != null) { - //oDeleteRowButton.disable(); - oDeleteRowButton.button("option", "disabled", true); - } else { - oDeleteRowButton.attr("disabled", "true"); - } - } - - function _fnEnableDeleteButton() { - if (properties.oDeleteRowButtonOptions != null) { - //oDeleteRowButton.enable(); - oDeleteRowButton.button("option", "disabled", false); - } else { - oDeleteRowButton.removeAttr("disabled"); - } - } - - function _fnDeleteRow(id, sDeleteURL) { - var sURL = sDeleteURL; - if (sDeleteURL == null) - sURL = properties.sDeleteURL; - properties.fnStartProcessingMode(); - var data = $.extend(properties.oDeleteParameters, { "id": id }); - $.ajax({ 'url': sURL, - 'type': properties.sDeleteHttpMethod, - 'data': data, - "success": _fnOnRowDeleted, - "dataType": "text", - "error": function (response) { - properties.fnEndProcessingMode(); - properties.fnShowError(response.responseText, "delete"); - properties.fnOnDeleted("failure"); - - } - }); - } - - //Called when user deletes a row - function _fnOnRowDelete(event) { - iDisplayStart = _fnGetDisplayStart(); - if ($('tr.' + properties.sSelectedRowClass + ' td', oTable).length == 0) { - //oDeleteRowButton.attr("disabled", "true"); - _fnDisableDeleteButton(); - return; - } - var id = fnGetCellID($('tr.' + properties.sSelectedRowClass + ' td', oTable)[0]); - if (properties.fnOnDeleting($('tr.' + properties.sSelectedRowClass, oTable), id, _fnDeleteRow)) { - _fnDeleteRow(id); - } - } - - //Called when record is deleted on the server - function _fnOnRowDeleted(response) { - properties.fnEndProcessingMode(); - var oTRSelected = $('tr.' + properties.sSelectedRowClass, oTable)[0]; - if (response == "ok" || response == "") { - oTable.fnDeleteRow(oTRSelected); - //oDeleteRowButton.attr("disabled", "true"); - _fnDisableDeleteButton(); - _fnSetDisplayStart(); - properties.fnOnDeleted("success"); - } - else { - properties.fnShowError(response, "delete"); - properties.fnOnDeleted("failure"); - } - } - - //Called before row is deleted - //Returning false will abort delete - /* - * Function called before row is deleted - * @param tr JQuery wrapped around the TR tag that will be deleted - * @param id id of the record that wil be deleted - * @return true if plugin should continue with deleting row, false will abort delete. - */ - function fnOnDeleting(tr, id, fnDeleteRow) { - return confirm("Are you sure that you want to delete this record?"); ; - } - - /* Function called after delete action - * @param result string - * "success" if row is actually deleted - * "failure" if delete failed - * @return void - */ - function fnOnDeleted(result) { } - - function fnOnEditing(input) { return true; } - function fnOnEdited(result, sOldValue, sNewValue, iRowIndex, iColumnIndex, iRealColumnIndex) { - - } - - function fnOnAdding() { return true; } - function fnOnAdded(result) { } - - var oSettings; - function _fnGetDisplayStart() { - return oSettings._iDisplayStart; - } - - function _fnSetDisplayStart() { - if (oSettings.oFeatures.bServerSide === false) { - oSettings._iDisplayStart = iDisplayStart; - oSettings.oApi._fnCalculateEnd(oSettings); - //draw the 'current' page - oSettings.oApi._fnDraw(oSettings); - } - } - - - oTable = this; - - var defaults = { - - sUpdateURL: "UpdateData", - sAddURL: "AddData", - sDeleteURL: "DeleteData", - sAddNewRowFormId: "formAddNewRow", - oAddNewRowFormOptions: { autoOpen: false, modal: true }, - sAddNewRowButtonId: "btnAddNewRow", - oAddNewRowButtonOptions: null, - sAddNewRowOkButtonId: "btnAddNewRowOk", - sAddNewRowCancelButtonId: "btnAddNewRowCancel", - oAddNewRowOkButtonOptions: { label: "Ok" }, - oAddNewRowCancelButtonOptions: { label: "Cancel" }, - sDeleteRowButtonId: "btnDeleteRow", - oDeleteRowButtonOptions: null, - sSelectedRowClass: "row_selected", - sReadOnlyCellClass: "read_only", - sAddDeleteToolbarSelector: ".add_delete_toolbar", - fnShowError: fnShowError, - fnStartProcessingMode: fnStartProcessingMode, - fnEndProcessingMode: fnEndProcessingMode, - aoColumns: null, - fnOnDeleting: fnOnDeleting, - fnOnDeleted: fnOnDeleted, - fnOnAdding: fnOnAdding, - fnOnNewRowPosted: _fnOnNewRowPosted, - fnOnAdded: fnOnAdded, - fnOnEditing: fnOnEditing, - fnOnEdited: fnOnEdited, - sAddHttpMethod: 'POST', - sDeleteHttpMethod: 'POST', - fnGetRowID: _fnGetRowIDFromAttribute, - fnSetRowID: _fnSetRowIDInAttribute, - sEditorHeight: "100%", - sEditorWidth: "100%", - bDisableEditing: false, - oDeleteParameters: {}, - sIDToken: "DATAROWID" - - }; - - properties = $.extend(defaults, options); - oSettings = oTable.fnSettings(); - - return this.each(function () { - - if (oTable.fnSettings().sAjaxSource != null) { - oTable.fnSettings().aoDrawCallback.push({ - "fn": function () { - //Apply jEditable plugin on the table cells - _fnApplyEditable(oTable.fnGetNodes()); - $(oTable.fnGetNodes()).each(function () { - var position = oTable.fnGetPosition(this); - var id = oTable.fnGetData(position)[0]; - properties.fnSetRowID($(this), id); - } - ); - }, - "sName": "fnApplyEditable" - }); - - } else { - //Apply jEditable plugin on the table cells - _fnApplyEditable(oTable.fnGetNodes()); - } - - //Setup form to open in dialog - oAddNewRowForm = $("#" + properties.sAddNewRowFormId); - if (oAddNewRowForm.length != 0) { - if (properties.oAddNewRowFormOptions != null) { - properties.oAddNewRowFormOptions.autoOpen = false; - } else { - properties.oAddNewRowFormOptions = { autoOpen: false }; - } - oAddNewRowForm.dialog(properties.oAddNewRowFormOptions); - - //Add button click handler on the "Add new row" button - oAddNewRowButton = $("#" + properties.sAddNewRowButtonId); - if (oAddNewRowButton.length != 0) { - oAddNewRowButton.click(function () { - oAddNewRowForm.dialog('open'); - }); - } else { - if ($(properties.sAddDeleteToolbarSelector).length == 0) { - throw "Cannot find a button with an id '" + properties.sAddNewRowButtonId + "', od placeholder with an id '" + properties.sAddDeleteToolbarSelector + "' that should be used for adding new row although form for adding new record is specified"; - } else { - oAddNewRowButton = null; //It will be auto-generated later - } - } - - //Prevent Submit handler - if (oAddNewRowForm[0].nodeName.toLowerCase() == "form") { - oAddNewRowForm.unbind('submit'); - oAddNewRowForm.submit(function (event) { - _fnOnRowAdding(event); - return false; - }); - } else { - $("form", oAddNewRowForm[0]).unbind('submit'); - $("form", oAddNewRowForm[0]).submit(function (event) { - _fnOnRowAdding(event); - return false; - }); - } - - // array to add default buttons to - var aAddNewRowFormButtons = []; - - oConfirmRowAddingButton = $("#" + properties.sAddNewRowOkButtonId, oAddNewRowForm); - if (oConfirmRowAddingButton.length == 0) { - //If someone forgotten to set the button text - if (properties.oAddNewRowOkButtonOptions.text == null - || properties.oAddNewRowOkButtonOptions.text == "") { - properties.oAddNewRowOkButtonOptions.text = "Ok"; - } - properties.oAddNewRowOkButtonOptions.click = _fnOnRowAdding; - properties.oAddNewRowOkButtonOptions.id = properties.sAddNewRowOkButtonId; - // push the add button onto the array - aAddNewRowFormButtons.push(properties.oAddNewRowOkButtonOptions); - } else { - oConfirmRowAddingButton.click(_fnOnRowAdding); - } - - oCancelRowAddingButton = $("#" + properties.sAddNewRowCancelButtonId); - if (oCancelRowAddingButton.length == 0) { - //If someone forgotten to the button text - if (properties.oAddNewRowCancelButtonOptions.text == null - || properties.oAddNewRowCancelButtonOptions.text == "") { - properties.oAddNewRowCancelButtonOptions.text = "Cancel"; - } - properties.oAddNewRowCancelButtonOptions.click = _fnOnCancelRowAdding; - properties.oAddNewRowCancelButtonOptions.id = properties.sAddNewRowCancelButtonId; - // push the cancel button onto the array - aAddNewRowFormButtons.push(properties.oAddNewRowCancelButtonOptions); - } else { - oCancelRowAddingButton.click(_fnOnCancelRowAdding); - } - // if the array contains elements, add them to the dialog - if (aAddNewRowFormButtons.length > 0) { - oAddNewRowForm.dialog('option', 'buttons', aAddNewRowFormButtons); - } - //Issue: It cannot find it with this call: - //oConfirmRowAddingButton = $("#" + properties.sAddNewRowOkButtonId, oAddNewRowForm); - //oCancelRowAddingButton = $("#" + properties.sAddNewRowCancelButtonId, oAddNewRowForm); - oConfirmRowAddingButton = $("#" + properties.sAddNewRowOkButtonId); - oCancelRowAddingButton = $("#" + properties.sAddNewRowCancelButtonId); - } else { - oAddNewRowForm = null; - } - - //Set the click handler on the "Delete selected row" button - oDeleteRowButton = $('#' + properties.sDeleteRowButtonId); - if (oDeleteRowButton.length != 0) - oDeleteRowButton.click(_fnOnRowDelete); - else { - oDeleteRowButton = null; - } - - //If an add and delete buttons does not exists but Add-delete toolbar is specificed - //Autogenerate these buttons - oAddDeleteToolbar = $(properties.sAddDeleteToolbarSelector); - if (oAddDeleteToolbar.length != 0) { - if (oAddNewRowButton == null && properties.sAddNewRowButtonId != "" - && oAddNewRowForm != null) { - oAddDeleteToolbar.append(""); - oAddNewRowButton = $("#" + properties.sAddNewRowButtonId); - oAddNewRowButton.click(function () { oAddNewRowForm.dialog('open'); }); - } - if (oDeleteRowButton == null && properties.sDeleteRowButtonId != "") { - oAddDeleteToolbar.append(""); - oDeleteRowButton = $("#" + properties.sDeleteRowButtonId); - oDeleteRowButton.click(_fnOnRowDelete); - } - } - - //If delete button exists disable it until some row is selected - if (oDeleteRowButton != null) { - if (properties.oDeleteRowButtonOptions != null) { - oDeleteRowButton.button(properties.oDeleteRowButtonOptions); - } - _fnDisableDeleteButton(); - } - - //If add button exists convert it to the JQuery-ui button - if (oAddNewRowButton != null) { - if (properties.oAddNewRowButtonOptions != null) { - oAddNewRowButton.button(properties.oAddNewRowButtonOptions); - } - } - - - //If form ok button exists convert it to the JQuery-ui button - if (oConfirmRowAddingButton != null) { - if (properties.oAddNewRowOkButtonOptions != null) { - oConfirmRowAddingButton.button(properties.oAddNewRowOkButtonOptions); - } - } - - //If form cancel button exists convert it to the JQuery-ui button - if (oCancelRowAddingButton != null) { - if (properties.oAddNewRowCancelButtonOptions != null) { - oCancelRowAddingButton.button(properties.oAddNewRowCancelButtonOptions); - } - } - - //Add handler to the inline delete buttons - $(".table-action-deletelink", oTable).live("click", function (e) { - - e.preventDefault(); - e.stopPropagation(); - var sURL = $(this).attr("href"); - - if (sURL == null || sURL == "") - sURL = properties.sDeleteURL; - - iDisplayStart = _fnGetDisplayStart(); - var oTD = ($(this).parents('td'))[0]; - var oTR = ($(this).parents('tr'))[0]; - - $(oTR).addClass(properties.sSelectedRowClass); - - var id = fnGetCellID(oTD); - if (properties.fnOnDeleting(oTD, id, _fnDeleteRow)) { - _fnDeleteRow(id, sURL); - } - - - } - ); - - //Set selected class on row that is clicked - //Enable delete button if row is selected, disable delete button if selected class is removed - $("tbody", oTable).click(function (event) { - if ($(event.target.parentNode).hasClass(properties.sSelectedRowClass)) { - $(event.target.parentNode).removeClass(properties.sSelectedRowClass); - if (oDeleteRowButton != null) { - _fnDisableDeleteButton(); - } - } else { - $(oTable.fnSettings().aoData).each(function () { - $(this.nTr).removeClass(properties.sSelectedRowClass); - }); - $(event.target.parentNode).addClass(properties.sSelectedRowClass); - if (oDeleteRowButton != null) { - _fnEnableDeleteButton(); - } - } - }); - - - - }); - }; -})(jQuery); \ No newline at end of file diff --git a/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.min.js b/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.min.js deleted file mode 100644 index 02694a4a5..000000000 --- a/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.min.js +++ /dev/null @@ -1,155 +0,0 @@ -/* - * File: jquery.dataTables.min.js - * Version: 1.9.4 - * Author: Allan Jardine (www.sprymedia.co.uk) - * Info: www.datatables.net - * - * Copyright 2008-2012 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, available at: - * http://datatables.net/license_gpl2 - * http://datatables.net/license_bsd - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - */ -(function(X,l,n){var L=function(h){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=h.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:l.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.oDefaults:d});a.aoColumns.push(c);if(a.aoPreSearchCols[d]===n||null===a.aoPreSearchCols[d])a.aoPreSearchCols[d]=h.extend({},j.models.oSearch);else if(c=a.aoPreSearchCols[d], -c.bRegex===n&&(c.bRegex=!0),c.bSmart===n&&(c.bSmart=!0),c.bCaseInsensitive===n)c.bCaseInsensitive=!0;m(a,d,null)}function m(a,b,c){var d=a.aoColumns[b];c!==n&&null!==c&&(c.mDataProp&&!c.mData&&(c.mData=c.mDataProp),c.sType!==n&&(d.sType=c.sType,d._bAutoType=!1),h.extend(d,c),p(d,c,"sWidth","sWidthOrig"),c.iDataSort!==n&&(d.aDataSort=[c.iDataSort]),p(d,c,"aDataSort"));var i=d.mRender?Q(d.mRender):null,f=Q(d.mData);d.fnGetData=function(a,b){var c=f(a,b);return d.mRender&&b&&""!==b?i(c,b,a):c};d.fnSetData= -L(d.mData);a.oFeatures.bSort||(d.bSortable=!1);!d.bSortable||-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableNone,d.sSortingClassJUI=""):-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortable,d.sSortingClassJUI=a.oClasses.sSortJUI):-1!=h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableAsc,d.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed):-1== -h.inArray("asc",d.asSorting)&&-1!=h.inArray("desc",d.asSorting)&&(d.sSortingClass=a.oClasses.sSortableDesc,d.sSortingClassJUI=a.oClasses.sSortJUIDescAllowed)}function k(a){if(!1===a.oFeatures.bAutoWidth)return!1;da(a);for(var b=0,c=a.aoColumns.length;bj[f])d(a.aoColumns.length+j[f],b[i]);else if("string"===typeof j[f]){e=0;for(w=a.aoColumns.length;eb&&a[d]--; -1!=c&&a.splice(c,1)}function S(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mData},v(a,b,c,"display"))}function ea(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=l.createElement("tr");c.nTr._DT_RowIndex=b;c._aData.DT_RowId&&(c.nTr.id=c._aData.DT_RowId);c._aData.DT_RowClass&& -(c.nTr.className=c._aData.DT_RowClass);for(var i=0,f=a.aoColumns.length;i=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,y(a));if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!wa(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var g= -a._iDisplayStart;d=a._iDisplayEnd;a.oFeatures.bServerSide&&(g=0,d=a.aoData.length);for(;g")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=h('
    ')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),i,f,g,e,w,o,k,m=0;m")[0];w=d[m+ -1];if("'"==w||'"'==w){o="";for(k=2;d[m+k]!=w;)o+=d[m+k],k++;"H"==o?o=a.oClasses.sJUIHeader:"F"==o&&(o=a.oClasses.sJUIFooter);-1!=o.indexOf(".")?(w=o.split("."),e.id=w[0].substr(1,w[0].length-1),e.className=w[1]):"#"==o.charAt(0)?e.id=o.substr(1,o.length-1):e.className=o;m+=k}c.appendChild(e);c=e}else if(">"==g)c=c.parentNode;else if("l"==g&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)i=ya(a),f=1;else if("f"==g&&a.oFeatures.bFilter)i=za(a),f=1;else if("r"==g&&a.oFeatures.bProcessing)i=Aa(a),f= -1;else if("t"==g)i=Ba(a),f=1;else if("i"==g&&a.oFeatures.bInfo)i=Ca(a),f=1;else if("p"==g&&a.oFeatures.bPaginate)i=Da(a),f=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;k=0;for(w=e.length;k'):""===c?'':c+' ',d=l.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="";a.aanFeatures.f||(d.id=a.sTableId+"_filter");c=h('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=this.value===""?"":this.value, -g=0,e=c.length;g=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||i.sSearch.length>b.length||1==c||0!==b.indexOf(i.sSearch)){a.aiDisplay.splice(0, -a.aiDisplay.length);la(a,1);for(b=0;b").html(c).text()); -return c.replace(/[\n\r]/g," ")}function ma(a,b,c,d){if(c)return a=b?a.split(" "):oa(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:oa(a);return RegExp(a,d?"i":"")}function Ja(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):null===a?"":"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):a}function oa(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"), -"\\$1")}function Ca(a){var b=l.createElement("div");b.className=a.oClasses.sInfo;a.aanFeatures.i||(a.aoDrawCallback.push({fn:Ka,sName:"information"}),b.id=a.sTableId+"_info");a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Ka(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(),i=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),g;g=0===f?b.sInfoEmpty:b.sInfo;f!=i&&(g+=" "+b.sInfoFiltered);g+=b.sInfoPostFix;g=ja(a,g); -null!==b.fnInfoCallback&&(g=b.fnInfoCallback.call(a.oInstance,a,c,d,i,f,g));a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d,i=a.aLengthMenu;if(2==i.length&&"object"===typeof i[0]&&"object"===typeof i[1]){c=0;for(d=i[0].length;c'+i[1][c]+""}else{c=0;for(d=i.length;c'+i[c]+""}b+="";i=l.createElement("div");a.aanFeatures.l|| -(i.id=a.sTableId+"_length");i.className=a.oClasses.sLength;i.innerHTML="";h('select option[value="'+a._iDisplayLength+'"]',i).attr("selected",!0);h("select",i).bind("change.DT",function(){var b=h(this).val(),i=a.aanFeatures.l;c=0;for(d=i.length;ca.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Da(a){if(a.oScroll.bInfinite)return null;var b=l.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a, -b,function(a){y(a);x(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,function(a){y(a);x(a)})},sName:"pagination"});return b}function qa(a,b){var c=a._iDisplayStart;if("number"===typeof b)a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay()&&(a._iDisplayStart=0);else if("first"==b)a._iDisplayStart=0;else if("previous"==b)a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart&&(a._iDisplayStart= -0);else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLengthh(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(h(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else""!==a.oScroll.sXInner?a.nTable.style.width= -q(a.oScroll.sXInner):i==h(d).width()&&h(d).height()i-a.oScroll.iBarWidth&&(a.nTable.style.width=q(i))):a.nTable.style.width=q(i);i=h(a.nTable).outerWidth();C(s,e);C(function(a){p.push(q(h(a).width()))},e);C(function(a,b){a.style.width=p[b]},g);h(e).height(0);null!==a.nTFoot&&(C(s,j),C(function(a){n.push(q(h(a).width()))},j),C(function(a,b){a.style.width=n[b]},o),h(j).height(0));C(function(a,b){a.innerHTML= -"";a.style.width=p[b]},e);null!==a.nTFoot&&C(function(a,b){a.innerHTML="";a.style.width=n[b]},j);if(h(a.nTable).outerWidth()d.offsetHeight||"scroll"==h(d).css("overflow-y")?i+a.oScroll.iBarWidth:i;if(r&&(d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(g-a.oScroll.iBarWidth);d.style.width=q(g);a.nScrollHead.style.width=q(g);null!==a.nTFoot&&(a.nScrollFoot.style.width=q(g));""===a.oScroll.sX?D(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."): -""!==a.oScroll.sXInner&&D(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else d.style.width=q("100%"),a.nScrollHead.style.width=q("100%"),null!==a.nTFoot&&(a.nScrollFoot.style.width=q("100%"));""===a.oScroll.sY&&r&&(d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth));""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=q(a.oScroll.sY),r=""!==a.oScroll.sX&&a.nTable.offsetWidth> -d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeightd.clientHeight||"scroll"==h(d).css("overflow-y");b.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px";null!==a.nTFoot&&(R.style.width=q(r),l.style.width=q(r),l.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px");h(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function C(a,b,c){for(var d= -0,i=0,f=b.length,g,e;itd",b));j=N(a,f);for(f=d=0;fc)return null;if(null===a.aoData[c].nTr){var d=l.createElement("td");d.innerHTML=v(a,c,b,"");return d}return J(a,c)[b]}function Pa(a,b){for(var c=-1,d=-1,i=0;i/g,"");e.length>c&&(c=e.length,d=i)}return d}function q(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1); -return 48>b||57/g,""),i=q[c].nTh,i.removeAttribute("aria-sort"),i.removeAttribute("aria-label"),q[c].bSortable?0d&&d++;f=RegExp(f+"[123]");var o;b=0;for(c=a.length;b
    ')[0];l.body.appendChild(b);a.oBrowser.bScrollOversize= -100===h("#DT_BrowserTest",b)[0].offsetWidth?!0:!1;l.body.removeChild(b)}function Va(a){return function(){var b=[s(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var U=/\[.*?\]$/,Wa=X.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,e=[],f=h.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"===b&&null!==d&&(d=Wa(d)),e.push((f?"":'"'+c+'":')+d);return(f? -"[":"{")+e+(f?"]":"}")};this.$=function(a,b){var c,d,e=[],f;d=s(this[j.ext.iApiIndex]);var g=d.aoData,o=d.aiDisplay,k=d.aiDisplayMaster;b||(b={});b=h.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page){c=d._iDisplayStart;for(d=d.fnDisplayEnd();c=d.fnRecordsDisplay()&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart&&(d._iDisplayStart=0));if(c===n||c)y(d),x(d);return g};this.fnDestroy=function(a){var b=s(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,i,f,a=a===n?!1:a;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);if(!a){i=0;for(f=b.aoColumns.length;itr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(h(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(h(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);h(b.nTableWrapper).remove();b.aaSorting=[];b.aaSortingFixed=[];P(b);h(T(b)).removeClass(b.asStripeClasses.join(" "));h("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc, -b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(h("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),h("th, td",b.nTHead).each(function(){var a=h("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();h(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore):a||c.appendChild(b.nTable);i=0;for(f=b.aoData.length;i=t(d);if(!m)for(e=a;et<"F"ip>')):h.extend(g.oClasses,j.ext.oStdClasses);h(this).addClass(g.oClasses.sTable);if(""!==g.oScroll.sX||""!==g.oScroll.sY)g.oScroll.iBarWidth=Qa();g.iInitDisplayStart===n&&(g.iInitDisplayStart=e.iDisplayStart, -g._iDisplayStart=e.iDisplayStart);e.bStateSave&&(g.oFeatures.bStateSave=!0,Sa(g,e),z(g,"aoDrawCallback",ra,"state_save"));null!==e.iDeferLoading&&(g.bDeferLoading=!0,a=h.isArray(e.iDeferLoading),g._iRecordsDisplay=a?e.iDeferLoading[0]:e.iDeferLoading,g._iRecordsTotal=a?e.iDeferLoading[1]:e.iDeferLoading);null!==e.aaData&&(f=!0);""!==e.oLanguage.sUrl?(g.oLanguage.sUrl=e.oLanguage.sUrl,h.getJSON(g.oLanguage.sUrl,null,function(a){pa(a);h.extend(true,g.oLanguage,e.oLanguage,a);ba(g)}),i=!0):h.extend(!0, -g.oLanguage,e.oLanguage);null===e.asStripeClasses&&(g.asStripeClasses=[g.oClasses.sStripeOdd,g.oClasses.sStripeEven]);b=g.asStripeClasses.length;g.asDestroyStripes=[];if(b){c=!1;d=h(this).children("tbody").children("tr:lt("+b+")");for(a=0;a=g.aoColumns.length&&(g.aaSorting[a][0]=0);var k=g.aoColumns[g.aaSorting[a][0]];g.aaSorting[a][2]===n&&(g.aaSorting[a][2]=0);e.aaSorting===n&&g.saved_aaSorting===n&&(g.aaSorting[a][1]= -k.asSorting[0]);c=0;for(d=k.asSorting.length;c=parseInt(n,10)};j.fnIsDataTable=function(e){for(var h=j.settings,m=0;me)return e;for(var h=e+"",e=h.split(""),j="",h=h.length,k=0;k'+k.sPrevious+''+k.sNext+"":'';h(j).append(k);var l=h("a",j), -k=l[0],l=l[1];e.oApi._fnBindAction(k,{action:"previous"},n);e.oApi._fnBindAction(l,{action:"next"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",l.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),l.setAttribute("aria-controls",e.sTableId))},fnUpdate:function(e){if(e.aanFeatures.p)for(var h=e.oClasses,j=e.aanFeatures.p,k,l=0,n=j.length;l'+k.sFirst+''+k.sPrevious+''+k.sNext+''+k.sLast+"");var t=h("a",j),k=t[0],l=t[1],r=t[2],t=t[3];e.oApi._fnBindAction(k,{action:"first"},n);e.oApi._fnBindAction(l,{action:"previous"},n);e.oApi._fnBindAction(r,{action:"next"},n);e.oApi._fnBindAction(t,{action:"last"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",r.id=e.sTableId+"_next",t.id=e.sTableId+"_last")}, -fnUpdate:function(e,o){if(e.aanFeatures.p){var m=j.ext.oPagination.iFullNumbersShowPages,k=Math.floor(m/2),l=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),n=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,t="",r,B=e.oClasses,u,M=e.aanFeatures.p,L=function(h){e.oApi._fnBindAction(this,{page:h+r-1},function(h){e.oApi._fnPageChange(e,h.data.page);o(e);h.preventDefault()})};-1===e._iDisplayLength?n=k=r=1:l=l-k?(r=l-m+1,k=l):(r=n-Math.ceil(m/2)+1,k=r+m-1);for(m=r;m<=k;m++)t+= -n!==m?''+e.fnFormatNumber(m)+"":''+e.fnFormatNumber(m)+"";m=0;for(k=M.length;mh?1:0},"string-desc":function(e,h){return eh?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(e,h){return eh?1:0},"html-desc":function(e,h){return e< -h?1:e>h?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,h){return e-h},"date-desc":function(e,h){return h-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,h){return e-h},"numeric-desc":function(e,h){return h-e}});h.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==typeof e)return null;var h,j=!1;h=e.charAt(0);if(-1=="0123456789-".indexOf(h))return null; -for(var k=1;k")?"html":null}]);h.fn.DataTable=j;h.fn.dataTable=j;h.fn.dataTableSettings=j.settings;h.fn.dataTableExt=j.ext};"function"===typeof define&&define.amd?define(["jquery"],L):jQuery&&!jQuery.fn.dataTable&& -L(jQuery)})(window,document); diff --git a/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.rowGrouping.js b/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.rowGrouping.js deleted file mode 100644 index 81a5fbeca..000000000 --- a/html/js/lib/jquery-datatables-editable/js/jquery.dataTables.rowGrouping.js +++ /dev/null @@ -1,680 +0,0 @@ -/* -* File: jquery.dataTables.grouping.js -* Version: 1.2.7. -* Author: Jovan Popovic -* -* Copyright 2012 Jovan Popovic, all rights reserved. -* -* This source file is free software, under either the GPL v2 license or a -* BSD style license, as supplied with this software. -* -* This source file is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -* or FITNESS FOR A PARTICULAR PURPOSE. -* Parameters: -* @iGroupingColumnIndex Integer Index of the column that will be used for grouping - default 0 -* @sGroupingColumnSortDirection Enumeration Sort direction of the group -* @iGroupingOrderByColumnIndex Integer Index of the column that will be used for ordering groups -* @sGroupingClass String Class that will be associated to the group row. Default - "group" -* @bSetGroupingClassOnTR Boolean If set class will be set to the TR instead of the TD withing the grouping TR -* @bHideGroupingColumn Boolean Hide column used for grouping once results are grouped. Default - true -* @bHideGroupingOrderByColumn Boolean Hide column used for ordering groups once results are grouped. Default - true -* @sGroupBy Enumeration Type of grouping that should be applied. Values "name"(default), "letter", "year" -* @sGroupLabelPrefix String Prefix that will be added to each group cell -* @bExpandableGrouping Boolean Attach expand/collapse handlers to the grouping rows -* @bExpandSingleGroup Boolean Use accordon grouping -* @iExpandGroupOffset Integer Number of pixels to set scroll position above the currently selected group. If -1 scroll will be alligned to the table -* General settings -* @sDateFormat: "dd/MM/yyyy" String Date format used for grouping -* @sEmptyGroupLabel String Lable that will be placed as group if grouping cells are empty. Default "-" - -* Parameters used in the second level grouping -* @iGroupingColumnIndex2 Integer Index of the secondary column that will be used for grouping - default 0 -* @sGroupingColumnSortDirection2 Enumeration Sort direction of the secondary group -* @iGroupingOrderByColumnIndex2 Integer Index of the column that will be used for ordering secondary groups -* @sGroupingClass2 String Class that will be associated to the secondary group row. Default "subgroup" -* @bHideGroupingColumn2 Boolean Hide column used for secondary grouping once results are grouped. Default - true, -* @bHideGroupingOrderByColumn2 Boolean Hide column used for ordering secondary groups once results are grouped. Default - true, -* @sGroupBy2 Enumeration Type of grouping that should be applied to secondary column. Values "name"(default), "letter", "year", -* @sGroupLabelPrefix2 String Prefix that will be added to each secondary group cell -* @fnOnGrouped Function Function that is called when grouping is finished. Function has no parameters. -*/ -(function ($) { - - $.fn.rowGrouping = function (options) { - - function _fnOnGrouped() { - - } - - function _fnOnGroupCreated(oGroup, sGroup, iLevel) { - /// - ///Function called when a new grouping row is created(it should be overriden in properties) - /// - } - - function _fnOnGroupCompleted(oGroup, sGroup, iLevel) { - /// - ///Function called when a new grouping row is created(it should be overriden in properties) - /// - } - - function _getMonthName(iMonth) { - var asMonths = ["January", "February", "March", "April", "May", "June", "Jully", "August", "September", "October", "November", "December"]; - return asMonths[iMonth - 1]; - } - - var defaults = { - - iGroupingColumnIndex: 0, - sGroupingColumnSortDirection: "", - iGroupingOrderByColumnIndex: -1, - sGroupingClass: "group", - bHideGroupingColumn: true, - bHideGroupingOrderByColumn: true, - sGroupBy: "name", - sGroupLabelPrefix: "", - fnGroupLabelFormat: function (label) { return label; }, - bExpandableGrouping: false, - bExpandSingleGroup: false, - iExpandGroupOffset: 100, - asExpandedGroups: null, - - sDateFormat: "dd/MM/yyyy", - sEmptyGroupLabel: "-", - bSetGroupingClassOnTR: false, - - iGroupingColumnIndex2: -1, - sGroupingColumnSortDirection2: "", - iGroupingOrderByColumnIndex2: -1, - sGroupingClass2: "subgroup", - bHideGroupingColumn2: true, - bHideGroupingOrderByColumn2: true, - sGroupBy2: "name", - sGroupLabelPrefix2: "", - fnGroupLabelFormat2: function (label) { return label; }, - bExpandableGrouping2: false, - - fnOnGrouped: _fnOnGrouped, - - fnOnGroupCreated: _fnOnGroupCreated, - fnOnGroupCompleted: _fnOnGroupCompleted, - - oHideEffect: null, // { method: "hide", duration: "fast", easing: "linear" }, - oShowEffect: null,//{ method: "show", duration: "slow", easing: "linear" } - - bUseFilteringForGrouping: false // This is still work in progress option - }; - return this.each(function (index, elem) { - - var oTable = $(elem).dataTable(); - - var aoGroups = new Array(); - $(this).dataTableExt.aoGroups = aoGroups; - - function fnCreateGroupRow(sGroupCleaned, sGroup, iColspan) { - var nGroup = document.createElement('tr'); - var nCell = document.createElement('td'); - nGroup.id = "group-id-" + oTable.attr("id") + "_" + sGroupCleaned; - - var oGroup = { id: nGroup.id, key: sGroupCleaned, text: sGroup, level: 0, groupItemClass: ".group-item-" + sGroupCleaned, dataGroup: sGroupCleaned, aoSubgroups: new Array() }; - - - - if (properties.bSetGroupingClassOnTR) { - nGroup.className = properties.sGroupingClass + " " + sGroupCleaned; - } else { - nCell.className = properties.sGroupingClass + " " + sGroupCleaned; - } - - nCell.colSpan = iColspan; - nCell.innerHTML = properties.sGroupLabelPrefix + properties.fnGroupLabelFormat(sGroup == "" ? properties.sEmptyGroupLabel : sGroup, oGroup ); - if (properties.bExpandableGrouping) { - - if (!_fnIsGroupCollapsed(sGroupCleaned)) { - nCell.className += " expanded-group"; - oGroup.state = "expanded"; - } else { - nCell.className += " collapsed-group"; - oGroup.state = "collapsed"; - } - nCell.className += " group-item-expander"; - $(nCell).attr('data-group', oGroup.dataGroup); //Fix provided by mssskhalsa (Issue 5) - $(nCell).attr("data-group-level", oGroup.level); - $(nCell).click(_fnOnGroupClick); - } - nGroup.appendChild(nCell); - aoGroups[sGroupCleaned] = oGroup; - oGroup.nGroup = nGroup; - properties.fnOnGroupCreated(oGroup, sGroupCleaned, 1); - return oGroup; - } - - function _fnCreateGroup2Row(sGroup2, sGroupLabel, iColspan, oParentGroup) { - - var nGroup2 = document.createElement('tr'); - nGroup2.id = oParentGroup.id + "_" + sGroup2; - var nCell2 = document.createElement('td'); - var dataGroup = oParentGroup.dataGroup + '_' + sGroup2; - - oGroup = { id: nGroup2.id, key: sGroup2, text: sGroupLabel, level: oParentGroup.level + 1, groupItemClass: ".group-item-" + dataGroup, - dataGroup: dataGroup, aoSubgroups: new Array() - }; - - if (properties.bSetGroupingClassOnTR) { - nGroup2.className = properties.sGroupingClass2 + " " + sGroup2; - } else { - nCell2.className = properties.sGroupingClass2 + " " + sGroup2; - } - - nCell2.colSpan = iColspan; - nCell2.innerHTML = properties.sGroupLabelPrefix2 + properties.fnGroupLabelFormat2(sGroupLabel == "" ? properties.sEmptyGroupLabel : sGroupLabel, oGroup); - - if (properties.bExpandableGrouping) { - - nGroup2.className += " group-item-" + oParentGroup.dataGroup; - } - - - if (properties.bExpandableGrouping && properties.bExpandableGrouping2) { - - if (!_fnIsGroupCollapsed(oGroup.dataGroup)) { - nCell2.className += " expanded-group"; - oGroup.state = "expanded"; - } else { - nCell2.className += " collapsed-group"; - oGroup.state = "collapsed"; - } - nCell2.className += " group-item-expander"; - $(nCell2).attr('data-group', oGroup.dataGroup); - $(nCell2).attr("data-group-level", oGroup.level); - $(nCell2).click(_fnOnGroupClick); - } - - nGroup2.appendChild(nCell2); - - oParentGroup.aoSubgroups[oGroup.dataGroup] = oGroup; - aoGroups[oGroup.dataGroup] = oGroup; - oGroup.nGroup = nGroup2; - properties.fnOnGroupCreated(oGroup, sGroup2, 2); - return oGroup; - } - - function _fnIsGroupCollapsed(sGroup) { - if (aoGroups[sGroup] != null) - return (aoGroups[sGroup].state == "collapsed"); - else - if (sGroup.indexOf("_") > -1) - true; - else - if(bInitialGrouping && (asExpandedGroups==null || asExpandedGroups.length == 0)) - return false;// initially if asExpandedGroups is empty - no one is collapsed - else - return ($.inArray(sGroup, asExpandedGroups) == -1); //the last chance check asExpandedGroups - } - - function _fnGetYear(x) { - if(x.length< (iYearIndex+iYearLength) ) - return x; - else - return x.substr(iYearIndex, iYearLength); - } - function _fnGetGroupByName(x) { - return x; - } - - function _fnGetGroupByLetter(x) { - return x.substr(0, 1); - } - - function _fnGetGroupByYear(x) { - return _fnGetYear(x); - //return Date.parseExact(x, properties.sDateFormat).getFullYear();//slooooow - } - - function _fnGetGroupByYearMonth(x) { - //var date = Date.parseExact(x, "dd/MM/yyyy"); - //return date.getFullYear() + " / " + date.getMonthName(); - //return x.substr(iYearIndex, iYearLength) + '/' + x.substr(iMonthIndex, iMonthLength); - return x.substr(iYearIndex, iYearLength) + ' ' + _getMonthName(x.substr(iMonthIndex, iMonthLength)); - } - - function _fnGetCleanedGroup(sGroup) { - - if (sGroup === "") return "-"; - return sGroup.toLowerCase().replace(/[^a-zA-Z0-9\u0080-\uFFFF]+/g, "-"); //fix for unicode characters (Issue 23) - //return sGroup.toLowerCase().replace(/\W+/g, "-"); //Fix provided by bmathews (Issue 7) - } - - function _rowGroupingRowFilter(oSettings, aData, iDataIndex) { - ///Used to expand/collapse groups with DataTables filtering - if (oSettings.nTable.id !== oTable[0].id) return true; - var sColData = aData[properties.iGroupingColumnIndex]; - if (typeof sColData === "undefined") - sColData = aData[oSettings.aoColumns[properties.iGroupingColumnIndex].mDataProp]; - if (_fnIsGroupCollapsed(_fnGetCleanedGroup(sColData))) { - if (oTable.fnIsOpen(oTable.fnGetNodes(iDataIndex))) - { - if (properties.fnOnRowClosed != null) { - properties.fnOnRowClosed(this); // $(this.cells[0].children[0]).attr('src', '../../Images/details.png'); - } - oTable.fnClose(oTable.fnGetNodes(iDataIndex)); - } - return false; - }; - return true; - } //end of function _rowGroupingRowFilter - - - function fnExpandGroup(sGroup) { - ///Expand group if expanadable grouping is used - - aoGroups[sGroup].state = "expanded"; - - $("td[data-group^='" + sGroup + "']").removeClass("collapsed-group"); - $("td[data-group^='" + sGroup + "']").addClass("expanded-group"); - - - if(properties.bUseFilteringForGrouping) - { - oTable.fnDraw(); - return;//Because rows are expanded with _rowGroupingRowFilter function - } - - if (jQuery.inArray(sGroup, asExpandedGroups)==-1) - asExpandedGroups.push(sGroup); - - if (properties.oHideEffect != null) - $(".group-item-" + sGroup, oTable) - [properties.oShowEffect.method](properties.oShowEffect.duration, - properties.oShowEffect.easing, - function () { }); - else - $(".group-item-" + sGroup, oTable).show(); - - - } //end of function fnExpandGroup - - function fnCollapseGroup(sGroup) { - ///Collapse group if expanadable grouping is used - - aoGroups[sGroup].state = "collapsed"; - $("td[data-group^='" + sGroup + "']").removeClass("expanded-group"); - $("td[data-group^='" + sGroup + "']").addClass("collapsed-group"); - - if(properties.bUseFilteringForGrouping) - { - oTable.fnDraw(); - return;//Because rows are expanded with _rowGroupingRowFilter function - } - //var index = $.inArray(sGroup, asExpandedGroups); - //asExpandedGroups.splice(index, 1); - - $('.group-item-' + sGroup).each(function () { - //Issue 24 - Patch provided by Bob Graham - if (oTable.fnIsOpen(this)) { - if (properties.fnOnRowClosed != null) { - properties.fnOnRowClosed(this); // $(this.cells[0].children[0]).attr('src', '../../Images/details.png'); - } - oTable.fnClose(this); - } - }); - - if (properties.oHideEffect != null) - $(".group-item-" + sGroup, oTable) - [properties.oHideEffect.method](properties.oHideEffect.duration, - properties.oHideEffect.easing, - function () { }); - else - $(".group-item-" + sGroup, oTable).hide(); - - } //end of function fnCollapseGroup - - function _fnOnGroupClick(e) { - /// - ///Function that is called when user click on the group cell in order to - ///expand of collapse group - /// - - //var sGroup = $(this).attr("rel"); - var sGroup = $(this).attr("data-group"); - var iGroupLevel = $(this).attr("data-group-level"); - - var bIsExpanded = !_fnIsGroupCollapsed(sGroup); - if (properties.bExpandSingleGroup) { - if (!bIsExpanded) { - var sCurrentGroup = $("td.expanded-group").attr("data-group"); - fnCollapseGroup(sCurrentGroup); - fnExpandGroup(sGroup); - - if (properties.iExpandGroupOffset != -1) { - var position = $("#group-id-" + oTable.attr("id") + "-" + sGroup).offset().top - properties.iExpandGroupOffset; - window.scroll(0, position); - } else { - var position = oTable.offset().top; - window.scroll(0, position); - } - } - } else { - if (bIsExpanded) { - fnCollapseGroup(sGroup); - } else { - fnExpandGroup(sGroup); - } - } - e.preventDefault(); - - }; //end function _fnOnGroupClick - - - function _fnDrawCallBackWithGrouping (oSettings) { - - if (oTable.fnSettings().oFeatures.bServerSide) - bInitialGrouping = true; - var bUseSecondaryGrouping = false; - - if (properties.iGroupingColumnIndex2 != -1) - bUseSecondaryGrouping = true; - - //-----Start grouping - - if (oSettings.aiDisplayMaster.length == 0) { //aiDisplay - return; - } - - var nTrs = $('tbody tr', oTable); - var iColspan = 0; //nTrs[0].getElementsByTagName('td').length; - for (var iColIndex = 0; iColIndex < oSettings.aoColumns.length; iColIndex++) { - if (oSettings.aoColumns[iColIndex].bVisible) - iColspan += 1; - } - var sLastGroup = null; - var sLastGroup2 = null; - if (oSettings.aiDisplay.length > 0) { - for (var i = 0; i < nTrs.length; i++) { - - - var iDisplayIndex = oSettings._iDisplayStart + i; - if (oTable.fnSettings().oFeatures.bServerSide) - iDisplayIndex = i; - var sGroupData = ""; - var sGroup = null; - var sGroupData2 = ""; - var sGroup2 = null; - - //Issue 31 - Start fix provided by Fabien Taysse -// sGroupData = oSettings.aoData[oSettings.aiDisplay[iDisplayIndex]]._aData[properties.iGroupingColumnIndex]; -// if (sGroupData == undefined) -// sGroupData = oSettings.aoData[oSettings.aiDisplay[iDisplayIndex]]._aData[oSettings.aoColumns[properties.iGroupingColumnIndex].mDataProp]; - sGroupData = this.fnGetData(nTrs[i], properties.iGroupingColumnIndex); - //Issue 31 - End fix provided by Fabien Taysse - - var sGroup = sGroupData; - if (properties.sGroupBy != "year") - sGroup = fnGetGroup(sGroupData); - - if (bUseSecondaryGrouping) { - sGroupData2 = oSettings.aoData[oSettings.aiDisplay[iDisplayIndex]]._aData[properties.iGroupingColumnIndex2]; - if (sGroupData2 == undefined) - sGroupData2 = oSettings.aoData[oSettings.aiDisplay[iDisplayIndex]]._aData[oSettings.aoColumns[properties.iGroupingColumnIndex2].mDataProp]; - if (properties.sGroupBy2 != "year") - sGroup2 = fnGetGroup(sGroupData2); - } - - - if (sLastGroup == null || _fnGetCleanedGroup(sGroup) != _fnGetCleanedGroup(sLastGroup)) { // new group encountered (or first of group) - var sGroupCleaned = _fnGetCleanedGroup(sGroup); - - if(sLastGroup != null) - { - properties.fnOnGroupCompleted(aoGroups[_fnGetCleanedGroup(sLastGroup)]); - } - /* - if (properties.bExpandableGrouping && bInitialGrouping) { - if (properties.bExpandSingleGroup) { - if (asExpandedGroups.length == 0) - asExpandedGroups.push(sGroupCleaned); - } else { - asExpandedGroups.push(sGroupCleaned); - } - } - */ - if(properties.bAddAllGroupsAsExpanded && jQuery.inArray(sGroupCleaned,asExpandedGroups) == -1) - asExpandedGroups.push(sGroupCleaned); - - var oGroup = fnCreateGroupRow(sGroupCleaned, sGroup, iColspan); - var nGroup = oGroup.nGroup; - - if(nTrs[i].parentNode!=null) - nTrs[i].parentNode.insertBefore(nGroup, nTrs[i]); - else - $(nTrs[i]).before(nGroup); - $(nTrs[i]).attr("data-group", oGroup.dataGroup); - sLastGroup = sGroup; - sLastGroup2 = null; //to reset second level grouping - - - - - - } // end if (sLastGroup == null || sGroup != sLastGroup) - - if (properties.bExpandableGrouping) { - $(nTrs[i]).addClass("group-item-" + sGroupCleaned); - if (_fnIsGroupCollapsed(sGroupCleaned) && !properties.bUseFilteringForGrouping) { - $(nTrs[i]).hide(); - } - } - - - if (bUseSecondaryGrouping) { - - if (sLastGroup2 == null || _fnGetCleanedGroup(sGroup2) != _fnGetCleanedGroup(sLastGroup2)) { - var sGroup2Id = _fnGetCleanedGroup(sGroup) + '-' + _fnGetCleanedGroup(sGroup2); - var oGroup2 = _fnCreateGroup2Row(sGroup2Id, sGroup2, iColspan, aoGroups[sGroupCleaned]) - var nGroup2 = oGroup2.nGroup; - nTrs[i].parentNode.insertBefore(nGroup2, nTrs[i]); - - sLastGroup2 = sGroup2; - } - - $(nTrs[i]).attr("data-group", oGroup2.dataGroup) - .addClass("group-item-" + oGroup2.dataGroup); - } //end if (bUseSecondaryGrouping) - - - - } // end for (var i = 0; i < nTrs.length; i++) - }; // if (oSettings.aiDisplay.length > 0) - - if(sLastGroup != null) - { - properties.fnOnGroupCompleted(aoGroups[_fnGetCleanedGroup(sLastGroup)]); - } - - - //-----End grouping - properties.fnOnGrouped(aoGroups); - - bInitialGrouping = false; - - }; // end of _fnDrawCallBackWithGrouping = function (oSettings) - - - //var oTable = this; - var iYearIndex = 6; - var iYearLength = 4; - var asExpandedGroups = new Array(); - var bInitialGrouping = true; - - var properties = $.extend(defaults, options); - - if (properties.iGroupingOrderByColumnIndex == -1) { - properties.bCustomColumnOrdering = false; - properties.iGroupingOrderByColumnIndex = properties.iGroupingColumnIndex; - } else { - properties.bCustomColumnOrdering = true; - } - - if (properties.sGroupingColumnSortDirection == "") { - if (properties.sGroupBy == "year") - properties.sGroupingColumnSortDirection = "desc"; - else - properties.sGroupingColumnSortDirection = "asc"; - } - - - if (properties.iGroupingOrderByColumnIndex2 == -1) { - properties.bCustomColumnOrdering2 = false; - properties.iGroupingOrderByColumnIndex2 = properties.iGroupingColumnIndex2; - } else { - properties.bCustomColumnOrdering2 = true; - } - - if (properties.sGroupingColumnSortDirection2 == "") { - if (properties.sGroupBy2 == "year") - properties.sGroupingColumnSortDirection2 = "desc"; - else - properties.sGroupingColumnSortDirection2 = "asc"; - } - - - - iYearIndex = properties.sDateFormat.toLowerCase().indexOf('yy'); - iYearLength = properties.sDateFormat.toLowerCase().lastIndexOf('y') - properties.sDateFormat.toLowerCase().indexOf('y') + 1; - - iMonthIndex = properties.sDateFormat.toLowerCase().indexOf('mm'); - iMonthLength = properties.sDateFormat.toLowerCase().lastIndexOf('m') - properties.sDateFormat.toLowerCase().indexOf('m') + 1; - - var fnGetGroup = _fnGetGroupByName; - switch (properties.sGroupBy) { - case "letter": fnGetGroup = _fnGetGroupByLetter; - break; - case "year": fnGetGroup = _fnGetGroupByYear; - break; - case "month": fnGetGroup = _fnGetGroupByYearMonth; - break; - default: fnGetGroup = _fnGetGroupByName; - break; - } - - - if (properties.asExpandedGroups != null) { - if (properties.asExpandedGroups == "NONE") { - properties.asExpandedGroups = []; - asExpandedGroups = properties.asExpandedGroups; - bInitialGrouping = false; - } else if (properties.asExpandedGroups == "ALL") { - properties.bAddAllGroupsAsExpanded = true; - } else if (properties.asExpandedGroups.constructor == String) { - var currentGroup = properties.asExpandedGroups; - properties.asExpandedGroups = new Array(); - properties.asExpandedGroups.push(_fnGetCleanedGroup(currentGroup)); - asExpandedGroups = properties.asExpandedGroups; - bInitialGrouping = false; - } else if (properties.asExpandedGroups.constructor == Array) { - for (var i = 0; i < properties.asExpandedGroups.length; i++) { - asExpandedGroups.push(_fnGetCleanedGroup(properties.asExpandedGroups[i])); - if (properties.bExpandSingleGroup) - break; - } - bInitialGrouping = false; - } - }else{ - properties.asExpandedGroups = new Array(); - properties.bAddAllGroupsAsExpanded = true; - } - if(properties.bExpandSingleGroup){ - var nTrs = $('tbody tr', oTable); - sGroupData = oTable.fnGetData(nTrs[0], properties.iGroupingColumnIndex); - - var sGroup = sGroupData; - if (properties.sGroupBy != "year") - sGroup = fnGetGroup(sGroupData); - - var sGroupCleaned = _fnGetCleanedGroup(sGroup); - properties.asExpandedGroups = new Array(); - properties.asExpandedGroups.push(sGroupCleaned); - - } - - oTable.fnSetColumnVis(properties.iGroupingColumnIndex, !properties.bHideGroupingColumn); - if (properties.bCustomColumnOrdering) { - oTable.fnSetColumnVis(properties.iGroupingOrderByColumnIndex, !properties.bHideGroupingOrderByColumn); - } - if (properties.iGroupingColumnIndex2 != -1) { - oTable.fnSetColumnVis(properties.iGroupingColumnIndex2, !properties.bHideGroupingColumn2); - } - if (properties.bCustomColumnOrdering2) { - oTable.fnSetColumnVis(properties.iGroupingOrderByColumnIndex2, !properties.bHideGroupingOrderByColumn2); - } - oTable.fnSettings().aoDrawCallback.push({ - "fn": _fnDrawCallBackWithGrouping, - "sName": "fnRowGrouping" - }); - - var aaSortingFixed = new Array(); - aaSortingFixed.push([properties.iGroupingOrderByColumnIndex, properties.sGroupingColumnSortDirection]); - if (properties.iGroupingColumnIndex2 != -1) { - aaSortingFixed.push([properties.iGroupingOrderByColumnIndex2, properties.sGroupingColumnSortDirection2]); - } // end of if (properties.iGroupingColumnIndex2 != -1) - - oTable.fnSettings().aaSortingFixed = aaSortingFixed; - //Old way - //oTable.fnSettings().aaSortingFixed = [[properties.iGroupingOrderByColumnIndex, properties.sGroupingColumnSortDirection]]; - - switch (properties.sGroupBy) { - case "name": - break; - - - case "letter": - - /* Create an array with the values of all the input boxes in a column */ - oTable.fnSettings().aoColumns[properties.iGroupingOrderByColumnIndex].sSortDataType = "rg-letter"; - $.fn.dataTableExt.afnSortData['rg-letter'] = function (oSettings, iColumn) { - var aData = []; - $('td:eq(' + iColumn + ')', oSettings.oApi._fnGetTrNodes(oSettings)).each(function () { - aData.push(_fnGetGroupByLetter(this.innerHTML)); - }); - return aData; - } - - - break; - - - case "year": - /* Create an array with the values of all the input boxes in a column */ - oTable.fnSettings().aoColumns[properties.iGroupingOrderByColumnIndex].sSortDataType = "rg-date"; - $.fn.dataTableExt.afnSortData['rg-date'] = function (oSettings, iColumn) { - var aData = []; - var nTrs = oSettings.oApi._fnGetTrNodes(oSettings); - for(i = 0; i< nTrs.length; i++) - { - aData.push(_fnGetYear( oTable.fnGetData( nTrs[i], iColumn) )); - } - -/* - $('td:eq(' + iColumn + ')', oSettings.oApi._fnGetTrNodes(oSettings)).each(function () { - aData.push(_fnGetYear(this.innerHTML)); - }); -*/ - return aData; - } - break; - default: - break; - - } // end of switch (properties.sGroupBy) - - if(properties.bUseFilteringForGrouping) - $.fn.dataTableExt.afnFiltering.push(_rowGroupingRowFilter); - - oTable.fnDraw(); - - - - }); - }; -})(jQuery); \ No newline at end of file diff --git a/html/js/lib/jquery-datatables-editable/js/jquery.jeditable.js b/html/js/lib/jquery-datatables-editable/js/jquery.jeditable.js deleted file mode 100644 index 98cd915dd..000000000 --- a/html/js/lib/jquery-datatables-editable/js/jquery.jeditable.js +++ /dev/null @@ -1,507 +0,0 @@ -/* - * Jeditable - jQuery in place edit plugin - * - * Copyright (c) 2006-2008 Mika Tuupola, Dylan Verheul - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Project home: - * http://www.appelsiini.net/projects/jeditable - * - * Based on editable by Dylan Verheul : - * http://www.dyve.net/jquery/?editable - * - */ - -/** - * Version 1.6.2 - * - * ** means there is basic unit tests for this parameter. - * - * @name Jeditable - * @type jQuery - * @param String target (POST) URL or function to send edited content to ** - * @param Hash options additional options - * @param String options[method] method to use to send edited content (POST or PUT) ** - * @param Function options[callback] Function to run after submitting edited content ** - * @param String options[name] POST parameter name of edited content - * @param String options[id] POST parameter name of edited div id - * @param Hash options[submitdata] Extra parameters to send when submitting edited content. - * @param String options[type] text, textarea or select (or any 3rd party input type) ** - * @param Integer options[rows] number of rows if using textarea ** - * @param Integer options[cols] number of columns if using textarea ** - * @param Mixed options[height] 'auto', 'none' or height in pixels ** - * @param Mixed options[width] 'auto', 'none' or width in pixels ** - * @param String options[loadurl] URL to fetch input content before editing ** - * @param String options[loadtype] Request type for load url. Should be GET or POST. - * @param String options[loadtext] Text to display while loading external content. - * @param Mixed options[loaddata] Extra parameters to pass when fetching content before editing. - * @param Mixed options[data] Or content given as paramameter. String or function.** - * @param String options[indicator] indicator html to show when saving - * @param String options[tooltip] optional tooltip text via title attribute ** - * @param String options[event] jQuery event such as 'click' of 'dblclick' ** - * @param String options[submit] submit button value, empty means no button ** - * @param String options[cancel] cancel button value, empty means no button ** - * @param String options[cssclass] CSS class to apply to input form. 'inherit' to copy from parent. ** - * @param String options[style] Style to apply to input form 'inherit' to copy from parent. ** - * @param String options[select] true or false, when true text is highlighted ?? - * @param String options[placeholder] Placeholder text or html to insert when element is empty. ** - * @param String options[onblur] 'cancel', 'submit', 'ignore' or function ?? - * - * @param Function options[onsubmit] function(settings, original) { ... } called before submit - * @param Function options[onreset] function(settings, original) { ... } called before reset - * @param Function options[onerror] function(settings, original, xhr) { ... } called on error - * - * @param Hash options[ajaxoptions] jQuery Ajax options. See docs.jquery.com. - * - */ - -(function($) { - - $.fn.editable = function(target, options) { - - var settings = { - target : target, - name : 'value', - id : 'id', - type : 'text', - width : 'auto', - height : 'auto', - event : 'click', - onblur : 'cancel', - loadtype : 'GET', - loadtext : 'Loading...', - placeholder: 'Click to edit', - loaddata : {}, - submitdata : {}, - ajaxoptions: {} - }; - - if(options) { - $.extend(settings, options); - } - - /* setup some functions */ - var plugin = $.editable.types[settings.type].plugin || function() { }; - var submit = $.editable.types[settings.type].submit || function() { }; - var buttons = $.editable.types[settings.type].buttons - || $.editable.types['defaults'].buttons; - var content = $.editable.types[settings.type].content - || $.editable.types['defaults'].content; - var element = $.editable.types[settings.type].element - || $.editable.types['defaults'].element; - var reset = $.editable.types[settings.type].reset - || $.editable.types['defaults'].reset; - var callback = settings.callback || function() { }; - var onsubmit = settings.onsubmit || function() { }; - var onreset = settings.onreset || function() { }; - var onerror = settings.onerror || reset; - - /* add custom event if it does not exist */ - if (!$.isFunction($(this)[settings.event])) { - $.fn[settings.event] = function(fn){ - return fn ? this.bind(settings.event, fn) : this.trigger(settings.event); - } - } - - /* show tooltip */ - $(this).attr('title', settings.tooltip); - - settings.autowidth = 'auto' == settings.width; - settings.autoheight = 'auto' == settings.height; - - return this.each(function() { - - /* save this to self because this changes when scope changes */ - var self = this; - - /* inlined block elements lose their width and height after first edit */ - /* save them for later use as workaround */ - var savedwidth = $(self).width(); - var savedheight = $(self).height(); - - /* if element is empty add something clickable (if requested) */ - if (!$.trim($(this).html())) { - $(this).html(settings.placeholder); - } - - $(this)[settings.event](function(e) { - - /* prevent throwing an exeption if edit field is clicked again */ - if (self.editing) { - return; - } - - /* remove tooltip */ - $(self).removeAttr('title'); - - /* figure out how wide and tall we are, saved width and height */ - /* are workaround for http://dev.jquery.com/ticket/2190 */ - if (0 == $(self).width()) { - //$(self).css('visibility', 'hidden'); - settings.width = savedwidth; - settings.height = savedheight; - } else { - if (settings.width != 'none') { - settings.width = - //settings.autowidth ? savedwidth : settings.width - settings.autowidth ? $(self).width() : settings.width; - } - if (settings.height != 'none') { - settings.height = - //settings.autoheight ? savedheight : settings.height; - settings.autoheight ? $(self).height() : settings.height; - } - } - //$(this).css('visibility', ''); - - /* remove placeholder text, replace is here because of IE */ - if ($(this).html().toLowerCase().replace(/;/, '') == - settings.placeholder.toLowerCase().replace(/;/, '')) { - $(this).html(''); - } - - self.editing = true; - self.revert = $(self).html(); - $(self).html(''); - - /* create the form object */ - var form = $('
    '); - - /* apply css or style or both */ - if (settings.cssclass) { - if ('inherit' == settings.cssclass) { - form.attr('class', $(self).attr('class')); - } else { - form.attr('class', settings.cssclass); - } - } - - if (settings.style) { - if ('inherit' == settings.style) { - form.attr('style', $(self).attr('style')); - /* IE needs the second line or display wont be inherited */ - form.css('display', $(self).css('display')); - } else { - form.attr('style', settings.style); - } - } - - /* add main input element to form and store it in input */ - var input = element.apply(form, [settings, self]); - - /* set input content via POST, GET, given data or existing value */ - var input_content; - - if (settings.loadurl) { - var t = setTimeout(function() { - input.disabled = true; - content.apply(form, [settings.loadtext, settings, self]); - }, 100); - - var loaddata = {}; - loaddata[settings.id] = self.id; - if ($.isFunction(settings.loaddata)) { - $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings])); - } else { - $.extend(loaddata, settings.loaddata); - } - $.ajax({ - type : settings.loadtype, - url : settings.loadurl, - data : loaddata, - async : false, - success: function(result) { - window.clearTimeout(t); - input_content = result; - input.disabled = false; - } - }); - } else if (settings.data) { - input_content = settings.data; - if ($.isFunction(settings.data)) { - input_content = settings.data.apply(self, [self.revert, settings]); - } - } else { - input_content = self.revert; - } - content.apply(form, [input_content, settings, self]); - - input.attr('name', settings.name); - - /* add buttons to the form */ - buttons.apply(form, [settings, self]); - - /* add created form to self */ - $(self).append(form); - - /* attach 3rd party plugin if requested */ - plugin.apply(form, [settings, self]); - - /* focus to first visible form element */ - $(':input:visible:enabled:first', form).focus(); - - /* highlight input contents when requested */ - if (settings.select) { - input.select(); - } - - /* discard changes if pressing esc */ - input.keydown(function(e) { - if (e.keyCode == 27) { - e.preventDefault(); - //self.reset(); - reset.apply(form, [settings, self]); - } - }); - - /* discard, submit or nothing with changes when clicking outside */ - /* do nothing is usable when navigating with tab */ - var t; - if ('cancel' == settings.onblur) { - input.blur(function(e) { - /* prevent canceling if submit was clicked */ - t = setTimeout(function() { - reset.apply(form, [settings, self]); - }, 500); - }); - } else if ('submit' == settings.onblur) { - input.blur(function(e) { - /* prevent double submit if submit was clicked */ - t = setTimeout(function() { - form.submit(); - }, 200); - }); - } else if ($.isFunction(settings.onblur)) { - input.blur(function(e) { - settings.onblur.apply(self, [input.val(), settings]); - }); - } else { - input.blur(function(e) { - /* TODO: maybe something here */ - }); - } - - form.submit(function(e) { - - if (t) { - clearTimeout(t); - } - - /* do no submit */ - e.preventDefault(); - - /* call before submit hook. */ - /* if it returns false abort submitting */ - if (false !== onsubmit.apply(form, [settings, self])) { - /* custom inputs call before submit hook. */ - /* if it returns false abort submitting */ - if (false !== submit.apply(form, [settings, self])) { - - /* check if given target is function */ - if ($.isFunction(settings.target)) { - var str = settings.target.apply(self, [input.val(), settings]); - $(self).html(str); - self.editing = false; - callback.apply(self, [self.innerHTML, settings]); - /* TODO: this is not dry */ - if (!$.trim($(self).html())) { - $(self).html(settings.placeholder); - } - } else { - /* add edited content and id of edited element to POST */ - var submitdata = {}; - submitdata[settings.name] = input.val(); - submitdata[settings.id] = self.id; - /* add extra data to be POST:ed */ - if ($.isFunction(settings.submitdata)) { - $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings])); - } else { - $.extend(submitdata, settings.submitdata); - } - - /* quick and dirty PUT support */ - if ('PUT' == settings.method) { - submitdata['_method'] = 'put'; - } - - /* show the saving indicator */ - $(self).html(settings.indicator); - - /* defaults for ajaxoptions */ - var ajaxoptions = { - type : 'POST', - data : submitdata, - url : settings.target, - success : function(result, status) { - $(self).html(result); - self.editing = false; - callback.apply(self, [self.innerHTML, settings]); - if (!$.trim($(self).html())) { - $(self).html(settings.placeholder); - } - }, - error : function(xhr, status, error) { - onerror.apply(form, [settings, self, xhr]); - } - } - - /* override with what is given in settings.ajaxoptions */ - $.extend(ajaxoptions, settings.ajaxoptions); - $.ajax(ajaxoptions); - - } - } - } - - /* show tooltip again */ - $(self).attr('title', settings.tooltip); - - return false; - }); - }); - - /* privileged methods */ - this.reset = function(form) { - /* prevent calling reset twice when blurring */ - if (this.editing) { - /* before reset hook, if it returns false abort reseting */ - if (false !== onreset.apply(form, [settings, self])) { - $(self).html(self.revert); - self.editing = false; - if (!$.trim($(self).html())) { - $(self).html(settings.placeholder); - } - /* show tooltip again */ - $(self).attr('title', settings.tooltip); - } - } - } - }); - - }; - - - $.editable = { - types: { - defaults: { - element : function(settings, original) { - var input = $(''); - $(this).append(input); - return(input); - }, - content : function(string, settings, original) { - $(':input:first', this).val(string); - }, - reset : function(settings, original) { - original.reset(this); - }, - buttons : function(settings, original) { - var form = this; - if (settings.submit) { - /* if given html string use that */ - if (settings.submit.match(/>$/)) { - var submit = $(settings.submit).click(function() { - if (submit.attr("type") != "submit") { - form.submit(); - } - }); - /* otherwise use button with given string as text */ - } else { - var submit = $('
    tag). E.g.: - //
    ............
    tag). E.g.: - //
    ............
    tag). E.g.: - //
    ............
    tag). E.g.: - //
    17.........
    tag). E.g.: - //
    17.........