summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/post.go2
-rw-r--r--management/editor/elements.go68
-rw-r--r--system/admin/admin.go18
-rw-r--r--system/admin/static/common/js/jquery-1.11.3.min.js5
-rw-r--r--system/admin/static/common/js/jquery-2.1.4.min.js4
-rw-r--r--system/admin/static/common/js/underscore.js1628
-rw-r--r--system/admin/static/dashboard/css/admin.css33
-rw-r--r--system/admin/static/editor/css/materialNote.css2160
-rw-r--r--system/admin/static/editor/css/materialNote.css.map7
-rw-r--r--system/admin/static/editor/css/materialize.css8284
-rw-r--r--system/admin/static/editor/css/materialize.css.map7
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Bold.ttfbin0 -> 127744 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Bold.woffbin0 -> 62876 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Bold.woff2bin0 -> 49976 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Light.ttfbin0 -> 126792 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Light.woffbin0 -> 62316 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Light.woff2bin0 -> 49380 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Medium.ttfbin0 -> 127488 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Medium.woffbin0 -> 62980 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Medium.woff2bin0 -> 50224 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Regular.ttfbin0 -> 126072 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Regular.woffbin0 -> 61736 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Regular.woff2bin0 -> 49236 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Thin.ttfbin0 -> 127584 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Thin.woffbin0 -> 61628 bytes
-rw-r--r--system/admin/static/editor/font/roboto/Roboto-Thin.woff2bin0 -> 48524 bytes
-rw-r--r--system/admin/static/editor/js/ckMaterializeOverrides.js172
-rw-r--r--system/admin/static/editor/js/materialNote.js7469
-rw-r--r--system/admin/static/editor/license.txt21
-rw-r--r--system/admin/static/editor/sass/components/_buttons.scss157
-rw-r--r--system/admin/static/editor/sass/components/_cards.scss152
-rw-r--r--system/admin/static/editor/sass/components/_collapsible.scss85
-rw-r--r--system/admin/static/editor/sass/components/_color.scss412
-rw-r--r--system/admin/static/editor/sass/components/_dropdown.scss40
-rw-r--r--system/admin/static/editor/sass/components/_form.scss886
-rw-r--r--system/admin/static/editor/sass/components/_global.scss718
-rw-r--r--system/admin/static/editor/sass/components/_grid.scss117
-rw-r--r--system/admin/static/editor/sass/components/_icons-material-design.scss3257
-rw-r--r--system/admin/static/editor/sass/components/_materialbox.scss41
-rw-r--r--system/admin/static/editor/sass/components/_mixins.scss5
-rw-r--r--system/admin/static/editor/sass/components/_modal.scss90
-rw-r--r--system/admin/static/editor/sass/components/_navbar.scss144
-rw-r--r--system/admin/static/editor/sass/components/_normalize.scss427
-rw-r--r--system/admin/static/editor/sass/components/_prefixer.scss376
-rw-r--r--system/admin/static/editor/sass/components/_preloader.scss332
-rw-r--r--system/admin/static/editor/sass/components/_roboto.scss38
-rw-r--r--system/admin/static/editor/sass/components/_sideNav.scss111
-rw-r--r--system/admin/static/editor/sass/components/_slider.scss92
-rw-r--r--system/admin/static/editor/sass/components/_table_of_contents.scss33
-rw-r--r--system/admin/static/editor/sass/components/_tabs.scss47
-rw-r--r--system/admin/static/editor/sass/components/_toast.scss63
-rw-r--r--system/admin/static/editor/sass/components/_tooltip.scss34
-rw-r--r--system/admin/static/editor/sass/components/_typography.scss58
-rw-r--r--system/admin/static/editor/sass/components/_variables.scss152
-rw-r--r--system/admin/static/editor/sass/components/_waves.scss167
-rw-r--r--system/admin/static/editor/sass/components/date_picker/_default.date.scss435
-rw-r--r--system/admin/static/editor/sass/components/date_picker/_default.scss201
-rw-r--r--system/admin/static/editor/sass/components/date_picker/_default.time.scss125
-rw-r--r--system/admin/static/editor/sass/materialNote.scss734
-rw-r--r--system/admin/static/editor/sass/materialize.scss38
60 files changed, 29433 insertions, 12 deletions
diff --git a/content/post.go b/content/post.go
index 14f3330..efa83e8 100644
--- a/content/post.go
+++ b/content/post.go
@@ -48,7 +48,7 @@ func (p *Post) MarshalEditor() ([]byte, error) {
}),
},
editor.Field{
- View: editor.Textarea("Content", p, map[string]string{
+ View: editor.Richtext("Content", p, map[string]string{
"label": "Content",
"placeholder": "Add the content of your post here",
}),
diff --git a/management/editor/elements.go b/management/editor/elements.go
index dd71aa1..573272a 100644
--- a/management/editor/elements.go
+++ b/management/editor/elements.go
@@ -36,6 +36,74 @@ func Textarea(fieldName string, p interface{}, attrs map[string]string) []byte {
return domElement(e)
}
+// Richtext returns the []byte of a rich text editor (provided by http://summernote.org/) with a label.
+// IMPORTANT:
+// The `fieldName` argument will cause a panic if it is not exactly the string
+// form of the struct field that this editor input is representing
+func Richtext(fieldName string, p interface{}, attrs map[string]string) []byte {
+ // create wrapper for richtext editor, which isolates the editor's css
+ iso := []byte(`<div class="iso-texteditor input-field col s12"><label>` + attrs["label"] + `</label>`)
+ isoClose := []byte(`</div>`)
+
+ // create the target element for the editor to attach itself
+ attrs["class"] = "richtext " + fieldName
+ attrs["id"] = "richtext-" + fieldName
+ div := &element{
+ TagName: "div",
+ Attrs: attrs,
+ Name: "",
+ label: "",
+ data: "",
+ viewBuf: &bytes.Buffer{},
+ }
+
+ // create a hidden input to store the value from the struct
+ val := valueFromStructField(fieldName, p).String()
+ name := tagNameFromStructField(fieldName, p)
+ input := `<input type="hidden" name="` + name + `" class="richtext-value ` + fieldName + `" value="` + val + `"/>`
+
+ // build the dom tree for the entire richtext component
+ iso = append(iso, domElement(div)...)
+ iso = append(iso, []byte(input)...)
+ iso = append(iso, isoClose...)
+
+ initializer := `
+ <script>
+ $(function() {
+ var _editor = $('.richtext.` + fieldName + `');
+ var hidden = $('.richtext-value.` + fieldName + `');
+
+ _editor.materialnote({
+ height: 250,
+ placeholder: '` + attrs["placeholder"] + `',
+ toolbar: [
+ ['style', ['bold', 'italic', 'underline', 'clear']],
+ ['font', ['strikethrough', 'superscript', 'subscript']],
+ ['fontsize', ['fontsize']],
+ ['color', ['color']],
+ ['insert', ['link', 'picture', 'video', 'hr']],
+ ['para', ['ul', 'ol', 'paragraph']],
+ ['height', ['height']],
+ ['misc', ['codeview']]
+ ]
+ });
+
+ // update hidden input with escaped value
+ _editor.on('materialnote.change', function(e, content, $editable) {
+ hidden.val(_.escape(content));
+ })
+
+ // insert existing value into text editor
+ _editor.code(_.unescape(hidden.val()));
+
+ // bit of a hack to stop the editor buttons from causing a refresh when clicked
+ $('.note-toolbar').find('button, i, a').on('click', function(e) { e.preventDefault(); })
+ });
+ </script>`
+
+ return append(iso, []byte(initializer)...)
+}
+
// Select returns the []byte of a <select> HTML element plus internal <options> with a label.
// IMPORTANT:
// The `fieldName` argument will cause a panic if it is not exactly the string
diff --git a/system/admin/admin.go b/system/admin/admin.go
index 1ad46f3..df0f758 100644
--- a/system/admin/admin.go
+++ b/system/admin/admin.go
@@ -10,14 +10,23 @@ import (
)
const adminHTML = `<!doctype html>
-<html>
+<html lang="en">
<head>
<title>CMS</title>
- <script type="text/javascript" src="/admin/static/common/js/jquery-1.11.3.min.js"></script>
- <link rel="stylesheet" href="/admin/static/dashboard/css/material-icons.css" />
+ <script type="text/javascript" src="/admin/static/common/js/jquery-2.1.4.min.js"></script>
+ <script type="text/javascript" src="/admin/static/common/js/underscore.js"></script>
+ <script type="text/javascript" src="/admin/static/dashboard/js/materialize.min.js"></script>
+ <script type="text/javascript" src="/admin/static/editor/js/materialNote.js"></script>
+ <script type="text/javascript" src="/admin/static/editor/js/ckMaterializeOverrides.js"></script>
+
+ <link rel="stylesheet" href="/admin/static/dashboard/css/material-icons.css" />
<link rel="stylesheet" href="/admin/static/dashboard/css/materialize.min.css" />
- <link rel="stylesheet" href="/admin/static/dashboard/css/admin.css" />
+ <link rel="stylesheet" href="/admin/static/editor/css/materialNote.css" />
+ <link rel="stylesheet" href="/admin/static/dashboard/css/admin.css" />
+
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body class="grey lighten-4">
<div class="navbar-fixed">
@@ -58,7 +67,6 @@ const adminHTML = `<!doctype html>
</div>
{{ end }}
</div>
- <script type="text/javascript" src="/admin/static/dashboard/js/materialize.min.js"></script>
</body>
</html>`
diff --git a/system/admin/static/common/js/jquery-1.11.3.min.js b/system/admin/static/common/js/jquery-1.11.3.min.js
deleted file mode 100644
index 0f60b7b..0000000
--- a/system/admin/static/common/js/jquery-1.11.3.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
-
-return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
-return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/system/admin/static/common/js/jquery-2.1.4.min.js b/system/admin/static/common/js/jquery-2.1.4.min.js
new file mode 100644
index 0000000..fc356ee
--- /dev/null
+++ b/system/admin/static/common/js/jquery-2.1.4.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){
+return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ia={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qa[0].contentDocument,b.write(),b.close(),c=sa(a,b),qa.detach()),ra[a]=c),c}var ua=/^margin/,va=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wa=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xa(a,b,c){var d,e,f,g,h=a.style;return c=c||wa(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),va.test(g)&&ua.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function ya(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var za=/^(none|table(?!-c[ea]).+)/,Aa=new RegExp("^("+Q+")(.*)$","i"),Ba=new RegExp("^([+-])=("+Q+")","i"),Ca={position:"absolute",visibility:"hidden",display:"block"},Da={letterSpacing:"0",fontWeight:"400"},Ea=["Webkit","O","Moz","ms"];function Fa(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Ea.length;while(e--)if(b=Ea[e]+c,b in a)return b;return d}function Ga(a,b,c){var d=Aa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ha(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ia(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wa(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xa(a,b,f),(0>e||null==e)&&(e=a.style[b]),va.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Ha(a,b,c||(g?"border":"content"),d,f)+"px"}function Ja(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",ta(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fa(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ba.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fa(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xa(a,b,d)),"normal"===e&&b in Da&&(e=Da[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?za.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Ca,function(){return Ia(a,b,d)}):Ia(a,b,d):void 0},set:function(a,c,d){var e=d&&wa(a);return Ga(a,c,d?Ha(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=ya(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ua.test(a)||(n.cssHooks[a+b].set=Ga)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wa(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Ja(this,!0)},hide:function(){return Ja(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Ka(a,b,c,d,e){return new Ka.prototype.init(a,b,c,d,e)}n.Tween=Ka,Ka.prototype={constructor:Ka,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ka.propHooks[this.prop];return a&&a.get?a.get(this):Ka.propHooks._default.get(this)},run:function(a){var b,c=Ka.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ka.propHooks._default.set(this),this}},Ka.prototype.init.prototype=Ka.prototype,Ka.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Ka.propHooks.scrollTop=Ka.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Ka.prototype.init,n.fx.step={};var La,Ma,Na=/^(?:toggle|show|hide)$/,Oa=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pa=/queueHooks$/,Qa=[Va],Ra={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Oa.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Oa.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sa(){return setTimeout(function(){La=void 0}),La=n.now()}function Ta(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ua(a,b,c){for(var d,e=(Ra[b]||[]).concat(Ra["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Va(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||ta(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Na.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?ta(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ua(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wa(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xa(a,b,c){var d,e,f=0,g=Qa.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=La||Sa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:La||Sa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wa(k,j.opts.specialEasing);g>f;f++)if(d=Qa[f].call(j,a,k,j.opts))return d;return n.map(k,Ua,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xa,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Ra[c]=Ra[c]||[],Ra[c].unshift(b)},prefilter:function(a,b){b?Qa.unshift(a):Qa.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xa(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pa.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Ta(b,!0),a,d,e)}}),n.each({slideDown:Ta("show"),slideUp:Ta("hide"),slideToggle:Ta("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(La=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),La=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Ma||(Ma=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Ma),Ma=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Ya,Za,$a=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Za:Ya)),
+void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Za={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$a[b]||n.find.attr;$a[b]=function(a,b,d){var e,f;return d||(f=$a[b],$a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$a[b]=f),e}});var _a=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_a.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ab=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ab," ").indexOf(b)>=0)return!0;return!1}});var bb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cb=n.now(),db=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var eb=/#.*$/,fb=/([?&])_=[^&]*/,gb=/^(.*?):[ \t]*([^\r\n]*)$/gm,hb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ib=/^(?:GET|HEAD)$/,jb=/^\/\//,kb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lb={},mb={},nb="*/".concat("*"),ob=a.location.href,pb=kb.exec(ob.toLowerCase())||[];function qb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rb(a,b,c,d){var e={},f=a===mb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function ub(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ob,type:"GET",isLocal:hb.test(pb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sb(sb(a,n.ajaxSettings),b):sb(n.ajaxSettings,a)},ajaxPrefilter:qb(lb),ajaxTransport:qb(mb),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gb.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||ob)+"").replace(eb,"").replace(jb,pb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kb.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pb[1]&&h[2]===pb[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pb[3]||("http:"===pb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rb(lb,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ib.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(db.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fb.test(d)?d.replace(fb,"$1_="+cb++):d+(db.test(d)?"&":"?")+"_="+cb++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nb+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rb(mb,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tb(k,v,f)),u=ub(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vb=/%20/g,wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&").replace(vb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bb=0,Cb={},Db={0:200,1223:204},Eb=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cb)Cb[a]()}),k.cors=!!Eb&&"withCredentials"in Eb,k.ajax=Eb=!!Eb,n.ajaxTransport(function(a){var b;return k.cors||Eb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Db[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cb[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fb=[],Gb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fb.pop()||n.expando+"_"+cb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gb,"$1"+e):b.jsonp!==!1&&(b.url+=(db.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hb)return Hb.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ib=a.document.documentElement;function Jb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jb(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ib;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ib})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jb(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=ya(k.pixelPosition,function(a,c){return c?(c=xa(a,b),va.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kb=a.jQuery,Lb=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lb),b&&a.jQuery===n&&(a.jQuery=Kb),n},typeof b===U&&(a.jQuery=a.$=n),n}); \ No newline at end of file
diff --git a/system/admin/static/common/js/underscore.js b/system/admin/static/common/js/underscore.js
new file mode 100644
index 0000000..3dd7f2d
--- /dev/null
+++ b/system/admin/static/common/js/underscore.js
@@ -0,0 +1,1628 @@
+// Underscore.js 1.8.3
+// http://underscorejs.org
+// (c) 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+// Underscore may be freely distributed under the MIT license.
+
+(function() {
+
+ // Baseline setup
+ // --------------
+
+ // Establish the root object, `window` (`self`) in the browser, `global`
+ // on the server, or `this` in some virtual machines. We use `self`
+ // instead of `window` for `WebWorker` support.
+ var root = typeof self == 'object' && self.self === self && self ||
+ typeof global == 'object' && global.global === global && global ||
+ this;
+
+ // Save the previous value of the `_` variable.
+ var previousUnderscore = root._;
+
+ // Save bytes in the minified (but not gzipped) version:
+ var ArrayProto = Array.prototype, ObjProto = Object.prototype;
+ var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
+
+ // Create quick reference variables for speed access to core prototypes.
+ var push = ArrayProto.push,
+ slice = ArrayProto.slice,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+ // All **ECMAScript 5** native function implementations that we hope to use
+ // are declared here.
+ var nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeCreate = Object.create;
+
+ // Naked function reference for surrogate-prototype-swapping.
+ var Ctor = function(){};
+
+ // Create a safe reference to the Underscore object for use below.
+ var _ = function(obj) {
+ if (obj instanceof _) return obj;
+ if (!(this instanceof _)) return new _(obj);
+ this._wrapped = obj;
+ };
+
+ // Export the Underscore object for **Node.js**, with
+ // backwards-compatibility for their old module API. If we're in
+ // the browser, add `_` as a global object.
+ // (`nodeType` is checked to ensure that `module`
+ // and `exports` are not HTML elements.)
+ if (typeof exports != 'undefined' && !exports.nodeType) {
+ if (typeof module != 'undefined' && !module.nodeType && module.exports) {
+ exports = module.exports = _;
+ }
+ exports._ = _;
+ } else {
+ root._ = _;
+ }
+
+ // Current version.
+ _.VERSION = '1.8.3';
+
+ // Internal function that returns an efficient (for current engines) version
+ // of the passed-in callback, to be repeatedly applied in other Underscore
+ // functions.
+ var optimizeCb = function(func, context, argCount) {
+ if (context === void 0) return func;
+ switch (argCount == null ? 3 : argCount) {
+ case 1: return function(value) {
+ return func.call(context, value);
+ };
+ // The 2-parameter case has been omitted only because no current consumers
+ // made use of it.
+ case 3: return function(value, index, collection) {
+ return func.call(context, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(context, accumulator, value, index, collection);
+ };
+ }
+ return function() {
+ return func.apply(context, arguments);
+ };
+ };
+
+ var builtinIteratee;
+
+ // An internal function to generate callbacks that can be applied to each
+ // element in a collection, returning the desired result — either `identity`,
+ // an arbitrary callback, a property matcher, or a property accessor.
+ var cb = function(value, context, argCount) {
+ if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);
+ if (value == null) return _.identity;
+ if (_.isFunction(value)) return optimizeCb(value, context, argCount);
+ if (_.isObject(value)) return _.matcher(value);
+ return _.property(value);
+ };
+
+ // External wrapper for our callback generator. Users may customize
+ // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
+ // This abstraction hides the internal-only argCount argument.
+ _.iteratee = builtinIteratee = function(value, context) {
+ return cb(value, context, Infinity);
+ };
+
+ // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html)
+ // This accumulates the arguments passed into an array, after a given index.
+ var restArgs = function(func, startIndex) {
+ startIndex = startIndex == null ? func.length - 1 : +startIndex;
+ return function() {
+ var length = Math.max(arguments.length - startIndex, 0),
+ rest = Array(length),
+ index = 0;
+ for (; index < length; index++) {
+ rest[index] = arguments[index + startIndex];
+ }
+ switch (startIndex) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, arguments[0], rest);
+ case 2: return func.call(this, arguments[0], arguments[1], rest);
+ }
+ var args = Array(startIndex + 1);
+ for (index = 0; index < startIndex; index++) {
+ args[index] = arguments[index];
+ }
+ args[startIndex] = rest;
+ return func.apply(this, args);
+ };
+ };
+
+ // An internal function for creating a new object that inherits from another.
+ var baseCreate = function(prototype) {
+ if (!_.isObject(prototype)) return {};
+ if (nativeCreate) return nativeCreate(prototype);
+ Ctor.prototype = prototype;
+ var result = new Ctor;
+ Ctor.prototype = null;
+ return result;
+ };
+
+ var property = function(key) {
+ return function(obj) {
+ return obj == null ? void 0 : obj[key];
+ };
+ };
+
+ // Helper for collection methods to determine whether a collection
+ // should be iterated as an array or as an object.
+ // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+ // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+ var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+ var getLength = property('length');
+ var isArrayLike = function(collection) {
+ var length = getLength(collection);
+ return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
+ };
+
+ // Collection Functions
+ // --------------------
+
+ // The cornerstone, an `each` implementation, aka `forEach`.
+ // Handles raw objects in addition to array-likes. Treats all
+ // sparse array-likes as if they were dense.
+ _.each = _.forEach = function(obj, iteratee, context) {
+ iteratee = optimizeCb(iteratee, context);
+ var i, length;
+ if (isArrayLike(obj)) {
+ for (i = 0, length = obj.length; i < length; i++) {
+ iteratee(obj[i], i, obj);
+ }
+ } else {
+ var keys = _.keys(obj);
+ for (i = 0, length = keys.length; i < length; i++) {
+ iteratee(obj[keys[i]], keys[i], obj);
+ }
+ }
+ return obj;
+ };
+
+ // Return the results of applying the iteratee to each element.
+ _.map = _.collect = function(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length,
+ results = Array(length);
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ results[index] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ };
+
+ // Create a reducing function iterating left or right.
+ var createReduce = function(dir) {
+ // Wrap code that reassigns argument variables in a separate function than
+ // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
+ var reducer = function(obj, iteratee, memo, initial) {
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length,
+ index = dir > 0 ? 0 : length - 1;
+ if (!initial) {
+ memo = obj[keys ? keys[index] : index];
+ index += dir;
+ }
+ for (; index >= 0 && index < length; index += dir) {
+ var currentKey = keys ? keys[index] : index;
+ memo = iteratee(memo, obj[currentKey], currentKey, obj);
+ }
+ return memo;
+ };
+
+ return function(obj, iteratee, memo, context) {
+ var initial = arguments.length >= 3;
+ return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
+ };
+ };
+
+ // **Reduce** builds up a single result from a list of values, aka `inject`,
+ // or `foldl`.
+ _.reduce = _.foldl = _.inject = createReduce(1);
+
+ // The right-associative version of reduce, also known as `foldr`.
+ _.reduceRight = _.foldr = createReduce(-1);
+
+ // Return the first value which passes a truth test. Aliased as `detect`.
+ _.find = _.detect = function(obj, predicate, context) {
+ var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;
+ var key = keyFinder(obj, predicate, context);
+ if (key !== void 0 && key !== -1) return obj[key];
+ };
+
+ // Return all the elements that pass a truth test.
+ // Aliased as `select`.
+ _.filter = _.select = function(obj, predicate, context) {
+ var results = [];
+ predicate = cb(predicate, context);
+ _.each(obj, function(value, index, list) {
+ if (predicate(value, index, list)) results.push(value);
+ });
+ return results;
+ };
+
+ // Return all the elements for which a truth test fails.
+ _.reject = function(obj, predicate, context) {
+ return _.filter(obj, _.negate(cb(predicate)), context);
+ };
+
+ // Determine whether all of the elements match a truth test.
+ // Aliased as `all`.
+ _.every = _.all = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ if (!predicate(obj[currentKey], currentKey, obj)) return false;
+ }
+ return true;
+ };
+
+ // Determine if at least one element in the object matches a truth test.
+ // Aliased as `any`.
+ _.some = _.any = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ if (predicate(obj[currentKey], currentKey, obj)) return true;
+ }
+ return false;
+ };
+
+ // Determine if the array or object contains a given item (using `===`).
+ // Aliased as `includes` and `include`.
+ _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
+ if (!isArrayLike(obj)) obj = _.values(obj);
+ if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+ return _.indexOf(obj, item, fromIndex) >= 0;
+ };
+
+ // Invoke a method (with arguments) on every item in a collection.
+ _.invoke = restArgs(function(obj, method, args) {
+ var isFunc = _.isFunction(method);
+ return _.map(obj, function(value) {
+ var func = isFunc ? method : value[method];
+ return func == null ? func : func.apply(value, args);
+ });
+ });
+
+ // Convenience version of a common use case of `map`: fetching a property.
+ _.pluck = function(obj, key) {
+ return _.map(obj, _.property(key));
+ };
+
+ // Convenience version of a common use case of `filter`: selecting only objects
+ // containing specific `key:value` pairs.
+ _.where = function(obj, attrs) {
+ return _.filter(obj, _.matcher(attrs));
+ };
+
+ // Convenience version of a common use case of `find`: getting the first object
+ // containing specific `key:value` pairs.
+ _.findWhere = function(obj, attrs) {
+ return _.find(obj, _.matcher(attrs));
+ };
+
+ // Return the maximum element (or element-based computation).
+ _.max = function(obj, iteratee, context) {
+ var result = -Infinity, lastComputed = -Infinity,
+ value, computed;
+ if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object') && obj != null) {
+ obj = isArrayLike(obj) ? obj : _.values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value != null && value > result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(v, index, list) {
+ computed = iteratee(v, index, list);
+ if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+ result = v;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ };
+
+ // Return the minimum element (or element-based computation).
+ _.min = function(obj, iteratee, context) {
+ var result = Infinity, lastComputed = Infinity,
+ value, computed;
+ if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object') && obj != null) {
+ obj = isArrayLike(obj) ? obj : _.values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value != null && value < result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(v, index, list) {
+ computed = iteratee(v, index, list);
+ if (computed < lastComputed || computed === Infinity && result === Infinity) {
+ result = v;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ };
+
+ // Shuffle a collection.
+ _.shuffle = function(obj) {
+ return _.sample(obj, Infinity);
+ };
+
+ // Sample **n** random values from a collection using the modern version of the
+ // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+ // If **n** is not specified, returns a single random element.
+ // The internal `guard` argument allows it to work with `map`.
+ _.sample = function(obj, n, guard) {
+ if (n == null || guard) {
+ if (!isArrayLike(obj)) obj = _.values(obj);
+ return obj[_.random(obj.length - 1)];
+ }
+ var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);
+ var length = getLength(sample);
+ n = Math.max(Math.min(n, length), 0);
+ var last = length - 1;
+ for (var index = 0; index < n; index++) {
+ var rand = _.random(index, last);
+ var temp = sample[index];
+ sample[index] = sample[rand];
+ sample[rand] = temp;
+ }
+ return sample.slice(0, n);
+ };
+
+ // Sort the object's values by a criterion produced by an iteratee.
+ _.sortBy = function(obj, iteratee, context) {
+ var index = 0;
+ iteratee = cb(iteratee, context);
+ return _.pluck(_.map(obj, function(value, key, list) {
+ return {
+ value: value,
+ index: index++,
+ criteria: iteratee(value, key, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria;
+ var b = right.criteria;
+ if (a !== b) {
+ if (a > b || a === void 0) return 1;
+ if (a < b || b === void 0) return -1;
+ }
+ return left.index - right.index;
+ }), 'value');
+ };
+
+ // An internal function used for aggregate "group by" operations.
+ var group = function(behavior, partition) {
+ return function(obj, iteratee, context) {
+ var result = partition ? [[], []] : {};
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(value, index) {
+ var key = iteratee(value, index, obj);
+ behavior(result, value, key);
+ });
+ return result;
+ };
+ };
+
+ // Groups the object's values by a criterion. Pass either a string attribute
+ // to group by, or a function that returns the criterion.
+ _.groupBy = group(function(result, value, key) {
+ if (_.has(result, key)) result[key].push(value); else result[key] = [value];
+ });
+
+ // Indexes the object's values by a criterion, similar to `groupBy`, but for
+ // when you know that your index values will be unique.
+ _.indexBy = group(function(result, value, key) {
+ result[key] = value;
+ });
+
+ // Counts instances of an object that group by a certain criterion. Pass
+ // either a string attribute to count by, or a function that returns the
+ // criterion.
+ _.countBy = group(function(result, value, key) {
+ if (_.has(result, key)) result[key]++; else result[key] = 1;
+ });
+
+ var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
+ // Safely create a real, live array from anything iterable.
+ _.toArray = function(obj) {
+ if (!obj) return [];
+ if (_.isArray(obj)) return slice.call(obj);
+ if (_.isString(obj)) {
+ // Keep surrogate pair characters together
+ return obj.match(reStrSymbol);
+ }
+ if (isArrayLike(obj)) return _.map(obj, _.identity);
+ return _.values(obj);
+ };
+
+ // Return the number of elements in an object.
+ _.size = function(obj) {
+ if (obj == null) return 0;
+ return isArrayLike(obj) ? obj.length : _.keys(obj).length;
+ };
+
+ // Split a collection into two arrays: one whose elements all satisfy the given
+ // predicate, and one whose elements all do not satisfy the predicate.
+ _.partition = group(function(result, value, pass) {
+ result[pass ? 0 : 1].push(value);
+ }, true);
+
+ // Array Functions
+ // ---------------
+
+ // Get the first element of an array. Passing **n** will return the first N
+ // values in the array. Aliased as `head` and `take`. The **guard** check
+ // allows it to work with `_.map`.
+ _.first = _.head = _.take = function(array, n, guard) {
+ if (array == null || array.length < 1) return void 0;
+ if (n == null || guard) return array[0];
+ return _.initial(array, array.length - n);
+ };
+
+ // Returns everything but the last entry of the array. Especially useful on
+ // the arguments object. Passing **n** will return all the values in
+ // the array, excluding the last N.
+ _.initial = function(array, n, guard) {
+ return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+ };
+
+ // Get the last element of an array. Passing **n** will return the last N
+ // values in the array.
+ _.last = function(array, n, guard) {
+ if (array == null || array.length < 1) return void 0;
+ if (n == null || guard) return array[array.length - 1];
+ return _.rest(array, Math.max(0, array.length - n));
+ };
+
+ // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
+ // Especially useful on the arguments object. Passing an **n** will return
+ // the rest N values in the array.
+ _.rest = _.tail = _.drop = function(array, n, guard) {
+ return slice.call(array, n == null || guard ? 1 : n);
+ };
+
+ // Trim out all falsy values from an array.
+ _.compact = function(array) {
+ return _.filter(array, Boolean);
+ };
+
+ // Internal implementation of a recursive `flatten` function.
+ var flatten = function(input, shallow, strict, output) {
+ output = output || [];
+ var idx = output.length;
+ for (var i = 0, length = getLength(input); i < length; i++) {
+ var value = input[i];
+ if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
+ // Flatten current level of array or arguments object.
+ if (shallow) {
+ var j = 0, len = value.length;
+ while (j < len) output[idx++] = value[j++];
+ } else {
+ flatten(value, shallow, strict, output);
+ idx = output.length;
+ }
+ } else if (!strict) {
+ output[idx++] = value;
+ }
+ }
+ return output;
+ };
+
+ // Flatten out an array, either recursively (by default), or just one level.
+ _.flatten = function(array, shallow) {
+ return flatten(array, shallow, false);
+ };
+
+ // Return a version of the array that does not contain the specified value(s).
+ _.without = restArgs(function(array, otherArrays) {
+ return _.difference(array, otherArrays);
+ });
+
+ // Produce a duplicate-free version of the array. If the array has already
+ // been sorted, you have the option of using a faster algorithm.
+ // Aliased as `unique`.
+ _.uniq = _.unique = function(array, isSorted, iteratee, context) {
+ if (!_.isBoolean(isSorted)) {
+ context = iteratee;
+ iteratee = isSorted;
+ isSorted = false;
+ }
+ if (iteratee != null) iteratee = cb(iteratee, context);
+ var result = [];
+ var seen = [];
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var value = array[i],
+ computed = iteratee ? iteratee(value, i, array) : value;
+ if (isSorted) {
+ if (!i || seen !== computed) result.push(value);
+ seen = computed;
+ } else if (iteratee) {
+ if (!_.contains(seen, computed)) {
+ seen.push(computed);
+ result.push(value);
+ }
+ } else if (!_.contains(result, value)) {
+ result.push(value);
+ }
+ }
+ return result;
+ };
+
+ // Produce an array that contains the union: each distinct element from all of
+ // the passed-in arrays.
+ _.union = restArgs(function(arrays) {
+ return _.uniq(flatten(arrays, true, true));
+ });
+
+ // Produce an array that contains every item shared between all the
+ // passed-in arrays.
+ _.intersection = function(array) {
+ var result = [];
+ var argsLength = arguments.length;
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var item = array[i];
+ if (_.contains(result, item)) continue;
+ var j;
+ for (j = 1; j < argsLength; j++) {
+ if (!_.contains(arguments[j], item)) break;
+ }
+ if (j === argsLength) result.push(item);
+ }
+ return result;
+ };
+
+ // Take the difference between one array and a number of other arrays.
+ // Only the elements present in just the first array will remain.
+ _.difference = restArgs(function(array, rest) {
+ rest = flatten(rest, true, true);
+ return _.filter(array, function(value){
+ return !_.contains(rest, value);
+ });
+ });
+
+ // Complement of _.zip. Unzip accepts an array of arrays and groups
+ // each array's elements on shared indices.
+ _.unzip = function(array) {
+ var length = array && _.max(array, getLength).length || 0;
+ var result = Array(length);
+
+ for (var index = 0; index < length; index++) {
+ result[index] = _.pluck(array, index);
+ }
+ return result;
+ };
+
+ // Zip together multiple lists into a single array -- elements that share
+ // an index go together.
+ _.zip = restArgs(_.unzip);
+
+ // Converts lists into objects. Pass either a single array of `[key, value]`
+ // pairs, or two parallel arrays of the same length -- one of keys, and one of
+ // the corresponding values. Passing by pairs is the reverse of _.pairs.
+ _.object = function(list, values) {
+ var result = {};
+ for (var i = 0, length = getLength(list); i < length; i++) {
+ if (values) {
+ result[list[i]] = values[i];
+ } else {
+ result[list[i][0]] = list[i][1];
+ }
+ }
+ return result;
+ };
+
+ // Generator function to create the findIndex and findLastIndex functions.
+ var createPredicateIndexFinder = function(dir) {
+ return function(array, predicate, context) {
+ predicate = cb(predicate, context);
+ var length = getLength(array);
+ var index = dir > 0 ? 0 : length - 1;
+ for (; index >= 0 && index < length; index += dir) {
+ if (predicate(array[index], index, array)) return index;
+ }
+ return -1;
+ };
+ };
+
+ // Returns the first index on an array-like that passes a predicate test.
+ _.findIndex = createPredicateIndexFinder(1);
+ _.findLastIndex = createPredicateIndexFinder(-1);
+
+ // Use a comparator function to figure out the smallest index at which
+ // an object should be inserted so as to maintain order. Uses binary search.
+ _.sortedIndex = function(array, obj, iteratee, context) {
+ iteratee = cb(iteratee, context, 1);
+ var value = iteratee(obj);
+ var low = 0, high = getLength(array);
+ while (low < high) {
+ var mid = Math.floor((low + high) / 2);
+ if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+ }
+ return low;
+ };
+
+ // Generator function to create the indexOf and lastIndexOf functions.
+ var createIndexFinder = function(dir, predicateFind, sortedIndex) {
+ return function(array, item, idx) {
+ var i = 0, length = getLength(array);
+ if (typeof idx == 'number') {
+ if (dir > 0) {
+ i = idx >= 0 ? idx : Math.max(idx + length, i);
+ } else {
+ length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+ }
+ } else if (sortedIndex && idx && length) {
+ idx = sortedIndex(array, item);
+ return array[idx] === item ? idx : -1;
+ }
+ if (item !== item) {
+ idx = predicateFind(slice.call(array, i, length), _.isNaN);
+ return idx >= 0 ? idx + i : -1;
+ }
+ for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+ if (array[idx] === item) return idx;
+ }
+ return -1;
+ };
+ };
+
+ // Return the position of the first occurrence of an item in an array,
+ // or -1 if the item is not included in the array.
+ // If the array is large and already in sort order, pass `true`
+ // for **isSorted** to use binary search.
+ _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
+ _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
+
+ // Generate an integer Array containing an arithmetic progression. A port of
+ // the native Python `range()` function. See
+ // [the Python documentation](http://docs.python.org/library/functions.html#range).
+ _.range = function(start, stop, step) {
+ if (stop == null) {
+ stop = start || 0;
+ start = 0;
+ }
+ if (!step) {
+ step = stop < start ? -1 : 1;
+ }
+
+ var length = Math.max(Math.ceil((stop - start) / step), 0);
+ var range = Array(length);
+
+ for (var idx = 0; idx < length; idx++, start += step) {
+ range[idx] = start;
+ }
+
+ return range;
+ };
+
+ // Split an **array** into several arrays containing **count** or less elements
+ // of initial array.
+ _.chunk = function(array, count) {
+ if (count == null || count < 1) return [];
+
+ var result = [];
+ var i = 0, length = array.length;
+ while (i < length) {
+ result.push(slice.call(array, i, i += count));
+ }
+ return result;
+ };
+
+ // Function (ahem) Functions
+ // ------------------
+
+ // Determines whether to execute a function as a constructor
+ // or a normal function with the provided arguments.
+ var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
+ if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+ var self = baseCreate(sourceFunc.prototype);
+ var result = sourceFunc.apply(self, args);
+ if (_.isObject(result)) return result;
+ return self;
+ };
+
+ // Create a function bound to a given object (assigning `this`, and arguments,
+ // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+ // available.
+ _.bind = restArgs(function(func, context, args) {
+ if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
+ var bound = restArgs(function(callArgs) {
+ return executeBound(func, bound, context, this, args.concat(callArgs));
+ });
+ return bound;
+ });
+
+ // Partially apply a function by creating a version that has had some of its
+ // arguments pre-filled, without changing its dynamic `this` context. _ acts
+ // as a placeholder by default, allowing any combination of arguments to be
+ // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
+ _.partial = restArgs(function(func, boundArgs) {
+ var placeholder = _.partial.placeholder;
+ var bound = function() {
+ var position = 0, length = boundArgs.length;
+ var args = Array(length);
+ for (var i = 0; i < length; i++) {
+ args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
+ }
+ while (position < arguments.length) args.push(arguments[position++]);
+ return executeBound(func, bound, this, this, args);
+ };
+ return bound;
+ });
+
+ _.partial.placeholder = _;
+
+ // Bind a number of an object's methods to that object. Remaining arguments
+ // are the method names to be bound. Useful for ensuring that all callbacks
+ // defined on an object belong to it.
+ _.bindAll = restArgs(function(obj, keys) {
+ keys = flatten(keys, false, false);
+ var index = keys.length;
+ if (index < 1) throw new Error('bindAll must be passed function names');
+ while (index--) {
+ var key = keys[index];
+ obj[key] = _.bind(obj[key], obj);
+ }
+ });
+
+ // Memoize an expensive function by storing its results.
+ _.memoize = function(func, hasher) {
+ var memoize = function(key) {
+ var cache = memoize.cache;
+ var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+ if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
+ return cache[address];
+ };
+ memoize.cache = {};
+ return memoize;
+ };
+
+ // Delays a function for the given number of milliseconds, and then calls
+ // it with the arguments supplied.
+ _.delay = restArgs(function(func, wait, args) {
+ return setTimeout(function() {
+ return func.apply(null, args);
+ }, wait);
+ });
+
+ // Defers a function, scheduling it to run after the current call stack has
+ // cleared.
+ _.defer = _.partial(_.delay, _, 1);
+
+ // Returns a function, that, when invoked, will only be triggered at most once
+ // during a given window of time. Normally, the throttled function will run
+ // as much as it can, without ever going more than once per `wait` duration;
+ // but if you'd like to disable the execution on the leading edge, pass
+ // `{leading: false}`. To disable execution on the trailing edge, ditto.
+ _.throttle = function(func, wait, options) {
+ var timeout, context, args, result;
+ var previous = 0;
+ if (!options) options = {};
+
+ var later = function() {
+ previous = options.leading === false ? 0 : _.now();
+ timeout = null;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ };
+
+ var throttled = function() {
+ var now = _.now();
+ if (!previous && options.leading === false) previous = now;
+ var remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0 || remaining > wait) {
+ if (timeout) {
+ clearTimeout(timeout);
+ timeout = null;
+ }
+ previous = now;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ } else if (!timeout && options.trailing !== false) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+
+ throttled.cancel = function() {
+ clearTimeout(timeout);
+ previous = 0;
+ timeout = context = args = null;
+ };
+
+ return throttled;
+ };
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ _.debounce = function(func, wait, immediate) {
+ var timeout, result;
+
+ var later = function(context, args) {
+ timeout = null;
+ if (args) result = func.apply(context, args);
+ };
+
+ var debounced = restArgs(function(args) {
+ if (timeout) clearTimeout(timeout);
+ if (immediate) {
+ var callNow = !timeout;
+ timeout = setTimeout(later, wait);
+ if (callNow) result = func.apply(this, args);
+ } else {
+ timeout = _.delay(later, wait, this, args);
+ }
+
+ return result;
+ });
+
+ debounced.cancel = function() {
+ clearTimeout(timeout);
+ timeout = null;
+ };
+
+ return debounced;
+ };
+
+ // Returns the first function passed as an argument to the second,
+ // allowing you to adjust arguments, run code before and after, and
+ // conditionally execute the original function.
+ _.wrap = function(func, wrapper) {
+ return _.partial(wrapper, func);
+ };
+
+ // Returns a negated version of the passed-in predicate.
+ _.negate = function(predicate) {
+ return function() {
+ return !predicate.apply(this, arguments);
+ };
+ };
+
+ // Returns a function that is the composition of a list of functions, each
+ // consuming the return value of the function that follows.
+ _.compose = function() {
+ var args = arguments;
+ var start = args.length - 1;
+ return function() {
+ var i = start;
+ var result = args[start].apply(this, arguments);
+ while (i--) result = args[i].call(this, result);
+ return result;
+ };
+ };
+
+ // Returns a function that will only be executed on and after the Nth call.
+ _.after = function(times, func) {
+ return function() {
+ if (--times < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ };
+
+ // Returns a function that will only be executed up to (but not including) the Nth call.
+ _.before = function(times, func) {
+ var memo;
+ return function() {
+ if (--times > 0) {
+ memo = func.apply(this, arguments);
+ }
+ if (times <= 1) func = null;
+ return memo;
+ };
+ };
+
+ // Returns a function that will be executed at most one time, no matter how
+ // often you call it. Useful for lazy initialization.
+ _.once = _.partial(_.before, 2);
+
+ _.restArgs = restArgs;
+
+ // Object Functions
+ // ----------------
+
+ // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+ var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+ var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+ 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+ var collectNonEnumProps = function(obj, keys) {
+ var nonEnumIdx = nonEnumerableProps.length;
+ var constructor = obj.constructor;
+ var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;
+
+ // Constructor is a special case.
+ var prop = 'constructor';
+ if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
+
+ while (nonEnumIdx--) {
+ prop = nonEnumerableProps[nonEnumIdx];
+ if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
+ keys.push(prop);
+ }
+ }
+ };
+
+ // Retrieve the names of an object's own properties.
+ // Delegates to **ECMAScript 5**'s native `Object.keys`.
+ _.keys = function(obj) {
+ if (!_.isObject(obj)) return [];
+ if (nativeKeys) return nativeKeys(obj);
+ var keys = [];
+ for (var key in obj) if (_.has(obj, key)) keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, keys);
+ return keys;
+ };
+
+ // Retrieve all the property names of an object.
+ _.allKeys = function(obj) {
+ if (!_.isObject(obj)) return [];
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, keys);
+ return keys;
+ };
+
+ // Retrieve the values of an object's properties.
+ _.values = function(obj) {
+ var keys = _.keys(obj);
+ var length = keys.length;
+ var values = Array(length);
+ for (var i = 0; i < length; i++) {
+ values[i] = obj[keys[i]];
+ }
+ return values;
+ };
+
+ // Returns the results of applying the iteratee to each element of the object.
+ // In contrast to _.map it returns an object.
+ _.mapObject = function(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var keys = _.keys(obj),
+ length = keys.length,
+ results = {};
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys[index];
+ results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ };
+
+ // Convert an object into a list of `[key, value]` pairs.
+ // The opposite of _.object.
+ _.pairs = function(obj) {
+ var keys = _.keys(obj);
+ var length = keys.length;
+ var pairs = Array(length);
+ for (var i = 0; i < length; i++) {
+ pairs[i] = [keys[i], obj[keys[i]]];
+ }
+ return pairs;
+ };
+
+ // Invert the keys and values of an object. The values must be serializable.
+ _.invert = function(obj) {
+ var result = {};
+ var keys = _.keys(obj);
+ for (var i = 0, length = keys.length; i < length; i++) {
+ result[obj[keys[i]]] = keys[i];
+ }
+ return result;
+ };
+
+ // Return a sorted list of the function names available on the object.
+ // Aliased as `methods`.
+ _.functions = _.methods = function(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (_.isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+ };
+
+ // An internal function for creating assigner functions.
+ var createAssigner = function(keysFunc, defaults) {
+ return function(obj) {
+ var length = arguments.length;
+ if (defaults) obj = Object(obj);
+ if (length < 2 || obj == null) return obj;
+ for (var index = 1; index < length; index++) {
+ var source = arguments[index],
+ keys = keysFunc(source),
+ l = keys.length;
+ for (var i = 0; i < l; i++) {
+ var key = keys[i];
+ if (!defaults || obj[key] === void 0) obj[key] = source[key];
+ }
+ }
+ return obj;
+ };
+ };
+
+ // Extend a given object with all the properties in passed-in object(s).
+ _.extend = createAssigner(_.allKeys);
+
+ // Assigns a given object with all the own properties in the passed-in object(s).
+ // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+ _.extendOwn = _.assign = createAssigner(_.keys);
+
+ // Returns the first key on an object that passes a predicate test.
+ _.findKey = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = _.keys(obj), key;
+ for (var i = 0, length = keys.length; i < length; i++) {
+ key = keys[i];
+ if (predicate(obj[key], key, obj)) return key;
+ }
+ };
+
+ // Internal pick helper function to determine if `obj` has key `key`.
+ var keyInObj = function(value, key, obj) {
+ return key in obj;
+ };
+
+ // Return a copy of the object only containing the whitelisted properties.
+ _.pick = restArgs(function(obj, keys) {
+ var result = {}, iteratee = keys[0];
+ if (obj == null) return result;
+ if (_.isFunction(iteratee)) {
+ if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
+ keys = _.allKeys(obj);
+ } else {
+ iteratee = keyInObj;
+ keys = flatten(keys, false, false);
+ obj = Object(obj);
+ }
+ for (var i = 0, length = keys.length; i < length; i++) {
+ var key = keys[i];
+ var value = obj[key];
+ if (iteratee(value, key, obj)) result[key] = value;
+ }
+ return result;
+ });
+
+ // Return a copy of the object without the blacklisted properties.
+ _.omit = restArgs(function(obj, keys) {
+ var iteratee = keys[0], context;
+ if (_.isFunction(iteratee)) {
+ iteratee = _.negate(iteratee);
+ if (keys.length > 1) context = keys[1];
+ } else {
+ keys = _.map(flatten(keys, false, false), String);
+ iteratee = function(value, key) {
+ return !_.contains(keys, key);
+ };
+ }
+ return _.pick(obj, iteratee, context);
+ });
+
+ // Fill in a given object with default properties.
+ _.defaults = createAssigner(_.allKeys, true);
+
+ // Creates an object that inherits from the given prototype object.
+ // If additional properties are provided then they will be added to the
+ // created object.
+ _.create = function(prototype, props) {
+ var result = baseCreate(prototype);
+ if (props) _.extendOwn(result, props);
+ return result;
+ };
+
+ // Create a (shallow-cloned) duplicate of an object.
+ _.clone = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+ };
+
+ // Invokes interceptor with the obj, and then returns obj.
+ // The primary purpose of this method is to "tap into" a method chain, in
+ // order to perform operations on intermediate results within the chain.
+ _.tap = function(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+ };
+
+ // Returns whether an object has a given set of `key:value` pairs.
+ _.isMatch = function(object, attrs) {
+ var keys = _.keys(attrs), length = keys.length;
+ if (object == null) return !length;
+ var obj = Object(object);
+ for (var i = 0; i < length; i++) {
+ var key = keys[i];
+ if (attrs[key] !== obj[key] || !(key in obj)) return false;
+ }
+ return true;
+ };
+
+
+ // Internal recursive comparison function for `isEqual`.
+ var eq, deepEq;
+ eq = function(a, b, aStack, bStack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
+ // A strict comparison is necessary because `null == undefined`.
+ if (a == null || b == null) return a === b;
+ // `NaN`s are equivalent, but non-reflexive.
+ if (a !== a) return b !== b;
+ // Exhaust primitive checks
+ var type = typeof a;
+ if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
+ return deepEq(a, b, aStack, bStack);
+ };
+
+ // Internal recursive comparison function for `isEqual`.
+ deepEq = function(a, b, aStack, bStack) {
+ // Unwrap any wrapped objects.
+ if (a instanceof _) a = a._wrapped;
+ if (b instanceof _) b = b._wrapped;
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className !== toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, regular expressions, dates, and booleans are compared by value.
+ case '[object RegExp]':
+ // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return '' + a === '' + b;
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive.
+ // Object(NaN) is equivalent to NaN.
+ if (+a !== +a) return +b !== +b;
+ // An `egal` comparison is performed for other numeric values.
+ return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a === +b;
+ case '[object Symbol]':
+ return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
+ }
+
+ var areArrays = className === '[object Array]';
+ if (!areArrays) {
+ if (typeof a != 'object' || typeof b != 'object') return false;
+
+ // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+ // from different frames are.
+ var aCtor = a.constructor, bCtor = b.constructor;
+ if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
+ _.isFunction(bCtor) && bCtor instanceof bCtor)
+ && ('constructor' in a && 'constructor' in b)) {
+ return false;
+ }
+ }
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+ // Initializing stack of traversed objects.
+ // It's done here since we only need them for objects and arrays comparison.
+ aStack = aStack || [];
+ bStack = bStack || [];
+ var length = aStack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (aStack[length] === a) return bStack[length] === b;
+ }
+
+ // Add the first object to the stack of traversed objects.
+ aStack.push(a);
+ bStack.push(b);
+
+ // Recursively compare objects and arrays.
+ if (areArrays) {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ length = a.length;
+ if (length !== b.length) return false;
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (length--) {
+ if (!eq(a[length], b[length], aStack, bStack)) return false;
+ }
+ } else {
+ // Deep compare objects.
+ var keys = _.keys(a), key;
+ length = keys.length;
+ // Ensure that both objects contain the same number of properties before comparing deep equality.
+ if (_.keys(b).length !== length) return false;
+ while (length--) {
+ // Deep compare each member
+ key = keys[length];
+ if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ aStack.pop();
+ bStack.pop();
+ return true;
+ };
+
+ // Perform a deep comparison to check if two objects are equal.
+ _.isEqual = function(a, b) {
+ return eq(a, b);
+ };
+
+ // Is a given array, string, or object empty?
+ // An "empty" object has no enumerable own-properties.
+ _.isEmpty = function(obj) {
+ if (obj == null) return true;
+ if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
+ return _.keys(obj).length === 0;
+ };
+
+ // Is a given value a DOM element?
+ _.isElement = function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ };
+
+ // Is a given value an array?
+ // Delegates to ECMA5's native Array.isArray
+ _.isArray = nativeIsArray || function(obj) {
+ return toString.call(obj) === '[object Array]';
+ };
+
+ // Is a given variable an object?
+ _.isObject = function(obj) {
+ var type = typeof obj;
+ return type === 'function' || type === 'object' && !!obj;
+ };
+
+ // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.
+ _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {
+ _['is' + name] = function(obj) {
+ return toString.call(obj) === '[object ' + name + ']';
+ };
+ });
+
+ // Define a fallback version of the method in browsers (ahem, IE < 9), where
+ // there isn't any inspectable "Arguments" type.
+ if (!_.isArguments(arguments)) {
+ _.isArguments = function(obj) {
+ return _.has(obj, 'callee');
+ };
+ }
+
+ // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
+ // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
+ var nodelist = root.document && root.document.childNodes;
+ if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
+ _.isFunction = function(obj) {
+ return typeof obj == 'function' || false;
+ };
+ }
+
+ // Is a given object a finite number?
+ _.isFinite = function(obj) {
+ return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));
+ };
+
+ // Is the given value `NaN`?
+ _.isNaN = function(obj) {
+ return _.isNumber(obj) && isNaN(obj);
+ };
+
+ // Is a given value a boolean?
+ _.isBoolean = function(obj) {
+ return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+ };
+
+ // Is a given value equal to null?
+ _.isNull = function(obj) {
+ return obj === null;
+ };
+
+ // Is a given variable undefined?
+ _.isUndefined = function(obj) {
+ return obj === void 0;
+ };
+
+ // Shortcut function for checking if an object has a given property directly
+ // on itself (in other words, not on a prototype).
+ _.has = function(obj, key) {
+ return obj != null && hasOwnProperty.call(obj, key);
+ };
+
+ // Utility Functions
+ // -----------------
+
+ // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+ // previous owner. Returns a reference to the Underscore object.
+ _.noConflict = function() {
+ root._ = previousUnderscore;
+ return this;
+ };
+
+ // Keep the identity function around for default iteratees.
+ _.identity = function(value) {
+ return value;
+ };
+
+ // Predicate-generating functions. Often useful outside of Underscore.
+ _.constant = function(value) {
+ return function() {
+ return value;
+ };
+ };
+
+ _.noop = function(){};
+
+ _.property = property;
+
+ // Generates a function for a given object that returns a given property.
+ _.propertyOf = function(obj) {
+ return obj == null ? function(){} : function(key) {
+ return obj[key];
+ };
+ };
+
+ // Returns a predicate for checking whether an object has a given set of
+ // `key:value` pairs.
+ _.matcher = _.matches = function(attrs) {
+ attrs = _.extendOwn({}, attrs);
+ return function(obj) {
+ return _.isMatch(obj, attrs);
+ };
+ };
+
+ // Run a function **n** times.
+ _.times = function(n, iteratee, context) {
+ var accum = Array(Math.max(0, n));
+ iteratee = optimizeCb(iteratee, context, 1);
+ for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+ return accum;
+ };
+
+ // Return a random integer between min and max (inclusive).
+ _.random = function(min, max) {
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + Math.floor(Math.random() * (max - min + 1));
+ };
+
+ // A (possibly faster) way to get the current timestamp as an integer.
+ _.now = Date.now || function() {
+ return new Date().getTime();
+ };
+
+ // List of HTML entities for escaping.
+ var escapeMap = {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#x27;',
+ '`': '&#x60;'
+ };
+ var unescapeMap = _.invert(escapeMap);
+
+ // Functions for escaping and unescaping strings to/from HTML interpolation.
+ var createEscaper = function(map) {
+ var escaper = function(match) {
+ return map[match];
+ };
+ // Regexes for identifying a key that needs to be escaped.
+ var source = '(?:' + _.keys(map).join('|') + ')';
+ var testRegexp = RegExp(source);
+ var replaceRegexp = RegExp(source, 'g');
+ return function(string) {
+ string = string == null ? '' : '' + string;
+ return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+ };
+ };
+ _.escape = createEscaper(escapeMap);
+ _.unescape = createEscaper(unescapeMap);
+
+ // If the value of the named `property` is a function then invoke it with the
+ // `object` as context; otherwise, return it.
+ _.result = function(object, prop, fallback) {
+ var value = object == null ? void 0 : object[prop];
+ if (value === void 0) {
+ value = fallback;
+ }
+ return _.isFunction(value) ? value.call(object) : value;
+ };
+
+ // Generate a unique integer id (unique within the entire client session).
+ // Useful for temporary DOM ids.
+ var idCounter = 0;
+ _.uniqueId = function(prefix) {
+ var id = ++idCounter + '';
+ return prefix ? prefix + id : id;
+ };
+
+ // By default, Underscore uses ERB-style template delimiters, change the
+ // following template settings to use alternative delimiters.
+ _.templateSettings = {
+ evaluate: /<%([\s\S]+?)%>/g,
+ interpolate: /<%=([\s\S]+?)%>/g,
+ escape: /<%-([\s\S]+?)%>/g
+ };
+
+ // When customizing `templateSettings`, if you don't want to define an
+ // interpolation, evaluation or escaping regex, we need one that is
+ // guaranteed not to match.
+ var noMatch = /(.)^/;
+
+ // Certain characters need to be escaped so that they can be put into a
+ // string literal.
+ var escapes = {
+ "'": "'",
+ '\\': '\\',
+ '\r': 'r',
+ '\n': 'n',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
+
+ var escapeChar = function(match) {
+ return '\\' + escapes[match];
+ };
+
+ // JavaScript micro-templating, similar to John Resig's implementation.
+ // Underscore templating handles arbitrary delimiters, preserves whitespace,
+ // and correctly escapes quotes within interpolated code.
+ // NB: `oldSettings` only exists for backwards compatibility.
+ _.template = function(text, settings, oldSettings) {
+ if (!settings && oldSettings) settings = oldSettings;
+ settings = _.defaults({}, settings, _.templateSettings);
+
+ // Combine delimiters into one regular expression via alternation.
+ var matcher = RegExp([
+ (settings.escape || noMatch).source,
+ (settings.interpolate || noMatch).source,
+ (settings.evaluate || noMatch).source
+ ].join('|') + '|$', 'g');
+
+ // Compile the template source, escaping string literals appropriately.
+ var index = 0;
+ var source = "__p+='";
+ text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+ source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
+ index = offset + match.length;
+
+ if (escape) {
+ source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+ } else if (interpolate) {
+ source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+ } else if (evaluate) {
+ source += "';\n" + evaluate + "\n__p+='";
+ }
+
+ // Adobe VMs need the match returned to produce the correct offset.
+ return match;
+ });
+ source += "';\n";
+
+ // If a variable is not specified, place data values in local scope.
+ if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+ source = "var __t,__p='',__j=Array.prototype.join," +
+ "print=function(){__p+=__j.call(arguments,'');};\n" +
+ source + 'return __p;\n';
+
+ var render;
+ try {
+ render = new Function(settings.variable || 'obj', '_', source);
+ } catch (e) {
+ e.source = source;
+ throw e;
+ }
+
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled source as a convenience for precompilation.
+ var argument = settings.variable || 'obj';
+ template.source = 'function(' + argument + '){\n' + source + '}';
+
+ return template;
+ };
+
+ // Add a "chain" function. Start chaining a wrapped Underscore object.
+ _.chain = function(obj) {
+ var instance = _(obj);
+ instance._chain = true;
+ return instance;
+ };
+
+ // OOP
+ // ---------------
+ // If Underscore is called as a function, it returns a wrapped object that
+ // can be used OO-style. This wrapper holds altered versions of all the
+ // underscore functions. Wrapped objects may be chained.
+
+ // Helper function to continue chaining intermediate results.
+ var chainResult = function(instance, obj) {
+ return instance._chain ? _(obj).chain() : obj;
+ };
+
+ // Add your own custom functions to the Underscore object.
+ _.mixin = function(obj) {
+ _.each(_.functions(obj), function(name) {
+ var func = _[name] = obj[name];
+ _.prototype[name] = function() {
+ var args = [this._wrapped];
+ push.apply(args, arguments);
+ return chainResult(this, func.apply(_, args));
+ };
+ });
+ return _;
+ };
+
+ // Add all of the Underscore functions to the wrapper object.
+ _.mixin(_);
+
+ // Add all mutator Array functions to the wrapper.
+ _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ var obj = this._wrapped;
+ method.apply(obj, arguments);
+ if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
+ return chainResult(this, obj);
+ };
+ });
+
+ // Add all accessor Array functions to the wrapper.
+ _.each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ return chainResult(this, method.apply(this._wrapped, arguments));
+ };
+ });
+
+ // Extracts the result from a wrapped and chained object.
+ _.prototype.value = function() {
+ return this._wrapped;
+ };
+
+ // Provide unwrapping proxy for some methods used in engine operations
+ // such as arithmetic and JSON stringification.
+ _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
+
+ _.prototype.toString = function() {
+ return String(this._wrapped);
+ };
+
+ // AMD registration happens at the end for compatibility with AMD loaders
+ // that may not enforce next-turn semantics on modules. Even though general
+ // practice for AMD registration is to be anonymous, underscore registers
+ // as a named module because, like jQuery, it is a base library that is
+ // popular enough to be bundled in a third party lib, but not be part of
+ // an AMD load request. Those cases could generate an error when an
+ // anonymous define() is called outside of a loader request.
+ if (typeof define == 'function' && define.amd) {
+ define('underscore', [], function() {
+ return _;
+ });
+ }
+}());
diff --git a/system/admin/static/dashboard/css/admin.css b/system/admin/static/dashboard/css/admin.css
index 4f22bda..7ee2cb8 100644
--- a/system/admin/static/dashboard/css/admin.css
+++ b/system/admin/static/dashboard/css/admin.css
@@ -1,5 +1,9 @@
.body {}
+.navbar-fixed {
+ z-index: 10000 !important;
+}
+
.nav-wrapper {
width: 95%;
max-width: 1300px;
@@ -36,4 +40,31 @@ textarea {
.clear.padding {
padding: 10px 0;
-} \ No newline at end of file
+}
+
+select.browser-default {
+ margin: 10px 0;
+}
+
+.iso-texteditor {
+ position: relative;
+ margin: 20px 0;
+}
+
+/* OVERRIDE Bootstrap + Materialize conflicts */
+.iso-texteditor.input-field label {
+ color: #9e9e9e;
+ position: absolute;
+ top: 0.8rem;
+ left: 0.75rem;
+ font-size: 0.8rem;
+ display: block;
+ font-weight: normal !important;
+ cursor: text;
+ transition: .2s ease-out;
+ -webkit-transform: translateY(-140%);
+ -moz-transform: translateY(-140%);
+ -ms-transform: translateY(-140%);
+ -o-transform: translateY(-140%);
+ transform: translateY(-140%);
+}
diff --git a/system/admin/static/editor/css/materialNote.css b/system/admin/static/editor/css/materialNote.css
new file mode 100644
index 0000000..6cbe90e
--- /dev/null
+++ b/system/admin/static/editor/css/materialNote.css
@@ -0,0 +1,2160 @@
+.materialize-red.lighten-5 {
+ background-color: #fdeaeb !important; }
+
+.materialize-red-text.text-lighten-5 {
+ color: #fdeaeb !important; }
+
+.materialize-red.lighten-4 {
+ background-color: #f8c1c3 !important; }
+
+.materialize-red-text.text-lighten-4 {
+ color: #f8c1c3 !important; }
+
+.materialize-red.lighten-3 {
+ background-color: #f3989b !important; }
+
+.materialize-red-text.text-lighten-3 {
+ color: #f3989b !important; }
+
+.materialize-red.lighten-2 {
+ background-color: #ee6e73 !important; }
+
+.materialize-red-text.text-lighten-2 {
+ color: #ee6e73 !important; }
+
+.materialize-red.lighten-1 {
+ background-color: #ea454b !important; }
+
+.materialize-red-text.text-lighten-1 {
+ color: #ea454b !important; }
+
+.materialize-red {
+ background-color: #e51c23 !important; }
+
+.materialize-red-text {
+ color: #e51c23 !important; }
+
+.materialize-red.darken-1 {
+ background-color: #d0181e !important; }
+
+.materialize-red-text.text-darken-1 {
+ color: #d0181e !important; }
+
+.materialize-red.darken-2 {
+ background-color: #b9151b !important; }
+
+.materialize-red-text.text-darken-2 {
+ color: #b9151b !important; }
+
+.materialize-red.darken-3 {
+ background-color: #a21318 !important; }
+
+.materialize-red-text.text-darken-3 {
+ color: #a21318 !important; }
+
+.materialize-red.darken-4 {
+ background-color: #8b1014 !important; }
+
+.materialize-red-text.text-darken-4 {
+ color: #8b1014 !important; }
+
+.red.lighten-5 {
+ background-color: #FFEBEE !important; }
+
+.red-text.text-lighten-5 {
+ color: #FFEBEE !important; }
+
+.red.lighten-4 {
+ background-color: #FFCDD2 !important; }
+
+.red-text.text-lighten-4 {
+ color: #FFCDD2 !important; }
+
+.red.lighten-3 {
+ background-color: #EF9A9A !important; }
+
+.red-text.text-lighten-3 {
+ color: #EF9A9A !important; }
+
+.red.lighten-2 {
+ background-color: #E57373 !important; }
+
+.red-text.text-lighten-2 {
+ color: #E57373 !important; }
+
+.red.lighten-1 {
+ background-color: #EF5350 !important; }
+
+.red-text.text-lighten-1 {
+ color: #EF5350 !important; }
+
+.red {
+ background-color: #F44336 !important; }
+
+.red-text {
+ color: #F44336 !important; }
+
+.red.darken-1 {
+ background-color: #E53935 !important; }
+
+.red-text.text-darken-1 {
+ color: #E53935 !important; }
+
+.red.darken-2 {
+ background-color: #D32F2F !important; }
+
+.red-text.text-darken-2 {
+ color: #D32F2F !important; }
+
+.red.darken-3 {
+ background-color: #C62828 !important; }
+
+.red-text.text-darken-3 {
+ color: #C62828 !important; }
+
+.red.darken-4 {
+ background-color: #B71C1C !important; }
+
+.red-text.text-darken-4 {
+ color: #B71C1C !important; }
+
+.red.accent-1 {
+ background-color: #FF8A80 !important; }
+
+.red-text.text-accent-1 {
+ color: #FF8A80 !important; }
+
+.red.accent-2 {
+ background-color: #FF5252 !important; }
+
+.red-text.text-accent-2 {
+ color: #FF5252 !important; }
+
+.red.accent-3 {
+ background-color: #FF1744 !important; }
+
+.red-text.text-accent-3 {
+ color: #FF1744 !important; }
+
+.red.accent-4 {
+ background-color: #D50000 !important; }
+
+.red-text.text-accent-4 {
+ color: #D50000 !important; }
+
+.pink.lighten-5 {
+ background-color: #fce4ec !important; }
+
+.pink-text.text-lighten-5 {
+ color: #fce4ec !important; }
+
+.pink.lighten-4 {
+ background-color: #f8bbd0 !important; }
+
+.pink-text.text-lighten-4 {
+ color: #f8bbd0 !important; }
+
+.pink.lighten-3 {
+ background-color: #f48fb1 !important; }
+
+.pink-text.text-lighten-3 {
+ color: #f48fb1 !important; }
+
+.pink.lighten-2 {
+ background-color: #f06292 !important; }
+
+.pink-text.text-lighten-2 {
+ color: #f06292 !important; }
+
+.pink.lighten-1 {
+ background-color: #ec407a !important; }
+
+.pink-text.text-lighten-1 {
+ color: #ec407a !important; }
+
+.pink {
+ background-color: #e91e63 !important; }
+
+.pink-text {
+ color: #e91e63 !important; }
+
+.pink.darken-1 {
+ background-color: #d81b60 !important; }
+
+.pink-text.text-darken-1 {
+ color: #d81b60 !important; }
+
+.pink.darken-2 {
+ background-color: #c2185b !important; }
+
+.pink-text.text-darken-2 {
+ color: #c2185b !important; }
+
+.pink.darken-3 {
+ background-color: #ad1457 !important; }
+
+.pink-text.text-darken-3 {
+ color: #ad1457 !important; }
+
+.pink.darken-4 {
+ background-color: #880e4f !important; }
+
+.pink-text.text-darken-4 {
+ color: #880e4f !important; }
+
+.pink.accent-1 {
+ background-color: #ff80ab !important; }
+
+.pink-text.text-accent-1 {
+ color: #ff80ab !important; }
+
+.pink.accent-2 {
+ background-color: #ff4081 !important; }
+
+.pink-text.text-accent-2 {
+ color: #ff4081 !important; }
+
+.pink.accent-3 {
+ background-color: #f50057 !important; }
+
+.pink-text.text-accent-3 {
+ color: #f50057 !important; }
+
+.pink.accent-4 {
+ background-color: #c51162 !important; }
+
+.pink-text.text-accent-4 {
+ color: #c51162 !important; }
+
+.purple.lighten-5 {
+ background-color: #f3e5f5 !important; }
+
+.purple-text.text-lighten-5 {
+ color: #f3e5f5 !important; }
+
+.purple.lighten-4 {
+ background-color: #e1bee7 !important; }
+
+.purple-text.text-lighten-4 {
+ color: #e1bee7 !important; }
+
+.purple.lighten-3 {
+ background-color: #ce93d8 !important; }
+
+.purple-text.text-lighten-3 {
+ color: #ce93d8 !important; }
+
+.purple.lighten-2 {
+ background-color: #ba68c8 !important; }
+
+.purple-text.text-lighten-2 {
+ color: #ba68c8 !important; }
+
+.purple.lighten-1 {
+ background-color: #ab47bc !important; }
+
+.purple-text.text-lighten-1 {
+ color: #ab47bc !important; }
+
+.purple {
+ background-color: #9c27b0 !important; }
+
+.purple-text {
+ color: #9c27b0 !important; }
+
+.purple.darken-1 {
+ background-color: #8e24aa !important; }
+
+.purple-text.text-darken-1 {
+ color: #8e24aa !important; }
+
+.purple.darken-2 {
+ background-color: #7b1fa2 !important; }
+
+.purple-text.text-darken-2 {
+ color: #7b1fa2 !important; }
+
+.purple.darken-3 {
+ background-color: #6a1b9a !important; }
+
+.purple-text.text-darken-3 {
+ color: #6a1b9a !important; }
+
+.purple.darken-4 {
+ background-color: #4a148c !important; }
+
+.purple-text.text-darken-4 {
+ color: #4a148c !important; }
+
+.purple.accent-1 {
+ background-color: #ea80fc !important; }
+
+.purple-text.text-accent-1 {
+ color: #ea80fc !important; }
+
+.purple.accent-2 {
+ background-color: #e040fb !important; }
+
+.purple-text.text-accent-2 {
+ color: #e040fb !important; }
+
+.purple.accent-3 {
+ background-color: #d500f9 !important; }
+
+.purple-text.text-accent-3 {
+ color: #d500f9 !important; }
+
+.purple.accent-4 {
+ background-color: #aa00ff !important; }
+
+.purple-text.text-accent-4 {
+ color: #aa00ff !important; }
+
+.deep-purple.lighten-5 {
+ background-color: #ede7f6 !important; }
+
+.deep-purple-text.text-lighten-5 {
+ color: #ede7f6 !important; }
+
+.deep-purple.lighten-4 {
+ background-color: #d1c4e9 !important; }
+
+.deep-purple-text.text-lighten-4 {
+ color: #d1c4e9 !important; }
+
+.deep-purple.lighten-3 {
+ background-color: #b39ddb !important; }
+
+.deep-purple-text.text-lighten-3 {
+ color: #b39ddb !important; }
+
+.deep-purple.lighten-2 {
+ background-color: #9575cd !important; }
+
+.deep-purple-text.text-lighten-2 {
+ color: #9575cd !important; }
+
+.deep-purple.lighten-1 {
+ background-color: #7e57c2 !important; }
+
+.deep-purple-text.text-lighten-1 {
+ color: #7e57c2 !important; }
+
+.deep-purple {
+ background-color: #673ab7 !important; }
+
+.deep-purple-text {
+ color: #673ab7 !important; }
+
+.deep-purple.darken-1 {
+ background-color: #5e35b1 !important; }
+
+.deep-purple-text.text-darken-1 {
+ color: #5e35b1 !important; }
+
+.deep-purple.darken-2 {
+ background-color: #512da8 !important; }
+
+.deep-purple-text.text-darken-2 {
+ color: #512da8 !important; }
+
+.deep-purple.darken-3 {
+ background-color: #4527a0 !important; }
+
+.deep-purple-text.text-darken-3 {
+ color: #4527a0 !important; }
+
+.deep-purple.darken-4 {
+ background-color: #311b92 !important; }
+
+.deep-purple-text.text-darken-4 {
+ color: #311b92 !important; }
+
+.deep-purple.accent-1 {
+ background-color: #b388ff !important; }
+
+.deep-purple-text.text-accent-1 {
+ color: #b388ff !important; }
+
+.deep-purple.accent-2 {
+ background-color: #7c4dff !important; }
+
+.deep-purple-text.text-accent-2 {
+ color: #7c4dff !important; }
+
+.deep-purple.accent-3 {
+ background-color: #651fff !important; }
+
+.deep-purple-text.text-accent-3 {
+ color: #651fff !important; }
+
+.deep-purple.accent-4 {
+ background-color: #6200ea !important; }
+
+.deep-purple-text.text-accent-4 {
+ color: #6200ea !important; }
+
+.indigo.lighten-5 {
+ background-color: #e8eaf6 !important; }
+
+.indigo-text.text-lighten-5 {
+ color: #e8eaf6 !important; }
+
+.indigo.lighten-4 {
+ background-color: #c5cae9 !important; }
+
+.indigo-text.text-lighten-4 {
+ color: #c5cae9 !important; }
+
+.indigo.lighten-3 {
+ background-color: #9fa8da !important; }
+
+.indigo-text.text-lighten-3 {
+ color: #9fa8da !important; }
+
+.indigo.lighten-2 {
+ background-color: #7986cb !important; }
+
+.indigo-text.text-lighten-2 {
+ color: #7986cb !important; }
+
+.indigo.lighten-1 {
+ background-color: #5c6bc0 !important; }
+
+.indigo-text.text-lighten-1 {
+ color: #5c6bc0 !important; }
+
+.indigo {
+ background-color: #3f51b5 !important; }
+
+.indigo-text {
+ color: #3f51b5 !important; }
+
+.indigo.darken-1 {
+ background-color: #3949ab !important; }
+
+.indigo-text.text-darken-1 {
+ color: #3949ab !important; }
+
+.indigo.darken-2 {
+ background-color: #303f9f !important; }
+
+.indigo-text.text-darken-2 {
+ color: #303f9f !important; }
+
+.indigo.darken-3 {
+ background-color: #283593 !important; }
+
+.indigo-text.text-darken-3 {
+ color: #283593 !important; }
+
+.indigo.darken-4 {
+ background-color: #1a237e !important; }
+
+.indigo-text.text-darken-4 {
+ color: #1a237e !important; }
+
+.indigo.accent-1 {
+ background-color: #8c9eff !important; }
+
+.indigo-text.text-accent-1 {
+ color: #8c9eff !important; }
+
+.indigo.accent-2 {
+ background-color: #536dfe !important; }
+
+.indigo-text.text-accent-2 {
+ color: #536dfe !important; }
+
+.indigo.accent-3 {
+ background-color: #3d5afe !important; }
+
+.indigo-text.text-accent-3 {
+ color: #3d5afe !important; }
+
+.indigo.accent-4 {
+ background-color: #304ffe !important; }
+
+.indigo-text.text-accent-4 {
+ color: #304ffe !important; }
+
+.blue.lighten-5 {
+ background-color: #E3F2FD !important; }
+
+.blue-text.text-lighten-5 {
+ color: #E3F2FD !important; }
+
+.blue.lighten-4 {
+ background-color: #BBDEFB !important; }
+
+.blue-text.text-lighten-4 {
+ color: #BBDEFB !important; }
+
+.blue.lighten-3 {
+ background-color: #90CAF9 !important; }
+
+.blue-text.text-lighten-3 {
+ color: #90CAF9 !important; }
+
+.blue.lighten-2 {
+ background-color: #64B5F6 !important; }
+
+.blue-text.text-lighten-2 {
+ color: #64B5F6 !important; }
+
+.blue.lighten-1 {
+ background-color: #42A5F5 !important; }
+
+.blue-text.text-lighten-1 {
+ color: #42A5F5 !important; }
+
+.blue {
+ background-color: #2196F3 !important; }
+
+.blue-text {
+ color: #2196F3 !important; }
+
+.blue.darken-1 {
+ background-color: #1E88E5 !important; }
+
+.blue-text.text-darken-1 {
+ color: #1E88E5 !important; }
+
+.blue.darken-2 {
+ background-color: #1976D2 !important; }
+
+.blue-text.text-darken-2 {
+ color: #1976D2 !important; }
+
+.blue.darken-3 {
+ background-color: #1565C0 !important; }
+
+.blue-text.text-darken-3 {
+ color: #1565C0 !important; }
+
+.blue.darken-4 {
+ background-color: #0D47A1 !important; }
+
+.blue-text.text-darken-4 {
+ color: #0D47A1 !important; }
+
+.blue.accent-1 {
+ background-color: #82B1FF !important; }
+
+.blue-text.text-accent-1 {
+ color: #82B1FF !important; }
+
+.blue.accent-2 {
+ background-color: #448AFF !important; }
+
+.blue-text.text-accent-2 {
+ color: #448AFF !important; }
+
+.blue.accent-3 {
+ background-color: #2979FF !important; }
+
+.blue-text.text-accent-3 {
+ color: #2979FF !important; }
+
+.blue.accent-4 {
+ background-color: #2962FF !important; }
+
+.blue-text.text-accent-4 {
+ color: #2962FF !important; }
+
+.light-blue.lighten-5 {
+ background-color: #e1f5fe !important; }
+
+.light-blue-text.text-lighten-5 {
+ color: #e1f5fe !important; }
+
+.light-blue.lighten-4 {
+ background-color: #b3e5fc !important; }
+
+.light-blue-text.text-lighten-4 {
+ color: #b3e5fc !important; }
+
+.light-blue.lighten-3 {
+ background-color: #81d4fa !important; }
+
+.light-blue-text.text-lighten-3 {
+ color: #81d4fa !important; }
+
+.light-blue.lighten-2 {
+ background-color: #4fc3f7 !important; }
+
+.light-blue-text.text-lighten-2 {
+ color: #4fc3f7 !important; }
+
+.light-blue.lighten-1 {
+ background-color: #29b6f6 !important; }
+
+.light-blue-text.text-lighten-1 {
+ color: #29b6f6 !important; }
+
+.light-blue {
+ background-color: #03a9f4 !important; }
+
+.light-blue-text {
+ color: #03a9f4 !important; }
+
+.light-blue.darken-1 {
+ background-color: #039be5 !important; }
+
+.light-blue-text.text-darken-1 {
+ color: #039be5 !important; }
+
+.light-blue.darken-2 {
+ background-color: #0288d1 !important; }
+
+.light-blue-text.text-darken-2 {
+ color: #0288d1 !important; }
+
+.light-blue.darken-3 {
+ background-color: #0277bd !important; }
+
+.light-blue-text.text-darken-3 {
+ color: #0277bd !important; }
+
+.light-blue.darken-4 {
+ background-color: #01579b !important; }
+
+.light-blue-text.text-darken-4 {
+ color: #01579b !important; }
+
+.light-blue.accent-1 {
+ background-color: #80d8ff !important; }
+
+.light-blue-text.text-accent-1 {
+ color: #80d8ff !important; }
+
+.light-blue.accent-2 {
+ background-color: #40c4ff !important; }
+
+.light-blue-text.text-accent-2 {
+ color: #40c4ff !important; }
+
+.light-blue.accent-3 {
+ background-color: #00b0ff !important; }
+
+.light-blue-text.text-accent-3 {
+ color: #00b0ff !important; }
+
+.light-blue.accent-4 {
+ background-color: #0091ea !important; }
+
+.light-blue-text.text-accent-4 {
+ color: #0091ea !important; }
+
+.cyan.lighten-5 {
+ background-color: #e0f7fa !important; }
+
+.cyan-text.text-lighten-5 {
+ color: #e0f7fa !important; }
+
+.cyan.lighten-4 {
+ background-color: #b2ebf2 !important; }
+
+.cyan-text.text-lighten-4 {
+ color: #b2ebf2 !important; }
+
+.cyan.lighten-3 {
+ background-color: #80deea !important; }
+
+.cyan-text.text-lighten-3 {
+ color: #80deea !important; }
+
+.cyan.lighten-2 {
+ background-color: #4dd0e1 !important; }
+
+.cyan-text.text-lighten-2 {
+ color: #4dd0e1 !important; }
+
+.cyan.lighten-1 {
+ background-color: #26c6da !important; }
+
+.cyan-text.text-lighten-1 {
+ color: #26c6da !important; }
+
+.cyan {
+ background-color: #00bcd4 !important; }
+
+.cyan-text {
+ color: #00bcd4 !important; }
+
+.cyan.darken-1 {
+ background-color: #00acc1 !important; }
+
+.cyan-text.text-darken-1 {
+ color: #00acc1 !important; }
+
+.cyan.darken-2 {
+ background-color: #0097a7 !important; }
+
+.cyan-text.text-darken-2 {
+ color: #0097a7 !important; }
+
+.cyan.darken-3 {
+ background-color: #00838f !important; }
+
+.cyan-text.text-darken-3 {
+ color: #00838f !important; }
+
+.cyan.darken-4 {
+ background-color: #006064 !important; }
+
+.cyan-text.text-darken-4 {
+ color: #006064 !important; }
+
+.cyan.accent-1 {
+ background-color: #84ffff !important; }
+
+.cyan-text.text-accent-1 {
+ color: #84ffff !important; }
+
+.cyan.accent-2 {
+ background-color: #18ffff !important; }
+
+.cyan-text.text-accent-2 {
+ color: #18ffff !important; }
+
+.cyan.accent-3 {
+ background-color: #00e5ff !important; }
+
+.cyan-text.text-accent-3 {
+ color: #00e5ff !important; }
+
+.cyan.accent-4 {
+ background-color: #00b8d4 !important; }
+
+.cyan-text.text-accent-4 {
+ color: #00b8d4 !important; }
+
+.teal.lighten-5 {
+ background-color: #e0f2f1 !important; }
+
+.teal-text.text-lighten-5 {
+ color: #e0f2f1 !important; }
+
+.teal.lighten-4 {
+ background-color: #b2dfdb !important; }
+
+.teal-text.text-lighten-4 {
+ color: #b2dfdb !important; }
+
+.teal.lighten-3 {
+ background-color: #80cbc4 !important; }
+
+.teal-text.text-lighten-3 {
+ color: #80cbc4 !important; }
+
+.teal.lighten-2 {
+ background-color: #4db6ac !important; }
+
+.teal-text.text-lighten-2 {
+ color: #4db6ac !important; }
+
+.teal.lighten-1 {
+ background-color: #26a69a !important; }
+
+.teal-text.text-lighten-1 {
+ color: #26a69a !important; }
+
+.teal {
+ background-color: #009688 !important; }
+
+.teal-text {
+ color: #009688 !important; }
+
+.teal.darken-1 {
+ background-color: #00897b !important; }
+
+.teal-text.text-darken-1 {
+ color: #00897b !important; }
+
+.teal.darken-2 {
+ background-color: #00796b !important; }
+
+.teal-text.text-darken-2 {
+ color: #00796b !important; }
+
+.teal.darken-3 {
+ background-color: #00695c !important; }
+
+.teal-text.text-darken-3 {
+ color: #00695c !important; }
+
+.teal.darken-4 {
+ background-color: #004d40 !important; }
+
+.teal-text.text-darken-4 {
+ color: #004d40 !important; }
+
+.teal.accent-1 {
+ background-color: #a7ffeb !important; }
+
+.teal-text.text-accent-1 {
+ color: #a7ffeb !important; }
+
+.teal.accent-2 {
+ background-color: #64ffda !important; }
+
+.teal-text.text-accent-2 {
+ color: #64ffda !important; }
+
+.teal.accent-3 {
+ background-color: #1de9b6 !important; }
+
+.teal-text.text-accent-3 {
+ color: #1de9b6 !important; }
+
+.teal.accent-4 {
+ background-color: #00bfa5 !important; }
+
+.teal-text.text-accent-4 {
+ color: #00bfa5 !important; }
+
+.green.lighten-5 {
+ background-color: #E8F5E9 !important; }
+
+.green-text.text-lighten-5 {
+ color: #E8F5E9 !important; }
+
+.green.lighten-4 {
+ background-color: #C8E6C9 !important; }
+
+.green-text.text-lighten-4 {
+ color: #C8E6C9 !important; }
+
+.green.lighten-3 {
+ background-color: #A5D6A7 !important; }
+
+.green-text.text-lighten-3 {
+ color: #A5D6A7 !important; }
+
+.green.lighten-2 {
+ background-color: #81C784 !important; }
+
+.green-text.text-lighten-2 {
+ color: #81C784 !important; }
+
+.green.lighten-1 {
+ background-color: #66BB6A !important; }
+
+.green-text.text-lighten-1 {
+ color: #66BB6A !important; }
+
+.green {
+ background-color: #4CAF50 !important; }
+
+.green-text {
+ color: #4CAF50 !important; }
+
+.green.darken-1 {
+ background-color: #43A047 !important; }
+
+.green-text.text-darken-1 {
+ color: #43A047 !important; }
+
+.green.darken-2 {
+ background-color: #388E3C !important; }
+
+.green-text.text-darken-2 {
+ color: #388E3C !important; }
+
+.green.darken-3 {
+ background-color: #2E7D32 !important; }
+
+.green-text.text-darken-3 {
+ color: #2E7D32 !important; }
+
+.green.darken-4 {
+ background-color: #1B5E20 !important; }
+
+.green-text.text-darken-4 {
+ color: #1B5E20 !important; }
+
+.green.accent-1 {
+ background-color: #B9F6CA !important; }
+
+.green-text.text-accent-1 {
+ color: #B9F6CA !important; }
+
+.green.accent-2 {
+ background-color: #69F0AE !important; }
+
+.green-text.text-accent-2 {
+ color: #69F0AE !important; }
+
+.green.accent-3 {
+ background-color: #00E676 !important; }
+
+.green-text.text-accent-3 {
+ color: #00E676 !important; }
+
+.green.accent-4 {
+ background-color: #00C853 !important; }
+
+.green-text.text-accent-4 {
+ color: #00C853 !important; }
+
+.light-green.lighten-5 {
+ background-color: #f1f8e9 !important; }
+
+.light-green-text.text-lighten-5 {
+ color: #f1f8e9 !important; }
+
+.light-green.lighten-4 {
+ background-color: #dcedc8 !important; }
+
+.light-green-text.text-lighten-4 {
+ color: #dcedc8 !important; }
+
+.light-green.lighten-3 {
+ background-color: #c5e1a5 !important; }
+
+.light-green-text.text-lighten-3 {
+ color: #c5e1a5 !important; }
+
+.light-green.lighten-2 {
+ background-color: #aed581 !important; }
+
+.light-green-text.text-lighten-2 {
+ color: #aed581 !important; }
+
+.light-green.lighten-1 {
+ background-color: #9ccc65 !important; }
+
+.light-green-text.text-lighten-1 {
+ color: #9ccc65 !important; }
+
+.light-green {
+ background-color: #8bc34a !important; }
+
+.light-green-text {
+ color: #8bc34a !important; }
+
+.light-green.darken-1 {
+ background-color: #7cb342 !important; }
+
+.light-green-text.text-darken-1 {
+ color: #7cb342 !important; }
+
+.light-green.darken-2 {
+ background-color: #689f38 !important; }
+
+.light-green-text.text-darken-2 {
+ color: #689f38 !important; }
+
+.light-green.darken-3 {
+ background-color: #558b2f !important; }
+
+.light-green-text.text-darken-3 {
+ color: #558b2f !important; }
+
+.light-green.darken-4 {
+ background-color: #33691e !important; }
+
+.light-green-text.text-darken-4 {
+ color: #33691e !important; }
+
+.light-green.accent-1 {
+ background-color: #ccff90 !important; }
+
+.light-green-text.text-accent-1 {
+ color: #ccff90 !important; }
+
+.light-green.accent-2 {
+ background-color: #b2ff59 !important; }
+
+.light-green-text.text-accent-2 {
+ color: #b2ff59 !important; }
+
+.light-green.accent-3 {
+ background-color: #76ff03 !important; }
+
+.light-green-text.text-accent-3 {
+ color: #76ff03 !important; }
+
+.light-green.accent-4 {
+ background-color: #64dd17 !important; }
+
+.light-green-text.text-accent-4 {
+ color: #64dd17 !important; }
+
+.lime.lighten-5 {
+ background-color: #f9fbe7 !important; }
+
+.lime-text.text-lighten-5 {
+ color: #f9fbe7 !important; }
+
+.lime.lighten-4 {
+ background-color: #f0f4c3 !important; }
+
+.lime-text.text-lighten-4 {
+ color: #f0f4c3 !important; }
+
+.lime.lighten-3 {
+ background-color: #e6ee9c !important; }
+
+.lime-text.text-lighten-3 {
+ color: #e6ee9c !important; }
+
+.lime.lighten-2 {
+ background-color: #dce775 !important; }
+
+.lime-text.text-lighten-2 {
+ color: #dce775 !important; }
+
+.lime.lighten-1 {
+ background-color: #d4e157 !important; }
+
+.lime-text.text-lighten-1 {
+ color: #d4e157 !important; }
+
+.lime {
+ background-color: #cddc39 !important; }
+
+.lime-text {
+ color: #cddc39 !important; }
+
+.lime.darken-1 {
+ background-color: #c0ca33 !important; }
+
+.lime-text.text-darken-1 {
+ color: #c0ca33 !important; }
+
+.lime.darken-2 {
+ background-color: #afb42b !important; }
+
+.lime-text.text-darken-2 {
+ color: #afb42b !important; }
+
+.lime.darken-3 {
+ background-color: #9e9d24 !important; }
+
+.lime-text.text-darken-3 {
+ color: #9e9d24 !important; }
+
+.lime.darken-4 {
+ background-color: #827717 !important; }
+
+.lime-text.text-darken-4 {
+ color: #827717 !important; }
+
+.lime.accent-1 {
+ background-color: #f4ff81 !important; }
+
+.lime-text.text-accent-1 {
+ color: #f4ff81 !important; }
+
+.lime.accent-2 {
+ background-color: #eeff41 !important; }
+
+.lime-text.text-accent-2 {
+ color: #eeff41 !important; }
+
+.lime.accent-3 {
+ background-color: #c6ff00 !important; }
+
+.lime-text.text-accent-3 {
+ color: #c6ff00 !important; }
+
+.lime.accent-4 {
+ background-color: #aeea00 !important; }
+
+.lime-text.text-accent-4 {
+ color: #aeea00 !important; }
+
+.yellow.lighten-5 {
+ background-color: #fffde7 !important; }
+
+.yellow-text.text-lighten-5 {
+ color: #fffde7 !important; }
+
+.yellow.lighten-4 {
+ background-color: #fff9c4 !important; }
+
+.yellow-text.text-lighten-4 {
+ color: #fff9c4 !important; }
+
+.yellow.lighten-3 {
+ background-color: #fff59d !important; }
+
+.yellow-text.text-lighten-3 {
+ color: #fff59d !important; }
+
+.yellow.lighten-2 {
+ background-color: #fff176 !important; }
+
+.yellow-text.text-lighten-2 {
+ color: #fff176 !important; }
+
+.yellow.lighten-1 {
+ background-color: #ffee58 !important; }
+
+.yellow-text.text-lighten-1 {
+ color: #ffee58 !important; }
+
+.yellow {
+ background-color: #ffeb3b !important; }
+
+.yellow-text {
+ color: #ffeb3b !important; }
+
+.yellow.darken-1 {
+ background-color: #fdd835 !important; }
+
+.yellow-text.text-darken-1 {
+ color: #fdd835 !important; }
+
+.yellow.darken-2 {
+ background-color: #fbc02d !important; }
+
+.yellow-text.text-darken-2 {
+ color: #fbc02d !important; }
+
+.yellow.darken-3 {
+ background-color: #f9a825 !important; }
+
+.yellow-text.text-darken-3 {
+ color: #f9a825 !important; }
+
+.yellow.darken-4 {
+ background-color: #f57f17 !important; }
+
+.yellow-text.text-darken-4 {
+ color: #f57f17 !important; }
+
+.yellow.accent-1 {
+ background-color: #ffff8d !important; }
+
+.yellow-text.text-accent-1 {
+ color: #ffff8d !important; }
+
+.yellow.accent-2 {
+ background-color: #ffff00 !important; }
+
+.yellow-text.text-accent-2 {
+ color: #ffff00 !important; }
+
+.yellow.accent-3 {
+ background-color: #ffea00 !important; }
+
+.yellow-text.text-accent-3 {
+ color: #ffea00 !important; }
+
+.yellow.accent-4 {
+ background-color: #ffd600 !important; }
+
+.yellow-text.text-accent-4 {
+ color: #ffd600 !important; }
+
+.amber.lighten-5 {
+ background-color: #fff8e1 !important; }
+
+.amber-text.text-lighten-5 {
+ color: #fff8e1 !important; }
+
+.amber.lighten-4 {
+ background-color: #ffecb3 !important; }
+
+.amber-text.text-lighten-4 {
+ color: #ffecb3 !important; }
+
+.amber.lighten-3 {
+ background-color: #ffe082 !important; }
+
+.amber-text.text-lighten-3 {
+ color: #ffe082 !important; }
+
+.amber.lighten-2 {
+ background-color: #ffd54f !important; }
+
+.amber-text.text-lighten-2 {
+ color: #ffd54f !important; }
+
+.amber.lighten-1 {
+ background-color: #ffca28 !important; }
+
+.amber-text.text-lighten-1 {
+ color: #ffca28 !important; }
+
+.amber {
+ background-color: #ffc107 !important; }
+
+.amber-text {
+ color: #ffc107 !important; }
+
+.amber.darken-1 {
+ background-color: #ffb300 !important; }
+
+.amber-text.text-darken-1 {
+ color: #ffb300 !important; }
+
+.amber.darken-2 {
+ background-color: #ffa000 !important; }
+
+.amber-text.text-darken-2 {
+ color: #ffa000 !important; }
+
+.amber.darken-3 {
+ background-color: #ff8f00 !important; }
+
+.amber-text.text-darken-3 {
+ color: #ff8f00 !important; }
+
+.amber.darken-4 {
+ background-color: #ff6f00 !important; }
+
+.amber-text.text-darken-4 {
+ color: #ff6f00 !important; }
+
+.amber.accent-1 {
+ background-color: #ffe57f !important; }
+
+.amber-text.text-accent-1 {
+ color: #ffe57f !important; }
+
+.amber.accent-2 {
+ background-color: #ffd740 !important; }
+
+.amber-text.text-accent-2 {
+ color: #ffd740 !important; }
+
+.amber.accent-3 {
+ background-color: #ffc400 !important; }
+
+.amber-text.text-accent-3 {
+ color: #ffc400 !important; }
+
+.amber.accent-4 {
+ background-color: #ffab00 !important; }
+
+.amber-text.text-accent-4 {
+ color: #ffab00 !important; }
+
+.orange.lighten-5 {
+ background-color: #fff3e0 !important; }
+
+.orange-text.text-lighten-5 {
+ color: #fff3e0 !important; }
+
+.orange.lighten-4 {
+ background-color: #ffe0b2 !important; }
+
+.orange-text.text-lighten-4 {
+ color: #ffe0b2 !important; }
+
+.orange.lighten-3 {
+ background-color: #ffcc80 !important; }
+
+.orange-text.text-lighten-3 {
+ color: #ffcc80 !important; }
+
+.orange.lighten-2 {
+ background-color: #ffb74d !important; }
+
+.orange-text.text-lighten-2 {
+ color: #ffb74d !important; }
+
+.orange.lighten-1 {
+ background-color: #ffa726 !important; }
+
+.orange-text.text-lighten-1 {
+ color: #ffa726 !important; }
+
+.orange {
+ background-color: #ff9800 !important; }
+
+.orange-text {
+ color: #ff9800 !important; }
+
+.orange.darken-1 {
+ background-color: #fb8c00 !important; }
+
+.orange-text.text-darken-1 {
+ color: #fb8c00 !important; }
+
+.orange.darken-2 {
+ background-color: #f57c00 !important; }
+
+.orange-text.text-darken-2 {
+ color: #f57c00 !important; }
+
+.orange.darken-3 {
+ background-color: #ef6c00 !important; }
+
+.orange-text.text-darken-3 {
+ color: #ef6c00 !important; }
+
+.orange.darken-4 {
+ background-color: #e65100 !important; }
+
+.orange-text.text-darken-4 {
+ color: #e65100 !important; }
+
+.orange.accent-1 {
+ background-color: #ffd180 !important; }
+
+.orange-text.text-accent-1 {
+ color: #ffd180 !important; }
+
+.orange.accent-2 {
+ background-color: #ffab40 !important; }
+
+.orange-text.text-accent-2 {
+ color: #ffab40 !important; }
+
+.orange.accent-3 {
+ background-color: #ff9100 !important; }
+
+.orange-text.text-accent-3 {
+ color: #ff9100 !important; }
+
+.orange.accent-4 {
+ background-color: #ff6d00 !important; }
+
+.orange-text.text-accent-4 {
+ color: #ff6d00 !important; }
+
+.deep-orange.lighten-5 {
+ background-color: #fbe9e7 !important; }
+
+.deep-orange-text.text-lighten-5 {
+ color: #fbe9e7 !important; }
+
+.deep-orange.lighten-4 {
+ background-color: #ffccbc !important; }
+
+.deep-orange-text.text-lighten-4 {
+ color: #ffccbc !important; }
+
+.deep-orange.lighten-3 {
+ background-color: #ffab91 !important; }
+
+.deep-orange-text.text-lighten-3 {
+ color: #ffab91 !important; }
+
+.deep-orange.lighten-2 {
+ background-color: #ff8a65 !important; }
+
+.deep-orange-text.text-lighten-2 {
+ color: #ff8a65 !important; }
+
+.deep-orange.lighten-1 {
+ background-color: #ff7043 !important; }
+
+.deep-orange-text.text-lighten-1 {
+ color: #ff7043 !important; }
+
+.deep-orange {
+ background-color: #ff5722 !important; }
+
+.deep-orange-text {
+ color: #ff5722 !important; }
+
+.deep-orange.darken-1 {
+ background-color: #f4511e !important; }
+
+.deep-orange-text.text-darken-1 {
+ color: #f4511e !important; }
+
+.deep-orange.darken-2 {
+ background-color: #e64a19 !important; }
+
+.deep-orange-text.text-darken-2 {
+ color: #e64a19 !important; }
+
+.deep-orange.darken-3 {
+ background-color: #d84315 !important; }
+
+.deep-orange-text.text-darken-3 {
+ color: #d84315 !important; }
+
+.deep-orange.darken-4 {
+ background-color: #bf360c !important; }
+
+.deep-orange-text.text-darken-4 {
+ color: #bf360c !important; }
+
+.deep-orange.accent-1 {
+ background-color: #ff9e80 !important; }
+
+.deep-orange-text.text-accent-1 {
+ color: #ff9e80 !important; }
+
+.deep-orange.accent-2 {
+ background-color: #ff6e40 !important; }
+
+.deep-orange-text.text-accent-2 {
+ color: #ff6e40 !important; }
+
+.deep-orange.accent-3 {
+ background-color: #ff3d00 !important; }
+
+.deep-orange-text.text-accent-3 {
+ color: #ff3d00 !important; }
+
+.deep-orange.accent-4 {
+ background-color: #dd2c00 !important; }
+
+.deep-orange-text.text-accent-4 {
+ color: #dd2c00 !important; }
+
+.brown.lighten-5 {
+ background-color: #efebe9 !important; }
+
+.brown-text.text-lighten-5 {
+ color: #efebe9 !important; }
+
+.brown.lighten-4 {
+ background-color: #d7ccc8 !important; }
+
+.brown-text.text-lighten-4 {
+ color: #d7ccc8 !important; }
+
+.brown.lighten-3 {
+ background-color: #bcaaa4 !important; }
+
+.brown-text.text-lighten-3 {
+ color: #bcaaa4 !important; }
+
+.brown.lighten-2 {
+ background-color: #a1887f !important; }
+
+.brown-text.text-lighten-2 {
+ color: #a1887f !important; }
+
+.brown.lighten-1 {
+ background-color: #8d6e63 !important; }
+
+.brown-text.text-lighten-1 {
+ color: #8d6e63 !important; }
+
+.brown {
+ background-color: #795548 !important; }
+
+.brown-text {
+ color: #795548 !important; }
+
+.brown.darken-1 {
+ background-color: #6d4c41 !important; }
+
+.brown-text.text-darken-1 {
+ color: #6d4c41 !important; }
+
+.brown.darken-2 {
+ background-color: #5d4037 !important; }
+
+.brown-text.text-darken-2 {
+ color: #5d4037 !important; }
+
+.brown.darken-3 {
+ background-color: #4e342e !important; }
+
+.brown-text.text-darken-3 {
+ color: #4e342e !important; }
+
+.brown.darken-4 {
+ background-color: #3e2723 !important; }
+
+.brown-text.text-darken-4 {
+ color: #3e2723 !important; }
+
+.blue-grey.lighten-5 {
+ background-color: #eceff1 !important; }
+
+.blue-grey-text.text-lighten-5 {
+ color: #eceff1 !important; }
+
+.blue-grey.lighten-4 {
+ background-color: #cfd8dc !important; }
+
+.blue-grey-text.text-lighten-4 {
+ color: #cfd8dc !important; }
+
+.blue-grey.lighten-3 {
+ background-color: #b0bec5 !important; }
+
+.blue-grey-text.text-lighten-3 {
+ color: #b0bec5 !important; }
+
+.blue-grey.lighten-2 {
+ background-color: #90a4ae !important; }
+
+.blue-grey-text.text-lighten-2 {
+ color: #90a4ae !important; }
+
+.blue-grey.lighten-1 {
+ background-color: #78909c !important; }
+
+.blue-grey-text.text-lighten-1 {
+ color: #78909c !important; }
+
+.blue-grey {
+ background-color: #607d8b !important; }
+
+.blue-grey-text {
+ color: #607d8b !important; }
+
+.blue-grey.darken-1 {
+ background-color: #546e7a !important; }
+
+.blue-grey-text.text-darken-1 {
+ color: #546e7a !important; }
+
+.blue-grey.darken-2 {
+ background-color: #455a64 !important; }
+
+.blue-grey-text.text-darken-2 {
+ color: #455a64 !important; }
+
+.blue-grey.darken-3 {
+ background-color: #37474f !important; }
+
+.blue-grey-text.text-darken-3 {
+ color: #37474f !important; }
+
+.blue-grey.darken-4 {
+ background-color: #263238 !important; }
+
+.blue-grey-text.text-darken-4 {
+ color: #263238 !important; }
+
+.grey.lighten-5 {
+ background-color: #fafafa !important; }
+
+.grey-text.text-lighten-5 {
+ color: #fafafa !important; }
+
+.grey.lighten-4 {
+ background-color: #f5f5f5 !important; }
+
+.grey-text.text-lighten-4 {
+ color: #f5f5f5 !important; }
+
+.grey.lighten-3 {
+ background-color: #eeeeee !important; }
+
+.grey-text.text-lighten-3 {
+ color: #eeeeee !important; }
+
+.grey.lighten-2 {
+ background-color: #e0e0e0 !important; }
+
+.grey-text.text-lighten-2 {
+ color: #e0e0e0 !important; }
+
+.grey.lighten-1 {
+ background-color: #bdbdbd !important; }
+
+.grey-text.text-lighten-1 {
+ color: #bdbdbd !important; }
+
+.grey {
+ background-color: #9e9e9e !important; }
+
+.grey-text {
+ color: #9e9e9e !important; }
+
+.grey.darken-1 {
+ background-color: #757575 !important; }
+
+.grey-text.text-darken-1 {
+ color: #757575 !important; }
+
+.grey.darken-2 {
+ background-color: #616161 !important; }
+
+.grey-text.text-darken-2 {
+ color: #616161 !important; }
+
+.grey.darken-3 {
+ background-color: #424242 !important; }
+
+.grey-text.text-darken-3 {
+ color: #424242 !important; }
+
+.grey.darken-4 {
+ background-color: #212121 !important; }
+
+.grey-text.text-darken-4 {
+ color: #212121 !important; }
+
+.shades.black {
+ background-color: #000000 !important; }
+
+.shades-text.text-black {
+ color: #000000 !important; }
+
+.shades.white {
+ background-color: #FFFFFF !important; }
+
+.shades-text.text-white {
+ color: #FFFFFF !important; }
+
+.shades.transparent {
+ background-color: transparent !important; }
+
+.shades-text.text-transparent {
+ color: transparent !important; }
+
+.black {
+ background-color: #000000 !important; }
+
+.black-text {
+ color: #000000 !important; }
+
+.white {
+ background-color: #FFFFFF !important; }
+
+.white-text {
+ color: #FFFFFF !important; }
+
+.transparent {
+ background-color: transparent !important; }
+
+.transparent-text {
+ color: transparent !important; }
+
+/*** Colors ***/
+/*** Badges ***/
+/*** Buttons ***/
+/*** Cards ***/
+/*** Collapsible ***/
+/*** Dropdown ***/
+/*** Fonts ***/
+/*** Forms ***/
+/*** Global ***/
+/*** Navbar ***/
+/*** SideNav ***/
+/*** Photo Slider ***/
+/*** Tabs ***/
+/*** Tables ***/
+/*** Toasts ***/
+/*** Typography ***/
+/*** Collections ***/
+/* Progress Bar */
+/* variables
+=================================================================================*/
+.editorDialogs .modal, .note-editor .modal {
+ background-color: white;
+ color: #424242;
+ z-index: 1057 !important;
+ backface-visibility: hidden; }
+ .editorDialogs .modal .input-field input:not([readonly]), .editorDialogs .modal .input-field input.datepicker, .note-editor .modal .input-field input:not([readonly]), .note-editor .modal .input-field input.datepicker {
+ border-color: #424242 !important; }
+ .editorDialogs .modal .input-field input:focus:not([readonly]), .editorDialogs .modal .input-field input.datepicker:focus, .editorDialogs .modal textarea.materialize-textarea:focus:not([readonly]), .note-editor .modal .input-field input:focus:not([readonly]), .note-editor .modal .input-field input.datepicker:focus, .note-editor .modal textarea.materialize-textarea:focus:not([readonly]) {
+ box-shadow: 0 1px 0 0 #2196F3 !important;
+ border-color: #2196F3 !important; }
+ .editorDialogs .modal label, .editorDialogs .modal .input-field input:not([readonly]) + label, .editorDialogs .modal .input-field input.datepicker + label, .editorDialogs .modal .input-field .prefix, .editorDialogs .modal .note-editor + label, .note-editor .modal label, .note-editor .modal .input-field input:not([readonly]) + label, .note-editor .modal .input-field input.datepicker + label, .note-editor .modal .input-field .prefix, .note-editor .modal .note-editor + label {
+ color: #424242 !important; }
+ .editorDialogs .modal .input-field input:focus:not([readonly]) + label, .editorDialogs .modal .input-field input.datepicker:focus + label, .editorDialogs .modal .input-field .prefix.active, .editorDialogs .modal textarea.materialize-textarea:focus:not([readonly]) + label, .note-editor .modal .input-field input:focus:not([readonly]) + label, .note-editor .modal .input-field input.datepicker:focus + label, .note-editor .modal .input-field .prefix.active, .note-editor .modal textarea.materialize-textarea:focus:not([readonly]) + label {
+ color: #2196F3 !important; }
+ .editorDialogs .modal .btn, .note-editor .modal .btn {
+ background-color: #0D47A1;
+ color: white !important; }
+ .editorDialogs .modal .btn:hover, .note-editor .modal .btn:hover {
+ background-color: #115cd0 !important; }
+ .editorDialogs .modal .btn.disabled, .note-editor .modal .btn.disabled {
+ background-color: #07285a !important; }
+ .editorDialogs .modal .modal-footer, .note-editor .modal .modal-footer {
+ background-color: #c7c7c7; }
+ .editorDialogs .modal .modal-footer .btnClose, .note-editor .modal .modal-footer .btnClose {
+ margin-right: 15px;
+ background-color: #B71C1C; }
+ .editorDialogs .modal .modal-footer .btnClose:hover, .note-editor .modal .modal-footer .btnClose:hover {
+ background-color: #de2828 !important; }
+ .editorDialogs .modal .canvasContainerEmpty, .note-editor .modal .canvasContainerEmpty {
+ border: solid 5px #2196F3; }
+
+.note-editor .note-editable::-webkit-scrollbar, .editorDialogs .modal-content::-webkit-scrollbar, .note-editor .note-color-palette::-webkit-scrollbar, .note-editor .note-codable::-webkit-scrollbar, .modal.modal-fixed-footer .modal-content::-webkit-scrollbar {
+ width: 17px !important; }
+.note-editor .note-editable::-webkit-scrollbar-track, .editorDialogs .modal-content::-webkit-scrollbar-track, .note-editor .note-color-palette::-webkit-scrollbar-track, .note-editor .note-codable::-webkit-scrollbar-track, .modal.modal-fixed-footer .modal-content::-webkit-scrollbar-track {
+ background-color: #e0e0e0 !important; }
+.note-editor .note-editable::-webkit-scrollbar-thumb, .editorDialogs .modal-content::-webkit-scrollbar-thumb, .note-editor .note-color-palette::-webkit-scrollbar-thumb, .note-editor .note-codable::-webkit-scrollbar-thumb, .modal.modal-fixed-footer .modal-content::-webkit-scrollbar-thumb {
+ background-color: white !important; }
+.note-editor .note-editable::-webkit-scrollbar-thumb:hover, .editorDialogs .modal-content::-webkit-scrollbar-thumb:hover, .note-editor .note-color-palette::-webkit-scrollbar-thumb:hover, .note-editor .note-codable::-webkit-scrollbar-thumb:hover, .modal.modal-fixed-footer .modal-content::-webkit-scrollbar-thumb:hover {
+ background-color: white !important; }
+
+.note-editor {
+ position: relative;
+ border-left: 1px solid #e0e0e0;
+ border-bottom: 1px solid #e0e0e0;
+ border-right: 1px solid #e0e0e0; }
+ .note-editor .img-circle {
+ border-radius: 50%; }
+ .note-editor .img-rounded {
+ border-radius: 5%; }
+ .note-editor .img-thumbnail {
+ border: solid 2px #e0e0e0;
+ height: 200px; }
+ .note-editor .img-bordered {
+ border: solid 5px #e0e0e0; }
+ .note-editor .btn:hover {
+ background-color: #fafafa !important; }
+ .note-editor .btn.active {
+ background-color: #2196F3; }
+ .note-editor .note-editable ul li {
+ list-style-type: square !important;
+ display: list-item;
+ list-style-position: inside; }
+ .note-editor .note-dialog > div {
+ display: none; }
+ .note-editor .note-dialog .form-group {
+ margin-right: 0;
+ margin-left: 0; }
+ .note-editor .note-dialog .note-modal-form {
+ margin: 0; }
+ .note-editor .note-dialog .note-image-dialog .note-dropzone {
+ min-height: 100px;
+ margin-bottom: 10px;
+ font-size: 30px;
+ line-height: 4;
+ color: lightgray;
+ text-align: center;
+ border: 4px dashed lightgray; }
+ .note-editor .transparent {
+ opacity: 0; }
+ .note-editor .note-resizebar {
+ background-color: #e0e0e0;
+ width: 100%;
+ height: 13px;
+ cursor: ns-resize;
+ padding-top: 1px; }
+ .note-editor .note-resizebar .note-icon-bar {
+ width: 20px;
+ margin: 2px auto;
+ border-top: 2px solid white; }
+ .note-editor .note-toolbar {
+ position: relative;
+ color: #424242;
+ background-color: #e0e0e0;
+ margin: 0;
+ z-index: 1052; }
+ .note-editor .note-toolbar ul {
+ padding: 0; }
+ .note-editor .note-toolbar .btn.disabled, .note-editor .note-toolbar button.disabled {
+ display: none; }
+ .note-editor .note-toolbar .dropdown {
+ cursor: pointer; }
+ .note-editor .note-toolbar .note-current-fontname {
+ min-width: 134px;
+ display: inline-block;
+ text-align: left; }
+ .note-editor .note-handle .note-control-selection {
+ position: absolute;
+ display: none;
+ border: 2px solid #e0e0e0; }
+ .note-editor .note-handle .note-control-selection .note-control-selection-bg {
+ width: 100%;
+ height: 100%;
+ z-index: 3;
+ background-color: rgba(117, 117, 117, 0.3); }
+ .note-editor .note-handle .note-control-selection > div {
+ position: absolute; }
+ .note-editor .note-handle .note-control-selection .note-control-handle {
+ width: 7px;
+ height: 7px;
+ border: 1px solid black; }
+ .note-editor .note-handle .note-control-selection .note-control-holder {
+ width: 7px;
+ height: 7px;
+ border: 1px solid black; }
+ .note-editor .note-handle .note-control-selection .note-control-sizing {
+ width: 15px;
+ height: 15px;
+ background-color: #e0e0e0;
+ z-index: 5;
+ cursor: se-resize; }
+ .note-editor .note-handle .note-control-selection .note-control-nw {
+ top: -5px;
+ left: -5px;
+ border-right: 0;
+ border-bottom: 0; }
+ .note-editor .note-handle .note-control-selection .note-control-ne {
+ top: -5px;
+ right: -5px;
+ border-bottom: 0;
+ border-left: none; }
+ .note-editor .note-handle .note-control-selection .note-control-sw {
+ bottom: -5px;
+ left: -5px;
+ border-top: 0;
+ border-right: 0; }
+ .note-editor .note-handle .note-control-selection .note-control-se {
+ right: -5px;
+ bottom: -5px; }
+ .note-editor .note-handle .note-control-selection .note-control-selection-info {
+ right: 0;
+ bottom: 0;
+ padding: 5px;
+ margin: 17px;
+ font-size: 15px;
+ color: #424242;
+ background-color: #e0e0e0;
+ z-index: 5; }
+
+.note-dialog .note-help-dialog {
+ color: #e0e0e0; }
+ .note-dialog .note-help-dialog h4 {
+ color: #424242; }
+ .note-dialog .note-help-dialog thead {
+ background-color: #2196F3; }
+ .note-dialog .note-help-dialog tbody {
+ background-color: #e0e0e0; }
+
+.note-editor .btn-group, .popover .btn-group {
+ display: inline-block;
+ margin-right: 10px;
+ position: relative; }
+ .note-editor .btn-group ul, .popover .btn-group ul {
+ padding: 0; }
+ .note-editor .btn-group .closeLeft, .popover .btn-group .closeLeft {
+ padding-right: 0 !important;
+ margin-right: 0 !important; }
+ .note-editor .btn-group .closeLeft i, .popover .btn-group .closeLeft i {
+ margin-right: 0 !important; }
+ .note-editor .btn-group i.left, .popover .btn-group i.left {
+ margin-right: 5px; }
+.note-editor .note-toolbar .btn, .popover .note-toolbar .btn {
+ border-radius: 0 !important;
+ box-shadow: none !important;
+ padding: 0 9px !important;
+ background-color: #e0e0e0; }
+.note-editor .btnSecond, .popover .btnSecond {
+ background-color: #0D47A1 !important; }
+.note-editor .btnThird, .popover .btnThird {
+ background-color: #B71C1C !important; }
+.note-editor note-toolbar button, .note-editor button, .note-editor .note-toolbar .btn, .popover note-toolbar button, .popover button, .popover .note-toolbar .btn {
+ background-color: #e0e0e0;
+ border: none;
+ height: 36px;
+ text-transform: uppercase;
+ color: #424242 !important; }
+.note-editor [type="checkbox"]:checked + label:before, .note-editor [type="checkbox"]:checked + label:before, .popover [type="checkbox"]:checked + label:before, .popover [type="checkbox"]:checked + label:before {
+ border-right-color: #0D47A1 !important;
+ border-bottom-color: #0D47A1 !important; }
+.note-editor .note-palette-title, .popover .note-palette-title {
+ padding: 0 !important; }
+.note-editor .colorName, .popover .colorName {
+ display: inline-block;
+ color: #424242; }
+ @media only screen and (max-width: 600px) {
+ .note-editor .colorName, .popover .colorName {
+ display: none; } }
+.note-editor .note-color-palette, .popover .note-color-palette {
+ line-height: 10px;
+ border: solid 3px #e0e0e0;
+ padding: 0 !important;
+ overflow-x: scroll;
+ overflow-y: hidden; }
+ .note-editor .note-color-palette .note-color-row, .popover .note-color-palette .note-color-row {
+ padding: 0 !important;
+ min-width: 300px; }
+ .note-editor .note-color-palette button.note-color-btn, .popover .note-color-palette button.note-color-btn {
+ width: 20px;
+ height: 20px;
+ padding: 0;
+ margin: 0; }
+ .note-editor .note-color-palette .note-color-btn:hover:after, .popover .note-color-palette .note-color-btn:hover:after {
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ content: "";
+ background-color: inherit;
+ margin-top: -15px;
+ margin-left: -15px; }
+.note-editor .note-dimension-picker, .popover .note-dimension-picker {
+ overflow: hidden; }
+.note-editor .largeDropdown, .popover .largeDropdown {
+ width: 290px; }
+.note-editor .dropdown-menu, .popover .dropdown-menu {
+ z-index: 1033; }
+ .note-editor .dropdown-menu.note-check, .popover .dropdown-menu.note-check {
+ min-width: 80px; }
+ .note-editor .dropdown-menu label, .popover .dropdown-menu label {
+ color: #424242 !important; }
+.note-editor ul.dropdown-menu, .popover ul.dropdown-menu {
+ position: absolute;
+ top: 20px;
+ background-color: #fafafa;
+ border-left: 3px solid #e0e0e0;
+ border-bottom: 3px solid #e0e0e0;
+ border-right: 3px solid #e0e0e0; }
+ .note-editor ul.dropdown-menu#colors, .popover ul.dropdown-menu#colors {
+ width: 342px; }
+ .note-editor ul.dropdown-menu#colors .indicator, .popover ul.dropdown-menu#colors .indicator {
+ width: 50%;
+ left: 0; }
+ .note-editor ul.dropdown-menu .colorTable, .popover ul.dropdown-menu .colorTable {
+ padding: 3px 0; }
+ .note-editor ul.dropdown-menu .tabs, .popover ul.dropdown-menu .tabs {
+ background-color: #e0e0e0; }
+ .note-editor ul.dropdown-menu .tabs:hover, .popover ul.dropdown-menu .tabs:hover {
+ background-color: #e0e0e0; }
+ .note-editor ul.dropdown-menu .tabs .tab a, .note-editor ul.dropdown-menu .tabs .tab a:hover, .popover ul.dropdown-menu .tabs .tab a, .popover ul.dropdown-menu .tabs .tab a:hover {
+ color: #9e9e9e; }
+ .note-editor ul.dropdown-menu .tabs .indicator, .popover ul.dropdown-menu .tabs .indicator {
+ background-color: #9e9e9e; }
+ .note-editor ul.dropdown-menu li, .popover ul.dropdown-menu li {
+ list-style-type: none;
+ padding: 0 !important; }
+ .note-editor ul.dropdown-menu li div, .popover ul.dropdown-menu li div {
+ padding: 3px 15px;
+ cursor: pointer; }
+
+.note-popover .popover {
+ position: absolute;
+ max-width: none;
+ color: #424242; }
+ .note-popover .popover .arrow {
+ width: 0;
+ height: 0;
+ border-style: solid;
+ border-width: 0 10px 10px 10px;
+ border-color: transparent transparent #e0e0e0 transparent; }
+ .note-popover .popover .popover-content {
+ background-color: #e0e0e0; }
+ .note-popover .popover .popover-content > a {
+ margin-left: 12px; }
+ .note-popover .popover .popover-content a {
+ display: inline-block;
+ max-width: 200px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ vertical-align: middle; }
+ .note-popover .popover .popover-content .arrow {
+ left: 20px; }
+ .note-popover .popover .popover-content .btn-group {
+ display: inline-block; }
+ .note-popover .popover .popover-content .btn-group .btn {
+ border-radius: 0 !important;
+ box-shadow: none !important;
+ padding: 0 9px !important;
+ background-color: #e0e0e0;
+ color: #424242 !important; }
+
+.note-popover .popover .popover-content .note-para .dropdown-menu, .note-toolbar .note-para .dropdown-menu {
+ min-width: 172px;
+ padding: 5px; }
+
+.note-popover .popover .popover-content .note-para .dropdown-menu > div:first-child, .note-toolbar .note-para .dropdown-menu > div:first-child {
+ margin-right: 5px; }
+
+.note-editor .note-dropzone {
+ position: absolute;
+ z-index: 100;
+ display: none;
+ color: #87cefa;
+ background-color: white;
+ border: 2px dashed #87cefa;
+ opacity: .95;
+ pointer-event: none; }
+
+.note-editor .note-dropzone .note-dropzone-message {
+ display: table-cell;
+ font-size: 28px;
+ font-weight: bold;
+ text-align: center;
+ vertical-align: middle; }
+
+.note-editor .note-dropzone.hover {
+ color: #098ddf;
+ border: 2px dashed #098ddf; }
+
+.note-editor.dragover .note-dropzone {
+ display: table; }
+
+.note-editor.fullscreen {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 2021;
+ width: 100%; }
+
+.note-editor.fullscreen .note-editable {
+ background-color: white; }
+
+.note-editor.fullscreen .note-resizebar {
+ display: none; }
+
+.note-editor.codeview .note-editable {
+ display: none; }
+
+.note-editor.codeview .note-codable {
+ display: block; }
+
+.note-editor .note-statusbar {
+ background-color: #f5f5f5; }
+
+.note-editor .note-editable[contenteditable=true]:empty:not(:focus):before {
+ color: #a9a9a9;
+ content: attr(data-placeholder); }
+
+.note-editor .note-editable {
+ padding: 10px;
+ overflow: auto;
+ outline: 0; }
+
+.note-editor .note-editable[contenteditable="false"] {
+ background-color: #e5e5e5; }
+
+.note-editor .note-codable {
+ display: none;
+ width: 100%;
+ padding: 10px;
+ margin-bottom: 0;
+ font-family: Menlo, Monaco, monospace, sans-serif;
+ font-size: 14px;
+ color: #ccc;
+ background-color: #222;
+ border: 0;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ box-shadow: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ box-sizing: border-box;
+ resize: none; }
+
+.note-air-editor {
+ outline: 0; }
+
+.note-popover .popover .popover-content,
+.note-toolbar {
+ padding: 0;
+ margin: 0; }
+
+.note-popover .popover .popover-content > .btn-group,
+.note-toolbar > .btn-group {
+ margin-top: 0;
+ margin-right: 5px;
+ margin-left: 0; }
+
+.note-popover .popover .popover-content .btn-group .note-table,
+.note-toolbar .btn-group .note-table {
+ min-width: 0;
+ padding: 5px; }
+
+.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker,
+.note-toolbar .btn-group .note-table .note-dimension-picker {
+ font-size: 18px; }
+
+.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,
+.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher {
+ position: absolute !important;
+ z-index: 3;
+ width: 260px;
+ height: 260px;
+ cursor: pointer; }
+
+.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,
+.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted {
+ position: relative !important;
+ z-index: 1;
+ width: 312px;
+ height: 130px;
+ background-size: 26px 26px;
+ background-image: repeating-linear-gradient(0deg, #3b3b3b, #3b3b3b 4px, transparent 4px, transparent 26px), repeating-linear-gradient(-90deg, transparent, transparent 4px, #fff 4px, #fff 26px); }
+
+.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,
+.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted {
+ position: absolute !important;
+ z-index: 2;
+ width: 26px;
+ height: 26px;
+ background-size: 26px 26px;
+ background-image: repeating-linear-gradient(0deg, #3b3b3b, #3b3b3b 4px, transparent 4px, transparent 26px), repeating-linear-gradient(-90deg, transparent, transparent 4px, #2196F3 4px, #2196F3 26px); }
+
+.note-popover .popover .popover-content .note-style h1,
+.note-toolbar .note-style h1,
+.note-popover .popover .popover-content .note-style h2,
+.note-toolbar .note-style h2,
+.note-popover .popover .popover-content .note-style h3,
+.note-toolbar .note-style h3,
+.note-popover .popover .popover-content .note-style h4,
+.note-toolbar .note-style h4,
+.note-popover .popover .popover-content .note-style h5,
+.note-toolbar .note-style h5,
+.note-popover .popover .popover-content .note-style h6,
+.note-toolbar .note-style h6,
+.note-popover .popover .popover-content .note-style blockquote,
+.note-toolbar .note-style blockquote {
+ margin: 0; }
+
+.note-popover .popover .popover-content .note-color .dropdown-toggle,
+.note-toolbar .note-color .dropdown-toggle {
+ width: 20px;
+ padding-left: 5px; }
+
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group,
+.note-toolbar .note-color .dropdown-menu .btn-group {
+ margin: 0; }
+
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group:first-child,
+.note-toolbar .note-color .dropdown-menu .btn-group:first-child {
+ margin: 0 5px; }
+
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-palette-title,
+.note-toolbar .note-color .dropdown-menu .btn-group .note-palette-title {
+ margin: 2px 7px;
+ font-size: 12px;
+ text-align: center;
+ border-bottom: 1px solid #eee; }
+
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset,
+.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset {
+ padding: 0 3px;
+ margin: 3px;
+ font-size: 11px;
+ cursor: pointer;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px; }
+
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-row,
+.note-toolbar .note-color .dropdown-menu .btn-group .note-color-row {
+ height: 20px; }
+
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset:hover,
+.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset:hover {
+ background: #eee; }
+
+/*.note-popover .popover .popover-content .dropdown-menu,
+.note-toolbar .dropdown-menu {
+ min-width: 90px
+}*/
+.note-popover .popover .popover-content .dropdown-menu.right,
+.note-toolbar .dropdown-menu.right {
+ right: 0;
+ left: auto; }
+
+.note-popover .popover .popover-content .dropdown-menu.right::before,
+.note-toolbar .dropdown-menu.right::before {
+ right: 9px;
+ left: auto !important; }
+
+.note-popover .popover .popover-content .dropdown-menu.right::after,
+.note-toolbar .dropdown-menu.right::after {
+ right: 10px;
+ left: auto !important; }
+
+.note-popover .popover .popover-content .dropdown-menu.note-check li a i,
+.note-toolbar .dropdown-menu.note-check li a i {
+ color: deepskyblue;
+ visibility: hidden; }
+
+.note-popover .popover .popover-content .dropdown-menu.note-check li a.checked i,
+.note-toolbar .dropdown-menu.note-check li a.checked i {
+ visibility: visible; }
+
+.note-popover .popover .popover-content .note-fontsize-10,
+.note-toolbar .note-fontsize-10 {
+ font-size: 10px; }
+
+/*# sourceMappingURL=materialNote.css.map */
diff --git a/system/admin/static/editor/css/materialNote.css.map b/system/admin/static/editor/css/materialNote.css.map
new file mode 100644
index 0000000..9c59b74
--- /dev/null
+++ b/system/admin/static/editor/css/materialNote.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "AAyXM,0BAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,oCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,0BAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,oCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,0BAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,oCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,0BAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,oCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,0BAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,oCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,gBAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,qBAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,yBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,mCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,yBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,mCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,yBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,mCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,yBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,mCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,IAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,SAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,KAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,UAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,OAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,YAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,YAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,iBAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,OAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,YAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,KAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,UAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,WAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,gBAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,KAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,UAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,KAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,UAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,MAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,WAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,YAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,iBAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,KAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,UAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,OAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,YAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,MAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,WAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,iBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,2BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,OAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,YAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,sBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,gCAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,YAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,iBAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,qBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,+BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,gBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,0BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,MAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,WAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,oBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,8BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,UAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,eAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,mBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,6BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,mBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,6BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,mBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,6BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,mBAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,6BAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,eAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,yBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAZhC,KAAgB;EACd,gBAAgB,EAAE,kBAAuB;;AAE3C,UAAqB;EACnB,KAAK,EAAE,kBAAuB;;AAIhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,cAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,wBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,aAA+B;EAC7B,gBAAgB,EAAE,kBAAuB;;AAE3C,uBAAyC;EACvC,KAAK,EAAE,kBAAuB;;AAJhC,mBAA+B;EAC7B,gBAAgB,EAAE,sBAAuB;;AAE3C,6BAAyC;EACvC,KAAK,EAAE,sBAAuB;;AAQpC,MAAW;EACT,gBAAgB,EAAE,kBAAuB;;AAE3C,WAAgB;EACd,KAAK,EAAE,kBAAuB;;AAJhC,MAAW;EACT,gBAAgB,EAAE,kBAAuB;;AAE3C,WAAgB;EACd,KAAK,EAAE,kBAAuB;;AAJhC,YAAW;EACT,gBAAgB,EAAE,sBAAuB;;AAE3C,iBAAgB;EACd,KAAK,EAAE,sBAAuB;;ACzYlC,gBAAgB;AAUhB,gBAAgB;AAGhB,iBAAiB;AAYjB,eAAe;AAMf,qBAAqB;AAKrB,kBAAkB;AAKlB,eAAe;AAIf,eAAe;AA8Bf,gBAAgB;AAqBhB,gBAAgB;AAMhB,iBAAiB;AAIjB,sBAAsB;AAKtB,cAAc;AAKd,gBAAgB;AAIhB,gBAAgB;AAKhB,oBAAoB;AAkBpB,qBAAqB;AAOrB,kBAAkB;ACnJlB;mFACmF;AAwBnF,0CAA2C;EACvC,gBAAgB,EAAE,KAA4B;EAC9C,KAAK,EAxBU,OAAyB;EAyBxC,OAAO,EAAE,eAAe;EACxB,mBAAmB,EAAE,MAAM;EAE3B,wNAAkE;IAC9D,YAAY,EAAE,kBAA4B;EAE9C,oYAAmI;IAC/H,UAAU,EAAE,4BAAqC;IACjD,YAAY,EAAE,kBAA2B;EAE7C,4dAAqI;IACjI,KAAK,EAAE,kBAA4B;EAEvC,whBAAwL;IACpL,KAAK,EAAE,kBAA2B;EAGtC,oDAAK;IACD,gBAAgB,EArCJ,OAAyB;IAsCrC,KAAK,EAAE,gBAA2C;EAEtD,gEAAW;IACP,gBAAgB,EAAE,kBAA2C;EAGjE,sEAAc;IACV,gBAAgB,EAAE,kBAA0C;EAGhE,sEAAc;IACV,gBAAgB,EAAE,OAA0B;IAE5C,0FAAU;MACN,YAAY,EAAE,IAAI;MAClB,gBAAgB,EAnDT,OAAwB;IAsDnC,sGAAgB;MACZ,gBAAgB,EAAE,kBAA0C;EAIpE,sFAAsB;IAClB,MAAM,EAAE,iBAA0B;;AAMtC,iQAAqB;EACjB,KAAK,EAAE,eAAe;AAE1B,+RAA2B;EACvB,gBAAgB,EAAE,kBAAwB;AAE9C,+RAA2B;EACvB,gBAAgB,EAAE,gBAAsC;AAE5D,6TAAiC;EAC7B,gBAAgB,EAAE,gBAAsC;;AAIhE,YAAa;EACT,QAAQ,EAAE,QAAQ;EAEd,WAAI,EAAE,iBAAuB;EAC7B,aAAM,EAAE,iBAAuB;EAC/B,YAAK,EAAE,iBAAuB;EAGlC,wBAAY;IACR,aAAa,EAAE,GAAG;EAGtB,yBAAa;IACT,aAAa,EAAE,EAAE;EAGrB,2BAAe;IACX,MAAM,EAAE,iBAAuB;IAC/B,MAAM,EAAE,KAAK;EAGjB,0BAAc;IACV,MAAM,EAAE,iBAAuB;EAGnC,uBAAW;IACP,gBAAgB,EAAE,kBAA0C;EAGhE,wBAAY;IACR,gBAAgB,EA3GN,OAAqB;EA+G/B,iCAAM;IACF,eAAe,EAAE,iBAAiB;IAClC,OAAO,EAAE,SAAS;IAClB,mBAAmB,EAAE,MAAM;EAK/B,+BAAQ;IACJ,OAAO,EAAE,IAAI;EAEjB,qCAAY;IACR,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;EAElB,0CAAiB;IACb,MAAM,EAAE,CAAC;EAEb,2DAAkC;IAC9B,UAAU,EAAE,KAAK;IACjB,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,CAAC;IACd,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,oBACZ;EAGJ,yBAAa;IACT,OAAO,EAAE,CAAC;EAGd,4BAAgB;IACZ,gBAAgB,EA5IF,OAA0B;IA6IxC,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,GAAG;IAEhB,2CAAe;MACX,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,QAAQ;MAChB,UAAU,EAAE,eAAqC;EAIzD,0BAAc;IACV,QAAQ,EAAE,QAAQ;IAClB,KAAK,EA3KM,OAAyB;IA4KpC,gBAAgB,EA5JF,OAA0B;IA6JxC,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,IAAI;IAEb,6BAAG;MACC,OAAO,EAAE,CAAC;IAGd,oFAA+B;MAC3B,OAAO,EAAE,IAAI;IAGjB,oCAAU;MACN,MAAM,EAAE,OAAO;IAGnB,iDAAuB;MACnB,SAAS,EAAE,KAAK;MAChB,OAAO,EAAE,YAAY;MACrB,UAAU,EAAE,IAAI;EAKpB,iDAAwB;IACpB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,iBAA2B;IAEnC,4EAA2B;MACvB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,CAAC;MACV,gBAAgB,EAAE,wBAAoC;IAG1D,uDAAQ;MACJ,QAAQ,EAAE,QAAQ;IAEtB,sEAAqB;MACjB,KAAK,EAAE,GAAG;MACV,MAAM,EAAE,GAAG;MACX,MAAM,EAAE,eAAe;IAE3B,sEAAqB;MACjB,KAAK,EAAE,GAAG;MACV,MAAM,EAAE,GAAG;MACX,MAAM,EAAE,eAAe;IAE3B,sEAAqB;MACjB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,gBAAgB,EAhNV,OAA0B;MAiNhC,OAAO,EAAE,CAAC;MACV,MAAM,EAAE,SAAS;IAErB,kEAAiB;MACb,GAAG,EAAE,IAAI;MACT,IAAI,EAAE,IAAI;MACV,YAAY,EAAE,CAAC;MACf,aAAa,EAAE,CAAC;IAEpB,kEAAiB;MACb,GAAG,EAAE,IAAI;MACT,KAAK,EAAE,IAAI;MACX,aAAa,EAAE,CAAC;MAChB,WAAW,EAAE,IAAI;IAErB,kEAAiB;MACb,MAAM,EAAE,IAAI;MACZ,IAAI,EAAE,IAAI;MACV,UAAU,EAAE,CAAC;MACb,YAAY,EAAE,CAAC;IAEnB,kEAAiB;MACb,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;IAEhB,8EAA6B;MACzB,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,GAAG;MACZ,MAAM,EAAE,IAAI;MACZ,SAAS,EAAE,IAAI;MACf,KAAK,EAhQF,OAAyB;MAiQ5B,gBAAgB,EAjPV,OAA0B;MAkPhC,OAAO,EAAE,CAAC;;AAM1B,8BAA+B;EAC3B,KAAK,EAzPa,OAA0B;EA2P5C,iCAAG;IACC,KAAK,EA5QM,OAAyB;EA+QxC,oCAAM;IACF,gBAAgB,EArQN,OAAqB;EAwQnC,oCAAM;IACF,gBAAgB,EApQF,OAA0B;;AAyQ5C,4CAAW;EACP,OAAO,EAAE,YAAY;EACrB,YAAY,EAAE,IAAI;EAClB,QAAQ,EAAE,QAAQ;EAElB,kDAAG;IACC,OAAO,EAAE,CAAC;EAGd,kEAAW;IACP,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,YAAY;IAE1B,sEAAE;MACE,YAAY,EAAE,YAAY;EAIlC,0DAAO;IACH,YAAY,EAAE,GAAG;AAIzB,4DAAmB;EACf,aAAa,EAAE,YAAY;EAC3B,UAAU,EAAE,eAAe;EAC3B,OAAO,EAAE,gBAAgB;EACzB,gBAAgB,EApSF,OAA0B;AAuS5C,4CAAW;EACP,gBAAgB,EAAE,kBAA6B;AAGnD,0CAAU;EACN,gBAAgB,EAAE,kBAA4B;AAGlD,kKAAiD;EAC7C,gBAAgB,EAhTF,OAA0B;EAiTxC,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,cAAc,EAAE,SAAS;EACzB,KAAK,EAAE,kBAA4B;AAGvC,kNAAmF;EAC/E,kBAAkB,EAAE,kBAA6B;EACjD,mBAAmB,EAAE,kBAA6B;AAGtD,8DAAoB;EAChB,OAAO,EAAE,YAAY;AAGzB,4CAAW;EACP,OAAO,EAAE,YAAY;EACrB,KAAK,EAlVM,OAAyB;EAoVpC,yCAA0B;IAJ9B,4CAAW;MAKH,OAAO,EAAE,IAAI;AAIrB,8DAAoB;EAChB,WAAW,EAAE,IAAI;EACjB,MAAM,EAAE,iBAAuB;EAC/B,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,MAAM;EAElB,8FAAgB;IACZ,OAAO,EAAE,YAAY;IACrB,SAAS,EAAE,KAAK;EAGpB,0GAAsB;IAClB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;EAIT,sHAAQ;IACJ,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,EAAE;IACX,gBAAgB,EAAE,OAAO;IACzB,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,KAAK;AAK9B,oEAAuB;EACnB,QAAQ,EAAE,MAAM;AAGpB,oDAAe;EACX,KAAK,EAAE,KAAK;AAGhB,oDAAe;EACX,OAAO,EAAE,IAAI;EAEb,0EAAa;IACT,SAAS,EAAE,IAAI;EAGnB,gEAAM;IACF,KAAK,EAAE,kBAA4B;AAI3C,wDAAiB;EACb,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,IAAI;EACT,gBAAgB,EAAE,OAA2B;EAEzC,WAAI,EAAE,iBAAuB;EAC7B,aAAM,EAAE,iBAAuB;EAC/B,YAAK,EAAE,iBAAuB;EAGlC,sEAAS;IACL,KAAK,EAAE,KAAK;IAEZ,4FAAW;MACP,KAAK,EAAE,GAAG;MACV,IAAI,EAAE,CAAC;EAIf,gFAAY;IACR,OAAO,EAAE,KAAK;EAGlB,oEAAM;IACF,gBAAgB,EArZN,OAA0B;IAuZpC,gFAAQ;MACJ,gBAAgB,EAxZV,OAA0B;IA2ZpC,kLAAqB;MACjB,KAAK,EAhaF,OAAqB;IAma5B,0FAAW;MACP,gBAAgB,EApab,OAAqB;EAwahC,8DAAG;IACC,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE,YAAY;IAErB,sEAAI;MACA,OAAO,EAAE,QAAQ;MACjB,MAAM,EAAE,OAAO;;AAM/B,sBAAuB;EACnB,QAAQ,EAAE,QAAQ;EAClB,SAAS,EAAE,IAAI;EACf,KAAK,EAncU,OAAyB;EAqcxC,6BAAO;IACH,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,2CAAqD;EAGvE,uCAAiB;IACb,gBAAgB,EA9bF,OAA0B;IAgcxC,2CAAM;MACF,WAAW,EAAE,IAAI;IAGrB,yCAAE;MACE,OAAO,EAAE,YAAY;MACrB,SAAS,EAAE,KAAK;MAChB,QAAQ,EAAE,MAAM;MAChB,aAAa,EAAE,QAAQ;MACvB,WAAW,EAAE,MAAM;MACnB,cAAc,EAAE,MAAM;IAG1B,8CAAO;MACH,IAAI,EAAE,IAAI;IAGd,kDAAW;MACP,OAAO,EAAE,YAAY;MAErB,uDAAK;QACD,aAAa,EAAE,YAAY;QAC3B,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,gBAAgB;QACzB,gBAAgB,EAxdV,OAA0B;QAydhC,KAAK,EAAE,kBAA4B;;AAMnD,0GAA2G;EACvG,SAAS,EAAE,KAAK;EAChB,OAAO,EAAE,GAAG;;AAEhB,8IAA+I;EAC3I,YAAY,EAAE,GAAG;;AAUrB,2BAA4B;EACxB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,GAAG;EACZ,OAAO,EAAE,IAAI;EACb,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,kBAAkB;EAC1B,OAAO,EAAE,GAAG;EACZ,aAAa,EAAE,IAAI;;AAEvB,kDAAmD;EAC/C,OAAO,EAAE,UAAU;EACnB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,MAAM;EAClB,cAAc,EAAE,MAAM;;AAE1B,iCAAkC;EAC9B,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,kBACZ;;AACA,oCAAqC;EACjC,OAAO,EAAE,KAAK;;AAGlB,uBAAwB;EACpB,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,OAAO,EAAE,IAAI;EACb,KAAK,EAAE,IAAI;;AAEf,sCAAuC;EACnC,gBAAgB,EAAE,KAAK;;AAE3B,uCAAwC;EACpC,OAAO,EAAE,IAAI;;AAEjB,oCAAqC;EACjC,OAAO,EAAE,IAAI;;AAEjB,mCAAoC;EAChC,OAAO,EAAE,KAAK;;AAElB,4BAA6B;EACzB,gBAAgB,EAAE,OAAO;;AAE7B,0EAA2E;EACvE,KAAK,EAAE,OAAO;EACd,OAAO,EAAE,sBACb;;AACA,2BAA4B;EACxB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,IAAI;EACd,OAAO,EAAE,CAAC;;AAEd,oDAAqD;EACjD,gBAAgB,EAAE,OAAO;;AAE7B,0BAA2B;EACvB,OAAO,EAAE,IAAI;EACb,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EACb,aAAa,EAAE,CAAC;EAChB,WAAW,EAAE,oCAAoC;EACjD,SAAS,EAAE,IAAI;EACf,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,CAAC;EACT,qBAAqB,EAAE,CAAC;EACxB,kBAAkB,EAAE,CAAC;EACrB,aAAa,EAAE,CAAC;EAChB,UAAU,EAAE,IAAI;EAChB,kBAAkB,EAAE,UAAU;EAC9B,eAAe,EAAE,UAAU;EAC3B,cAAc,EAAE,UAAU;EAC1B,UAAU,EAAE,UAAU;EACtB,MAAM,EAAE,IAAI;;AAEhB,gBAAiB;EACb,OAAO,EAAE,CAAC;;AAGd;aACc;EACV,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;;AAEb;0BAC2B;EACvB,UAAU,EAAE,CAAC;EACb,YAAY,EAAE,GAAG;EACjB,WAAW,EAAE,CAAC;;AAElB;oCACqC;EACjC,SAAS,EAAE,CAAC;EACZ,OAAO,EAAE,GAAG;;AAEhB;2DAC4D;EACxD,SAAS,EAAE,IAAI;;AAEnB;+FACgG;EAC5F,QAAQ,EAAE,mBAAkB;EAC5B,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,KAAc;EACrB,MAAM,EAAC,KAAc;EACrB,MAAM,EAAE,OAAO;;AAEnB;gGACiG;EAC7F,QAAQ,EAAE,mBAAmB;EAC7B,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,KAAc;EACrB,MAAM,EAAE,KAAa;EACrB,eAAe,EAAE,SAAS;EAC1B,gBAAgB,EAAC,8KACuE;;AAE5F;8FAC+F;EAC3F,QAAQ,EAAE,mBAAmB;EAC7B,OAAO,EAAE,CAAC;EACV,KAAK,EAxmBE,IAAI;EAymBX,MAAM,EAzmBC,IAAI;EA0mBX,eAAe,EAAE,SAAS;EAC1B,gBAAgB,EAAC,oLAC+F;;AAGpH;;;;;;;;;;;;;oCAaqC;EACjC,MAAM,EAAE,CAAC;;AAEb;0CAC2C;EACvC,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,GAAG;;AAErB;mDACoD;EAChD,MAAM,EAAE,CAAC;;AAEb;+DACgE;EAC5D,MAAM,EAAE,KACZ;;AACA;uEACwE;EACpE,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,IAAI;EACf,UAAU,EAAE,MAAM;EAClB,aAAa,EAAE,cACnB;;AACA;qEACsE;EAClE,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,GAAG;EACX,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,OAAO;EACf,qBAAqB,EAAE,GAAG;EAC1B,kBAAkB,EAAE,GAAG;EACvB,aAAa,EAAE,GAAG;;AAEtB;mEACoE;EAChE,MAAM,EAAE,IAAI;;AAEhB;2EAC4E;EACxE,UAAU,EAAE,IAAI;;AAEpB;;;GAGG;AACH;kCACmC;EAC/B,KAAK,EAAE,CAAC;EACR,IAAI,EAAE,IAAI;;AAEd;0CAC2C;EACvC,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,eACV;;AACA;yCAC0C;EACtC,KAAK,EAAE,IAAI;EACX,IAAI,EAAE,eACV;;AACA;8CAC+C;EAC3C,KAAK,EAAE,WAAW;EAClB,UAAU,EAAE,MAAM;;AAEtB;sDACuD;EACnD,UAAU,EAAE,OAAO;;AAEvB;+BACgC;EAC5B,SAAS,EAAE,IAAI",
+"sources": ["../sass/components/_color.scss","../sass/components/_variables.scss","../sass/materialNote.scss"],
+"names": [],
+"file": "materialNote.css"
+} \ No newline at end of file
diff --git a/system/admin/static/editor/css/materialize.css b/system/admin/static/editor/css/materialize.css
new file mode 100644
index 0000000..334ebbc
--- /dev/null
+++ b/system/admin/static/editor/css/materialize.css
@@ -0,0 +1,8284 @@
+.materialize-red.lighten-5 {
+ background-color: #fdeaeb !important; }
+
+.materialize-red-text.text-lighten-5 {
+ color: #fdeaeb !important; }
+
+.materialize-red.lighten-4 {
+ background-color: #f8c1c3 !important; }
+
+.materialize-red-text.text-lighten-4 {
+ color: #f8c1c3 !important; }
+
+.materialize-red.lighten-3 {
+ background-color: #f3989b !important; }
+
+.materialize-red-text.text-lighten-3 {
+ color: #f3989b !important; }
+
+.materialize-red.lighten-2 {
+ background-color: #ee6e73 !important; }
+
+.materialize-red-text.text-lighten-2 {
+ color: #ee6e73 !important; }
+
+.materialize-red.lighten-1 {
+ background-color: #ea454b !important; }
+
+.materialize-red-text.text-lighten-1 {
+ color: #ea454b !important; }
+
+.materialize-red {
+ background-color: #e51c23 !important; }
+
+.materialize-red-text {
+ color: #e51c23 !important; }
+
+.materialize-red.darken-1 {
+ background-color: #d0181e !important; }
+
+.materialize-red-text.text-darken-1 {
+ color: #d0181e !important; }
+
+.materialize-red.darken-2 {
+ background-color: #b9151b !important; }
+
+.materialize-red-text.text-darken-2 {
+ color: #b9151b !important; }
+
+.materialize-red.darken-3 {
+ background-color: #a21318 !important; }
+
+.materialize-red-text.text-darken-3 {
+ color: #a21318 !important; }
+
+.materialize-red.darken-4 {
+ background-color: #8b1014 !important; }
+
+.materialize-red-text.text-darken-4 {
+ color: #8b1014 !important; }
+
+.red.lighten-5 {
+ background-color: #FFEBEE !important; }
+
+.red-text.text-lighten-5 {
+ color: #FFEBEE !important; }
+
+.red.lighten-4 {
+ background-color: #FFCDD2 !important; }
+
+.red-text.text-lighten-4 {
+ color: #FFCDD2 !important; }
+
+.red.lighten-3 {
+ background-color: #EF9A9A !important; }
+
+.red-text.text-lighten-3 {
+ color: #EF9A9A !important; }
+
+.red.lighten-2 {
+ background-color: #E57373 !important; }
+
+.red-text.text-lighten-2 {
+ color: #E57373 !important; }
+
+.red.lighten-1 {
+ background-color: #EF5350 !important; }
+
+.red-text.text-lighten-1 {
+ color: #EF5350 !important; }
+
+.red {
+ background-color: #F44336 !important; }
+
+.red-text {
+ color: #F44336 !important; }
+
+.red.darken-1 {
+ background-color: #E53935 !important; }
+
+.red-text.text-darken-1 {
+ color: #E53935 !important; }
+
+.red.darken-2 {
+ background-color: #D32F2F !important; }
+
+.red-text.text-darken-2 {
+ color: #D32F2F !important; }
+
+.red.darken-3 {
+ background-color: #C62828 !important; }
+
+.red-text.text-darken-3 {
+ color: #C62828 !important; }
+
+.red.darken-4 {
+ background-color: #B71C1C !important; }
+
+.red-text.text-darken-4 {
+ color: #B71C1C !important; }
+
+.red.accent-1 {
+ background-color: #FF8A80 !important; }
+
+.red-text.text-accent-1 {
+ color: #FF8A80 !important; }
+
+.red.accent-2 {
+ background-color: #FF5252 !important; }
+
+.red-text.text-accent-2 {
+ color: #FF5252 !important; }
+
+.red.accent-3 {
+ background-color: #FF1744 !important; }
+
+.red-text.text-accent-3 {
+ color: #FF1744 !important; }
+
+.red.accent-4 {
+ background-color: #D50000 !important; }
+
+.red-text.text-accent-4 {
+ color: #D50000 !important; }
+
+.pink.lighten-5 {
+ background-color: #fce4ec !important; }
+
+.pink-text.text-lighten-5 {
+ color: #fce4ec !important; }
+
+.pink.lighten-4 {
+ background-color: #f8bbd0 !important; }
+
+.pink-text.text-lighten-4 {
+ color: #f8bbd0 !important; }
+
+.pink.lighten-3 {
+ background-color: #f48fb1 !important; }
+
+.pink-text.text-lighten-3 {
+ color: #f48fb1 !important; }
+
+.pink.lighten-2 {
+ background-color: #f06292 !important; }
+
+.pink-text.text-lighten-2 {
+ color: #f06292 !important; }
+
+.pink.lighten-1 {
+ background-color: #ec407a !important; }
+
+.pink-text.text-lighten-1 {
+ color: #ec407a !important; }
+
+.pink {
+ background-color: #e91e63 !important; }
+
+.pink-text {
+ color: #e91e63 !important; }
+
+.pink.darken-1 {
+ background-color: #d81b60 !important; }
+
+.pink-text.text-darken-1 {
+ color: #d81b60 !important; }
+
+.pink.darken-2 {
+ background-color: #c2185b !important; }
+
+.pink-text.text-darken-2 {
+ color: #c2185b !important; }
+
+.pink.darken-3 {
+ background-color: #ad1457 !important; }
+
+.pink-text.text-darken-3 {
+ color: #ad1457 !important; }
+
+.pink.darken-4 {
+ background-color: #880e4f !important; }
+
+.pink-text.text-darken-4 {
+ color: #880e4f !important; }
+
+.pink.accent-1 {
+ background-color: #ff80ab !important; }
+
+.pink-text.text-accent-1 {
+ color: #ff80ab !important; }
+
+.pink.accent-2 {
+ background-color: #ff4081 !important; }
+
+.pink-text.text-accent-2 {
+ color: #ff4081 !important; }
+
+.pink.accent-3 {
+ background-color: #f50057 !important; }
+
+.pink-text.text-accent-3 {
+ color: #f50057 !important; }
+
+.pink.accent-4 {
+ background-color: #c51162 !important; }
+
+.pink-text.text-accent-4 {
+ color: #c51162 !important; }
+
+.purple.lighten-5 {
+ background-color: #f3e5f5 !important; }
+
+.purple-text.text-lighten-5 {
+ color: #f3e5f5 !important; }
+
+.purple.lighten-4 {
+ background-color: #e1bee7 !important; }
+
+.purple-text.text-lighten-4 {
+ color: #e1bee7 !important; }
+
+.purple.lighten-3 {
+ background-color: #ce93d8 !important; }
+
+.purple-text.text-lighten-3 {
+ color: #ce93d8 !important; }
+
+.purple.lighten-2 {
+ background-color: #ba68c8 !important; }
+
+.purple-text.text-lighten-2 {
+ color: #ba68c8 !important; }
+
+.purple.lighten-1 {
+ background-color: #ab47bc !important; }
+
+.purple-text.text-lighten-1 {
+ color: #ab47bc !important; }
+
+.purple {
+ background-color: #9c27b0 !important; }
+
+.purple-text {
+ color: #9c27b0 !important; }
+
+.purple.darken-1 {
+ background-color: #8e24aa !important; }
+
+.purple-text.text-darken-1 {
+ color: #8e24aa !important; }
+
+.purple.darken-2 {
+ background-color: #7b1fa2 !important; }
+
+.purple-text.text-darken-2 {
+ color: #7b1fa2 !important; }
+
+.purple.darken-3 {
+ background-color: #6a1b9a !important; }
+
+.purple-text.text-darken-3 {
+ color: #6a1b9a !important; }
+
+.purple.darken-4 {
+ background-color: #4a148c !important; }
+
+.purple-text.text-darken-4 {
+ color: #4a148c !important; }
+
+.purple.accent-1 {
+ background-color: #ea80fc !important; }
+
+.purple-text.text-accent-1 {
+ color: #ea80fc !important; }
+
+.purple.accent-2 {
+ background-color: #e040fb !important; }
+
+.purple-text.text-accent-2 {
+ color: #e040fb !important; }
+
+.purple.accent-3 {
+ background-color: #d500f9 !important; }
+
+.purple-text.text-accent-3 {
+ color: #d500f9 !important; }
+
+.purple.accent-4 {
+ background-color: #aa00ff !important; }
+
+.purple-text.text-accent-4 {
+ color: #aa00ff !important; }
+
+.deep-purple.lighten-5 {
+ background-color: #ede7f6 !important; }
+
+.deep-purple-text.text-lighten-5 {
+ color: #ede7f6 !important; }
+
+.deep-purple.lighten-4 {
+ background-color: #d1c4e9 !important; }
+
+.deep-purple-text.text-lighten-4 {
+ color: #d1c4e9 !important; }
+
+.deep-purple.lighten-3 {
+ background-color: #b39ddb !important; }
+
+.deep-purple-text.text-lighten-3 {
+ color: #b39ddb !important; }
+
+.deep-purple.lighten-2 {
+ background-color: #9575cd !important; }
+
+.deep-purple-text.text-lighten-2 {
+ color: #9575cd !important; }
+
+.deep-purple.lighten-1 {
+ background-color: #7e57c2 !important; }
+
+.deep-purple-text.text-lighten-1 {
+ color: #7e57c2 !important; }
+
+.deep-purple {
+ background-color: #673ab7 !important; }
+
+.deep-purple-text {
+ color: #673ab7 !important; }
+
+.deep-purple.darken-1 {
+ background-color: #5e35b1 !important; }
+
+.deep-purple-text.text-darken-1 {
+ color: #5e35b1 !important; }
+
+.deep-purple.darken-2 {
+ background-color: #512da8 !important; }
+
+.deep-purple-text.text-darken-2 {
+ color: #512da8 !important; }
+
+.deep-purple.darken-3 {
+ background-color: #4527a0 !important; }
+
+.deep-purple-text.text-darken-3 {
+ color: #4527a0 !important; }
+
+.deep-purple.darken-4 {
+ background-color: #311b92 !important; }
+
+.deep-purple-text.text-darken-4 {
+ color: #311b92 !important; }
+
+.deep-purple.accent-1 {
+ background-color: #b388ff !important; }
+
+.deep-purple-text.text-accent-1 {
+ color: #b388ff !important; }
+
+.deep-purple.accent-2 {
+ background-color: #7c4dff !important; }
+
+.deep-purple-text.text-accent-2 {
+ color: #7c4dff !important; }
+
+.deep-purple.accent-3 {
+ background-color: #651fff !important; }
+
+.deep-purple-text.text-accent-3 {
+ color: #651fff !important; }
+
+.deep-purple.accent-4 {
+ background-color: #6200ea !important; }
+
+.deep-purple-text.text-accent-4 {
+ color: #6200ea !important; }
+
+.indigo.lighten-5 {
+ background-color: #e8eaf6 !important; }
+
+.indigo-text.text-lighten-5 {
+ color: #e8eaf6 !important; }
+
+.indigo.lighten-4 {
+ background-color: #c5cae9 !important; }
+
+.indigo-text.text-lighten-4 {
+ color: #c5cae9 !important; }
+
+.indigo.lighten-3 {
+ background-color: #9fa8da !important; }
+
+.indigo-text.text-lighten-3 {
+ color: #9fa8da !important; }
+
+.indigo.lighten-2 {
+ background-color: #7986cb !important; }
+
+.indigo-text.text-lighten-2 {
+ color: #7986cb !important; }
+
+.indigo.lighten-1 {
+ background-color: #5c6bc0 !important; }
+
+.indigo-text.text-lighten-1 {
+ color: #5c6bc0 !important; }
+
+.indigo {
+ background-color: #3f51b5 !important; }
+
+.indigo-text {
+ color: #3f51b5 !important; }
+
+.indigo.darken-1 {
+ background-color: #3949ab !important; }
+
+.indigo-text.text-darken-1 {
+ color: #3949ab !important; }
+
+.indigo.darken-2 {
+ background-color: #303f9f !important; }
+
+.indigo-text.text-darken-2 {
+ color: #303f9f !important; }
+
+.indigo.darken-3 {
+ background-color: #283593 !important; }
+
+.indigo-text.text-darken-3 {
+ color: #283593 !important; }
+
+.indigo.darken-4 {
+ background-color: #1a237e !important; }
+
+.indigo-text.text-darken-4 {
+ color: #1a237e !important; }
+
+.indigo.accent-1 {
+ background-color: #8c9eff !important; }
+
+.indigo-text.text-accent-1 {
+ color: #8c9eff !important; }
+
+.indigo.accent-2 {
+ background-color: #536dfe !important; }
+
+.indigo-text.text-accent-2 {
+ color: #536dfe !important; }
+
+.indigo.accent-3 {
+ background-color: #3d5afe !important; }
+
+.indigo-text.text-accent-3 {
+ color: #3d5afe !important; }
+
+.indigo.accent-4 {
+ background-color: #304ffe !important; }
+
+.indigo-text.text-accent-4 {
+ color: #304ffe !important; }
+
+.blue.lighten-5 {
+ background-color: #E3F2FD !important; }
+
+.blue-text.text-lighten-5 {
+ color: #E3F2FD !important; }
+
+.blue.lighten-4 {
+ background-color: #BBDEFB !important; }
+
+.blue-text.text-lighten-4 {
+ color: #BBDEFB !important; }
+
+.blue.lighten-3 {
+ background-color: #90CAF9 !important; }
+
+.blue-text.text-lighten-3 {
+ color: #90CAF9 !important; }
+
+.blue.lighten-2 {
+ background-color: #64B5F6 !important; }
+
+.blue-text.text-lighten-2 {
+ color: #64B5F6 !important; }
+
+.blue.lighten-1 {
+ background-color: #42A5F5 !important; }
+
+.blue-text.text-lighten-1 {
+ color: #42A5F5 !important; }
+
+.blue {
+ background-color: #2196F3 !important; }
+
+.blue-text {
+ color: #2196F3 !important; }
+
+.blue.darken-1 {
+ background-color: #1E88E5 !important; }
+
+.blue-text.text-darken-1 {
+ color: #1E88E5 !important; }
+
+.blue.darken-2 {
+ background-color: #1976D2 !important; }
+
+.blue-text.text-darken-2 {
+ color: #1976D2 !important; }
+
+.blue.darken-3 {
+ background-color: #1565C0 !important; }
+
+.blue-text.text-darken-3 {
+ color: #1565C0 !important; }
+
+.blue.darken-4 {
+ background-color: #0D47A1 !important; }
+
+.blue-text.text-darken-4 {
+ color: #0D47A1 !important; }
+
+.blue.accent-1 {
+ background-color: #82B1FF !important; }
+
+.blue-text.text-accent-1 {
+ color: #82B1FF !important; }
+
+.blue.accent-2 {
+ background-color: #448AFF !important; }
+
+.blue-text.text-accent-2 {
+ color: #448AFF !important; }
+
+.blue.accent-3 {
+ background-color: #2979FF !important; }
+
+.blue-text.text-accent-3 {
+ color: #2979FF !important; }
+
+.blue.accent-4 {
+ background-color: #2962FF !important; }
+
+.blue-text.text-accent-4 {
+ color: #2962FF !important; }
+
+.light-blue.lighten-5 {
+ background-color: #e1f5fe !important; }
+
+.light-blue-text.text-lighten-5 {
+ color: #e1f5fe !important; }
+
+.light-blue.lighten-4 {
+ background-color: #b3e5fc !important; }
+
+.light-blue-text.text-lighten-4 {
+ color: #b3e5fc !important; }
+
+.light-blue.lighten-3 {
+ background-color: #81d4fa !important; }
+
+.light-blue-text.text-lighten-3 {
+ color: #81d4fa !important; }
+
+.light-blue.lighten-2 {
+ background-color: #4fc3f7 !important; }
+
+.light-blue-text.text-lighten-2 {
+ color: #4fc3f7 !important; }
+
+.light-blue.lighten-1 {
+ background-color: #29b6f6 !important; }
+
+.light-blue-text.text-lighten-1 {
+ color: #29b6f6 !important; }
+
+.light-blue {
+ background-color: #03a9f4 !important; }
+
+.light-blue-text {
+ color: #03a9f4 !important; }
+
+.light-blue.darken-1 {
+ background-color: #039be5 !important; }
+
+.light-blue-text.text-darken-1 {
+ color: #039be5 !important; }
+
+.light-blue.darken-2 {
+ background-color: #0288d1 !important; }
+
+.light-blue-text.text-darken-2 {
+ color: #0288d1 !important; }
+
+.light-blue.darken-3 {
+ background-color: #0277bd !important; }
+
+.light-blue-text.text-darken-3 {
+ color: #0277bd !important; }
+
+.light-blue.darken-4 {
+ background-color: #01579b !important; }
+
+.light-blue-text.text-darken-4 {
+ color: #01579b !important; }
+
+.light-blue.accent-1 {
+ background-color: #80d8ff !important; }
+
+.light-blue-text.text-accent-1 {
+ color: #80d8ff !important; }
+
+.light-blue.accent-2 {
+ background-color: #40c4ff !important; }
+
+.light-blue-text.text-accent-2 {
+ color: #40c4ff !important; }
+
+.light-blue.accent-3 {
+ background-color: #00b0ff !important; }
+
+.light-blue-text.text-accent-3 {
+ color: #00b0ff !important; }
+
+.light-blue.accent-4 {
+ background-color: #0091ea !important; }
+
+.light-blue-text.text-accent-4 {
+ color: #0091ea !important; }
+
+.cyan.lighten-5 {
+ background-color: #e0f7fa !important; }
+
+.cyan-text.text-lighten-5 {
+ color: #e0f7fa !important; }
+
+.cyan.lighten-4 {
+ background-color: #b2ebf2 !important; }
+
+.cyan-text.text-lighten-4 {
+ color: #b2ebf2 !important; }
+
+.cyan.lighten-3 {
+ background-color: #80deea !important; }
+
+.cyan-text.text-lighten-3 {
+ color: #80deea !important; }
+
+.cyan.lighten-2 {
+ background-color: #4dd0e1 !important; }
+
+.cyan-text.text-lighten-2 {
+ color: #4dd0e1 !important; }
+
+.cyan.lighten-1 {
+ background-color: #26c6da !important; }
+
+.cyan-text.text-lighten-1 {
+ color: #26c6da !important; }
+
+.cyan {
+ background-color: #00bcd4 !important; }
+
+.cyan-text {
+ color: #00bcd4 !important; }
+
+.cyan.darken-1 {
+ background-color: #00acc1 !important; }
+
+.cyan-text.text-darken-1 {
+ color: #00acc1 !important; }
+
+.cyan.darken-2 {
+ background-color: #0097a7 !important; }
+
+.cyan-text.text-darken-2 {
+ color: #0097a7 !important; }
+
+.cyan.darken-3 {
+ background-color: #00838f !important; }
+
+.cyan-text.text-darken-3 {
+ color: #00838f !important; }
+
+.cyan.darken-4 {
+ background-color: #006064 !important; }
+
+.cyan-text.text-darken-4 {
+ color: #006064 !important; }
+
+.cyan.accent-1 {
+ background-color: #84ffff !important; }
+
+.cyan-text.text-accent-1 {
+ color: #84ffff !important; }
+
+.cyan.accent-2 {
+ background-color: #18ffff !important; }
+
+.cyan-text.text-accent-2 {
+ color: #18ffff !important; }
+
+.cyan.accent-3 {
+ background-color: #00e5ff !important; }
+
+.cyan-text.text-accent-3 {
+ color: #00e5ff !important; }
+
+.cyan.accent-4 {
+ background-color: #00b8d4 !important; }
+
+.cyan-text.text-accent-4 {
+ color: #00b8d4 !important; }
+
+.teal.lighten-5 {
+ background-color: #e0f2f1 !important; }
+
+.teal-text.text-lighten-5 {
+ color: #e0f2f1 !important; }
+
+.teal.lighten-4 {
+ background-color: #b2dfdb !important; }
+
+.teal-text.text-lighten-4 {
+ color: #b2dfdb !important; }
+
+.teal.lighten-3 {
+ background-color: #80cbc4 !important; }
+
+.teal-text.text-lighten-3 {
+ color: #80cbc4 !important; }
+
+.teal.lighten-2 {
+ background-color: #4db6ac !important; }
+
+.teal-text.text-lighten-2 {
+ color: #4db6ac !important; }
+
+.teal.lighten-1 {
+ background-color: #26a69a !important; }
+
+.teal-text.text-lighten-1 {
+ color: #26a69a !important; }
+
+.teal {
+ background-color: #009688 !important; }
+
+.teal-text {
+ color: #009688 !important; }
+
+.teal.darken-1 {
+ background-color: #00897b !important; }
+
+.teal-text.text-darken-1 {
+ color: #00897b !important; }
+
+.teal.darken-2 {
+ background-color: #00796b !important; }
+
+.teal-text.text-darken-2 {
+ color: #00796b !important; }
+
+.teal.darken-3 {
+ background-color: #00695c !important; }
+
+.teal-text.text-darken-3 {
+ color: #00695c !important; }
+
+.teal.darken-4 {
+ background-color: #004d40 !important; }
+
+.teal-text.text-darken-4 {
+ color: #004d40 !important; }
+
+.teal.accent-1 {
+ background-color: #a7ffeb !important; }
+
+.teal-text.text-accent-1 {
+ color: #a7ffeb !important; }
+
+.teal.accent-2 {
+ background-color: #64ffda !important; }
+
+.teal-text.text-accent-2 {
+ color: #64ffda !important; }
+
+.teal.accent-3 {
+ background-color: #1de9b6 !important; }
+
+.teal-text.text-accent-3 {
+ color: #1de9b6 !important; }
+
+.teal.accent-4 {
+ background-color: #00bfa5 !important; }
+
+.teal-text.text-accent-4 {
+ color: #00bfa5 !important; }
+
+.green.lighten-5 {
+ background-color: #E8F5E9 !important; }
+
+.green-text.text-lighten-5 {
+ color: #E8F5E9 !important; }
+
+.green.lighten-4 {
+ background-color: #C8E6C9 !important; }
+
+.green-text.text-lighten-4 {
+ color: #C8E6C9 !important; }
+
+.green.lighten-3 {
+ background-color: #A5D6A7 !important; }
+
+.green-text.text-lighten-3 {
+ color: #A5D6A7 !important; }
+
+.green.lighten-2 {
+ background-color: #81C784 !important; }
+
+.green-text.text-lighten-2 {
+ color: #81C784 !important; }
+
+.green.lighten-1 {
+ background-color: #66BB6A !important; }
+
+.green-text.text-lighten-1 {
+ color: #66BB6A !important; }
+
+.green {
+ background-color: #4CAF50 !important; }
+
+.green-text {
+ color: #4CAF50 !important; }
+
+.green.darken-1 {
+ background-color: #43A047 !important; }
+
+.green-text.text-darken-1 {
+ color: #43A047 !important; }
+
+.green.darken-2 {
+ background-color: #388E3C !important; }
+
+.green-text.text-darken-2 {
+ color: #388E3C !important; }
+
+.green.darken-3 {
+ background-color: #2E7D32 !important; }
+
+.green-text.text-darken-3 {
+ color: #2E7D32 !important; }
+
+.green.darken-4 {
+ background-color: #1B5E20 !important; }
+
+.green-text.text-darken-4 {
+ color: #1B5E20 !important; }
+
+.green.accent-1 {
+ background-color: #B9F6CA !important; }
+
+.green-text.text-accent-1 {
+ color: #B9F6CA !important; }
+
+.green.accent-2 {
+ background-color: #69F0AE !important; }
+
+.green-text.text-accent-2 {
+ color: #69F0AE !important; }
+
+.green.accent-3 {
+ background-color: #00E676 !important; }
+
+.green-text.text-accent-3 {
+ color: #00E676 !important; }
+
+.green.accent-4 {
+ background-color: #00C853 !important; }
+
+.green-text.text-accent-4 {
+ color: #00C853 !important; }
+
+.light-green.lighten-5 {
+ background-color: #f1f8e9 !important; }
+
+.light-green-text.text-lighten-5 {
+ color: #f1f8e9 !important; }
+
+.light-green.lighten-4 {
+ background-color: #dcedc8 !important; }
+
+.light-green-text.text-lighten-4 {
+ color: #dcedc8 !important; }
+
+.light-green.lighten-3 {
+ background-color: #c5e1a5 !important; }
+
+.light-green-text.text-lighten-3 {
+ color: #c5e1a5 !important; }
+
+.light-green.lighten-2 {
+ background-color: #aed581 !important; }
+
+.light-green-text.text-lighten-2 {
+ color: #aed581 !important; }
+
+.light-green.lighten-1 {
+ background-color: #9ccc65 !important; }
+
+.light-green-text.text-lighten-1 {
+ color: #9ccc65 !important; }
+
+.light-green {
+ background-color: #8bc34a !important; }
+
+.light-green-text {
+ color: #8bc34a !important; }
+
+.light-green.darken-1 {
+ background-color: #7cb342 !important; }
+
+.light-green-text.text-darken-1 {
+ color: #7cb342 !important; }
+
+.light-green.darken-2 {
+ background-color: #689f38 !important; }
+
+.light-green-text.text-darken-2 {
+ color: #689f38 !important; }
+
+.light-green.darken-3 {
+ background-color: #558b2f !important; }
+
+.light-green-text.text-darken-3 {
+ color: #558b2f !important; }
+
+.light-green.darken-4 {
+ background-color: #33691e !important; }
+
+.light-green-text.text-darken-4 {
+ color: #33691e !important; }
+
+.light-green.accent-1 {
+ background-color: #ccff90 !important; }
+
+.light-green-text.text-accent-1 {
+ color: #ccff90 !important; }
+
+.light-green.accent-2 {
+ background-color: #b2ff59 !important; }
+
+.light-green-text.text-accent-2 {
+ color: #b2ff59 !important; }
+
+.light-green.accent-3 {
+ background-color: #76ff03 !important; }
+
+.light-green-text.text-accent-3 {
+ color: #76ff03 !important; }
+
+.light-green.accent-4 {
+ background-color: #64dd17 !important; }
+
+.light-green-text.text-accent-4 {
+ color: #64dd17 !important; }
+
+.lime.lighten-5 {
+ background-color: #f9fbe7 !important; }
+
+.lime-text.text-lighten-5 {
+ color: #f9fbe7 !important; }
+
+.lime.lighten-4 {
+ background-color: #f0f4c3 !important; }
+
+.lime-text.text-lighten-4 {
+ color: #f0f4c3 !important; }
+
+.lime.lighten-3 {
+ background-color: #e6ee9c !important; }
+
+.lime-text.text-lighten-3 {
+ color: #e6ee9c !important; }
+
+.lime.lighten-2 {
+ background-color: #dce775 !important; }
+
+.lime-text.text-lighten-2 {
+ color: #dce775 !important; }
+
+.lime.lighten-1 {
+ background-color: #d4e157 !important; }
+
+.lime-text.text-lighten-1 {
+ color: #d4e157 !important; }
+
+.lime {
+ background-color: #cddc39 !important; }
+
+.lime-text {
+ color: #cddc39 !important; }
+
+.lime.darken-1 {
+ background-color: #c0ca33 !important; }
+
+.lime-text.text-darken-1 {
+ color: #c0ca33 !important; }
+
+.lime.darken-2 {
+ background-color: #afb42b !important; }
+
+.lime-text.text-darken-2 {
+ color: #afb42b !important; }
+
+.lime.darken-3 {
+ background-color: #9e9d24 !important; }
+
+.lime-text.text-darken-3 {
+ color: #9e9d24 !important; }
+
+.lime.darken-4 {
+ background-color: #827717 !important; }
+
+.lime-text.text-darken-4 {
+ color: #827717 !important; }
+
+.lime.accent-1 {
+ background-color: #f4ff81 !important; }
+
+.lime-text.text-accent-1 {
+ color: #f4ff81 !important; }
+
+.lime.accent-2 {
+ background-color: #eeff41 !important; }
+
+.lime-text.text-accent-2 {
+ color: #eeff41 !important; }
+
+.lime.accent-3 {
+ background-color: #c6ff00 !important; }
+
+.lime-text.text-accent-3 {
+ color: #c6ff00 !important; }
+
+.lime.accent-4 {
+ background-color: #aeea00 !important; }
+
+.lime-text.text-accent-4 {
+ color: #aeea00 !important; }
+
+.yellow.lighten-5 {
+ background-color: #fffde7 !important; }
+
+.yellow-text.text-lighten-5 {
+ color: #fffde7 !important; }
+
+.yellow.lighten-4 {
+ background-color: #fff9c4 !important; }
+
+.yellow-text.text-lighten-4 {
+ color: #fff9c4 !important; }
+
+.yellow.lighten-3 {
+ background-color: #fff59d !important; }
+
+.yellow-text.text-lighten-3 {
+ color: #fff59d !important; }
+
+.yellow.lighten-2 {
+ background-color: #fff176 !important; }
+
+.yellow-text.text-lighten-2 {
+ color: #fff176 !important; }
+
+.yellow.lighten-1 {
+ background-color: #ffee58 !important; }
+
+.yellow-text.text-lighten-1 {
+ color: #ffee58 !important; }
+
+.yellow {
+ background-color: #ffeb3b !important; }
+
+.yellow-text {
+ color: #ffeb3b !important; }
+
+.yellow.darken-1 {
+ background-color: #fdd835 !important; }
+
+.yellow-text.text-darken-1 {
+ color: #fdd835 !important; }
+
+.yellow.darken-2 {
+ background-color: #fbc02d !important; }
+
+.yellow-text.text-darken-2 {
+ color: #fbc02d !important; }
+
+.yellow.darken-3 {
+ background-color: #f9a825 !important; }
+
+.yellow-text.text-darken-3 {
+ color: #f9a825 !important; }
+
+.yellow.darken-4 {
+ background-color: #f57f17 !important; }
+
+.yellow-text.text-darken-4 {
+ color: #f57f17 !important; }
+
+.yellow.accent-1 {
+ background-color: #ffff8d !important; }
+
+.yellow-text.text-accent-1 {
+ color: #ffff8d !important; }
+
+.yellow.accent-2 {
+ background-color: #ffff00 !important; }
+
+.yellow-text.text-accent-2 {
+ color: #ffff00 !important; }
+
+.yellow.accent-3 {
+ background-color: #ffea00 !important; }
+
+.yellow-text.text-accent-3 {
+ color: #ffea00 !important; }
+
+.yellow.accent-4 {
+ background-color: #ffd600 !important; }
+
+.yellow-text.text-accent-4 {
+ color: #ffd600 !important; }
+
+.amber.lighten-5 {
+ background-color: #fff8e1 !important; }
+
+.amber-text.text-lighten-5 {
+ color: #fff8e1 !important; }
+
+.amber.lighten-4 {
+ background-color: #ffecb3 !important; }
+
+.amber-text.text-lighten-4 {
+ color: #ffecb3 !important; }
+
+.amber.lighten-3 {
+ background-color: #ffe082 !important; }
+
+.amber-text.text-lighten-3 {
+ color: #ffe082 !important; }
+
+.amber.lighten-2 {
+ background-color: #ffd54f !important; }
+
+.amber-text.text-lighten-2 {
+ color: #ffd54f !important; }
+
+.amber.lighten-1 {
+ background-color: #ffca28 !important; }
+
+.amber-text.text-lighten-1 {
+ color: #ffca28 !important; }
+
+.amber {
+ background-color: #ffc107 !important; }
+
+.amber-text {
+ color: #ffc107 !important; }
+
+.amber.darken-1 {
+ background-color: #ffb300 !important; }
+
+.amber-text.text-darken-1 {
+ color: #ffb300 !important; }
+
+.amber.darken-2 {
+ background-color: #ffa000 !important; }
+
+.amber-text.text-darken-2 {
+ color: #ffa000 !important; }
+
+.amber.darken-3 {
+ background-color: #ff8f00 !important; }
+
+.amber-text.text-darken-3 {
+ color: #ff8f00 !important; }
+
+.amber.darken-4 {
+ background-color: #ff6f00 !important; }
+
+.amber-text.text-darken-4 {
+ color: #ff6f00 !important; }
+
+.amber.accent-1 {
+ background-color: #ffe57f !important; }
+
+.amber-text.text-accent-1 {
+ color: #ffe57f !important; }
+
+.amber.accent-2 {
+ background-color: #ffd740 !important; }
+
+.amber-text.text-accent-2 {
+ color: #ffd740 !important; }
+
+.amber.accent-3 {
+ background-color: #ffc400 !important; }
+
+.amber-text.text-accent-3 {
+ color: #ffc400 !important; }
+
+.amber.accent-4 {
+ background-color: #ffab00 !important; }
+
+.amber-text.text-accent-4 {
+ color: #ffab00 !important; }
+
+.orange.lighten-5 {
+ background-color: #fff3e0 !important; }
+
+.orange-text.text-lighten-5 {
+ color: #fff3e0 !important; }
+
+.orange.lighten-4 {
+ background-color: #ffe0b2 !important; }
+
+.orange-text.text-lighten-4 {
+ color: #ffe0b2 !important; }
+
+.orange.lighten-3 {
+ background-color: #ffcc80 !important; }
+
+.orange-text.text-lighten-3 {
+ color: #ffcc80 !important; }
+
+.orange.lighten-2 {
+ background-color: #ffb74d !important; }
+
+.orange-text.text-lighten-2 {
+ color: #ffb74d !important; }
+
+.orange.lighten-1 {
+ background-color: #ffa726 !important; }
+
+.orange-text.text-lighten-1 {
+ color: #ffa726 !important; }
+
+.orange {
+ background-color: #ff9800 !important; }
+
+.orange-text {
+ color: #ff9800 !important; }
+
+.orange.darken-1 {
+ background-color: #fb8c00 !important; }
+
+.orange-text.text-darken-1 {
+ color: #fb8c00 !important; }
+
+.orange.darken-2 {
+ background-color: #f57c00 !important; }
+
+.orange-text.text-darken-2 {
+ color: #f57c00 !important; }
+
+.orange.darken-3 {
+ background-color: #ef6c00 !important; }
+
+.orange-text.text-darken-3 {
+ color: #ef6c00 !important; }
+
+.orange.darken-4 {
+ background-color: #e65100 !important; }
+
+.orange-text.text-darken-4 {
+ color: #e65100 !important; }
+
+.orange.accent-1 {
+ background-color: #ffd180 !important; }
+
+.orange-text.text-accent-1 {
+ color: #ffd180 !important; }
+
+.orange.accent-2 {
+ background-color: #ffab40 !important; }
+
+.orange-text.text-accent-2 {
+ color: #ffab40 !important; }
+
+.orange.accent-3 {
+ background-color: #ff9100 !important; }
+
+.orange-text.text-accent-3 {
+ color: #ff9100 !important; }
+
+.orange.accent-4 {
+ background-color: #ff6d00 !important; }
+
+.orange-text.text-accent-4 {
+ color: #ff6d00 !important; }
+
+.deep-orange.lighten-5 {
+ background-color: #fbe9e7 !important; }
+
+.deep-orange-text.text-lighten-5 {
+ color: #fbe9e7 !important; }
+
+.deep-orange.lighten-4 {
+ background-color: #ffccbc !important; }
+
+.deep-orange-text.text-lighten-4 {
+ color: #ffccbc !important; }
+
+.deep-orange.lighten-3 {
+ background-color: #ffab91 !important; }
+
+.deep-orange-text.text-lighten-3 {
+ color: #ffab91 !important; }
+
+.deep-orange.lighten-2 {
+ background-color: #ff8a65 !important; }
+
+.deep-orange-text.text-lighten-2 {
+ color: #ff8a65 !important; }
+
+.deep-orange.lighten-1 {
+ background-color: #ff7043 !important; }
+
+.deep-orange-text.text-lighten-1 {
+ color: #ff7043 !important; }
+
+.deep-orange {
+ background-color: #ff5722 !important; }
+
+.deep-orange-text {
+ color: #ff5722 !important; }
+
+.deep-orange.darken-1 {
+ background-color: #f4511e !important; }
+
+.deep-orange-text.text-darken-1 {
+ color: #f4511e !important; }
+
+.deep-orange.darken-2 {
+ background-color: #e64a19 !important; }
+
+.deep-orange-text.text-darken-2 {
+ color: #e64a19 !important; }
+
+.deep-orange.darken-3 {
+ background-color: #d84315 !important; }
+
+.deep-orange-text.text-darken-3 {
+ color: #d84315 !important; }
+
+.deep-orange.darken-4 {
+ background-color: #bf360c !important; }
+
+.deep-orange-text.text-darken-4 {
+ color: #bf360c !important; }
+
+.deep-orange.accent-1 {
+ background-color: #ff9e80 !important; }
+
+.deep-orange-text.text-accent-1 {
+ color: #ff9e80 !important; }
+
+.deep-orange.accent-2 {
+ background-color: #ff6e40 !important; }
+
+.deep-orange-text.text-accent-2 {
+ color: #ff6e40 !important; }
+
+.deep-orange.accent-3 {
+ background-color: #ff3d00 !important; }
+
+.deep-orange-text.text-accent-3 {
+ color: #ff3d00 !important; }
+
+.deep-orange.accent-4 {
+ background-color: #dd2c00 !important; }
+
+.deep-orange-text.text-accent-4 {
+ color: #dd2c00 !important; }
+
+.brown.lighten-5 {
+ background-color: #efebe9 !important; }
+
+.brown-text.text-lighten-5 {
+ color: #efebe9 !important; }
+
+.brown.lighten-4 {
+ background-color: #d7ccc8 !important; }
+
+.brown-text.text-lighten-4 {
+ color: #d7ccc8 !important; }
+
+.brown.lighten-3 {
+ background-color: #bcaaa4 !important; }
+
+.brown-text.text-lighten-3 {
+ color: #bcaaa4 !important; }
+
+.brown.lighten-2 {
+ background-color: #a1887f !important; }
+
+.brown-text.text-lighten-2 {
+ color: #a1887f !important; }
+
+.brown.lighten-1 {
+ background-color: #8d6e63 !important; }
+
+.brown-text.text-lighten-1 {
+ color: #8d6e63 !important; }
+
+.brown {
+ background-color: #795548 !important; }
+
+.brown-text {
+ color: #795548 !important; }
+
+.brown.darken-1 {
+ background-color: #6d4c41 !important; }
+
+.brown-text.text-darken-1 {
+ color: #6d4c41 !important; }
+
+.brown.darken-2 {
+ background-color: #5d4037 !important; }
+
+.brown-text.text-darken-2 {
+ color: #5d4037 !important; }
+
+.brown.darken-3 {
+ background-color: #4e342e !important; }
+
+.brown-text.text-darken-3 {
+ color: #4e342e !important; }
+
+.brown.darken-4 {
+ background-color: #3e2723 !important; }
+
+.brown-text.text-darken-4 {
+ color: #3e2723 !important; }
+
+.blue-grey.lighten-5 {
+ background-color: #eceff1 !important; }
+
+.blue-grey-text.text-lighten-5 {
+ color: #eceff1 !important; }
+
+.blue-grey.lighten-4 {
+ background-color: #cfd8dc !important; }
+
+.blue-grey-text.text-lighten-4 {
+ color: #cfd8dc !important; }
+
+.blue-grey.lighten-3 {
+ background-color: #b0bec5 !important; }
+
+.blue-grey-text.text-lighten-3 {
+ color: #b0bec5 !important; }
+
+.blue-grey.lighten-2 {
+ background-color: #90a4ae !important; }
+
+.blue-grey-text.text-lighten-2 {
+ color: #90a4ae !important; }
+
+.blue-grey.lighten-1 {
+ background-color: #78909c !important; }
+
+.blue-grey-text.text-lighten-1 {
+ color: #78909c !important; }
+
+.blue-grey {
+ background-color: #607d8b !important; }
+
+.blue-grey-text {
+ color: #607d8b !important; }
+
+.blue-grey.darken-1 {
+ background-color: #546e7a !important; }
+
+.blue-grey-text.text-darken-1 {
+ color: #546e7a !important; }
+
+.blue-grey.darken-2 {
+ background-color: #455a64 !important; }
+
+.blue-grey-text.text-darken-2 {
+ color: #455a64 !important; }
+
+.blue-grey.darken-3 {
+ background-color: #37474f !important; }
+
+.blue-grey-text.text-darken-3 {
+ color: #37474f !important; }
+
+.blue-grey.darken-4 {
+ background-color: #263238 !important; }
+
+.blue-grey-text.text-darken-4 {
+ color: #263238 !important; }
+
+.grey.lighten-5 {
+ background-color: #fafafa !important; }
+
+.grey-text.text-lighten-5 {
+ color: #fafafa !important; }
+
+.grey.lighten-4 {
+ background-color: #f5f5f5 !important; }
+
+.grey-text.text-lighten-4 {
+ color: #f5f5f5 !important; }
+
+.grey.lighten-3 {
+ background-color: #eeeeee !important; }
+
+.grey-text.text-lighten-3 {
+ color: #eeeeee !important; }
+
+.grey.lighten-2 {
+ background-color: #e0e0e0 !important; }
+
+.grey-text.text-lighten-2 {
+ color: #e0e0e0 !important; }
+
+.grey.lighten-1 {
+ background-color: #bdbdbd !important; }
+
+.grey-text.text-lighten-1 {
+ color: #bdbdbd !important; }
+
+.grey {
+ background-color: #9e9e9e !important; }
+
+.grey-text {
+ color: #9e9e9e !important; }
+
+.grey.darken-1 {
+ background-color: #757575 !important; }
+
+.grey-text.text-darken-1 {
+ color: #757575 !important; }
+
+.grey.darken-2 {
+ background-color: #616161 !important; }
+
+.grey-text.text-darken-2 {
+ color: #616161 !important; }
+
+.grey.darken-3 {
+ background-color: #424242 !important; }
+
+.grey-text.text-darken-3 {
+ color: #424242 !important; }
+
+.grey.darken-4 {
+ background-color: #212121 !important; }
+
+.grey-text.text-darken-4 {
+ color: #212121 !important; }
+
+.shades.black {
+ background-color: #000000 !important; }
+
+.shades-text.text-black {
+ color: #000000 !important; }
+
+.shades.white {
+ background-color: #FFFFFF !important; }
+
+.shades-text.text-white {
+ color: #FFFFFF !important; }
+
+.shades.transparent {
+ background-color: transparent !important; }
+
+.shades-text.text-transparent {
+ color: transparent !important; }
+
+.black {
+ background-color: #000000 !important; }
+
+.black-text {
+ color: #000000 !important; }
+
+.white {
+ background-color: #FFFFFF !important; }
+
+.white-text {
+ color: #FFFFFF !important; }
+
+.transparent {
+ background-color: transparent !important; }
+
+.transparent-text {
+ color: transparent !important; }
+
+/*** Colors ***/
+/*** Badges ***/
+/*** Buttons ***/
+/*** Cards ***/
+/*** Collapsible ***/
+/*** Dropdown ***/
+/*** Fonts ***/
+/*** Forms ***/
+/*** Global ***/
+/*** Navbar ***/
+/*** SideNav ***/
+/*** Photo Slider ***/
+/*** Tabs ***/
+/*** Tables ***/
+/*** Toasts ***/
+/*** Typography ***/
+/*** Collections ***/
+/* Progress Bar */
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+html {
+ font-family: sans-serif;
+ /* 1 */
+ -ms-text-size-adjust: 100%;
+ /* 2 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */ }
+
+/**
+ * Remove default margin.
+ */
+body {
+ margin: 0; }
+
+/* HTML5 display definitions
+ ========================================================================== */
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block; }
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ /* 1 */
+ vertical-align: baseline;
+ /* 2 */ }
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+audio:not([controls]) {
+ display: none;
+ height: 0; }
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+[hidden],
+template {
+ display: none; }
+
+/* Links
+ ========================================================================== */
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+a {
+ background-color: transparent; }
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+a:active,
+a:hover {
+ outline: 0; }
+
+/* Text-level semantics
+ ========================================================================== */
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+abbr[title] {
+ border-bottom: 1px dotted; }
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+b,
+strong {
+ font-weight: bold; }
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+dfn {
+ font-style: italic; }
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0; }
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+mark {
+ background: #ff0;
+ color: #000; }
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+small {
+ font-size: 80%; }
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline; }
+
+sup {
+ top: -0.5em; }
+
+sub {
+ bottom: -0.25em; }
+
+/* Embedded content
+ ========================================================================== */
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+img {
+ border: 0; }
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+svg:not(:root) {
+ overflow: hidden; }
+
+/* Grouping content
+ ========================================================================== */
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+figure {
+ margin: 1em 40px; }
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0; }
+
+/**
+ * Contain overflow in all browsers.
+ */
+pre {
+ overflow: auto; }
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em; }
+
+/* Forms
+ ========================================================================== */
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit;
+ /* 1 */
+ font: inherit;
+ /* 2 */
+ margin: 0;
+ /* 3 */ }
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+button {
+ overflow: visible; }
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+button,
+select {
+ text-transform: none; }
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+/* 1 */
+html input[type="button"],
+button,
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ /* 2 */
+ cursor: pointer;
+ /* 3 */ }
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+button[disabled],
+html input[disabled] {
+ cursor: default; }
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0; }
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+input {
+ line-height: normal; }
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ /* 1 */
+ padding: 0;
+ /* 2 */ }
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto; }
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+input[type="search"] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+ /* 2 */
+ box-sizing: content-box; }
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none; }
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em; }
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+legend {
+ border: 0;
+ /* 1 */
+ padding: 0;
+ /* 2 */ }
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+textarea {
+ overflow: auto; }
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+optgroup {
+ font-weight: bold; }
+
+/* Tables
+ ========================================================================== */
+/**
+ * Remove most spacing between table cells.
+ */
+table {
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+td,
+th {
+ padding: 0; }
+
+html {
+ box-sizing: border-box; }
+
+*, *:before, *:after {
+ box-sizing: inherit; }
+
+ul {
+ list-style-type: none; }
+
+a {
+ color: #039be5;
+ text-decoration: none;
+ -webkit-tap-highlight-color: transparent; }
+
+.valign-wrapper {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center; }
+ .valign-wrapper .valign {
+ display: block; }
+
+ul {
+ padding: 0; }
+ ul li {
+ list-style-type: none; }
+
+.clearfix {
+ clear: both; }
+
+.z-depth-0 {
+ box-shadow: none !important; }
+
+.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-floating, .dropdown-content, .collapsible, .side-nav {
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); }
+
+.z-depth-1-half, .btn:hover, .btn-large:hover, .btn-floating:hover {
+ box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); }
+
+.z-depth-2 {
+ box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); }
+
+.z-depth-3 {
+ box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); }
+
+.z-depth-4, .modal {
+ box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); }
+
+.z-depth-5 {
+ box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); }
+
+.hoverable:hover {
+ transition: box-shadow .25s;
+ box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); }
+
+.divider {
+ height: 1px;
+ overflow: hidden;
+ background-color: #e0e0e0; }
+
+blockquote {
+ margin: 20px 0;
+ padding-left: 1.5rem;
+ border-left: 5px solid #ee6e73; }
+
+i {
+ line-height: inherit; }
+ i.left {
+ float: left;
+ margin-right: 15px; }
+ i.right {
+ float: right;
+ margin-left: 15px; }
+ i.tiny {
+ font-size: 1rem; }
+ i.small {
+ font-size: 2rem; }
+ i.medium {
+ font-size: 4rem; }
+ i.large {
+ font-size: 6rem; }
+
+img.responsive-img,
+video.responsive-video {
+ max-width: 100%;
+ height: auto; }
+
+.pagination li {
+ float: left;
+ font-size: 1.2rem;
+ padding: 0 10px;
+ line-height: 30px;
+ border-radius: 2px;
+ text-align: center; }
+ .pagination li a {
+ color: #444; }
+ .pagination li.active a {
+ color: #fff; }
+ .pagination li.active {
+ background-color: #ee6e73; }
+ .pagination li.disabled a {
+ cursor: default;
+ color: #999; }
+ .pagination li i {
+ font-size: 2rem; }
+.pagination li.pages ul li {
+ display: inline-block;
+ float: none; }
+
+@media only screen and (max-width: 992px) {
+ .pagination {
+ width: 100%; }
+ .pagination li.prev,
+ .pagination li.next {
+ width: 10%; }
+ .pagination li.pages {
+ width: 80%;
+ overflow: hidden;
+ white-space: nowrap; } }
+.parallax-container {
+ position: relative;
+ overflow: hidden;
+ height: 500px; }
+
+.parallax {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: -1; }
+ .parallax img {
+ display: none;
+ position: absolute;
+ left: 50%;
+ bottom: 0;
+ min-width: 100%;
+ min-height: 100%;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ transform: translateX(-50%); }
+
+.pin-top, .pin-bottom {
+ position: relative; }
+
+.pinned {
+ position: fixed !important; }
+
+/*********************
+ Transition Classes
+**********************/
+ul.staggered-list li {
+ opacity: 0; }
+
+.fade-in {
+ opacity: 0;
+ transform-origin: 0 50%; }
+
+/*********************
+ Media Query Classes
+**********************/
+@media only screen and (max-width: 600px) {
+ .hide-on-small-only, .hide-on-small-and-down {
+ display: none !important; } }
+
+@media only screen and (max-width: 992px) {
+ .hide-on-med-and-down {
+ display: none !important; } }
+
+@media only screen and (min-width: 601px) {
+ .hide-on-med-and-up {
+ display: none !important; } }
+
+@media only screen and (min-width: 600px) and (max-width: 992px) {
+ .hide-on-med-only {
+ display: none !important; } }
+
+@media only screen and (min-width: 993px) {
+ .hide-on-large-only {
+ display: none !important; } }
+
+@media only screen and (min-width: 993px) {
+ .show-on-large {
+ display: initial !important; } }
+
+@media only screen and (min-width: 600px) and (max-width: 992px) {
+ .show-on-medium {
+ display: initial !important; } }
+
+@media only screen and (max-width: 600px) {
+ .show-on-small {
+ display: initial !important; } }
+
+@media only screen and (min-width: 601px) {
+ .show-on-medium-and-up {
+ display: initial !important; } }
+
+@media only screen and (max-width: 992px) {
+ .show-on-medium-and-down {
+ display: initial !important; } }
+
+@media only screen and (max-width: 600px) {
+ .center-on-small-only {
+ text-align: center; } }
+
+footer.page-footer {
+ margin-top: 20px;
+ padding-top: 20px;
+ background-color: #ee6e73; }
+ footer.page-footer .footer-copyright {
+ overflow: hidden;
+ height: 50px;
+ line-height: 50px;
+ color: rgba(255, 255, 255, 0.8);
+ background-color: rgba(51, 51, 51, 0.08); }
+
+table, th, td {
+ border: none; }
+
+table {
+ width: 100%;
+ display: table; }
+ table.bordered > thead > tr, table.bordered > tbody > tr {
+ border-bottom: 1px solid #d0d0d0; }
+ table.striped > tbody > tr:nth-child(odd) {
+ background-color: #f2f2f2; }
+ table.striped > tbody > tr > td {
+ border-radius: 0px; }
+ table.hoverable > tbody > tr {
+ -webkit-transition: background-color 0.25s ease;
+ -moz-transition: background-color 0.25s ease;
+ -o-transition: background-color 0.25s ease;
+ -ms-transition: background-color 0.25s ease;
+ transition: background-color 0.25s ease; }
+ table.hoverable > tbody > tr:hover {
+ background-color: #f2f2f2; }
+ table.centered thead tr th, table.centered tbody tr td {
+ text-align: center; }
+
+thead {
+ border-bottom: 1px solid #d0d0d0; }
+
+td, th {
+ padding: 15px 5px;
+ display: table-cell;
+ text-align: left;
+ vertical-align: middle;
+ border-radius: 2px; }
+
+@media only screen and (max-width: 992px) {
+ table.responsive-table {
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ display: block;
+ position: relative;
+ /* sort out borders */ }
+ table.responsive-table th,
+ table.responsive-table td {
+ margin: 0;
+ vertical-align: top; }
+ table.responsive-table th {
+ text-align: left; }
+ table.responsive-table thead {
+ display: block;
+ float: left; }
+ table.responsive-table thead tr {
+ display: block;
+ padding: 0 10px 0 0; }
+ table.responsive-table thead tr th::before {
+ content: "\00a0"; }
+ table.responsive-table tbody {
+ display: block;
+ width: auto;
+ position: relative;
+ overflow-x: auto;
+ white-space: nowrap; }
+ table.responsive-table tbody tr {
+ display: inline-block;
+ vertical-align: top; }
+ table.responsive-table th {
+ display: block;
+ text-align: right; }
+ table.responsive-table td {
+ display: block;
+ min-height: 1.25em;
+ text-align: left; }
+ table.responsive-table tr {
+ padding: 0 10px; }
+ table.responsive-table thead {
+ border: 0;
+ border-right: 1px solid #d0d0d0; }
+ table.responsive-table.bordered th {
+ border-bottom: 0;
+ border-left: 0; }
+ table.responsive-table.bordered td {
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0; }
+ table.responsive-table.bordered tr {
+ border: 0; }
+ table.responsive-table.bordered tbody tr {
+ border-right: 1px solid #d0d0d0; } }
+.collection {
+ margin: 0.5rem 0 1rem 0;
+ border: 1px solid #e0e0e0;
+ border-radius: 2px;
+ overflow: hidden;
+ position: relative; }
+ .collection .collection-item {
+ background-color: #fff;
+ line-height: 1.5rem;
+ padding: 10px 20px;
+ margin: 0;
+ border-bottom: 1px solid #e0e0e0; }
+ .collection .collection-item.avatar {
+ min-height: 84px;
+ padding-left: 72px;
+ position: relative; }
+ .collection .collection-item.avatar .circle {
+ position: absolute;
+ width: 42px;
+ height: 42px;
+ overflow: hidden;
+ left: 15px;
+ display: inline-block;
+ vertical-align: middle; }
+ .collection .collection-item.avatar i.circle {
+ font-size: 18px;
+ line-height: 42px;
+ color: #fff;
+ background-color: #999;
+ text-align: center; }
+ .collection .collection-item.avatar .title {
+ font-size: 16px; }
+ .collection .collection-item.avatar p {
+ margin: 0; }
+ .collection .collection-item.avatar .secondary-content {
+ position: absolute;
+ top: 16px;
+ right: 16px; }
+ .collection .collection-item:last-child {
+ border-bottom: none; }
+ .collection .collection-item.active {
+ background-color: #26a69a;
+ color: #eafaf9; }
+ .collection a.collection-item {
+ display: block;
+ -webkit-transition: 0.25s;
+ -moz-transition: 0.25s;
+ -o-transition: 0.25s;
+ -ms-transition: 0.25s;
+ transition: 0.25s;
+ color: #26a69a; }
+ .collection a.collection-item:not(.active):hover {
+ background-color: #ddd; }
+ .collection.with-header .collection-header {
+ background-color: #fff;
+ border-bottom: 1px solid #e0e0e0;
+ padding: 10px 20px; }
+ .collection.with-header .collection-item {
+ padding-left: 30px; }
+ .collection.with-header .collection-item.avatar {
+ padding-left: 72px; }
+
+.secondary-content {
+ float: right;
+ color: #26a69a; }
+
+span.badge {
+ min-width: 3rem;
+ padding: 0 6px;
+ text-align: center;
+ font-size: 1rem;
+ line-height: inherit;
+ color: #757575;
+ position: absolute;
+ right: 15px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box; }
+ span.badge.new {
+ font-weight: 300;
+ font-size: 0.8rem;
+ color: #fff;
+ background-color: #26a69a;
+ border-radius: 2px; }
+ span.badge.new:after {
+ content: " new"; }
+
+.video-container {
+ position: relative;
+ padding-bottom: 56.25%;
+ padding-top: 30px;
+ height: 0;
+ overflow: hidden; }
+ .video-container.no-controls {
+ padding-top: 0; }
+ .video-container iframe, .video-container object, .video-container embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%; }
+
+.progress {
+ position: relative;
+ height: 4px;
+ display: block;
+ width: 100%;
+ background-color: #acece6;
+ border-radius: 2px;
+ margin: 0.5rem 0 1rem 0;
+ overflow: hidden; }
+ .progress .determinate {
+ position: absolute;
+ background-color: inherit;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ background-color: #26a69a;
+ -webkit-transition: width 0.3s linear;
+ -moz-transition: width 0.3s linear;
+ -o-transition: width 0.3s linear;
+ -ms-transition: width 0.3s linear;
+ transition: width 0.3s linear; }
+ .progress .indeterminate {
+ background-color: #26a69a; }
+ .progress .indeterminate:before {
+ content: '';
+ position: absolute;
+ background-color: inherit;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ will-change: left, right;
+ -webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
+ -moz-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
+ -ms-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
+ -o-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
+ animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; }
+ .progress .indeterminate:after {
+ content: '';
+ position: absolute;
+ background-color: inherit;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ will-change: left, right;
+ -webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
+ -moz-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
+ -ms-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
+ -o-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
+ animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
+ -webkit-animation-delay: 1.15s;
+ -moz-animation-delay: 1.15s;
+ -ms-animation-delay: 1.15s;
+ -o-animation-delay: 1.15s;
+ animation-delay: 1.15s; }
+
+@-webkit-keyframes indeterminate {
+ 0% {
+ left: -35%;
+ right: 100%; }
+ 60% {
+ left: 100%;
+ right: -90%; }
+ 100% {
+ left: 100%;
+ right: -90%; } }
+@-moz-keyframes indeterminate {
+ 0% {
+ left: -35%;
+ right: 100%; }
+ 60% {
+ left: 100%;
+ right: -90%; }
+ 100% {
+ left: 100%;
+ right: -90%; } }
+@keyframes indeterminate {
+ 0% {
+ left: -35%;
+ right: 100%; }
+ 60% {
+ left: 100%;
+ right: -90%; }
+ 100% {
+ left: 100%;
+ right: -90%; } }
+@-webkit-keyframes indeterminate-short {
+ 0% {
+ left: -200%;
+ right: 100%; }
+ 60% {
+ left: 107%;
+ right: -8%; }
+ 100% {
+ left: 107%;
+ right: -8%; } }
+@-moz-keyframes indeterminate-short {
+ 0% {
+ left: -200%;
+ right: 100%; }
+ 60% {
+ left: 107%;
+ right: -8%; }
+ 100% {
+ left: 107%;
+ right: -8%; } }
+@keyframes indeterminate-short {
+ 0% {
+ left: -200%;
+ right: 100%; }
+ 60% {
+ left: 107%;
+ right: -8%; }
+ 100% {
+ left: 107%;
+ right: -8%; } }
+/*******************
+ Utility Classes
+*******************/
+.hide {
+ display: none !important; }
+
+.left-align {
+ text-align: left; }
+
+.right-align {
+ text-align: right; }
+
+.center, .center-align {
+ text-align: center; }
+
+.left {
+ float: left !important; }
+
+.right {
+ float: right !important; }
+
+.no-select, input[type=range], input[type=range] + .thumb {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+
+.circle {
+ border-radius: 50%; }
+
+.center-block {
+ display: block;
+ margin-left: auto;
+ margin-right: auto; }
+
+.truncate {
+ display: block;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis; }
+
+.no-padding {
+ padding: 0 !important; }
+
+@font-face {
+ font-family: "Material-Design-Icons";
+ src: url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype"), url("../font/material-design-icons/Material-Design-Icons.woff2") format("woff2"), url("../font/material-design-icons/Material-Design-Icons.woff") format("woff"), url("../font/material-design-icons/Material-Design-Icons.ttf") format("truetype"), url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg");
+ font-weight: normal;
+ font-style: normal; }
+[class^="mdi-"], [class*="mdi-"] {
+ speak: none;
+ display: inline-block;
+ font-family: "Material-Design-Icons";
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-rendering: auto;
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ transform: translate(0, 0); }
+ [class^="mdi-"]:before, [class*="mdi-"]:before {
+ display: inline-block;
+ speak: none;
+ text-decoration: inherit; }
+ [class^="mdi-"].pull-left, [class*="mdi-"].pull-left {
+ margin-right: .3em; }
+ [class^="mdi-"].pull-right, [class*="mdi-"].pull-right {
+ margin-left: .3em; }
+ [class^="mdi-"].mdi-lg:before, [class^="mdi-"].mdi-lg:after, [class*="mdi-"].mdi-lg:before, [class*="mdi-"].mdi-lg:after {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%; }
+ [class^="mdi-"].mdi-2x:before, [class^="mdi-"].mdi-2x:after, [class*="mdi-"].mdi-2x:before, [class*="mdi-"].mdi-2x:after {
+ font-size: 2em; }
+ [class^="mdi-"].mdi-3x:before, [class^="mdi-"].mdi-3x:after, [class*="mdi-"].mdi-3x:before, [class*="mdi-"].mdi-3x:after {
+ font-size: 3em; }
+ [class^="mdi-"].mdi-4x:before, [class^="mdi-"].mdi-4x:after, [class*="mdi-"].mdi-4x:before, [class*="mdi-"].mdi-4x:after {
+ font-size: 4em; }
+ [class^="mdi-"].mdi-5x:before, [class^="mdi-"].mdi-5x:after, [class*="mdi-"].mdi-5x:before, [class*="mdi-"].mdi-5x:after {
+ font-size: 5em; }
+
+[class^="mdi-device-signal-cellular-"]:after,
+[class^="mdi-device-battery-"]:after,
+[class^="mdi-device-battery-charging-"]:after,
+[class^="mdi-device-signal-cellular-connected-no-internet-"]:after,
+[class^="mdi-device-signal-wifi-"]:after,
+[class^="mdi-device-signal-wifi-statusbar-not-connected"]:after,
+.mdi-device-network-wifi:after {
+ opacity: .3;
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 1;
+ display: inline-block;
+ speak: none;
+ text-decoration: inherit; }
+
+[class^="mdi-device-signal-cellular-"]:after {
+ content: "\e758"; }
+
+[class^="mdi-device-battery-"]:after {
+ content: "\e735"; }
+
+[class^="mdi-device-battery-charging-"]:after {
+ content: "\e733"; }
+
+[class^="mdi-device-signal-cellular-connected-no-internet-"]:after {
+ content: "\e75d"; }
+
+[class^="mdi-device-signal-wifi-"]:after, .mdi-device-network-wifi:after {
+ content: "\e765"; }
+
+[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after {
+ content: "\e8f7"; }
+
+.mdi-device-signal-cellular-off:after, .mdi-device-signal-cellular-null:after, .mdi-device-signal-cellular-no-sim:after, .mdi-device-signal-wifi-off:after, .mdi-device-signal-wifi-4-bar:after, .mdi-device-signal-cellular-4-bar:after, .mdi-device-battery-alert:after, .mdi-device-signal-cellular-connected-no-internet-4-bar:after, .mdi-device-battery-std:after, .mdi-device-battery-full .mdi-device-battery-unknown:after {
+ content: ""; }
+
+.mdi-fw {
+ width: 1.28571429em;
+ text-align: center; }
+
+.mdi-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none; }
+
+.mdi-ul > li {
+ position: relative; }
+
+.mdi-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center; }
+
+.mdi-li.mdi-lg {
+ left: -1.85714286em; }
+
+.mdi-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: .1em; }
+
+.mdi-spin {
+ -webkit-animation: mdi-spin 2s infinite linear;
+ animation: mdi-spin 2s infinite linear;
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ transform-origin: 50% 50%; }
+
+.mdi-pulse {
+ -webkit-animation: mdi-spin 1s steps(8) infinite;
+ animation: mdi-spin 1s steps(8) infinite;
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ transform-origin: 50% 50%; }
+
+@-webkit-keyframes mdi-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg); } }
+@keyframes mdi-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg); } }
+.mdi-rotate-90 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg); }
+
+.mdi-rotate-180 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg); }
+
+.mdi-rotate-270 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg); }
+
+.mdi-flip-horizontal {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1); }
+
+.mdi-flip-vertical {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1); }
+
+:root .mdi-rotate-90,
+:root .mdi-rotate-180,
+:root .mdi-rotate-270,
+:root .mdi-flip-horizontal,
+:root .mdi-flip-vertical {
+ filter: none; }
+
+.mdi-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle; }
+
+.mdi-stack-1x,
+.mdi-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center; }
+
+.mdi-stack-1x {
+ line-height: inherit; }
+
+.mdi-stack-2x {
+ font-size: 2em; }
+
+.mdi-inverse {
+ color: #ffffff; }
+
+/* Start Icons */
+.mdi-action-3d-rotation:before {
+ content: "\e600"; }
+
+.mdi-action-accessibility:before {
+ content: "\e601"; }
+
+.mdi-action-account-balance-wallet:before {
+ content: "\e602"; }
+
+.mdi-action-account-balance:before {
+ content: "\e603"; }
+
+.mdi-action-account-box:before {
+ content: "\e604"; }
+
+.mdi-action-account-child:before {
+ content: "\e605"; }
+
+.mdi-action-account-circle:before {
+ content: "\e606"; }
+
+.mdi-action-add-shopping-cart:before {
+ content: "\e607"; }
+
+.mdi-action-alarm-add:before {
+ content: "\e608"; }
+
+.mdi-action-alarm-off:before {
+ content: "\e609"; }
+
+.mdi-action-alarm-on:before {
+ content: "\e60a"; }
+
+.mdi-action-alarm:before {
+ content: "\e60b"; }
+
+.mdi-action-android:before {
+ content: "\e60c"; }
+
+.mdi-action-announcement:before {
+ content: "\e60d"; }
+
+.mdi-action-aspect-ratio:before {
+ content: "\e60e"; }
+
+.mdi-action-assessment:before {
+ content: "\e60f"; }
+
+.mdi-action-assignment-ind:before {
+ content: "\e610"; }
+
+.mdi-action-assignment-late:before {
+ content: "\e611"; }
+
+.mdi-action-assignment-return:before {
+ content: "\e612"; }
+
+.mdi-action-assignment-returned:before {
+ content: "\e613"; }
+
+.mdi-action-assignment-turned-in:before {
+ content: "\e614"; }
+
+.mdi-action-assignment:before {
+ content: "\e615"; }
+
+.mdi-action-autorenew:before {
+ content: "\e616"; }
+
+.mdi-action-backup:before {
+ content: "\e617"; }
+
+.mdi-action-book:before {
+ content: "\e618"; }
+
+.mdi-action-bookmark-outline:before {
+ content: "\e619"; }
+
+.mdi-action-bookmark:before {
+ content: "\e61a"; }
+
+.mdi-action-bug-report:before {
+ content: "\e61b"; }
+
+.mdi-action-cached:before {
+ content: "\e61c"; }
+
+.mdi-action-check-circle:before {
+ content: "\e61d"; }
+
+.mdi-action-class:before {
+ content: "\e61e"; }
+
+.mdi-action-credit-card:before {
+ content: "\e61f"; }
+
+.mdi-action-dashboard:before {
+ content: "\e620"; }
+
+.mdi-action-delete:before {
+ content: "\e621"; }
+
+.mdi-action-description:before {
+ content: "\e622"; }
+
+.mdi-action-dns:before {
+ content: "\e623"; }
+
+.mdi-action-done-all:before {
+ content: "\e624"; }
+
+.mdi-action-done:before {
+ content: "\e625"; }
+
+.mdi-action-event:before {
+ content: "\e626"; }
+
+.mdi-action-exit-to-app:before {
+ content: "\e627"; }
+
+.mdi-action-explore:before {
+ content: "\e628"; }
+
+.mdi-action-extension:before {
+ content: "\e629"; }
+
+.mdi-action-face-unlock:before {
+ content: "\e62a"; }
+
+.mdi-action-favorite-outline:before {
+ content: "\e62b"; }
+
+.mdi-action-favorite:before {
+ content: "\e62c"; }
+
+.mdi-action-find-in-page:before {
+ content: "\e62d"; }
+
+.mdi-action-find-replace:before {
+ content: "\e62e"; }
+
+.mdi-action-flip-to-back:before {
+ content: "\e62f"; }
+
+.mdi-action-flip-to-front:before {
+ content: "\e630"; }
+
+.mdi-action-get-app:before {
+ content: "\e631"; }
+
+.mdi-action-grade:before {
+ content: "\e632"; }
+
+.mdi-action-group-work:before {
+ content: "\e633"; }
+
+.mdi-action-help:before {
+ content: "\e634"; }
+
+.mdi-action-highlight-remove:before {
+ content: "\e635"; }
+
+.mdi-action-history:before {
+ content: "\e636"; }
+
+.mdi-action-home:before {
+ content: "\e637"; }
+
+.mdi-action-https:before {
+ content: "\e638"; }
+
+.mdi-action-info-outline:before {
+ content: "\e639"; }
+
+.mdi-action-info:before {
+ content: "\e63a"; }
+
+.mdi-action-input:before {
+ content: "\e63b"; }
+
+.mdi-action-invert-colors:before {
+ content: "\e63c"; }
+
+.mdi-action-label-outline:before {
+ content: "\e63d"; }
+
+.mdi-action-label:before {
+ content: "\e63e"; }
+
+.mdi-action-language:before {
+ content: "\e63f"; }
+
+.mdi-action-launch:before {
+ content: "\e640"; }
+
+.mdi-action-list:before {
+ content: "\e641"; }
+
+.mdi-action-lock-open:before {
+ content: "\e642"; }
+
+.mdi-action-lock-outline:before {
+ content: "\e643"; }
+
+.mdi-action-lock:before {
+ content: "\e644"; }
+
+.mdi-action-loyalty:before {
+ content: "\e645"; }
+
+.mdi-action-markunread-mailbox:before {
+ content: "\e646"; }
+
+.mdi-action-note-add:before {
+ content: "\e647"; }
+
+.mdi-action-open-in-browser:before {
+ content: "\e648"; }
+
+.mdi-action-open-in-new:before {
+ content: "\e649"; }
+
+.mdi-action-open-with:before {
+ content: "\e64a"; }
+
+.mdi-action-pageview:before {
+ content: "\e64b"; }
+
+.mdi-action-payment:before {
+ content: "\e64c"; }
+
+.mdi-action-perm-camera-mic:before {
+ content: "\e64d"; }
+
+.mdi-action-perm-contact-cal:before {
+ content: "\e64e"; }
+
+.mdi-action-perm-data-setting:before {
+ content: "\e64f"; }
+
+.mdi-action-perm-device-info:before {
+ content: "\e650"; }
+
+.mdi-action-perm-identity:before {
+ content: "\e651"; }
+
+.mdi-action-perm-media:before {
+ content: "\e652"; }
+
+.mdi-action-perm-phone-msg:before {
+ content: "\e653"; }
+
+.mdi-action-perm-scan-wifi:before {
+ content: "\e654"; }
+
+.mdi-action-picture-in-picture:before {
+ content: "\e655"; }
+
+.mdi-action-polymer:before {
+ content: "\e656"; }
+
+.mdi-action-print:before {
+ content: "\e657"; }
+
+.mdi-action-query-builder:before {
+ content: "\e658"; }
+
+.mdi-action-question-answer:before {
+ content: "\e659"; }
+
+.mdi-action-receipt:before {
+ content: "\e65a"; }
+
+.mdi-action-redeem:before {
+ content: "\e65b"; }
+
+.mdi-action-reorder:before {
+ content: "\e65c"; }
+
+.mdi-action-report-problem:before {
+ content: "\e65d"; }
+
+.mdi-action-restore:before {
+ content: "\e65e"; }
+
+.mdi-action-room:before {
+ content: "\e65f"; }
+
+.mdi-action-schedule:before {
+ content: "\e660"; }
+
+.mdi-action-search:before {
+ content: "\e661"; }
+
+.mdi-action-settings-applications:before {
+ content: "\e662"; }
+
+.mdi-action-settings-backup-restore:before {
+ content: "\e663"; }
+
+.mdi-action-settings-bluetooth:before {
+ content: "\e664"; }
+
+.mdi-action-settings-cell:before {
+ content: "\e665"; }
+
+.mdi-action-settings-display:before {
+ content: "\e666"; }
+
+.mdi-action-settings-ethernet:before {
+ content: "\e667"; }
+
+.mdi-action-settings-input-antenna:before {
+ content: "\e668"; }
+
+.mdi-action-settings-input-component:before {
+ content: "\e669"; }
+
+.mdi-action-settings-input-composite:before {
+ content: "\e66a"; }
+
+.mdi-action-settings-input-hdmi:before {
+ content: "\e66b"; }
+
+.mdi-action-settings-input-svideo:before {
+ content: "\e66c"; }
+
+.mdi-action-settings-overscan:before {
+ content: "\e66d"; }
+
+.mdi-action-settings-phone:before {
+ content: "\e66e"; }
+
+.mdi-action-settings-power:before {
+ content: "\e66f"; }
+
+.mdi-action-settings-remote:before {
+ content: "\e670"; }
+
+.mdi-action-settings-voice:before {
+ content: "\e671"; }
+
+.mdi-action-settings:before {
+ content: "\e672"; }
+
+.mdi-action-shop-two:before {
+ content: "\e673"; }
+
+.mdi-action-shop:before {
+ content: "\e674"; }
+
+.mdi-action-shopping-basket:before {
+ content: "\e675"; }
+
+.mdi-action-shopping-cart:before {
+ content: "\e676"; }
+
+.mdi-action-speaker-notes:before {
+ content: "\e677"; }
+
+.mdi-action-spellcheck:before {
+ content: "\e678"; }
+
+.mdi-action-star-rate:before {
+ content: "\e679"; }
+
+.mdi-action-stars:before {
+ content: "\e67a"; }
+
+.mdi-action-store:before {
+ content: "\e67b"; }
+
+.mdi-action-subject:before {
+ content: "\e67c"; }
+
+.mdi-action-supervisor-account:before {
+ content: "\e67d"; }
+
+.mdi-action-swap-horiz:before {
+ content: "\e67e"; }
+
+.mdi-action-swap-vert-circle:before {
+ content: "\e67f"; }
+
+.mdi-action-swap-vert:before {
+ content: "\e680"; }
+
+.mdi-action-system-update-tv:before {
+ content: "\e681"; }
+
+.mdi-action-tab-unselected:before {
+ content: "\e682"; }
+
+.mdi-action-tab:before {
+ content: "\e683"; }
+
+.mdi-action-theaters:before {
+ content: "\e684"; }
+
+.mdi-action-thumb-down:before {
+ content: "\e685"; }
+
+.mdi-action-thumb-up:before {
+ content: "\e686"; }
+
+.mdi-action-thumbs-up-down:before {
+ content: "\e687"; }
+
+.mdi-action-toc:before {
+ content: "\e688"; }
+
+.mdi-action-today:before {
+ content: "\e689"; }
+
+.mdi-action-track-changes:before {
+ content: "\e68a"; }
+
+.mdi-action-translate:before {
+ content: "\e68b"; }
+
+.mdi-action-trending-down:before {
+ content: "\e68c"; }
+
+.mdi-action-trending-neutral:before {
+ content: "\e68d"; }
+
+.mdi-action-trending-up:before {
+ content: "\e68e"; }
+
+.mdi-action-turned-in-not:before {
+ content: "\e68f"; }
+
+.mdi-action-turned-in:before {
+ content: "\e690"; }
+
+.mdi-action-verified-user:before {
+ content: "\e691"; }
+
+.mdi-action-view-agenda:before {
+ content: "\e692"; }
+
+.mdi-action-view-array:before {
+ content: "\e693"; }
+
+.mdi-action-view-carousel:before {
+ content: "\e694"; }
+
+.mdi-action-view-column:before {
+ content: "\e695"; }
+
+.mdi-action-view-day:before {
+ content: "\e696"; }
+
+.mdi-action-view-headline:before {
+ content: "\e697"; }
+
+.mdi-action-view-list:before {
+ content: "\e698"; }
+
+.mdi-action-view-module:before {
+ content: "\e699"; }
+
+.mdi-action-view-quilt:before {
+ content: "\e69a"; }
+
+.mdi-action-view-stream:before {
+ content: "\e69b"; }
+
+.mdi-action-view-week:before {
+ content: "\e69c"; }
+
+.mdi-action-visibility-off:before {
+ content: "\e69d"; }
+
+.mdi-action-visibility:before {
+ content: "\e69e"; }
+
+.mdi-action-wallet-giftcard:before {
+ content: "\e69f"; }
+
+.mdi-action-wallet-membership:before {
+ content: "\e6a0"; }
+
+.mdi-action-wallet-travel:before {
+ content: "\e6a1"; }
+
+.mdi-action-work:before {
+ content: "\e6a2"; }
+
+.mdi-alert-error:before {
+ content: "\e6a3"; }
+
+.mdi-alert-warning:before {
+ content: "\e6a4"; }
+
+.mdi-av-album:before {
+ content: "\e6a5"; }
+
+.mdi-av-closed-caption:before {
+ content: "\e6a6"; }
+
+.mdi-av-equalizer:before {
+ content: "\e6a7"; }
+
+.mdi-av-explicit:before {
+ content: "\e6a8"; }
+
+.mdi-av-fast-forward:before {
+ content: "\e6a9"; }
+
+.mdi-av-fast-rewind:before {
+ content: "\e6aa"; }
+
+.mdi-av-games:before {
+ content: "\e6ab"; }
+
+.mdi-av-hearing:before {
+ content: "\e6ac"; }
+
+.mdi-av-high-quality:before {
+ content: "\e6ad"; }
+
+.mdi-av-loop:before {
+ content: "\e6ae"; }
+
+.mdi-av-mic-none:before {
+ content: "\e6af"; }
+
+.mdi-av-mic-off:before {
+ content: "\e6b0"; }
+
+.mdi-av-mic:before {
+ content: "\e6b1"; }
+
+.mdi-av-movie:before {
+ content: "\e6b2"; }
+
+.mdi-av-my-library-add:before {
+ content: "\e6b3"; }
+
+.mdi-av-my-library-books:before {
+ content: "\e6b4"; }
+
+.mdi-av-my-library-music:before {
+ content: "\e6b5"; }
+
+.mdi-av-new-releases:before {
+ content: "\e6b6"; }
+
+.mdi-av-not-interested:before {
+ content: "\e6b7"; }
+
+.mdi-av-pause-circle-fill:before {
+ content: "\e6b8"; }
+
+.mdi-av-pause-circle-outline:before {
+ content: "\e6b9"; }
+
+.mdi-av-pause:before {
+ content: "\e6ba"; }
+
+.mdi-av-play-arrow:before {
+ content: "\e6bb"; }
+
+.mdi-av-play-circle-fill:before {
+ content: "\e6bc"; }
+
+.mdi-av-play-circle-outline:before {
+ content: "\e6bd"; }
+
+.mdi-av-play-shopping-bag:before {
+ content: "\e6be"; }
+
+.mdi-av-playlist-add:before {
+ content: "\e6bf"; }
+
+.mdi-av-queue-music:before {
+ content: "\e6c0"; }
+
+.mdi-av-queue:before {
+ content: "\e6c1"; }
+
+.mdi-av-radio:before {
+ content: "\e6c2"; }
+
+.mdi-av-recent-actors:before {
+ content: "\e6c3"; }
+
+.mdi-av-repeat-one:before {
+ content: "\e6c4"; }
+
+.mdi-av-repeat:before {
+ content: "\e6c5"; }
+
+.mdi-av-replay:before {
+ content: "\e6c6"; }
+
+.mdi-av-shuffle:before {
+ content: "\e6c7"; }
+
+.mdi-av-skip-next:before {
+ content: "\e6c8"; }
+
+.mdi-av-skip-previous:before {
+ content: "\e6c9"; }
+
+.mdi-av-snooze:before {
+ content: "\e6ca"; }
+
+.mdi-av-stop:before {
+ content: "\e6cb"; }
+
+.mdi-av-subtitles:before {
+ content: "\e6cc"; }
+
+.mdi-av-surround-sound:before {
+ content: "\e6cd"; }
+
+.mdi-av-timer:before {
+ content: "\e6ce"; }
+
+.mdi-av-video-collection:before {
+ content: "\e6cf"; }
+
+.mdi-av-videocam-off:before {
+ content: "\e6d0"; }
+
+.mdi-av-videocam:before {
+ content: "\e6d1"; }
+
+.mdi-av-volume-down:before {
+ content: "\e6d2"; }
+
+.mdi-av-volume-mute:before {
+ content: "\e6d3"; }
+
+.mdi-av-volume-off:before {
+ content: "\e6d4"; }
+
+.mdi-av-volume-up:before {
+ content: "\e6d5"; }
+
+.mdi-av-web:before {
+ content: "\e6d6"; }
+
+.mdi-communication-business:before {
+ content: "\e6d7"; }
+
+.mdi-communication-call-end:before {
+ content: "\e6d8"; }
+
+.mdi-communication-call-made:before {
+ content: "\e6d9"; }
+
+.mdi-communication-call-merge:before {
+ content: "\e6da"; }
+
+.mdi-communication-call-missed:before {
+ content: "\e6db"; }
+
+.mdi-communication-call-received:before {
+ content: "\e6dc"; }
+
+.mdi-communication-call-split:before {
+ content: "\e6dd"; }
+
+.mdi-communication-call:before {
+ content: "\e6de"; }
+
+.mdi-communication-chat:before {
+ content: "\e6df"; }
+
+.mdi-communication-clear-all:before {
+ content: "\e6e0"; }
+
+.mdi-communication-comment:before {
+ content: "\e6e1"; }
+
+.mdi-communication-contacts:before {
+ content: "\e6e2"; }
+
+.mdi-communication-dialer-sip:before {
+ content: "\e6e3"; }
+
+.mdi-communication-dialpad:before {
+ content: "\e6e4"; }
+
+.mdi-communication-dnd-on:before {
+ content: "\e6e5"; }
+
+.mdi-communication-email:before {
+ content: "\e6e6"; }
+
+.mdi-communication-forum:before {
+ content: "\e6e7"; }
+
+.mdi-communication-import-export:before {
+ content: "\e6e8"; }
+
+.mdi-communication-invert-colors-off:before {
+ content: "\e6e9"; }
+
+.mdi-communication-invert-colors-on:before {
+ content: "\e6ea"; }
+
+.mdi-communication-live-help:before {
+ content: "\e6eb"; }
+
+.mdi-communication-location-off:before {
+ content: "\e6ec"; }
+
+.mdi-communication-location-on:before {
+ content: "\e6ed"; }
+
+.mdi-communication-message:before {
+ content: "\e6ee"; }
+
+.mdi-communication-messenger:before {
+ content: "\e6ef"; }
+
+.mdi-communication-no-sim:before {
+ content: "\e6f0"; }
+
+.mdi-communication-phone:before {
+ content: "\e6f1"; }
+
+.mdi-communication-portable-wifi-off:before {
+ content: "\e6f2"; }
+
+.mdi-communication-quick-contacts-dialer:before {
+ content: "\e6f3"; }
+
+.mdi-communication-quick-contacts-mail:before {
+ content: "\e6f4"; }
+
+.mdi-communication-ring-volume:before {
+ content: "\e6f5"; }
+
+.mdi-communication-stay-current-landscape:before {
+ content: "\e6f6"; }
+
+.mdi-communication-stay-current-portrait:before {
+ content: "\e6f7"; }
+
+.mdi-communication-stay-primary-landscape:before {
+ content: "\e6f8"; }
+
+.mdi-communication-stay-primary-portrait:before {
+ content: "\e6f9"; }
+
+.mdi-communication-swap-calls:before {
+ content: "\e6fa"; }
+
+.mdi-communication-textsms:before {
+ content: "\e6fb"; }
+
+.mdi-communication-voicemail:before {
+ content: "\e6fc"; }
+
+.mdi-communication-vpn-key:before {
+ content: "\e6fd"; }
+
+.mdi-content-add-box:before {
+ content: "\e6fe"; }
+
+.mdi-content-add-circle-outline:before {
+ content: "\e6ff"; }
+
+.mdi-content-add-circle:before {
+ content: "\e700"; }
+
+.mdi-content-add:before {
+ content: "\e701"; }
+
+.mdi-content-archive:before {
+ content: "\e702"; }
+
+.mdi-content-backspace:before {
+ content: "\e703"; }
+
+.mdi-content-block:before {
+ content: "\e704"; }
+
+.mdi-content-clear:before {
+ content: "\e705"; }
+
+.mdi-content-content-copy:before {
+ content: "\e706"; }
+
+.mdi-content-content-cut:before {
+ content: "\e707"; }
+
+.mdi-content-content-paste:before {
+ content: "\e708"; }
+
+.mdi-content-create:before {
+ content: "\e709"; }
+
+.mdi-content-drafts:before {
+ content: "\e70a"; }
+
+.mdi-content-filter-list:before {
+ content: "\e70b"; }
+
+.mdi-content-flag:before {
+ content: "\e70c"; }
+
+.mdi-content-forward:before {
+ content: "\e70d"; }
+
+.mdi-content-gesture:before {
+ content: "\e70e"; }
+
+.mdi-content-inbox:before {
+ content: "\e70f"; }
+
+.mdi-content-link:before {
+ content: "\e710"; }
+
+.mdi-content-mail:before {
+ content: "\e711"; }
+
+.mdi-content-markunread:before {
+ content: "\e712"; }
+
+.mdi-content-redo:before {
+ content: "\e713"; }
+
+.mdi-content-remove-circle-outline:before {
+ content: "\e714"; }
+
+.mdi-content-remove-circle:before {
+ content: "\e715"; }
+
+.mdi-content-remove:before {
+ content: "\e716"; }
+
+.mdi-content-reply-all:before {
+ content: "\e717"; }
+
+.mdi-content-reply:before {
+ content: "\e718"; }
+
+.mdi-content-report:before {
+ content: "\e719"; }
+
+.mdi-content-save:before {
+ content: "\e71a"; }
+
+.mdi-content-select-all:before {
+ content: "\e71b"; }
+
+.mdi-content-send:before {
+ content: "\e71c"; }
+
+.mdi-content-sort:before {
+ content: "\e71d"; }
+
+.mdi-content-text-format:before {
+ content: "\e71e"; }
+
+.mdi-content-undo:before {
+ content: "\e71f"; }
+
+.mdi-editor-attach-file:before {
+ content: "\e776"; }
+
+.mdi-editor-attach-money:before {
+ content: "\e777"; }
+
+.mdi-editor-border-all:before {
+ content: "\e778"; }
+
+.mdi-editor-border-bottom:before {
+ content: "\e779"; }
+
+.mdi-editor-border-clear:before {
+ content: "\e77a"; }
+
+.mdi-editor-border-color:before {
+ content: "\e77b"; }
+
+.mdi-editor-border-horizontal:before {
+ content: "\e77c"; }
+
+.mdi-editor-border-inner:before {
+ content: "\e77d"; }
+
+.mdi-editor-border-left:before {
+ content: "\e77e"; }
+
+.mdi-editor-border-outer:before {
+ content: "\e77f"; }
+
+.mdi-editor-border-right:before {
+ content: "\e780"; }
+
+.mdi-editor-border-style:before {
+ content: "\e781"; }
+
+.mdi-editor-border-top:before {
+ content: "\e782"; }
+
+.mdi-editor-border-vertical:before {
+ content: "\e783"; }
+
+.mdi-editor-format-align-center:before {
+ content: "\e784"; }
+
+.mdi-editor-format-align-justify:before {
+ content: "\e785"; }
+
+.mdi-editor-format-align-left:before {
+ content: "\e786"; }
+
+.mdi-editor-format-align-right:before {
+ content: "\e787"; }
+
+.mdi-editor-format-bold:before {
+ content: "\e788"; }
+
+.mdi-editor-format-clear:before {
+ content: "\e789"; }
+
+.mdi-editor-format-color-fill:before {
+ content: "\e78a"; }
+
+.mdi-editor-format-color-reset:before {
+ content: "\e78b"; }
+
+.mdi-editor-format-color-text:before {
+ content: "\e78c"; }
+
+.mdi-editor-format-indent-decrease:before {
+ content: "\e78d"; }
+
+.mdi-editor-format-indent-increase:before {
+ content: "\e78e"; }
+
+.mdi-editor-format-italic:before {
+ content: "\e78f"; }
+
+.mdi-editor-format-line-spacing:before {
+ content: "\e790"; }
+
+.mdi-editor-format-list-bulleted:before {
+ content: "\e791"; }
+
+.mdi-editor-format-list-numbered:before {
+ content: "\e792"; }
+
+.mdi-editor-format-paint:before {
+ content: "\e793"; }
+
+.mdi-editor-format-quote:before {
+ content: "\e794"; }
+
+.mdi-editor-format-size:before {
+ content: "\e795"; }
+
+.mdi-editor-format-strikethrough:before {
+ content: "\e796"; }
+
+.mdi-editor-format-textdirection-l-to-r:before {
+ content: "\e797"; }
+
+.mdi-editor-format-textdirection-r-to-l:before {
+ content: "\e798"; }
+
+.mdi-editor-format-underline:before {
+ content: "\e799"; }
+
+.mdi-editor-functions:before {
+ content: "\e79a"; }
+
+.mdi-editor-insert-chart:before {
+ content: "\e79b"; }
+
+.mdi-editor-insert-comment:before {
+ content: "\e79c"; }
+
+.mdi-editor-insert-drive-file:before {
+ content: "\e79d"; }
+
+.mdi-editor-insert-emoticon:before {
+ content: "\e79e"; }
+
+.mdi-editor-insert-invitation:before {
+ content: "\e79f"; }
+
+.mdi-editor-insert-link:before {
+ content: "\e7a0"; }
+
+.mdi-editor-insert-photo:before {
+ content: "\e7a1"; }
+
+.mdi-editor-merge-type:before {
+ content: "\e7a2"; }
+
+.mdi-editor-mode-comment:before {
+ content: "\e7a3"; }
+
+.mdi-editor-mode-edit:before {
+ content: "\e7a4"; }
+
+.mdi-editor-publish:before {
+ content: "\e7a5"; }
+
+.mdi-editor-vertical-align-bottom:before {
+ content: "\e7a6"; }
+
+.mdi-editor-vertical-align-center:before {
+ content: "\e7a7"; }
+
+.mdi-editor-vertical-align-top:before {
+ content: "\e7a8"; }
+
+.mdi-editor-wrap-text:before {
+ content: "\e7a9"; }
+
+.mdi-file-attachment:before {
+ content: "\e7aa"; }
+
+.mdi-file-cloud-circle:before {
+ content: "\e7ab"; }
+
+.mdi-file-cloud-done:before {
+ content: "\e7ac"; }
+
+.mdi-file-cloud-download:before {
+ content: "\e7ad"; }
+
+.mdi-file-cloud-off:before {
+ content: "\e7ae"; }
+
+.mdi-file-cloud-queue:before {
+ content: "\e7af"; }
+
+.mdi-file-cloud-upload:before {
+ content: "\e7b0"; }
+
+.mdi-file-cloud:before {
+ content: "\e7b1"; }
+
+.mdi-file-file-download:before {
+ content: "\e7b2"; }
+
+.mdi-file-file-upload:before {
+ content: "\e7b3"; }
+
+.mdi-file-folder-open:before {
+ content: "\e7b4"; }
+
+.mdi-file-folder-shared:before {
+ content: "\e7b5"; }
+
+.mdi-file-folder:before {
+ content: "\e7b6"; }
+
+.mdi-device-access-alarm:before {
+ content: "\e720"; }
+
+.mdi-device-access-alarms:before {
+ content: "\e721"; }
+
+.mdi-device-access-time:before {
+ content: "\e722"; }
+
+.mdi-device-add-alarm:before {
+ content: "\e723"; }
+
+.mdi-device-airplanemode-off:before {
+ content: "\e724"; }
+
+.mdi-device-airplanemode-on:before {
+ content: "\e725"; }
+
+.mdi-device-battery-20:before {
+ content: "\e726"; }
+
+.mdi-device-battery-30:before {
+ content: "\e727"; }
+
+.mdi-device-battery-50:before {
+ content: "\e728"; }
+
+.mdi-device-battery-60:before {
+ content: "\e729"; }
+
+.mdi-device-battery-80:before {
+ content: "\e72a"; }
+
+.mdi-device-battery-90:before {
+ content: "\e72b"; }
+
+.mdi-device-battery-alert:before {
+ content: "\e72c"; }
+
+.mdi-device-battery-charging-20:before {
+ content: "\e72d"; }
+
+.mdi-device-battery-charging-30:before {
+ content: "\e72e"; }
+
+.mdi-device-battery-charging-50:before {
+ content: "\e72f"; }
+
+.mdi-device-battery-charging-60:before {
+ content: "\e730"; }
+
+.mdi-device-battery-charging-80:before {
+ content: "\e731"; }
+
+.mdi-device-battery-charging-90:before {
+ content: "\e732"; }
+
+.mdi-device-battery-charging-full:before {
+ content: "\e733"; }
+
+.mdi-device-battery-full:before {
+ content: "\e734"; }
+
+.mdi-device-battery-std:before {
+ content: "\e735"; }
+
+.mdi-device-battery-unknown:before {
+ content: "\e736"; }
+
+.mdi-device-bluetooth-connected:before {
+ content: "\e737"; }
+
+.mdi-device-bluetooth-disabled:before {
+ content: "\e738"; }
+
+.mdi-device-bluetooth-searching:before {
+ content: "\e739"; }
+
+.mdi-device-bluetooth:before {
+ content: "\e73a"; }
+
+.mdi-device-brightness-auto:before {
+ content: "\e73b"; }
+
+.mdi-device-brightness-high:before {
+ content: "\e73c"; }
+
+.mdi-device-brightness-low:before {
+ content: "\e73d"; }
+
+.mdi-device-brightness-medium:before {
+ content: "\e73e"; }
+
+.mdi-device-data-usage:before {
+ content: "\e73f"; }
+
+.mdi-device-developer-mode:before {
+ content: "\e740"; }
+
+.mdi-device-devices:before {
+ content: "\e741"; }
+
+.mdi-device-dvr:before {
+ content: "\e742"; }
+
+.mdi-device-gps-fixed:before {
+ content: "\e743"; }
+
+.mdi-device-gps-not-fixed:before {
+ content: "\e744"; }
+
+.mdi-device-gps-off:before {
+ content: "\e745"; }
+
+.mdi-device-location-disabled:before {
+ content: "\e746"; }
+
+.mdi-device-location-searching:before {
+ content: "\e747"; }
+
+.mdi-device-multitrack-audio:before {
+ content: "\e748"; }
+
+.mdi-device-network-cell:before {
+ content: "\e749"; }
+
+.mdi-device-network-wifi:before {
+ content: "\e74a"; }
+
+.mdi-device-nfc:before {
+ content: "\e74b"; }
+
+.mdi-device-now-wallpaper:before {
+ content: "\e74c"; }
+
+.mdi-device-now-widgets:before {
+ content: "\e74d"; }
+
+.mdi-device-screen-lock-landscape:before {
+ content: "\e74e"; }
+
+.mdi-device-screen-lock-portrait:before {
+ content: "\e74f"; }
+
+.mdi-device-screen-lock-rotation:before {
+ content: "\e750"; }
+
+.mdi-device-screen-rotation:before {
+ content: "\e751"; }
+
+.mdi-device-sd-storage:before {
+ content: "\e752"; }
+
+.mdi-device-settings-system-daydream:before {
+ content: "\e753"; }
+
+.mdi-device-signal-cellular-0-bar:before {
+ content: "\e754"; }
+
+.mdi-device-signal-cellular-1-bar:before {
+ content: "\e755"; }
+
+.mdi-device-signal-cellular-2-bar:before {
+ content: "\e756"; }
+
+.mdi-device-signal-cellular-3-bar:before {
+ content: "\e757"; }
+
+.mdi-device-signal-cellular-4-bar:before {
+ content: "\e758"; }
+
+.mdi-signal-wifi-statusbar-connected-no-internet-after:before {
+ content: "\e8f6"; }
+
+.mdi-device-signal-cellular-connected-no-internet-0-bar:before {
+ content: "\e759"; }
+
+.mdi-device-signal-cellular-connected-no-internet-1-bar:before {
+ content: "\e75a"; }
+
+.mdi-device-signal-cellular-connected-no-internet-2-bar:before {
+ content: "\e75b"; }
+
+.mdi-device-signal-cellular-connected-no-internet-3-bar:before {
+ content: "\e75c"; }
+
+.mdi-device-signal-cellular-connected-no-internet-4-bar:before {
+ content: "\e75d"; }
+
+.mdi-device-signal-cellular-no-sim:before {
+ content: "\e75e"; }
+
+.mdi-device-signal-cellular-null:before {
+ content: "\e75f"; }
+
+.mdi-device-signal-cellular-off:before {
+ content: "\e760"; }
+
+.mdi-device-signal-wifi-0-bar:before {
+ content: "\e761"; }
+
+.mdi-device-signal-wifi-1-bar:before {
+ content: "\e762"; }
+
+.mdi-device-signal-wifi-2-bar:before {
+ content: "\e763"; }
+
+.mdi-device-signal-wifi-3-bar:before {
+ content: "\e764"; }
+
+.mdi-device-signal-wifi-4-bar:before {
+ content: "\e765"; }
+
+.mdi-device-signal-wifi-off:before {
+ content: "\e766"; }
+
+.mdi-device-signal-wifi-statusbar-1-bar:before {
+ content: "\e767"; }
+
+.mdi-device-signal-wifi-statusbar-2-bar:before {
+ content: "\e768"; }
+
+.mdi-device-signal-wifi-statusbar-3-bar:before {
+ content: "\e769"; }
+
+.mdi-device-signal-wifi-statusbar-4-bar:before {
+ content: "\e76a"; }
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet-:before {
+ content: "\e76b"; }
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet:before {
+ content: "\e76f"; }
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before {
+ content: "\e76c"; }
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before {
+ content: "\e76d"; }
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before {
+ content: "\e76e"; }
+
+.mdi-signal-wifi-statusbar-not-connected-after:before {
+ content: "\e8f7"; }
+
+.mdi-device-signal-wifi-statusbar-not-connected:before {
+ content: "\e770"; }
+
+.mdi-device-signal-wifi-statusbar-null:before {
+ content: "\e771"; }
+
+.mdi-device-storage:before {
+ content: "\e772"; }
+
+.mdi-device-usb:before {
+ content: "\e773"; }
+
+.mdi-device-wifi-lock:before {
+ content: "\e774"; }
+
+.mdi-device-wifi-tethering:before {
+ content: "\e775"; }
+
+.mdi-hardware-cast-connected:before {
+ content: "\e7b7"; }
+
+.mdi-hardware-cast:before {
+ content: "\e7b8"; }
+
+.mdi-hardware-computer:before {
+ content: "\e7b9"; }
+
+.mdi-hardware-desktop-mac:before {
+ content: "\e7ba"; }
+
+.mdi-hardware-desktop-windows:before {
+ content: "\e7bb"; }
+
+.mdi-hardware-dock:before {
+ content: "\e7bc"; }
+
+.mdi-hardware-gamepad:before {
+ content: "\e7bd"; }
+
+.mdi-hardware-headset-mic:before {
+ content: "\e7be"; }
+
+.mdi-hardware-headset:before {
+ content: "\e7bf"; }
+
+.mdi-hardware-keyboard-alt:before {
+ content: "\e7c0"; }
+
+.mdi-hardware-keyboard-arrow-down:before {
+ content: "\e7c1"; }
+
+.mdi-hardware-keyboard-arrow-left:before {
+ content: "\e7c2"; }
+
+.mdi-hardware-keyboard-arrow-right:before {
+ content: "\e7c3"; }
+
+.mdi-hardware-keyboard-arrow-up:before {
+ content: "\e7c4"; }
+
+.mdi-hardware-keyboard-backspace:before {
+ content: "\e7c5"; }
+
+.mdi-hardware-keyboard-capslock:before {
+ content: "\e7c6"; }
+
+.mdi-hardware-keyboard-control:before {
+ content: "\e7c7"; }
+
+.mdi-hardware-keyboard-hide:before {
+ content: "\e7c8"; }
+
+.mdi-hardware-keyboard-return:before {
+ content: "\e7c9"; }
+
+.mdi-hardware-keyboard-tab:before {
+ content: "\e7ca"; }
+
+.mdi-hardware-keyboard-voice:before {
+ content: "\e7cb"; }
+
+.mdi-hardware-keyboard:before {
+ content: "\e7cc"; }
+
+.mdi-hardware-laptop-chromebook:before {
+ content: "\e7cd"; }
+
+.mdi-hardware-laptop-mac:before {
+ content: "\e7ce"; }
+
+.mdi-hardware-laptop-windows:before {
+ content: "\e7cf"; }
+
+.mdi-hardware-laptop:before {
+ content: "\e7d0"; }
+
+.mdi-hardware-memory:before {
+ content: "\e7d1"; }
+
+.mdi-hardware-mouse:before {
+ content: "\e7d2"; }
+
+.mdi-hardware-phone-android:before {
+ content: "\e7d3"; }
+
+.mdi-hardware-phone-iphone:before {
+ content: "\e7d4"; }
+
+.mdi-hardware-phonelink-off:before {
+ content: "\e7d5"; }
+
+.mdi-hardware-phonelink:before {
+ content: "\e7d6"; }
+
+.mdi-hardware-security:before {
+ content: "\e7d7"; }
+
+.mdi-hardware-sim-card:before {
+ content: "\e7d8"; }
+
+.mdi-hardware-smartphone:before {
+ content: "\e7d9"; }
+
+.mdi-hardware-speaker:before {
+ content: "\e7da"; }
+
+.mdi-hardware-tablet-android:before {
+ content: "\e7db"; }
+
+.mdi-hardware-tablet-mac:before {
+ content: "\e7dc"; }
+
+.mdi-hardware-tablet:before {
+ content: "\e7dd"; }
+
+.mdi-hardware-tv:before {
+ content: "\e7de"; }
+
+.mdi-hardware-watch:before {
+ content: "\e7df"; }
+
+.mdi-image-add-to-photos:before {
+ content: "\e7e0"; }
+
+.mdi-image-adjust:before {
+ content: "\e7e1"; }
+
+.mdi-image-assistant-photo:before {
+ content: "\e7e2"; }
+
+.mdi-image-audiotrack:before {
+ content: "\e7e3"; }
+
+.mdi-image-blur-circular:before {
+ content: "\e7e4"; }
+
+.mdi-image-blur-linear:before {
+ content: "\e7e5"; }
+
+.mdi-image-blur-off:before {
+ content: "\e7e6"; }
+
+.mdi-image-blur-on:before {
+ content: "\e7e7"; }
+
+.mdi-image-brightness-1:before {
+ content: "\e7e8"; }
+
+.mdi-image-brightness-2:before {
+ content: "\e7e9"; }
+
+.mdi-image-brightness-3:before {
+ content: "\e7ea"; }
+
+.mdi-image-brightness-4:before {
+ content: "\e7eb"; }
+
+.mdi-image-brightness-5:before {
+ content: "\e7ec"; }
+
+.mdi-image-brightness-6:before {
+ content: "\e7ed"; }
+
+.mdi-image-brightness-7:before {
+ content: "\e7ee"; }
+
+.mdi-image-brush:before {
+ content: "\e7ef"; }
+
+.mdi-image-camera-alt:before {
+ content: "\e7f0"; }
+
+.mdi-image-camera-front:before {
+ content: "\e7f1"; }
+
+.mdi-image-camera-rear:before {
+ content: "\e7f2"; }
+
+.mdi-image-camera-roll:before {
+ content: "\e7f3"; }
+
+.mdi-image-camera:before {
+ content: "\e7f4"; }
+
+.mdi-image-center-focus-strong:before {
+ content: "\e7f5"; }
+
+.mdi-image-center-focus-weak:before {
+ content: "\e7f6"; }
+
+.mdi-image-collections:before {
+ content: "\e7f7"; }
+
+.mdi-image-color-lens:before {
+ content: "\e7f8"; }
+
+.mdi-image-colorize:before {
+ content: "\e7f9"; }
+
+.mdi-image-compare:before {
+ content: "\e7fa"; }
+
+.mdi-image-control-point-duplicate:before {
+ content: "\e7fb"; }
+
+.mdi-image-control-point:before {
+ content: "\e7fc"; }
+
+.mdi-image-crop-3-2:before {
+ content: "\e7fd"; }
+
+.mdi-image-crop-5-4:before {
+ content: "\e7fe"; }
+
+.mdi-image-crop-7-5:before {
+ content: "\e7ff"; }
+
+.mdi-image-crop-16-9:before {
+ content: "\e800"; }
+
+.mdi-image-crop-din:before {
+ content: "\e801"; }
+
+.mdi-image-crop-free:before {
+ content: "\e802"; }
+
+.mdi-image-crop-landscape:before {
+ content: "\e803"; }
+
+.mdi-image-crop-original:before {
+ content: "\e804"; }
+
+.mdi-image-crop-portrait:before {
+ content: "\e805"; }
+
+.mdi-image-crop-square:before {
+ content: "\e806"; }
+
+.mdi-image-crop:before {
+ content: "\e807"; }
+
+.mdi-image-dehaze:before {
+ content: "\e808"; }
+
+.mdi-image-details:before {
+ content: "\e809"; }
+
+.mdi-image-edit:before {
+ content: "\e80a"; }
+
+.mdi-image-exposure-minus-1:before {
+ content: "\e80b"; }
+
+.mdi-image-exposure-minus-2:before {
+ content: "\e80c"; }
+
+.mdi-image-exposure-plus-1:before {
+ content: "\e80d"; }
+
+.mdi-image-exposure-plus-2:before {
+ content: "\e80e"; }
+
+.mdi-image-exposure-zero:before {
+ content: "\e80f"; }
+
+.mdi-image-exposure:before {
+ content: "\e810"; }
+
+.mdi-image-filter-1:before {
+ content: "\e811"; }
+
+.mdi-image-filter-2:before {
+ content: "\e812"; }
+
+.mdi-image-filter-3:before {
+ content: "\e813"; }
+
+.mdi-image-filter-4:before {
+ content: "\e814"; }
+
+.mdi-image-filter-5:before {
+ content: "\e815"; }
+
+.mdi-image-filter-6:before {
+ content: "\e816"; }
+
+.mdi-image-filter-7:before {
+ content: "\e817"; }
+
+.mdi-image-filter-8:before {
+ content: "\e818"; }
+
+.mdi-image-filter-9-plus:before {
+ content: "\e819"; }
+
+.mdi-image-filter-9:before {
+ content: "\e81a"; }
+
+.mdi-image-filter-b-and-w:before {
+ content: "\e81b"; }
+
+.mdi-image-filter-center-focus:before {
+ content: "\e81c"; }
+
+.mdi-image-filter-drama:before {
+ content: "\e81d"; }
+
+.mdi-image-filter-frames:before {
+ content: "\e81e"; }
+
+.mdi-image-filter-hdr:before {
+ content: "\e81f"; }
+
+.mdi-image-filter-none:before {
+ content: "\e820"; }
+
+.mdi-image-filter-tilt-shift:before {
+ content: "\e821"; }
+
+.mdi-image-filter-vintage:before {
+ content: "\e822"; }
+
+.mdi-image-filter:before {
+ content: "\e823"; }
+
+.mdi-image-flare:before {
+ content: "\e824"; }
+
+.mdi-image-flash-auto:before {
+ content: "\e825"; }
+
+.mdi-image-flash-off:before {
+ content: "\e826"; }
+
+.mdi-image-flash-on:before {
+ content: "\e827"; }
+
+.mdi-image-flip:before {
+ content: "\e828"; }
+
+.mdi-image-gradient:before {
+ content: "\e829"; }
+
+.mdi-image-grain:before {
+ content: "\e82a"; }
+
+.mdi-image-grid-off:before {
+ content: "\e82b"; }
+
+.mdi-image-grid-on:before {
+ content: "\e82c"; }
+
+.mdi-image-hdr-off:before {
+ content: "\e82d"; }
+
+.mdi-image-hdr-on:before {
+ content: "\e82e"; }
+
+.mdi-image-hdr-strong:before {
+ content: "\e82f"; }
+
+.mdi-image-hdr-weak:before {
+ content: "\e830"; }
+
+.mdi-image-healing:before {
+ content: "\e831"; }
+
+.mdi-image-image-aspect-ratio:before {
+ content: "\e832"; }
+
+.mdi-image-image:before {
+ content: "\e833"; }
+
+.mdi-image-iso:before {
+ content: "\e834"; }
+
+.mdi-image-landscape:before {
+ content: "\e835"; }
+
+.mdi-image-leak-add:before {
+ content: "\e836"; }
+
+.mdi-image-leak-remove:before {
+ content: "\e837"; }
+
+.mdi-image-lens:before {
+ content: "\e838"; }
+
+.mdi-image-looks-3:before {
+ content: "\e839"; }
+
+.mdi-image-looks-4:before {
+ content: "\e83a"; }
+
+.mdi-image-looks-5:before {
+ content: "\e83b"; }
+
+.mdi-image-looks-6:before {
+ content: "\e83c"; }
+
+.mdi-image-looks-one:before {
+ content: "\e83d"; }
+
+.mdi-image-looks-two:before {
+ content: "\e83e"; }
+
+.mdi-image-looks:before {
+ content: "\e83f"; }
+
+.mdi-image-loupe:before {
+ content: "\e840"; }
+
+.mdi-image-movie-creation:before {
+ content: "\e841"; }
+
+.mdi-image-nature-people:before {
+ content: "\e842"; }
+
+.mdi-image-nature:before {
+ content: "\e843"; }
+
+.mdi-image-navigate-before:before {
+ content: "\e844"; }
+
+.mdi-image-navigate-next:before {
+ content: "\e845"; }
+
+.mdi-image-palette:before {
+ content: "\e846"; }
+
+.mdi-image-panorama-fisheye:before {
+ content: "\e847"; }
+
+.mdi-image-panorama-horizontal:before {
+ content: "\e848"; }
+
+.mdi-image-panorama-vertical:before {
+ content: "\e849"; }
+
+.mdi-image-panorama-wide-angle:before {
+ content: "\e84a"; }
+
+.mdi-image-panorama:before {
+ content: "\e84b"; }
+
+.mdi-image-photo-album:before {
+ content: "\e84c"; }
+
+.mdi-image-photo-camera:before {
+ content: "\e84d"; }
+
+.mdi-image-photo-library:before {
+ content: "\e84e"; }
+
+.mdi-image-photo:before {
+ content: "\e84f"; }
+
+.mdi-image-portrait:before {
+ content: "\e850"; }
+
+.mdi-image-remove-red-eye:before {
+ content: "\e851"; }
+
+.mdi-image-rotate-left:before {
+ content: "\e852"; }
+
+.mdi-image-rotate-right:before {
+ content: "\e853"; }
+
+.mdi-image-slideshow:before {
+ content: "\e854"; }
+
+.mdi-image-straighten:before {
+ content: "\e855"; }
+
+.mdi-image-style:before {
+ content: "\e856"; }
+
+.mdi-image-switch-camera:before {
+ content: "\e857"; }
+
+.mdi-image-switch-video:before {
+ content: "\e858"; }
+
+.mdi-image-tag-faces:before {
+ content: "\e859"; }
+
+.mdi-image-texture:before {
+ content: "\e85a"; }
+
+.mdi-image-timelapse:before {
+ content: "\e85b"; }
+
+.mdi-image-timer-3:before {
+ content: "\e85c"; }
+
+.mdi-image-timer-10:before {
+ content: "\e85d"; }
+
+.mdi-image-timer-auto:before {
+ content: "\e85e"; }
+
+.mdi-image-timer-off:before {
+ content: "\e85f"; }
+
+.mdi-image-timer:before {
+ content: "\e860"; }
+
+.mdi-image-tonality:before {
+ content: "\e861"; }
+
+.mdi-image-transform:before {
+ content: "\e862"; }
+
+.mdi-image-tune:before {
+ content: "\e863"; }
+
+.mdi-image-wb-auto:before {
+ content: "\e864"; }
+
+.mdi-image-wb-cloudy:before {
+ content: "\e865"; }
+
+.mdi-image-wb-incandescent:before {
+ content: "\e866"; }
+
+.mdi-image-wb-irradescent:before {
+ content: "\e867"; }
+
+.mdi-image-wb-sunny:before {
+ content: "\e868"; }
+
+.mdi-maps-beenhere:before {
+ content: "\e869"; }
+
+.mdi-maps-directions-bike:before {
+ content: "\e86a"; }
+
+.mdi-maps-directions-bus:before {
+ content: "\e86b"; }
+
+.mdi-maps-directions-car:before {
+ content: "\e86c"; }
+
+.mdi-maps-directions-ferry:before {
+ content: "\e86d"; }
+
+.mdi-maps-directions-subway:before {
+ content: "\e86e"; }
+
+.mdi-maps-directions-train:before {
+ content: "\e86f"; }
+
+.mdi-maps-directions-transit:before {
+ content: "\e870"; }
+
+.mdi-maps-directions-walk:before {
+ content: "\e871"; }
+
+.mdi-maps-directions:before {
+ content: "\e872"; }
+
+.mdi-maps-flight:before {
+ content: "\e873"; }
+
+.mdi-maps-hotel:before {
+ content: "\e874"; }
+
+.mdi-maps-layers-clear:before {
+ content: "\e875"; }
+
+.mdi-maps-layers:before {
+ content: "\e876"; }
+
+.mdi-maps-local-airport:before {
+ content: "\e877"; }
+
+.mdi-maps-local-atm:before {
+ content: "\e878"; }
+
+.mdi-maps-local-attraction:before {
+ content: "\e879"; }
+
+.mdi-maps-local-bar:before {
+ content: "\e87a"; }
+
+.mdi-maps-local-cafe:before {
+ content: "\e87b"; }
+
+.mdi-maps-local-car-wash:before {
+ content: "\e87c"; }
+
+.mdi-maps-local-convenience-store:before {
+ content: "\e87d"; }
+
+.mdi-maps-local-drink:before {
+ content: "\e87e"; }
+
+.mdi-maps-local-florist:before {
+ content: "\e87f"; }
+
+.mdi-maps-local-gas-station:before {
+ content: "\e880"; }
+
+.mdi-maps-local-grocery-store:before {
+ content: "\e881"; }
+
+.mdi-maps-local-hospital:before {
+ content: "\e882"; }
+
+.mdi-maps-local-hotel:before {
+ content: "\e883"; }
+
+.mdi-maps-local-laundry-service:before {
+ content: "\e884"; }
+
+.mdi-maps-local-library:before {
+ content: "\e885"; }
+
+.mdi-maps-local-mall:before {
+ content: "\e886"; }
+
+.mdi-maps-local-movies:before {
+ content: "\e887"; }
+
+.mdi-maps-local-offer:before {
+ content: "\e888"; }
+
+.mdi-maps-local-parking:before {
+ content: "\e889"; }
+
+.mdi-maps-local-pharmacy:before {
+ content: "\e88a"; }
+
+.mdi-maps-local-phone:before {
+ content: "\e88b"; }
+
+.mdi-maps-local-pizza:before {
+ content: "\e88c"; }
+
+.mdi-maps-local-play:before {
+ content: "\e88d"; }
+
+.mdi-maps-local-post-office:before {
+ content: "\e88e"; }
+
+.mdi-maps-local-print-shop:before {
+ content: "\e88f"; }
+
+.mdi-maps-local-restaurant:before {
+ content: "\e890"; }
+
+.mdi-maps-local-see:before {
+ content: "\e891"; }
+
+.mdi-maps-local-shipping:before {
+ content: "\e892"; }
+
+.mdi-maps-local-taxi:before {
+ content: "\e893"; }
+
+.mdi-maps-location-history:before {
+ content: "\e894"; }
+
+.mdi-maps-map:before {
+ content: "\e895"; }
+
+.mdi-maps-my-location:before {
+ content: "\e896"; }
+
+.mdi-maps-navigation:before {
+ content: "\e897"; }
+
+.mdi-maps-pin-drop:before {
+ content: "\e898"; }
+
+.mdi-maps-place:before {
+ content: "\e899"; }
+
+.mdi-maps-rate-review:before {
+ content: "\e89a"; }
+
+.mdi-maps-restaurant-menu:before {
+ content: "\e89b"; }
+
+.mdi-maps-satellite:before {
+ content: "\e89c"; }
+
+.mdi-maps-store-mall-directory:before {
+ content: "\e89d"; }
+
+.mdi-maps-terrain:before {
+ content: "\e89e"; }
+
+.mdi-maps-traffic:before {
+ content: "\e89f"; }
+
+.mdi-navigation-apps:before {
+ content: "\e8a0"; }
+
+.mdi-navigation-arrow-back:before {
+ content: "\e8a1"; }
+
+.mdi-navigation-arrow-drop-down-circle:before {
+ content: "\e8a2"; }
+
+.mdi-navigation-arrow-drop-down:before {
+ content: "\e8a3"; }
+
+.mdi-navigation-arrow-drop-up:before {
+ content: "\e8a4"; }
+
+.mdi-navigation-arrow-forward:before {
+ content: "\e8a5"; }
+
+.mdi-navigation-cancel:before {
+ content: "\e8a6"; }
+
+.mdi-navigation-check:before {
+ content: "\e8a7"; }
+
+.mdi-navigation-chevron-left:before {
+ content: "\e8a8"; }
+
+.mdi-navigation-chevron-right:before {
+ content: "\e8a9"; }
+
+.mdi-navigation-close:before {
+ content: "\e8aa"; }
+
+.mdi-navigation-expand-less:before {
+ content: "\e8ab"; }
+
+.mdi-navigation-expand-more:before {
+ content: "\e8ac"; }
+
+.mdi-navigation-fullscreen-exit:before {
+ content: "\e8ad"; }
+
+.mdi-navigation-fullscreen:before {
+ content: "\e8ae"; }
+
+.mdi-navigation-menu:before {
+ content: "\e8af"; }
+
+.mdi-navigation-more-horiz:before {
+ content: "\e8b0"; }
+
+.mdi-navigation-more-vert:before {
+ content: "\e8b1"; }
+
+.mdi-navigation-refresh:before {
+ content: "\e8b2"; }
+
+.mdi-navigation-unfold-less:before {
+ content: "\e8b3"; }
+
+.mdi-navigation-unfold-more:before {
+ content: "\e8b4"; }
+
+.mdi-notification-adb:before {
+ content: "\e8b5"; }
+
+.mdi-notification-bluetooth-audio:before {
+ content: "\e8b6"; }
+
+.mdi-notification-disc-full:before {
+ content: "\e8b7"; }
+
+.mdi-notification-dnd-forwardslash:before {
+ content: "\e8b8"; }
+
+.mdi-notification-do-not-disturb:before {
+ content: "\e8b9"; }
+
+.mdi-notification-drive-eta:before {
+ content: "\e8ba"; }
+
+.mdi-notification-event-available:before {
+ content: "\e8bb"; }
+
+.mdi-notification-event-busy:before {
+ content: "\e8bc"; }
+
+.mdi-notification-event-note:before {
+ content: "\e8bd"; }
+
+.mdi-notification-folder-special:before {
+ content: "\e8be"; }
+
+.mdi-notification-mms:before {
+ content: "\e8bf"; }
+
+.mdi-notification-more:before {
+ content: "\e8c0"; }
+
+.mdi-notification-network-locked:before {
+ content: "\e8c1"; }
+
+.mdi-notification-phone-bluetooth-speaker:before {
+ content: "\e8c2"; }
+
+.mdi-notification-phone-forwarded:before {
+ content: "\e8c3"; }
+
+.mdi-notification-phone-in-talk:before {
+ content: "\e8c4"; }
+
+.mdi-notification-phone-locked:before {
+ content: "\e8c5"; }
+
+.mdi-notification-phone-missed:before {
+ content: "\e8c6"; }
+
+.mdi-notification-phone-paused:before {
+ content: "\e8c7"; }
+
+.mdi-notification-play-download:before {
+ content: "\e8c8"; }
+
+.mdi-notification-play-install:before {
+ content: "\e8c9"; }
+
+.mdi-notification-sd-card:before {
+ content: "\e8ca"; }
+
+.mdi-notification-sim-card-alert:before {
+ content: "\e8cb"; }
+
+.mdi-notification-sms-failed:before {
+ content: "\e8cc"; }
+
+.mdi-notification-sms:before {
+ content: "\e8cd"; }
+
+.mdi-notification-sync-disabled:before {
+ content: "\e8ce"; }
+
+.mdi-notification-sync-problem:before {
+ content: "\e8cf"; }
+
+.mdi-notification-sync:before {
+ content: "\e8d0"; }
+
+.mdi-notification-system-update:before {
+ content: "\e8d1"; }
+
+.mdi-notification-tap-and-play:before {
+ content: "\e8d2"; }
+
+.mdi-notification-time-to-leave:before {
+ content: "\e8d3"; }
+
+.mdi-notification-vibration:before {
+ content: "\e8d4"; }
+
+.mdi-notification-voice-chat:before {
+ content: "\e8d5"; }
+
+.mdi-notification-vpn-lock:before {
+ content: "\e8d6"; }
+
+.mdi-social-cake:before {
+ content: "\e8d7"; }
+
+.mdi-social-domain:before {
+ content: "\e8d8"; }
+
+.mdi-social-group-add:before {
+ content: "\e8d9"; }
+
+.mdi-social-group:before {
+ content: "\e8da"; }
+
+.mdi-social-location-city:before {
+ content: "\e8db"; }
+
+.mdi-social-mood:before {
+ content: "\e8dc"; }
+
+.mdi-social-notifications-none:before {
+ content: "\e8dd"; }
+
+.mdi-social-notifications-off:before {
+ content: "\e8de"; }
+
+.mdi-social-notifications-on:before {
+ content: "\e8df"; }
+
+.mdi-social-notifications-paused:before {
+ content: "\e8e0"; }
+
+.mdi-social-notifications:before {
+ content: "\e8e1"; }
+
+.mdi-social-pages:before {
+ content: "\e8e2"; }
+
+.mdi-social-party-mode:before {
+ content: "\e8e3"; }
+
+.mdi-social-people-outline:before {
+ content: "\e8e4"; }
+
+.mdi-social-people:before {
+ content: "\e8e5"; }
+
+.mdi-social-person-add:before {
+ content: "\e8e6"; }
+
+.mdi-social-person-outline:before {
+ content: "\e8e7"; }
+
+.mdi-social-person:before {
+ content: "\e8e8"; }
+
+.mdi-social-plus-one:before {
+ content: "\e8e9"; }
+
+.mdi-social-poll:before {
+ content: "\e8ea"; }
+
+.mdi-social-public:before {
+ content: "\e8eb"; }
+
+.mdi-social-school:before {
+ content: "\e8ec"; }
+
+.mdi-social-share:before {
+ content: "\e8ed"; }
+
+.mdi-social-whatshot:before {
+ content: "\e8ee"; }
+
+.mdi-toggle-check-box-outline-blank:before {
+ content: "\e8ef"; }
+
+.mdi-toggle-check-box:before {
+ content: "\e8f0"; }
+
+.mdi-toggle-radio-button-off:before {
+ content: "\e8f1"; }
+
+.mdi-toggle-radio-button-on:before {
+ content: "\e8f2"; }
+
+.mdi-toggle-star-half:before {
+ content: "\e8f3"; }
+
+.mdi-toggle-star-outline:before {
+ content: "\e8f4"; }
+
+.mdi-toggle-star:before {
+ content: "\e8f5"; }
+
+.container {
+ margin: 0 auto;
+ max-width: 1280px;
+ width: 90%; }
+
+@media only screen and (min-width: 601px) {
+ .container {
+ width: 85%; } }
+@media only screen and (min-width: 993px) {
+ .container {
+ width: 70%; } }
+.container .row {
+ margin-left: -0.75rem;
+ margin-right: -0.75rem; }
+
+.section {
+ padding-top: 1rem;
+ padding-bottom: 1rem; }
+ .section.no-pad {
+ padding: 0; }
+ .section.no-pad-bot {
+ padding-bottom: 0; }
+ .section.no-pad-top {
+ padding-top: 0; }
+
+.row {
+ margin-left: auto;
+ margin-right: auto;
+ margin-bottom: 20px; }
+ .row:after {
+ content: "";
+ display: table;
+ clear: both; }
+ .row .col {
+ float: left;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 0.75rem; }
+ .row .col.s1 {
+ width: 8.33333%;
+ margin-left: 0; }
+ .row .col.s2 {
+ width: 16.66667%;
+ margin-left: 0; }
+ .row .col.s3 {
+ width: 25%;
+ margin-left: 0; }
+ .row .col.s4 {
+ width: 33.33333%;
+ margin-left: 0; }
+ .row .col.s5 {
+ width: 41.66667%;
+ margin-left: 0; }
+ .row .col.s6 {
+ width: 50%;
+ margin-left: 0; }
+ .row .col.s7 {
+ width: 58.33333%;
+ margin-left: 0; }
+ .row .col.s8 {
+ width: 66.66667%;
+ margin-left: 0; }
+ .row .col.s9 {
+ width: 75%;
+ margin-left: 0; }
+ .row .col.s10 {
+ width: 83.33333%;
+ margin-left: 0; }
+ .row .col.s11 {
+ width: 91.66667%;
+ margin-left: 0; }
+ .row .col.s12 {
+ width: 100%;
+ margin-left: 0; }
+ .row .col.offset-s1 {
+ margin-left: 8.33333%; }
+ .row .col.offset-s2 {
+ margin-left: 16.66667%; }
+ .row .col.offset-s3 {
+ margin-left: 25%; }
+ .row .col.offset-s4 {
+ margin-left: 33.33333%; }
+ .row .col.offset-s5 {
+ margin-left: 41.66667%; }
+ .row .col.offset-s6 {
+ margin-left: 50%; }
+ .row .col.offset-s7 {
+ margin-left: 58.33333%; }
+ .row .col.offset-s8 {
+ margin-left: 66.66667%; }
+ .row .col.offset-s9 {
+ margin-left: 75%; }
+ .row .col.offset-s10 {
+ margin-left: 83.33333%; }
+ .row .col.offset-s11 {
+ margin-left: 91.66667%; }
+ .row .col.offset-s12 {
+ margin-left: 100%; }
+ @media only screen and (min-width: 601px) {
+ .row .col.m1 {
+ width: 8.33333%;
+ margin-left: 0; }
+ .row .col.m2 {
+ width: 16.66667%;
+ margin-left: 0; }
+ .row .col.m3 {
+ width: 25%;
+ margin-left: 0; }
+ .row .col.m4 {
+ width: 33.33333%;
+ margin-left: 0; }
+ .row .col.m5 {
+ width: 41.66667%;
+ margin-left: 0; }
+ .row .col.m6 {
+ width: 50%;
+ margin-left: 0; }
+ .row .col.m7 {
+ width: 58.33333%;
+ margin-left: 0; }
+ .row .col.m8 {
+ width: 66.66667%;
+ margin-left: 0; }
+ .row .col.m9 {
+ width: 75%;
+ margin-left: 0; }
+ .row .col.m10 {
+ width: 83.33333%;
+ margin-left: 0; }
+ .row .col.m11 {
+ width: 91.66667%;
+ margin-left: 0; }
+ .row .col.m12 {
+ width: 100%;
+ margin-left: 0; }
+ .row .col.offset-m1 {
+ margin-left: 8.33333%; }
+ .row .col.offset-m2 {
+ margin-left: 16.66667%; }
+ .row .col.offset-m3 {
+ margin-left: 25%; }
+ .row .col.offset-m4 {
+ margin-left: 33.33333%; }
+ .row .col.offset-m5 {
+ margin-left: 41.66667%; }
+ .row .col.offset-m6 {
+ margin-left: 50%; }
+ .row .col.offset-m7 {
+ margin-left: 58.33333%; }
+ .row .col.offset-m8 {
+ margin-left: 66.66667%; }
+ .row .col.offset-m9 {
+ margin-left: 75%; }
+ .row .col.offset-m10 {
+ margin-left: 83.33333%; }
+ .row .col.offset-m11 {
+ margin-left: 91.66667%; }
+ .row .col.offset-m12 {
+ margin-left: 100%; } }
+ @media only screen and (min-width: 993px) {
+ .row .col.l1 {
+ width: 8.33333%;
+ margin-left: 0; }
+ .row .col.l2 {
+ width: 16.66667%;
+ margin-left: 0; }
+ .row .col.l3 {
+ width: 25%;
+ margin-left: 0; }
+ .row .col.l4 {
+ width: 33.33333%;
+ margin-left: 0; }
+ .row .col.l5 {
+ width: 41.66667%;
+ margin-left: 0; }
+ .row .col.l6 {
+ width: 50%;
+ margin-left: 0; }
+ .row .col.l7 {
+ width: 58.33333%;
+ margin-left: 0; }
+ .row .col.l8 {
+ width: 66.66667%;
+ margin-left: 0; }
+ .row .col.l9 {
+ width: 75%;
+ margin-left: 0; }
+ .row .col.l10 {
+ width: 83.33333%;
+ margin-left: 0; }
+ .row .col.l11 {
+ width: 91.66667%;
+ margin-left: 0; }
+ .row .col.l12 {
+ width: 100%;
+ margin-left: 0; }
+ .row .col.offset-l1 {
+ margin-left: 8.33333%; }
+ .row .col.offset-l2 {
+ margin-left: 16.66667%; }
+ .row .col.offset-l3 {
+ margin-left: 25%; }
+ .row .col.offset-l4 {
+ margin-left: 33.33333%; }
+ .row .col.offset-l5 {
+ margin-left: 41.66667%; }
+ .row .col.offset-l6 {
+ margin-left: 50%; }
+ .row .col.offset-l7 {
+ margin-left: 58.33333%; }
+ .row .col.offset-l8 {
+ margin-left: 66.66667%; }
+ .row .col.offset-l9 {
+ margin-left: 75%; }
+ .row .col.offset-l10 {
+ margin-left: 83.33333%; }
+ .row .col.offset-l11 {
+ margin-left: 91.66667%; }
+ .row .col.offset-l12 {
+ margin-left: 100%; } }
+
+nav {
+ color: #fff;
+ background-color: #ee6e73;
+ width: 100%;
+ height: 56px;
+ line-height: 56px; }
+ nav a {
+ color: #fff; }
+ nav .nav-wrapper {
+ position: relative;
+ height: 100%; }
+ nav .nav-wrapper i {
+ display: block;
+ font-size: 2rem; }
+ @media only screen and (min-width: 993px) {
+ nav a.button-collapse {
+ display: none; } }
+ nav .button-collapse {
+ float: left;
+ position: relative;
+ z-index: 1;
+ height: 56px; }
+ nav .button-collapse i {
+ font-size: 2.7rem;
+ height: 56px;
+ line-height: 56px; }
+ nav .brand-logo {
+ position: absolute;
+ color: #fff;
+ display: inline-block;
+ font-size: 2.1rem;
+ padding: 0;
+ white-space: nowrap; }
+ nav .brand-logo.center {
+ left: 50%;
+ -webkit-transform: translateX(-50%);
+ -moz-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ -o-transform: translateX(-50%);
+ transform: translateX(-50%); }
+ @media only screen and (max-width: 992px) {
+ nav .brand-logo {
+ left: 50%;
+ -webkit-transform: translateX(-50%);
+ -moz-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ -o-transform: translateX(-50%);
+ transform: translateX(-50%); } }
+ nav .brand-logo.right {
+ right: 0.5rem;
+ padding: 0; }
+ nav ul {
+ margin: 0; }
+ nav ul li {
+ -webkit-transition: background-color 0.3s;
+ -moz-transition: background-color 0.3s;
+ -o-transition: background-color 0.3s;
+ -ms-transition: background-color 0.3s;
+ transition: background-color 0.3s;
+ float: left;
+ padding: 0; }
+ nav ul li:hover, nav ul li.active {
+ background-color: rgba(0, 0, 0, 0.1); }
+ nav ul a {
+ font-size: 1rem;
+ color: #fff;
+ display: block;
+ padding: 0 15px; }
+ nav ul.left {
+ float: left; }
+ nav .input-field {
+ margin: 0; }
+ nav .input-field input {
+ height: 100%;
+ font-size: 1.2rem;
+ border: none;
+ padding-left: 2rem; }
+ nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid {
+ border: none;
+ box-shadow: none; }
+ nav .input-field label {
+ top: 0;
+ left: 0; }
+ nav .input-field label i {
+ color: rgba(255, 255, 255, 0.7);
+ -webkit-transition: color 0.3s;
+ -moz-transition: color 0.3s;
+ -o-transition: color 0.3s;
+ -ms-transition: color 0.3s;
+ transition: color 0.3s; }
+ nav .input-field label.active i {
+ color: #fff; }
+ nav .input-field label.active {
+ -webkit-transform: translateY(0);
+ -moz-transform: translateY(0);
+ -ms-transform: translateY(0);
+ -o-transform: translateY(0);
+ transform: translateY(0); }
+
+.navbar-fixed {
+ position: relative;
+ height: 56px;
+ z-index: 998; }
+ .navbar-fixed nav {
+ position: fixed; }
+
+@media only screen and (min-width: 601px) {
+ nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i {
+ height: 64px;
+ line-height: 64px; }
+
+ .navbar-fixed {
+ height: 64px; } }
+@font-face {
+ font-family: "Roboto";
+ src: url("../font/roboto/Roboto-Thin.woff2") format("woff2"), url("../font/roboto/Roboto-Thin.woff") format("woff"), url("../font/roboto/Roboto-Thin.ttf") format("truetype");
+ font-weight: 200; }
+@font-face {
+ font-family: "Roboto";
+ src: url("../font/roboto/Roboto-Light.woff2") format("woff2"), url("../font/roboto/Roboto-Light.woff") format("woff"), url("../font/roboto/Roboto-Light.ttf") format("truetype");
+ font-weight: 300; }
+@font-face {
+ font-family: "Roboto";
+ src: url("../font/roboto/Roboto-Regular.woff2") format("woff2"), url("../font/roboto/Roboto-Regular.woff") format("woff"), url("../font/roboto/Roboto-Regular.ttf") format("truetype");
+ font-weight: 400; }
+@font-face {
+ font-family: "Roboto";
+ src: url("../font/roboto/Roboto-Medium.woff2") format("woff2"), url("../font/roboto/Roboto-Medium.woff") format("woff"), url("../font/roboto/Roboto-Medium.ttf") format("truetype");
+ font-weight: 500; }
+@font-face {
+ font-family: "Roboto";
+ src: url("../font/roboto/Roboto-Bold.woff2") format("woff2"), url("../font/roboto/Roboto-Bold.woff") format("woff"), url("../font/roboto/Roboto-Bold.ttf") format("truetype");
+ font-weight: 700; }
+a {
+ text-decoration: none; }
+
+html {
+ line-height: 1.5;
+ font-family: "Roboto", sans-serif;
+ font-weight: normal;
+ color: rgba(0, 0, 0, 0.87); }
+ @media only screen and (min-width: 0) {
+ html {
+ font-size: 14px; } }
+ @media only screen and (min-width: 992px) {
+ html {
+ font-size: 14.5px; } }
+ @media only screen and (min-width: 1200px) {
+ html {
+ font-size: 15px; } }
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: 400;
+ line-height: 1.1; }
+
+h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
+ font-weight: inherit; }
+
+h1 {
+ font-size: 4.2rem;
+ line-height: 110%;
+ margin: 2.1rem 0 1.68rem 0; }
+
+h2 {
+ font-size: 3.56rem;
+ line-height: 110%;
+ margin: 1.78rem 0 1.424rem 0; }
+
+h3 {
+ font-size: 2.92rem;
+ line-height: 110%;
+ margin: 1.46rem 0 1.168rem 0; }
+
+h4 {
+ font-size: 2.28rem;
+ line-height: 110%;
+ margin: 1.14rem 0 0.912rem 0; }
+
+h5 {
+ font-size: 1.64rem;
+ line-height: 110%;
+ margin: 0.82rem 0 0.656rem 0; }
+
+h6 {
+ font-size: 1rem;
+ line-height: 110%;
+ margin: 0.5rem 0 0.4rem 0; }
+
+em {
+ font-style: italic; }
+
+strong {
+ font-weight: 500; }
+
+small {
+ font-size: 75%; }
+
+.light, footer.page-footer .footer-copyright {
+ font-weight: 300; }
+
+.thin {
+ font-weight: 200; }
+
+.flow-text {
+ font-weight: 300; }
+ @media only screen and (min-width: 360px) {
+ .flow-text {
+ font-size: 1.2rem; } }
+ @media only screen and (min-width: 390px) {
+ .flow-text {
+ font-size: 1.224rem; } }
+ @media only screen and (min-width: 420px) {
+ .flow-text {
+ font-size: 1.248rem; } }
+ @media only screen and (min-width: 450px) {
+ .flow-text {
+ font-size: 1.272rem; } }
+ @media only screen and (min-width: 480px) {
+ .flow-text {
+ font-size: 1.296rem; } }
+ @media only screen and (min-width: 510px) {
+ .flow-text {
+ font-size: 1.32rem; } }
+ @media only screen and (min-width: 540px) {
+ .flow-text {
+ font-size: 1.344rem; } }
+ @media only screen and (min-width: 570px) {
+ .flow-text {
+ font-size: 1.368rem; } }
+ @media only screen and (min-width: 600px) {
+ .flow-text {
+ font-size: 1.392rem; } }
+ @media only screen and (min-width: 630px) {
+ .flow-text {
+ font-size: 1.416rem; } }
+ @media only screen and (min-width: 660px) {
+ .flow-text {
+ font-size: 1.44rem; } }
+ @media only screen and (min-width: 690px) {
+ .flow-text {
+ font-size: 1.464rem; } }
+ @media only screen and (min-width: 720px) {
+ .flow-text {
+ font-size: 1.488rem; } }
+ @media only screen and (min-width: 750px) {
+ .flow-text {
+ font-size: 1.512rem; } }
+ @media only screen and (min-width: 780px) {
+ .flow-text {
+ font-size: 1.536rem; } }
+ @media only screen and (min-width: 810px) {
+ .flow-text {
+ font-size: 1.56rem; } }
+ @media only screen and (min-width: 840px) {
+ .flow-text {
+ font-size: 1.584rem; } }
+ @media only screen and (min-width: 870px) {
+ .flow-text {
+ font-size: 1.608rem; } }
+ @media only screen and (min-width: 900px) {
+ .flow-text {
+ font-size: 1.632rem; } }
+ @media only screen and (min-width: 930px) {
+ .flow-text {
+ font-size: 1.656rem; } }
+ @media only screen and (min-width: 960px) {
+ .flow-text {
+ font-size: 1.68rem; } }
+ @media only screen and (max-width: 360px) {
+ .flow-text {
+ font-size: 1.2rem; } }
+
+.card-panel {
+ transition: box-shadow .25s;
+ padding: 20px;
+ margin: 0.5rem 0 1rem 0;
+ border-radius: 2px;
+ background-color: #fff; }
+
+.card {
+ position: relative;
+ overflow: hidden;
+ margin: 0.5rem 0 1rem 0;
+ background-color: #fff;
+ transition: box-shadow .25s;
+ border-radius: 2px; }
+ .card .card-title {
+ color: #fff;
+ font-size: 24px;
+ font-weight: 300; }
+ .card .card-title.activator {
+ cursor: pointer; }
+ .card.small, .card.medium, .card.large {
+ position: relative; }
+ .card.small .card-image, .card.medium .card-image, .card.large .card-image {
+ overflow: hidden; }
+ .card.small .card-content, .card.medium .card-content, .card.large .card-content {
+ overflow: hidden; }
+ .card.small .card-action, .card.medium .card-action, .card.large .card-action {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0; }
+ .card.small {
+ height: 300px; }
+ .card.small .card-image {
+ height: 150px; }
+ .card.small .card-content {
+ height: 150px; }
+ .card.medium {
+ height: 400px; }
+ .card.medium .card-image {
+ height: 250px; }
+ .card.medium .card-content {
+ height: 150px; }
+ .card.large {
+ height: 500px; }
+ .card.large .card-image {
+ height: 330px; }
+ .card.large .card-content {
+ height: 170px; }
+ .card .card-image {
+ position: relative; }
+ .card .card-image img {
+ border-radius: 2px 2px 0 0;
+ position: relative;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ width: 100%; }
+ .card .card-image .card-title {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ padding: 20px; }
+ .card .card-content {
+ padding: 20px;
+ border-radius: 0 0 2px 2px; }
+ .card .card-content p {
+ margin: 0;
+ color: inherit; }
+ .card .card-content .card-title {
+ line-height: 48px; }
+ .card .card-action {
+ border-top: 1px solid rgba(160, 160, 160, 0.2);
+ padding: 20px; }
+ .card .card-action a {
+ color: #ffab40;
+ margin-right: 20px;
+ -webkit-transition: color 0.3s ease;
+ -moz-transition: color 0.3s ease;
+ -o-transition: color 0.3s ease;
+ -ms-transition: color 0.3s ease;
+ transition: color 0.3s ease;
+ text-transform: uppercase; }
+ .card .card-action a:hover {
+ color: #ffd8a6; }
+ .card .card-reveal {
+ padding: 20px;
+ position: absolute;
+ background-color: #fff;
+ width: 100%;
+ overflow-y: auto;
+ top: 100%;
+ height: 100%;
+ z-index: 1;
+ display: none; }
+ .card .card-reveal .card-title {
+ cursor: pointer;
+ display: block; }
+
+#toast-container {
+ display: block;
+ position: fixed;
+ z-index: 1001; }
+ @media only screen and (max-width: 600px) {
+ #toast-container {
+ min-width: 100%;
+ bottom: 0%; } }
+ @media only screen and (min-width: 601px) and (max-width: 992px) {
+ #toast-container {
+ min-width: 30%;
+ left: 5%;
+ bottom: 7%; } }
+ @media only screen and (min-width: 993px) {
+ #toast-container {
+ min-width: 8%;
+ top: 10%;
+ right: 7%; } }
+
+.toast {
+ border-radius: 2px;
+ top: 0;
+ width: auto;
+ clear: both;
+ margin-top: 10px;
+ position: relative;
+ max-width: 100%;
+ height: 48px;
+ line-height: 48px;
+ background-color: #323232;
+ padding: 0 25px;
+ font-size: 1.1rem;
+ font-weight: 300;
+ color: #fff;
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ -webkit-justify-content: space-between;
+ justify-content: space-between; }
+ .toast .btn, .toast .btn-large, .toast .btn-flat {
+ margin: 0;
+ margin-left: 3rem; }
+ .toast.rounded {
+ border-radius: 24px; }
+ @media only screen and (max-width: 600px) {
+ .toast {
+ width: 100%;
+ border-radius: 0; } }
+ @media only screen and (min-width: 601px) and (max-width: 992px) {
+ .toast {
+ float: left; } }
+ @media only screen and (min-width: 993px) {
+ .toast {
+ float: right; } }
+
+.tabs {
+ position: relative;
+ height: 48px;
+ background-color: #fff;
+ margin: 0 auto;
+ width: 100%;
+ white-space: nowrap; }
+ .tabs .tab {
+ display: block;
+ float: left;
+ text-align: center;
+ line-height: 48px;
+ height: 48px;
+ padding: 0 20px;
+ margin: 0;
+ text-transform: uppercase;
+ letter-spacing: .8px;
+ width: 15%; }
+ .tabs .tab a {
+ color: #ee6e73;
+ display: block;
+ width: 100%;
+ height: 100%;
+ -webkit-transition: color 0.28s ease;
+ -moz-transition: color 0.28s ease;
+ -o-transition: color 0.28s ease;
+ -ms-transition: color 0.28s ease;
+ transition: color 0.28s ease; }
+ .tabs .tab a:hover {
+ color: #f9c9cb; }
+ .tabs .tab.disabled a {
+ color: #f9c9cb;
+ cursor: default; }
+ .tabs .indicator {
+ position: absolute;
+ bottom: 0;
+ height: 2px;
+ background-color: #f6b2b5;
+ will-change: left, right; }
+
+.tabs .tab {
+ padding: 0; }
+
+.material-tooltip {
+ padding: 10px 8px;
+ font-size: 1rem;
+ z-index: 2000;
+ background-color: transparent;
+ border-radius: 2px;
+ color: #fff;
+ min-height: 36px;
+ line-height: 1rem;
+ opacity: 0;
+ display: none;
+ position: absolute;
+ text-align: center;
+ overflow: hidden;
+ left: 0;
+ top: 0;
+ will-change: top, left; }
+
+.backdrop {
+ position: absolute;
+ opacity: 0;
+ display: none;
+ height: 7px;
+ width: 14px;
+ border-radius: 0 0 14px 14px;
+ background-color: #323232;
+ z-index: -1;
+ -webkit-transform-origin: 50% 10%;
+ -moz-transform-origin: 50% 10%;
+ -ms-transform-origin: 50% 10%;
+ -o-transform-origin: 50% 10%;
+ transform-origin: 50% 10%;
+ will-change: transform, opacity; }
+
+.btn, .btn-large, .btn-flat {
+ border: none;
+ border-radius: 2px;
+ display: inline-block;
+ height: 36px;
+ line-height: 36px;
+ outline: 0;
+ padding: 0 2rem;
+ text-transform: uppercase;
+ vertical-align: middle;
+ -webkit-tap-highlight-color: transparent; }
+
+.btn.disabled, .disabled.btn-large, .btn-floating.disabled, .btn-large.disabled, .btn:disabled, .btn-large:disabled, .btn-large:disabled, .btn-floating:disabled {
+ background-color: #DFDFDF !important;
+ box-shadow: none;
+ color: #9F9F9F !important;
+ cursor: default; }
+ .btn.disabled *, .disabled.btn-large *, .btn-floating.disabled *, .btn-large.disabled *, .btn:disabled *, .btn-large:disabled *, .btn-large:disabled *, .btn-floating:disabled * {
+ pointer-events: none; }
+ .btn.disabled:hover, .disabled.btn-large:hover, .btn-floating.disabled:hover, .btn-large.disabled:hover, .btn:disabled:hover, .btn-large:disabled:hover, .btn-large:disabled:hover, .btn-floating:disabled:hover {
+ background-color: #DFDFDF;
+ color: #9F9F9F; }
+
+.btn i, .btn-large i, .btn-floating i, .btn-large i, .btn-flat i {
+ font-size: 1.3rem;
+ line-height: inherit; }
+
+.btn, .btn-large {
+ text-decoration: none;
+ color: #fff;
+ background-color: #26a69a;
+ text-align: center;
+ letter-spacing: .5px;
+ -webkit-transition: 0.2s ease-out;
+ -moz-transition: 0.2s ease-out;
+ -o-transition: 0.2s ease-out;
+ -ms-transition: 0.2s ease-out;
+ transition: 0.2s ease-out;
+ cursor: pointer; }
+ .btn:hover, .btn-large:hover {
+ background-color: #2bbbad; }
+
+.btn-floating {
+ display: inline-block;
+ color: #fff;
+ position: relative;
+ overflow: hidden;
+ z-index: 1;
+ width: 37px;
+ height: 37px;
+ line-height: 37px;
+ padding: 0;
+ background-color: #26a69a;
+ border-radius: 50%;
+ transition: .3s;
+ cursor: pointer;
+ vertical-align: middle; }
+ .btn-floating i {
+ width: inherit;
+ display: inline-block;
+ text-align: center;
+ color: #fff;
+ font-size: 1.6rem;
+ line-height: 37px; }
+ .btn-floating:before {
+ border-radius: 0; }
+ .btn-floating.btn-large {
+ width: 55.5px;
+ height: 55.5px; }
+ .btn-floating.btn-large i {
+ line-height: 55.5px; }
+
+button.btn-floating {
+ border: none; }
+
+.fixed-action-btn {
+ position: fixed;
+ right: 23px;
+ bottom: 23px;
+ padding-top: 15px;
+ margin-bottom: 0;
+ z-index: 998; }
+ .fixed-action-btn ul {
+ left: 0;
+ right: 0;
+ text-align: center;
+ position: absolute;
+ bottom: 64px;
+ margin: 0; }
+ .fixed-action-btn ul li {
+ margin-bottom: 15px; }
+ .fixed-action-btn ul a.btn-floating {
+ opacity: 0; }
+
+.btn-flat {
+ box-shadow: none;
+ background-color: transparent;
+ color: #343434;
+ cursor: pointer; }
+ .btn-flat.disabled {
+ color: #b3b3b3;
+ cursor: default; }
+
+.btn-large {
+ height: 54px;
+ line-height: 56px; }
+ .btn-large i {
+ font-size: 1.6rem; }
+
+.btn-block {
+ display: block; }
+
+.dropdown-content {
+ background-color: #fff;
+ margin: 0;
+ display: none;
+ min-width: 100px;
+ max-height: 650px;
+ overflow-y: auto;
+ opacity: 0;
+ position: absolute;
+ z-index: 999;
+ will-change: width, height; }
+ .dropdown-content li {
+ clear: both;
+ color: rgba(0, 0, 0, 0.87);
+ cursor: pointer;
+ line-height: 1.5rem;
+ width: 100%;
+ text-align: left;
+ text-transform: none; }
+ .dropdown-content li:hover, .dropdown-content li.active {
+ background-color: #eee; }
+ .dropdown-content li > a, .dropdown-content li > span {
+ font-size: 1.2rem;
+ color: #26a69a;
+ display: block;
+ padding: 1rem 1rem; }
+ .dropdown-content li > a > i {
+ height: inherit;
+ line-height: inherit; }
+
+/*!
+ * Waves v0.6.0
+ * http://fian.my.id/Waves
+ *
+ * Copyright 2014 Alfiana E. Sibuea and other contributors
+ * Released under the MIT license
+ * https://github.com/fians/Waves/blob/master/LICENSE
+ */
+.waves-effect {
+ position: relative;
+ cursor: pointer;
+ display: inline-block;
+ overflow: hidden;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-tap-highlight-color: transparent;
+ vertical-align: middle;
+ z-index: 1;
+ will-change: opacity, transform;
+ -webkit-transition: all 0.3s ease-out;
+ -moz-transition: all 0.3s ease-out;
+ -o-transition: all 0.3s ease-out;
+ -ms-transition: all 0.3s ease-out;
+ transition: all 0.3s ease-out; }
+ .waves-effect .waves-ripple {
+ position: absolute;
+ border-radius: 50%;
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ opacity: 0;
+ background: rgba(0, 0, 0, 0.2);
+ -webkit-transition: all 0.7s ease-out;
+ -moz-transition: all 0.7s ease-out;
+ -o-transition: all 0.7s ease-out;
+ -ms-transition: all 0.7s ease-out;
+ transition: all 0.7s ease-out;
+ -webkit-transition-property: -webkit-transform, opacity;
+ -moz-transition-property: -moz-transform, opacity;
+ -o-transition-property: -o-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: scale(0);
+ -moz-transform: scale(0);
+ -ms-transform: scale(0);
+ -o-transform: scale(0);
+ transform: scale(0);
+ pointer-events: none; }
+ .waves-effect.waves-light .waves-ripple {
+ background-color: rgba(255, 255, 255, 0.45); }
+ .waves-effect.waves-red .waves-ripple {
+ background-color: rgba(244, 67, 54, 0.7); }
+ .waves-effect.waves-yellow .waves-ripple {
+ background-color: rgba(255, 235, 59, 0.7); }
+ .waves-effect.waves-orange .waves-ripple {
+ background-color: rgba(255, 152, 0, 0.7); }
+ .waves-effect.waves-purple .waves-ripple {
+ background-color: rgba(156, 39, 176, 0.7); }
+ .waves-effect.waves-green .waves-ripple {
+ background-color: rgba(76, 175, 80, 0.7); }
+ .waves-effect.waves-teal .waves-ripple {
+ background-color: rgba(0, 150, 136, 0.7); }
+
+.waves-notransition {
+ -webkit-transition: none !important;
+ -moz-transition: none !important;
+ -o-transition: none !important;
+ -ms-transition: none !important;
+ transition: none !important; }
+
+.waves-circle {
+ -webkit-transform: translateZ(0);
+ -moz-transform: translateZ(0);
+ -ms-transform: translateZ(0);
+ -o-transform: translateZ(0);
+ transform: translateZ(0);
+ -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); }
+
+.waves-input-wrapper {
+ border-radius: 0.2em;
+ vertical-align: bottom; }
+ .waves-input-wrapper .waves-button-input {
+ position: relative;
+ top: 0;
+ left: 0;
+ z-index: 1; }
+
+.waves-circle {
+ text-align: center;
+ width: 2.5em;
+ height: 2.5em;
+ line-height: 2.5em;
+ border-radius: 50%;
+ -webkit-mask-image: none; }
+
+.waves-block {
+ display: block; }
+
+/* Firefox Bug: link not triggered */
+a.waves-effect .waves-ripple {
+ z-index: -1; }
+
+.modal {
+ display: none;
+ position: fixed;
+ left: 0;
+ right: 0;
+ background-color: #fafafa;
+ padding: 0;
+ max-height: 70%;
+ width: 55%;
+ margin: auto;
+ overflow-y: auto;
+ border-radius: 2px;
+ will-change: top, opacity; }
+ @media only screen and (max-width: 992px) {
+ .modal {
+ width: 80%; } }
+ .modal h1, .modal h2, .modal h3, .modal h4 {
+ margin-top: 0; }
+ .modal .modal-content {
+ padding: 24px; }
+ .modal .modal-close {
+ cursor: pointer; }
+ .modal .modal-footer {
+ border-radius: 0 0 2px 2px;
+ background-color: #fafafa;
+ padding: 4px 6px;
+ height: 56px;
+ width: 100%; }
+ .modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat {
+ float: right;
+ margin: 6px 0; }
+
+.lean-overlay {
+ position: fixed;
+ z-index: 999;
+ top: -100px;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ height: 125%;
+ width: 100%;
+ background: #000;
+ display: none;
+ will-change: opacity; }
+
+.modal.modal-fixed-footer {
+ padding: 0;
+ height: 70%; }
+ .modal.modal-fixed-footer .modal-content {
+ position: absolute;
+ height: calc(100% - 56px);
+ max-height: 100%;
+ width: 100%;
+ overflow-y: auto; }
+ .modal.modal-fixed-footer .modal-footer {
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
+ position: absolute;
+ bottom: 0; }
+
+.modal.bottom-sheet {
+ top: auto;
+ bottom: -100%;
+ margin: 0;
+ width: 100%;
+ max-height: 45%;
+ border-radius: 0;
+ will-change: bottom, opacity; }
+
+.collapsible {
+ border-top: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ border-left: 1px solid #ddd;
+ margin: 0.5rem 0 1rem 0; }
+
+.collapsible-header {
+ display: block;
+ cursor: pointer;
+ height: 3rem;
+ line-height: 3rem;
+ padding: 0 1rem;
+ background-color: #fff;
+ border-bottom: 1px solid #ddd; }
+ .collapsible-header i {
+ width: 2rem;
+ font-size: 1.6rem;
+ line-height: 3rem;
+ display: block;
+ float: left;
+ text-align: center;
+ margin-right: 1rem; }
+
+.collapsible-body {
+ display: none;
+ border-bottom: 1px solid #ddd;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box; }
+ .collapsible-body p {
+ margin: 0;
+ padding: 2rem; }
+
+.side-nav .collapsible {
+ border: none;
+ box-shadow: none; }
+ .side-nav .collapsible li {
+ padding: 0; }
+.side-nav .collapsible-header {
+ background-color: transparent;
+ border: none;
+ line-height: inherit;
+ height: inherit;
+ margin: 0 1rem; }
+ .side-nav .collapsible-header i {
+ line-height: inherit; }
+.side-nav .collapsible-body {
+ border: 0;
+ background-color: #fff; }
+ .side-nav .collapsible-body li a {
+ margin: 0 1rem 0 2rem; }
+
+.collapsible.popout {
+ border: none;
+ box-shadow: none; }
+ .collapsible.popout > li {
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
+ margin: 0 24px;
+ transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94); }
+ .collapsible.popout > li.active {
+ box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
+ margin: 16px 0; }
+
+.materialboxed {
+ cursor: zoom-in;
+ position: relative;
+ -webkit-transition: opacity 0.4s;
+ -moz-transition: opacity 0.4s;
+ -o-transition: opacity 0.4s;
+ -ms-transition: opacity 0.4s;
+ transition: opacity 0.4s; }
+ .materialboxed:hover {
+ will-change: left, top, width, height; }
+ .materialboxed:hover:not(.active) {
+ opacity: .8; }
+
+.materialboxed.active {
+ cursor: zoom-out; }
+
+#materialbox-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: #292929;
+ z-index: 999;
+ will-change: opacity; }
+
+.materialbox-caption {
+ position: fixed;
+ display: none;
+ color: #fff;
+ line-height: 50px;
+ bottom: 0;
+ width: 100%;
+ text-align: center;
+ padding: 0% 15%;
+ height: 50px;
+ z-index: 1000;
+ -webkit-font-smoothing: antialiased; }
+
+/* Remove Focus Boxes */
+select:focus {
+ outline: 1px solid #c9f3ef; }
+
+button:focus {
+ outline: none;
+ background-color: #2ab7a9; }
+
+label {
+ font-size: 0.8rem;
+ color: #9e9e9e; }
+
+/***************************
+ Text Inputs + Textarea
+****************************/
+::-webkit-input-placeholder {
+ color: #d1d1d1; }
+
+:-moz-placeholder {
+ /* Firefox 18- */
+ color: #d1d1d1; }
+
+::-moz-placeholder {
+ /* Firefox 19+ */
+ color: #d1d1d1; }
+
+:-ms-input-placeholder {
+ color: #d1d1d1; }
+
+input[type=text],
+input[type=password],
+input[type=email],
+input[type=url],
+input[type=time],
+input[type=date],
+input[type=datetime-local],
+input[type=tel],
+input[type=number],
+input[type=search],
+textarea.materialize-textarea {
+ background-color: transparent;
+ border: none;
+ border-bottom: 1px solid #9e9e9e;
+ border-radius: 0;
+ outline: none;
+ height: 3rem;
+ width: 100%;
+ font-size: 1rem;
+ margin: 0 0 15px 0;
+ padding: 0;
+ box-shadow: none;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ transition: all .3s; }
+ input[type=text]:disabled, input[type=text][readonly="readonly"],
+ input[type=password]:disabled,
+ input[type=password][readonly="readonly"],
+ input[type=email]:disabled,
+ input[type=email][readonly="readonly"],
+ input[type=url]:disabled,
+ input[type=url][readonly="readonly"],
+ input[type=time]:disabled,
+ input[type=time][readonly="readonly"],
+ input[type=date]:disabled,
+ input[type=date][readonly="readonly"],
+ input[type=datetime-local]:disabled,
+ input[type=datetime-local][readonly="readonly"],
+ input[type=tel]:disabled,
+ input[type=tel][readonly="readonly"],
+ input[type=number]:disabled,
+ input[type=number][readonly="readonly"],
+ input[type=search]:disabled,
+ input[type=search][readonly="readonly"],
+ textarea.materialize-textarea:disabled,
+ textarea.materialize-textarea[readonly="readonly"] {
+ color: rgba(0, 0, 0, 0.26);
+ border-bottom: 1px dotted rgba(0, 0, 0, 0.26); }
+ input[type=text]:disabled + label, input[type=text][readonly="readonly"] + label,
+ input[type=password]:disabled + label,
+ input[type=password][readonly="readonly"] + label,
+ input[type=email]:disabled + label,
+ input[type=email][readonly="readonly"] + label,
+ input[type=url]:disabled + label,
+ input[type=url][readonly="readonly"] + label,
+ input[type=time]:disabled + label,
+ input[type=time][readonly="readonly"] + label,
+ input[type=date]:disabled + label,
+ input[type=date][readonly="readonly"] + label,
+ input[type=datetime-local]:disabled + label,
+ input[type=datetime-local][readonly="readonly"] + label,
+ input[type=tel]:disabled + label,
+ input[type=tel][readonly="readonly"] + label,
+ input[type=number]:disabled + label,
+ input[type=number][readonly="readonly"] + label,
+ input[type=search]:disabled + label,
+ input[type=search][readonly="readonly"] + label,
+ textarea.materialize-textarea:disabled + label,
+ textarea.materialize-textarea[readonly="readonly"] + label {
+ color: rgba(0, 0, 0, 0.26); }
+ input[type=text]:focus:not([readonly]),
+ input[type=password]:focus:not([readonly]),
+ input[type=email]:focus:not([readonly]),
+ input[type=url]:focus:not([readonly]),
+ input[type=time]:focus:not([readonly]),
+ input[type=date]:focus:not([readonly]),
+ input[type=datetime-local]:focus:not([readonly]),
+ input[type=tel]:focus:not([readonly]),
+ input[type=number]:focus:not([readonly]),
+ input[type=search]:focus:not([readonly]),
+ textarea.materialize-textarea:focus:not([readonly]) {
+ border-bottom: 1px solid #26a69a;
+ box-shadow: 0 1px 0 0 #26a69a; }
+ input[type=text]:focus:not([readonly]) + label,
+ input[type=password]:focus:not([readonly]) + label,
+ input[type=email]:focus:not([readonly]) + label,
+ input[type=url]:focus:not([readonly]) + label,
+ input[type=time]:focus:not([readonly]) + label,
+ input[type=date]:focus:not([readonly]) + label,
+ input[type=datetime-local]:focus:not([readonly]) + label,
+ input[type=tel]:focus:not([readonly]) + label,
+ input[type=number]:focus:not([readonly]) + label,
+ input[type=search]:focus:not([readonly]) + label,
+ textarea.materialize-textarea:focus:not([readonly]) + label {
+ color: #26a69a; }
+ input[type=text].valid, input[type=text]:focus.valid,
+ input[type=password].valid,
+ input[type=password]:focus.valid,
+ input[type=email].valid,
+ input[type=email]:focus.valid,
+ input[type=url].valid,
+ input[type=url]:focus.valid,
+ input[type=time].valid,
+ input[type=time]:focus.valid,
+ input[type=date].valid,
+ input[type=date]:focus.valid,
+ input[type=datetime-local].valid,
+ input[type=datetime-local]:focus.valid,
+ input[type=tel].valid,
+ input[type=tel]:focus.valid,
+ input[type=number].valid,
+ input[type=number]:focus.valid,
+ input[type=search].valid,
+ input[type=search]:focus.valid,
+ textarea.materialize-textarea.valid,
+ textarea.materialize-textarea:focus.valid {
+ border-bottom: 1px solid #4CAF50;
+ box-shadow: 0 1px 0 0 #4CAF50; }
+ input[type=text].valid + label:after, input[type=text]:focus.valid + label:after,
+ input[type=password].valid + label:after,
+ input[type=password]:focus.valid + label:after,
+ input[type=email].valid + label:after,
+ input[type=email]:focus.valid + label:after,
+ input[type=url].valid + label:after,
+ input[type=url]:focus.valid + label:after,
+ input[type=time].valid + label:after,
+ input[type=time]:focus.valid + label:after,
+ input[type=date].valid + label:after,
+ input[type=date]:focus.valid + label:after,
+ input[type=datetime-local].valid + label:after,
+ input[type=datetime-local]:focus.valid + label:after,
+ input[type=tel].valid + label:after,
+ input[type=tel]:focus.valid + label:after,
+ input[type=number].valid + label:after,
+ input[type=number]:focus.valid + label:after,
+ input[type=search].valid + label:after,
+ input[type=search]:focus.valid + label:after,
+ textarea.materialize-textarea.valid + label:after,
+ textarea.materialize-textarea:focus.valid + label:after {
+ content: attr(data-success);
+ color: #4CAF50;
+ opacity: 1; }
+ input[type=text].invalid, input[type=text]:focus.invalid,
+ input[type=password].invalid,
+ input[type=password]:focus.invalid,
+ input[type=email].invalid,
+ input[type=email]:focus.invalid,
+ input[type=url].invalid,
+ input[type=url]:focus.invalid,
+ input[type=time].invalid,
+ input[type=time]:focus.invalid,
+ input[type=date].invalid,
+ input[type=date]:focus.invalid,
+ input[type=datetime-local].invalid,
+ input[type=datetime-local]:focus.invalid,
+ input[type=tel].invalid,
+ input[type=tel]:focus.invalid,
+ input[type=number].invalid,
+ input[type=number]:focus.invalid,
+ input[type=search].invalid,
+ input[type=search]:focus.invalid,
+ textarea.materialize-textarea.invalid,
+ textarea.materialize-textarea:focus.invalid {
+ border-bottom: 1px solid #F44336;
+ box-shadow: 0 1px 0 0 #F44336; }
+ input[type=text].invalid + label:after, input[type=text]:focus.invalid + label:after,
+ input[type=password].invalid + label:after,
+ input[type=password]:focus.invalid + label:after,
+ input[type=email].invalid + label:after,
+ input[type=email]:focus.invalid + label:after,
+ input[type=url].invalid + label:after,
+ input[type=url]:focus.invalid + label:after,
+ input[type=time].invalid + label:after,
+ input[type=time]:focus.invalid + label:after,
+ input[type=date].invalid + label:after,
+ input[type=date]:focus.invalid + label:after,
+ input[type=datetime-local].invalid + label:after,
+ input[type=datetime-local]:focus.invalid + label:after,
+ input[type=tel].invalid + label:after,
+ input[type=tel]:focus.invalid + label:after,
+ input[type=number].invalid + label:after,
+ input[type=number]:focus.invalid + label:after,
+ input[type=search].invalid + label:after,
+ input[type=search]:focus.invalid + label:after,
+ textarea.materialize-textarea.invalid + label:after,
+ textarea.materialize-textarea:focus.invalid + label:after {
+ content: attr(data-error);
+ color: #F44336;
+ opacity: 1; }
+ input[type=text] + label:after,
+ input[type=password] + label:after,
+ input[type=email] + label:after,
+ input[type=url] + label:after,
+ input[type=time] + label:after,
+ input[type=date] + label:after,
+ input[type=datetime-local] + label:after,
+ input[type=tel] + label:after,
+ input[type=number] + label:after,
+ input[type=search] + label:after,
+ textarea.materialize-textarea + label:after {
+ display: block;
+ content: "";
+ position: absolute;
+ top: 65px;
+ opacity: 0;
+ transition: .2s opacity ease-out, .2s color ease-out; }
+
+.input-field {
+ position: relative;
+ margin-top: 1rem; }
+ .input-field label {
+ color: #9e9e9e;
+ position: absolute;
+ top: 0.8rem;
+ left: 0.75rem;
+ font-size: 1rem;
+ cursor: text;
+ -webkit-transition: 0.2s ease-out;
+ -moz-transition: 0.2s ease-out;
+ -o-transition: 0.2s ease-out;
+ -ms-transition: 0.2s ease-out;
+ transition: 0.2s ease-out; }
+ .input-field label.active {
+ font-size: 0.8rem;
+ -webkit-transform: translateY(-140%);
+ -moz-transform: translateY(-140%);
+ -ms-transform: translateY(-140%);
+ -o-transform: translateY(-140%);
+ transform: translateY(-140%); }
+ .input-field .prefix {
+ position: absolute;
+ width: 3rem;
+ font-size: 2rem;
+ -webkit-transition: color 0.2s;
+ -moz-transition: color 0.2s;
+ -o-transition: color 0.2s;
+ -ms-transition: color 0.2s;
+ transition: color 0.2s; }
+ .input-field .prefix.active {
+ color: #26a69a; }
+ .input-field .prefix ~ input,
+ .input-field .prefix ~ textarea {
+ margin-left: 3rem;
+ width: 92%;
+ width: calc(100% - 3rem); }
+ .input-field .prefix ~ textarea {
+ padding-top: .8rem; }
+ .input-field .prefix ~ label {
+ margin-left: 3rem; }
+ @media only screen and (max-width: 992px) {
+ .input-field .prefix ~ input {
+ width: 86%;
+ width: calc(100% - 3rem); } }
+ @media only screen and (max-width: 600px) {
+ .input-field .prefix ~ input {
+ width: 80%;
+ width: calc(100% - 3rem); } }
+
+.input-field input[type=search] {
+ display: block;
+ line-height: inherit;
+ padding-left: 4rem;
+ width: calc(100% - 4rem); }
+ .input-field input[type=search]:focus {
+ background-color: #fff;
+ border: 0;
+ box-shadow: none;
+ color: #444; }
+ .input-field input[type=search]:focus + label i, .input-field input[type=search]:focus ~ .mdi-navigation-close {
+ color: #444; }
+ .input-field input[type=search] + label {
+ left: 1rem; }
+ .input-field input[type=search] ~ .mdi-navigation-close {
+ position: absolute;
+ top: 0;
+ right: 1rem;
+ color: transparent;
+ cursor: pointer;
+ font-size: 2rem;
+ transition: .3s color; }
+
+textarea {
+ width: 100%;
+ height: 3rem;
+ background-color: transparent; }
+ textarea.materialize-textarea {
+ overflow-y: hidden;
+ /* prevents scroll bar flash */
+ padding: 1.6rem 0;
+ /* prevents text jump on Enter keypress */
+ resize: none;
+ min-height: 3rem; }
+
+.hiddendiv {
+ display: none;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+ overflow-wrap: break-word;
+ /* future version of deprecated 'word-wrap' */
+ padding-top: 1.2rem;
+ /* prevents text jump on Enter keypress */ }
+
+/***************
+ Radio Buttons
+***************/
+/* Remove default Radio Buttons */
+[type="radio"]:not(:checked),
+[type="radio"]:checked {
+ position: absolute;
+ left: -9999px;
+ visibility: hidden; }
+
+[type="radio"]:not(:checked) + label,
+[type="radio"]:checked + label {
+ position: relative;
+ padding-left: 35px;
+ cursor: pointer;
+ display: inline-block;
+ height: 25px;
+ line-height: 25px;
+ font-size: 1rem;
+ -webkit-transition: 0.28s ease;
+ -moz-transition: 0.28s ease;
+ -o-transition: 0.28s ease;
+ -ms-transition: 0.28s ease;
+ transition: 0.28s ease;
+ -webkit-user-select: none;
+ /* webkit (safari, chrome) browsers */
+ -moz-user-select: none;
+ /* mozilla browsers */
+ -khtml-user-select: none;
+ /* webkit (konqueror) browsers */
+ -ms-user-select: none;
+ /* IE10+ */ }
+
+[type="radio"] + label:before,
+[type="radio"] + label:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ margin: 4px;
+ width: 16px;
+ height: 16px;
+ z-index: 0;
+ -webkit-transition: 0.28s ease;
+ -moz-transition: 0.28s ease;
+ -o-transition: 0.28s ease;
+ -ms-transition: 0.28s ease;
+ transition: 0.28s ease; }
+
+/* Unchecked styles */
+[type="radio"]:not(:checked) + label:before {
+ border-radius: 50%;
+ border: 2px solid #5a5a5a; }
+
+[type="radio"]:not(:checked) + label:after {
+ border-radius: 50%;
+ border: 2px solid #5a5a5a;
+ z-index: -1;
+ -webkit-transform: scale(0);
+ -moz-transform: scale(0);
+ -ms-transform: scale(0);
+ -o-transform: scale(0);
+ transform: scale(0); }
+
+/* Checked styles */
+[type="radio"]:checked + label:before {
+ border-radius: 50%;
+ border: 2px solid transparent; }
+
+[type="radio"]:checked + label:after {
+ border-radius: 50%;
+ border: 2px solid #26a69a;
+ background-color: #26a69a;
+ z-index: 0;
+ -webkit-transform: scale(1.02);
+ -moz-transform: scale(1.02);
+ -ms-transform: scale(1.02);
+ -o-transform: scale(1.02);
+ transform: scale(1.02); }
+
+/* Radio With gap */
+[type="radio"].with-gap:checked + label:before {
+ border-radius: 50%;
+ border: 2px solid #26a69a; }
+
+[type="radio"].with-gap:checked + label:after {
+ border-radius: 50%;
+ border: 2px solid #26a69a;
+ background-color: #26a69a;
+ z-index: 0;
+ -webkit-transform: scale(0.5);
+ -moz-transform: scale(0.5);
+ -ms-transform: scale(0.5);
+ -o-transform: scale(0.5);
+ transform: scale(0.5); }
+
+/* Disabled Radio With gap */
+[type="radio"].with-gap:disabled:checked + label:before {
+ border: 2px solid rgba(0, 0, 0, 0.26); }
+
+[type="radio"].with-gap:disabled:checked + label:after {
+ border: none;
+ background-color: rgba(0, 0, 0, 0.26); }
+
+/* Disabled style */
+[type="radio"]:disabled:not(:checked) + label:before,
+[type="radio"]:disabled:checked + label:before {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.26); }
+
+[type="radio"]:disabled + label {
+ color: rgba(0, 0, 0, 0.26); }
+
+[type="radio"]:disabled:not(:checked) + label:before {
+ border-color: rgba(0, 0, 0, 0.26); }
+
+[type="radio"]:disabled:checked + label:after {
+ background-color: rgba(0, 0, 0, 0.26);
+ border-color: #BDBDBD; }
+
+/***************
+ Checkboxes
+***************/
+/* CUSTOM CSS CHECKBOXES */
+form p {
+ margin-bottom: 10px;
+ text-align: left; }
+
+form p:last-child {
+ margin-bottom: 0; }
+
+/* Remove default checkbox */
+[type="checkbox"]:not(:checked),
+[type="checkbox"]:checked {
+ position: absolute;
+ left: -9999px;
+ visibility: hidden; }
+
+[type="checkbox"] {
+ /* checkbox aspect */ }
+ [type="checkbox"] + label {
+ position: relative;
+ padding-left: 35px;
+ cursor: pointer;
+ display: inline-block;
+ height: 25px;
+ line-height: 25px;
+ font-size: 1rem;
+ -webkit-user-select: none;
+ /* webkit (safari, chrome) browsers */
+ -moz-user-select: none;
+ /* mozilla browsers */
+ -khtml-user-select: none;
+ /* webkit (konqueror) browsers */
+ -ms-user-select: none;
+ /* IE10+ */ }
+ [type="checkbox"] + label:before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 18px;
+ height: 18px;
+ z-index: 0;
+ border: 2px solid #5a5a5a;
+ border-radius: 1px;
+ margin-top: 2px;
+ -webkit-transition: 0.2s;
+ -moz-transition: 0.2s;
+ -o-transition: 0.2s;
+ -ms-transition: 0.2s;
+ transition: 0.2s; }
+ [type="checkbox"]:not(:checked):disabled + label:before {
+ border: none;
+ background-color: rgba(0, 0, 0, 0.26); }
+
+[type="checkbox"]:checked + label:before {
+ top: -4px;
+ left: -3px;
+ width: 12px;
+ height: 22px;
+ border-top: 2px solid transparent;
+ border-left: 2px solid transparent;
+ border-right: 2px solid #26a69a;
+ border-bottom: 2px solid #26a69a;
+ -webkit-transform: rotate(40deg);
+ -moz-transform: rotate(40deg);
+ -ms-transform: rotate(40deg);
+ -o-transform: rotate(40deg);
+ transform: rotate(40deg);
+ -webkit-backface-visibility: hidden;
+ -webkit-transform-origin: 100% 100%;
+ -moz-transform-origin: 100% 100%;
+ -ms-transform-origin: 100% 100%;
+ -o-transform-origin: 100% 100%;
+ transform-origin: 100% 100%; }
+[type="checkbox"]:checked:disabled + label:before {
+ border-right: 2px solid rgba(0, 0, 0, 0.26);
+ border-bottom: 2px solid rgba(0, 0, 0, 0.26); }
+
+/* Indeterminate checkbox */
+[type="checkbox"]:indeterminate + label:before {
+ left: -10px;
+ top: -11px;
+ width: 10px;
+ height: 22px;
+ border-top: none;
+ border-left: none;
+ border-right: 2px solid #26a69a;
+ border-bottom: none;
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ transform: rotate(90deg);
+ -webkit-backface-visibility: hidden;
+ -webkit-transform-origin: 100% 100%;
+ -moz-transform-origin: 100% 100%;
+ -ms-transform-origin: 100% 100%;
+ -o-transform-origin: 100% 100%;
+ transform-origin: 100% 100%; }
+[type="checkbox"]:indeterminate:disabled + label:before {
+ border-right: 2px solid rgba(0, 0, 0, 0.26);
+ background-color: transparent; }
+
+[type="checkbox"].filled-in + label:after {
+ border-radius: 2px; }
+[type="checkbox"].filled-in + label:before,
+[type="checkbox"].filled-in + label:after {
+ content: '';
+ left: 0;
+ position: absolute;
+ /* .1s delay is for check animation */
+ transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;
+ z-index: 1; }
+[type="checkbox"].filled-in:not(:checked) + label:before {
+ width: 0;
+ height: 0;
+ border: 3px solid transparent;
+ left: 6px;
+ top: 10px;
+ -webkit-transform: rotateZ(37deg);
+ transform: rotateZ(37deg);
+ -webkit-transform-origin: 20% 40%;
+ transform-origin: 100% 100%; }
+[type="checkbox"].filled-in:not(:checked) + label:after {
+ height: 20px;
+ width: 20px;
+ background-color: transparent;
+ border: 2px solid #5a5a5a;
+ top: 0px;
+ z-index: 0; }
+[type="checkbox"].filled-in:checked + label:before {
+ top: 0;
+ left: 1px;
+ width: 8px;
+ height: 13px;
+ border-top: 2px solid transparent;
+ border-left: 2px solid transparent;
+ border-right: 2px solid #fff;
+ border-bottom: 2px solid #fff;
+ -webkit-transform: rotateZ(37deg);
+ transform: rotateZ(37deg);
+ -webkit-transform-origin: 100% 100%;
+ transform-origin: 100% 100%; }
+[type="checkbox"].filled-in:checked + label:after {
+ top: 0px;
+ width: 20px;
+ height: 20px;
+ border: 2px solid #26a69a;
+ background-color: #26a69a;
+ z-index: 0; }
+[type="checkbox"].filled-in:disabled:not(:checked) + label:before {
+ background-color: transparent;
+ border: 2px solid transparent; }
+[type="checkbox"].filled-in:disabled:not(:checked) + label:after {
+ border-color: transparent;
+ background-color: #BDBDBD; }
+[type="checkbox"].filled-in:disabled:checked + label:before {
+ background-color: transparent; }
+[type="checkbox"].filled-in:disabled:checked + label:after {
+ background-color: #BDBDBD;
+ border-color: #BDBDBD; }
+
+/***************
+ Switch
+***************/
+.switch,
+.switch * {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -ms-user-select: none; }
+
+.switch label {
+ cursor: pointer; }
+
+.switch label input[type=checkbox] {
+ opacity: 0;
+ width: 0;
+ height: 0; }
+
+.switch label input[type=checkbox]:checked + .lever {
+ background-color: #84c7c1; }
+
+.switch label input[type=checkbox]:checked + .lever:after {
+ background-color: #26a69a; }
+
+.switch label .lever {
+ content: "";
+ display: inline-block;
+ position: relative;
+ width: 40px;
+ height: 15px;
+ background-color: #818181;
+ border-radius: 15px;
+ margin-right: 10px;
+ transition: background 0.3s ease;
+ vertical-align: middle;
+ margin: 0 16px; }
+
+.switch label .lever:after {
+ content: "";
+ position: absolute;
+ display: inline-block;
+ width: 21px;
+ height: 21px;
+ background-color: #F1F1F1;
+ border-radius: 21px;
+ box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4);
+ left: -5px;
+ top: -3px;
+ transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease; }
+
+input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after {
+ box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(38, 166, 154, 0.1); }
+
+input[type=checkbox]:not(:disabled) ~ .lever:active:after {
+ box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.08); }
+
+.switch label input[type=checkbox]:checked + .lever:after {
+ left: 24px; }
+
+.switch input[type=checkbox][disabled] + .lever {
+ cursor: default; }
+
+.switch label input[type=checkbox][disabled] + .lever:after,
+.switch label input[type=checkbox][disabled]:checked + .lever:after {
+ background-color: #BDBDBD; }
+
+/***************
+ Select Field
+***************/
+.select-label {
+ position: absolute; }
+
+.select-wrapper {
+ position: relative; }
+ .select-wrapper input.select-dropdown {
+ position: relative;
+ cursor: pointer;
+ background-color: transparent;
+ border: none;
+ border-bottom: 1px solid #9e9e9e;
+ outline: none;
+ height: 3rem;
+ line-height: 3rem;
+ width: 100%;
+ font-size: 1rem;
+ margin: 0 0 15px 0;
+ padding: 0;
+ display: block; }
+ .select-wrapper span.caret {
+ color: initial;
+ position: absolute;
+ right: 0;
+ top: 16px;
+ font-size: 10px; }
+ .select-wrapper span.caret.disabled {
+ color: rgba(0, 0, 0, 0.26); }
+ .select-wrapper + label {
+ position: absolute;
+ top: -14px;
+ font-size: 0.8rem; }
+
+select {
+ display: none; }
+
+select.browser-default {
+ display: block; }
+
+select:disabled {
+ color: rgba(0, 0, 0, 0.3); }
+
+.select-wrapper input.select-dropdown:disabled {
+ color: rgba(0, 0, 0, 0.3);
+ cursor: default;
+ -webkit-user-select: none;
+ /* webkit (safari, chrome) browsers */
+ -moz-user-select: none;
+ /* mozilla browsers */
+ -ms-user-select: none;
+ /* IE10+ */
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3); }
+
+.select-wrapper i {
+ color: rgba(0, 0, 0, 0.3); }
+
+.select-dropdown li.disabled {
+ color: rgba(0, 0, 0, 0.3);
+ background-color: transparent; }
+
+/*********************
+ File Input
+**********************/
+.file-field {
+ position: relative; }
+ .file-field .file-path-wrapper {
+ overflow: hidden;
+ padding-left: 10px; }
+ .file-field input.file-path {
+ width: 100%; }
+ .file-field .btn, .file-field .btn-large {
+ float: left;
+ height: 3rem;
+ line-height: 3rem; }
+ .file-field span {
+ cursor: pointer; }
+ .file-field input[type=file] {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ font-size: 20px;
+ cursor: pointer;
+ opacity: 0;
+ filter: alpha(opacity=0); }
+
+/***************
+ Range
+***************/
+.range-field {
+ position: relative; }
+
+input[type=range], input[type=range] + .thumb {
+ cursor: pointer; }
+
+input[type=range] {
+ position: relative;
+ background-color: transparent;
+ border: none;
+ outline: none;
+ width: 100%;
+ margin: 15px 0px;
+ padding: 0; }
+
+input[type=range] + .thumb {
+ position: absolute;
+ border: none;
+ height: 0;
+ width: 0;
+ border-radius: 50%;
+ background-color: #26a69a;
+ top: 10px;
+ margin-left: -6px;
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+ -webkit-transform: rotate(-45deg);
+ -moz-transform: rotate(-45deg);
+ -ms-transform: rotate(-45deg);
+ -o-transform: rotate(-45deg);
+ transform: rotate(-45deg); }
+ input[type=range] + .thumb .value {
+ display: block;
+ width: 30px;
+ text-align: center;
+ color: #26a69a;
+ font-size: 0;
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ -o-transform: rotate(45deg);
+ transform: rotate(45deg); }
+ input[type=range] + .thumb.active {
+ border-radius: 50% 50% 50% 0; }
+ input[type=range] + .thumb.active .value {
+ color: #fff;
+ margin-left: -1px;
+ margin-top: 8px;
+ font-size: 10px; }
+
+input[type=range]:focus {
+ outline: none; }
+
+input[type=range] {
+ -webkit-appearance: none; }
+
+input[type=range]::-webkit-slider-runnable-track {
+ height: 3px;
+ background: #c2c0c2;
+ border: none; }
+
+input[type=range]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ border: none;
+ height: 14px;
+ width: 14px;
+ border-radius: 50%;
+ background-color: #26a69a;
+ transform-origin: 50% 50%;
+ margin: -5px 0 0 0;
+ -webkit-transition: 0.3s;
+ -moz-transition: 0.3s;
+ -o-transition: 0.3s;
+ -ms-transition: 0.3s;
+ transition: 0.3s; }
+
+input[type=range]:focus::-webkit-slider-runnable-track {
+ background: #ccc; }
+
+input[type=range] {
+ /* fix for FF unable to apply focus style bug */
+ border: 1px solid white;
+ /*required for proper track sizing in FF*/ }
+
+input[type=range]::-moz-range-track {
+ height: 3px;
+ background: #ddd;
+ border: none; }
+
+input[type=range]::-moz-range-thumb {
+ border: none;
+ height: 14px;
+ width: 14px;
+ border-radius: 50%;
+ background: #26a69a;
+ margin-top: -5px; }
+
+/*hide the outline behind the border*/
+input[type=range]:-moz-focusring {
+ outline: 1px solid white;
+ outline-offset: -1px; }
+
+input[type=range]:focus::-moz-range-track {
+ background: #ccc; }
+
+input[type=range]::-ms-track {
+ height: 3px;
+ /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
+ background: transparent;
+ /*leave room for the larger thumb to overflow with a transparent border */
+ border-color: transparent;
+ border-width: 6px 0;
+ /*remove default tick marks*/
+ color: transparent; }
+
+input[type=range]::-ms-fill-lower {
+ background: #777; }
+
+input[type=range]::-ms-fill-upper {
+ background: #ddd; }
+
+input[type=range]::-ms-thumb {
+ border: none;
+ height: 14px;
+ width: 14px;
+ border-radius: 50%;
+ background: #26a69a; }
+
+input[type=range]:focus::-ms-fill-lower {
+ background: #888; }
+
+input[type=range]:focus::-ms-fill-upper {
+ background: #ccc; }
+
+/***************************
+ Text Inputs + Textarea
+****************************/
+select {
+ background-color: rgba(255, 255, 255, 0.9);
+ width: 100%;
+ padding: 5px;
+ border: 1px solid #f2f2f2;
+ border-radius: 2px;
+ height: 3rem; }
+
+/***************
+ Nav List
+***************/
+.table-of-contents.fixed {
+ position: fixed; }
+.table-of-contents li {
+ padding: 2px 0; }
+.table-of-contents a {
+ display: inline-block;
+ font-weight: 300;
+ color: #757575;
+ padding-left: 20px;
+ height: 1.5rem;
+ line-height: 1.5rem;
+ letter-spacing: .4;
+ display: inline-block; }
+ .table-of-contents a:hover {
+ color: #a8a8a8;
+ padding-left: 19px;
+ border-left: 1px solid #ea4a4f; }
+ .table-of-contents a.active {
+ font-weight: 500;
+ padding-left: 18px;
+ border-left: 2px solid #ea4a4f; }
+
+.side-nav {
+ position: fixed;
+ width: 240px;
+ left: -105%;
+ top: 0;
+ margin: 0;
+ height: 100%;
+ height: calc(100% + 60px);
+ height: -moz-calc(100%);
+ padding-bottom: 60px;
+ background-color: #fff;
+ z-index: 999;
+ overflow-y: auto;
+ will-change: left; }
+ .side-nav.right-aligned {
+ will-change: right;
+ right: -105%;
+ left: auto; }
+ .side-nav .collapsible {
+ margin: 0; }
+ .side-nav li {
+ float: none;
+ padding: 0 15px; }
+ .side-nav li:hover, .side-nav li.active {
+ background-color: #ddd; }
+ .side-nav a {
+ color: #444;
+ display: block;
+ font-size: 1rem;
+ height: 64px;
+ line-height: 64px;
+ padding: 0 15px; }
+
+.drag-target {
+ height: 100%;
+ width: 10px;
+ position: fixed;
+ top: 0;
+ z-index: 998; }
+
+.side-nav.fixed a {
+ display: block;
+ padding: 0 15px;
+ color: #444; }
+
+.side-nav.fixed {
+ left: 0;
+ position: fixed; }
+ .side-nav.fixed.right-aligned {
+ right: 0;
+ left: auto; }
+
+@media only screen and (max-width: 992px) {
+ .side-nav.fixed {
+ left: -105%; }
+ .side-nav.fixed.right-aligned {
+ right: -105%;
+ left: auto; } }
+.side-nav .collapsible-body li.active,
+.side-nav.fixed .collapsible-body li.active {
+ background-color: #ee6e73; }
+ .side-nav .collapsible-body li.active a,
+ .side-nav.fixed .collapsible-body li.active a {
+ color: #fff; }
+
+#sidenav-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 120vh;
+ background-color: rgba(0, 0, 0, 0.5);
+ z-index: 997;
+ will-change: opacity; }
+
+/*
+ @license
+ Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+/**************************/
+/* STYLES FOR THE SPINNER */
+/**************************/
+/*
+ * Constants:
+ * STROKEWIDTH = 3px
+ * ARCSIZE = 270 degrees (amount of circle the arc takes up)
+ * ARCTIME = 1333ms (time it takes to expand and contract arc)
+ * ARCSTARTROT = 216 degrees (how much the start location of the arc
+ * should rotate each time, 216 gives us a
+ * 5 pointed star shape (it's 360/5 * 3).
+ * For a 7 pointed star, we might do
+ * 360/7 * 3 = 154.286)
+ * CONTAINERWIDTH = 28px
+ * SHRINK_TIME = 400ms
+ */
+.preloader-wrapper {
+ display: inline-block;
+ position: relative;
+ width: 48px;
+ height: 48px; }
+ .preloader-wrapper.small {
+ width: 36px;
+ height: 36px; }
+ .preloader-wrapper.big {
+ width: 64px;
+ height: 64px; }
+ .preloader-wrapper.active {
+ /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */
+ -webkit-animation: container-rotate 1568ms linear infinite;
+ animation: container-rotate 1568ms linear infinite; }
+
+@-webkit-keyframes container-rotate {
+ to {
+ -webkit-transform: rotate(360deg); } }
+@keyframes container-rotate {
+ to {
+ transform: rotate(360deg); } }
+.spinner-layer {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ opacity: 0; }
+
+.spinner-blue,
+.spinner-blue-only {
+ border-color: #4285f4; }
+
+.spinner-red,
+.spinner-red-only {
+ border-color: #db4437; }
+
+.spinner-yellow,
+.spinner-yellow-only {
+ border-color: #f4b400; }
+
+.spinner-green,
+.spinner-green-only {
+ border-color: #0f9d58; }
+
+/**
+ * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):
+ *
+ * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't
+ * guarantee that the animation will start _exactly_ after that value. So we avoid using
+ * animation-delay and instead set custom keyframes for each color (as redundant as it
+ * seems).
+ *
+ * We write out each animation in full (instead of separating animation-name,
+ * animation-duration, etc.) because under the polyfill, Safari does not recognize those
+ * specific properties properly, treats them as -webkit-animation, and overrides the
+ * other animation rules. See https://github.com/Polymer/platform/issues/53.
+ */
+.active .spinner-layer.spinner-blue {
+ /* durations: 4 * ARCTIME */
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
+
+.active .spinner-layer.spinner-red {
+ /* durations: 4 * ARCTIME */
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
+
+.active .spinner-layer.spinner-yellow {
+ /* durations: 4 * ARCTIME */
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
+
+.active .spinner-layer.spinner-green {
+ /* durations: 4 * ARCTIME */
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
+
+.active .spinner-layer.spinner-blue-only,
+.active .spinner-layer.spinner-red-only,
+.active .spinner-layer.spinner-yellow-only,
+.active .spinner-layer.spinner-green-only {
+ /* durations: 4 * ARCTIME */
+ opacity: 1;
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
+
+@-webkit-keyframes fill-unfill-rotate {
+ 12.5% {
+ -webkit-transform: rotate(135deg); }
+ /* 0.5 * ARCSIZE */
+ 25% {
+ -webkit-transform: rotate(270deg); }
+ /* 1 * ARCSIZE */
+ 37.5% {
+ -webkit-transform: rotate(405deg); }
+ /* 1.5 * ARCSIZE */
+ 50% {
+ -webkit-transform: rotate(540deg); }
+ /* 2 * ARCSIZE */
+ 62.5% {
+ -webkit-transform: rotate(675deg); }
+ /* 2.5 * ARCSIZE */
+ 75% {
+ -webkit-transform: rotate(810deg); }
+ /* 3 * ARCSIZE */
+ 87.5% {
+ -webkit-transform: rotate(945deg); }
+ /* 3.5 * ARCSIZE */
+ to {
+ -webkit-transform: rotate(1080deg); }
+ /* 4 * ARCSIZE */ }
+@keyframes fill-unfill-rotate {
+ 12.5% {
+ transform: rotate(135deg); }
+ /* 0.5 * ARCSIZE */
+ 25% {
+ transform: rotate(270deg); }
+ /* 1 * ARCSIZE */
+ 37.5% {
+ transform: rotate(405deg); }
+ /* 1.5 * ARCSIZE */
+ 50% {
+ transform: rotate(540deg); }
+ /* 2 * ARCSIZE */
+ 62.5% {
+ transform: rotate(675deg); }
+ /* 2.5 * ARCSIZE */
+ 75% {
+ transform: rotate(810deg); }
+ /* 3 * ARCSIZE */
+ 87.5% {
+ transform: rotate(945deg); }
+ /* 3.5 * ARCSIZE */
+ to {
+ transform: rotate(1080deg); }
+ /* 4 * ARCSIZE */ }
+@-webkit-keyframes blue-fade-in-out {
+ from {
+ opacity: 1; }
+ 25% {
+ opacity: 1; }
+ 26% {
+ opacity: 0; }
+ 89% {
+ opacity: 0; }
+ 90% {
+ opacity: 1; }
+ 100% {
+ opacity: 1; } }
+@keyframes blue-fade-in-out {
+ from {
+ opacity: 1; }
+ 25% {
+ opacity: 1; }
+ 26% {
+ opacity: 0; }
+ 89% {
+ opacity: 0; }
+ 90% {
+ opacity: 1; }
+ 100% {
+ opacity: 1; } }
+@-webkit-keyframes red-fade-in-out {
+ from {
+ opacity: 0; }
+ 15% {
+ opacity: 0; }
+ 25% {
+ opacity: 1; }
+ 50% {
+ opacity: 1; }
+ 51% {
+ opacity: 0; } }
+@keyframes red-fade-in-out {
+ from {
+ opacity: 0; }
+ 15% {
+ opacity: 0; }
+ 25% {
+ opacity: 1; }
+ 50% {
+ opacity: 1; }
+ 51% {
+ opacity: 0; } }
+@-webkit-keyframes yellow-fade-in-out {
+ from {
+ opacity: 0; }
+ 40% {
+ opacity: 0; }
+ 50% {
+ opacity: 1; }
+ 75% {
+ opacity: 1; }
+ 76% {
+ opacity: 0; } }
+@keyframes yellow-fade-in-out {
+ from {
+ opacity: 0; }
+ 40% {
+ opacity: 0; }
+ 50% {
+ opacity: 1; }
+ 75% {
+ opacity: 1; }
+ 76% {
+ opacity: 0; } }
+@-webkit-keyframes green-fade-in-out {
+ from {
+ opacity: 0; }
+ 65% {
+ opacity: 0; }
+ 75% {
+ opacity: 1; }
+ 90% {
+ opacity: 1; }
+ 100% {
+ opacity: 0; } }
+@keyframes green-fade-in-out {
+ from {
+ opacity: 0; }
+ 65% {
+ opacity: 0; }
+ 75% {
+ opacity: 1; }
+ 90% {
+ opacity: 1; }
+ 100% {
+ opacity: 0; } }
+/**
+ * Patch the gap that appear between the two adjacent div.circle-clipper while the
+ * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).
+ */
+.gap-patch {
+ position: absolute;
+ top: 0;
+ left: 45%;
+ width: 10%;
+ height: 100%;
+ overflow: hidden;
+ border-color: inherit; }
+
+.gap-patch .circle {
+ width: 1000%;
+ left: -450%; }
+
+.circle-clipper {
+ display: inline-block;
+ position: relative;
+ width: 50%;
+ height: 100%;
+ overflow: hidden;
+ border-color: inherit; }
+ .circle-clipper .circle {
+ width: 200%;
+ height: 100%;
+ border-width: 3px;
+ /* STROKEWIDTH */
+ border-style: solid;
+ border-color: inherit;
+ border-bottom-color: transparent !important;
+ border-radius: 50%;
+ -webkit-animation: none;
+ animation: none;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0; }
+ .circle-clipper.left .circle {
+ left: 0;
+ border-right-color: transparent !important;
+ -webkit-transform: rotate(129deg);
+ transform: rotate(129deg); }
+ .circle-clipper.right .circle {
+ left: -100%;
+ border-left-color: transparent !important;
+ -webkit-transform: rotate(-129deg);
+ transform: rotate(-129deg); }
+
+.active .circle-clipper.left .circle {
+ /* duration: ARCTIME */
+ -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
+ animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
+
+.active .circle-clipper.right .circle {
+ /* duration: ARCTIME */
+ -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
+ animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
+
+@-webkit-keyframes left-spin {
+ from {
+ -webkit-transform: rotate(130deg); }
+ 50% {
+ -webkit-transform: rotate(-5deg); }
+ to {
+ -webkit-transform: rotate(130deg); } }
+@keyframes left-spin {
+ from {
+ transform: rotate(130deg); }
+ 50% {
+ transform: rotate(-5deg); }
+ to {
+ transform: rotate(130deg); } }
+@-webkit-keyframes right-spin {
+ from {
+ -webkit-transform: rotate(-130deg); }
+ 50% {
+ -webkit-transform: rotate(5deg); }
+ to {
+ -webkit-transform: rotate(-130deg); } }
+@keyframes right-spin {
+ from {
+ transform: rotate(-130deg); }
+ 50% {
+ transform: rotate(5deg); }
+ to {
+ transform: rotate(-130deg); } }
+#spinnerContainer.cooldown {
+ /* duration: SHRINK_TIME */
+ -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);
+ animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); }
+
+@-webkit-keyframes fade-out {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0; } }
+@keyframes fade-out {
+ from {
+ opacity: 1; }
+ to {
+ opacity: 0; } }
+.slider {
+ position: relative;
+ height: 400px;
+ width: 100%; }
+ .slider.fullscreen {
+ height: 100%;
+ width: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0; }
+ .slider.fullscreen ul.slides {
+ height: 100%; }
+ .slider.fullscreen ul.indicators {
+ z-index: 2;
+ bottom: 30px; }
+ .slider .slides {
+ background-color: #9e9e9e;
+ margin: 0;
+ height: 400px; }
+ .slider .slides li {
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ width: 100%;
+ height: inherit;
+ overflow: hidden; }
+ .slider .slides li img {
+ height: 100%;
+ width: 100%;
+ background-size: cover;
+ background-position: center; }
+ .slider .slides li .caption {
+ color: #fff;
+ position: absolute;
+ top: 15%;
+ left: 15%;
+ width: 70%;
+ opacity: 0; }
+ .slider .slides li .caption p {
+ color: #e0e0e0; }
+ .slider .slides li.active {
+ z-index: 2; }
+ .slider .indicators {
+ position: absolute;
+ text-align: center;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: 0; }
+ .slider .indicators .indicator-item {
+ display: inline-block;
+ position: relative;
+ cursor: pointer;
+ height: 16px;
+ width: 16px;
+ margin: 0 12px;
+ background-color: #e0e0e0;
+ -webkit-transition: background-color 0.3s;
+ -moz-transition: background-color 0.3s;
+ -o-transition: background-color 0.3s;
+ -ms-transition: background-color 0.3s;
+ transition: background-color 0.3s;
+ border-radius: 50%; }
+ .slider .indicators .indicator-item.active {
+ background-color: #4CAF50; }
+
+/* ==========================================================================
+ $BASE-PICKER
+ ========================================================================== */
+/**
+ * Note: the root picker element should *NOT* be styled more than what's here.
+ */
+.picker {
+ font-size: 16px;
+ text-align: left;
+ line-height: 1.2;
+ color: #000000;
+ position: absolute;
+ z-index: 10000;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+
+/**
+ * The picker input element.
+ */
+.picker__input {
+ cursor: default; }
+
+/**
+ * When the picker is opened, the input element is "activated".
+ */
+.picker__input.picker__input--active {
+ border-color: #0089ec; }
+
+/**
+ * The holder is the only "scrollable" top-level container element.
+ */
+.picker__holder {
+ width: 100%;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch; }
+
+/*!
+ * Default mobile-first, responsive styling for pickadate.js
+ * Demo: http://amsul.github.io/pickadate.js
+ */
+/**
+ * Note: the root picker element should *NOT* be styled more than what's here.
+ */
+/**
+ * Make the holder and frame fullscreen.
+ */
+.picker__holder,
+.picker__frame {
+ bottom: 0;
+ left: 0;
+ right: 0;
+ top: 100%; }
+
+/**
+ * The holder should overlay the entire screen.
+ */
+.picker__holder {
+ position: fixed;
+ -webkit-transition: background 0.15s ease-out, top 0s 0.15s;
+ -moz-transition: background 0.15s ease-out, top 0s 0.15s;
+ transition: background 0.15s ease-out, top 0s 0.15s;
+ -webkit-backface-visibility: hidden; }
+
+/**
+ * The frame that bounds the box contents of the picker.
+ */
+.picker__frame {
+ position: absolute;
+ margin: 0 auto;
+ min-width: 256px;
+ width: 300px;
+ max-height: 350px;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ -moz-opacity: 0;
+ opacity: 0;
+ -webkit-transition: all 0.15s ease-out;
+ -moz-transition: all 0.15s ease-out;
+ transition: all 0.15s ease-out; }
+
+@media (min-height: 28.875em) {
+ .picker__frame {
+ overflow: visible;
+ top: auto;
+ bottom: -100%;
+ max-height: 80%; } }
+@media (min-height: 40.125em) {
+ .picker__frame {
+ margin-bottom: 7.5%; } }
+/**
+ * The wrapper sets the stage to vertically align the box contents.
+ */
+.picker__wrap {
+ display: table;
+ width: 100%;
+ height: 100%; }
+
+@media (min-height: 28.875em) {
+ .picker__wrap {
+ display: block; } }
+/**
+ * The box contains all the picker contents.
+ */
+.picker__box {
+ background: #ffffff;
+ display: table-cell;
+ vertical-align: middle; }
+
+@media (min-height: 28.875em) {
+ .picker__box {
+ display: block;
+ border: 1px solid #777777;
+ border-top-color: #898989;
+ border-bottom-width: 0;
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+ -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);
+ -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);
+ box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); } }
+/**
+ * When the picker opens...
+ */
+.picker--opened .picker__holder {
+ top: 0;
+ background: transparent;
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)";
+ zoom: 1;
+ background: rgba(0, 0, 0, 0.32);
+ -webkit-transition: background 0.15s ease-out;
+ -moz-transition: background 0.15s ease-out;
+ transition: background 0.15s ease-out; }
+
+.picker--opened .picker__frame {
+ top: 0;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ filter: alpha(opacity=100);
+ -moz-opacity: 1;
+ opacity: 1; }
+
+@media (min-height: 35.875em) {
+ .picker--opened .picker__frame {
+ top: 10%;
+ bottom: 20% auto; } }
+/**
+ * For `large` screens, transform into an inline picker.
+ */
+/* ==========================================================================
+ CUSTOM MATERIALIZE STYLES
+ ========================================================================== */
+.picker__input.picker__input--active {
+ border-color: #E3F2FD; }
+
+.picker__frame {
+ margin: 0 auto;
+ max-width: 325px; }
+
+@media (min-height: 38.875em) {
+ .picker--opened .picker__frame {
+ top: 10%;
+ bottom: auto; } }
+/* ==========================================================================
+ $BASE-DATE-PICKER
+ ========================================================================== */
+/**
+ * The picker box.
+ */
+.picker__box {
+ padding: 0 1em; }
+
+/**
+ * The header containing the month and year stuff.
+ */
+.picker__header {
+ text-align: center;
+ position: relative;
+ margin-top: .75em; }
+
+/**
+ * The month and year labels.
+ */
+.picker__month,
+.picker__year {
+ display: inline-block;
+ margin-left: .25em;
+ margin-right: .25em; }
+
+/**
+ * The month and year selectors.
+ */
+.picker__select--month,
+.picker__select--year {
+ height: 2em;
+ padding: 0;
+ margin-left: .25em;
+ margin-right: .25em; }
+
+.picker__select--month.browser-default {
+ display: inline;
+ background-color: #FFFFFF;
+ width: 40%; }
+
+.picker__select--year.browser-default {
+ display: inline;
+ background-color: #FFFFFF;
+ width: 25%; }
+
+.picker__select--month:focus,
+.picker__select--year:focus {
+ border-color: rgba(0, 0, 0, 0.05); }
+
+/**
+ * The month navigation buttons.
+ */
+.picker__nav--prev,
+.picker__nav--next {
+ position: absolute;
+ padding: .5em 1.25em;
+ width: 1em;
+ height: 1em;
+ box-sizing: content-box;
+ top: -0.25em; }
+
+.picker__nav--prev {
+ left: -1em;
+ padding-right: 1.25em; }
+
+.picker__nav--next {
+ right: -1em;
+ padding-left: 1.25em; }
+
+.picker__nav--disabled,
+.picker__nav--disabled:hover,
+.picker__nav--disabled:before,
+.picker__nav--disabled:before:hover {
+ cursor: default;
+ background: none;
+ border-right-color: #f5f5f5;
+ border-left-color: #f5f5f5; }
+
+/**
+ * The calendar table of dates
+ */
+.picker__table {
+ text-align: center;
+ border-collapse: collapse;
+ border-spacing: 0;
+ table-layout: fixed;
+ font-size: 1rem;
+ width: 100%;
+ margin-top: .75em;
+ margin-bottom: .5em; }
+
+.picker__table th, .picker__table td {
+ text-align: center; }
+
+.picker__table td {
+ margin: 0;
+ padding: 0; }
+
+/**
+ * The weekday labels
+ */
+.picker__weekday {
+ width: 14.285714286%;
+ font-size: .75em;
+ padding-bottom: .25em;
+ color: #999999;
+ font-weight: 500;
+ /* Increase the spacing a tad */ }
+
+@media (min-height: 33.875em) {
+ .picker__weekday {
+ padding-bottom: .5em; } }
+/**
+ * The days on the calendar
+ */
+.picker__day--today {
+ position: relative;
+ color: #595959;
+ letter-spacing: -.3;
+ padding: .75rem 0;
+ font-weight: 400;
+ border: 1px solid transparent; }
+
+.picker__day--disabled:before {
+ border-top-color: #aaaaaa; }
+
+.picker__day--infocus:hover {
+ cursor: pointer;
+ color: #000;
+ font-weight: 500; }
+
+.picker__day--outfocus {
+ display: none;
+ padding: .75rem 0;
+ color: #fff; }
+
+.picker__day--outfocus:hover {
+ cursor: pointer;
+ color: #dddddd;
+ font-weight: 500; }
+
+.picker__day--highlighted:hover,
+.picker--focused .picker__day--highlighted {
+ cursor: pointer; }
+
+.picker__day--selected,
+.picker__day--selected:hover,
+.picker--focused .picker__day--selected {
+ border-radius: 50%;
+ -webkit-transform: scale(0.75);
+ -moz-transform: scale(0.75);
+ -ms-transform: scale(0.75);
+ -o-transform: scale(0.75);
+ transform: scale(0.75);
+ background: #0089ec;
+ color: #ffffff; }
+
+.picker__day--disabled,
+.picker__day--disabled:hover,
+.picker--focused .picker__day--disabled {
+ background: #f5f5f5;
+ border-color: #f5f5f5;
+ color: #dddddd;
+ cursor: default; }
+
+.picker__day--highlighted.picker__day--disabled,
+.picker__day--highlighted.picker__day--disabled:hover {
+ background: #bbbbbb; }
+
+/**
+ * The footer containing the "today", "clear", and "close" buttons.
+ */
+.picker__footer {
+ text-align: center;
+ display: flex;
+ align-items: center;
+ justify-content: space-between; }
+
+.picker__button--today,
+.picker__button--clear,
+.picker__button--close {
+ border: 1px solid #ffffff;
+ background: #ffffff;
+ font-size: .8em;
+ padding: .66em 0;
+ font-weight: bold;
+ width: 33%;
+ display: inline-block;
+ vertical-align: bottom; }
+
+.picker__button--today:hover,
+.picker__button--clear:hover,
+.picker__button--close:hover {
+ cursor: pointer;
+ color: #000000;
+ background: #b1dcfb;
+ border-bottom-color: #b1dcfb; }
+
+.picker__button--today:focus,
+.picker__button--clear:focus,
+.picker__button--close:focus {
+ background: #b1dcfb;
+ border-color: rgba(0, 0, 0, 0.05);
+ outline: none; }
+
+.picker__button--today:before,
+.picker__button--clear:before,
+.picker__button--close:before {
+ position: relative;
+ display: inline-block;
+ height: 0; }
+
+.picker__button--today:before,
+.picker__button--clear:before {
+ content: " ";
+ margin-right: .45em; }
+
+.picker__button--today:before {
+ top: -0.05em;
+ width: 0;
+ border-top: 0.66em solid #0059bc;
+ border-left: .66em solid transparent; }
+
+.picker__button--clear:before {
+ top: -0.25em;
+ width: .66em;
+ border-top: 3px solid #ee2200; }
+
+.picker__button--close:before {
+ content: "\D7";
+ top: -0.1em;
+ vertical-align: top;
+ font-size: 1.1em;
+ margin-right: .35em;
+ color: #777777; }
+
+.picker__button--today[disabled],
+.picker__button--today[disabled]:hover {
+ background: #f5f5f5;
+ border-color: #f5f5f5;
+ color: #dddddd;
+ cursor: default; }
+
+.picker__button--today[disabled]:before {
+ border-top-color: #aaaaaa; }
+
+/* ==========================================================================
+ CUSTOM MATERIALIZE STYLES
+ ========================================================================== */
+.picker__box {
+ border-radius: 2px;
+ overflow: hidden; }
+
+.picker__date-display {
+ text-align: center;
+ background-color: #26a69a;
+ color: #fff;
+ padding-bottom: 15px;
+ font-weight: 300; }
+
+.picker__nav--prev:hover,
+.picker__nav--next:hover {
+ cursor: pointer;
+ color: #000000;
+ background: #a1ded8; }
+
+.picker__weekday-display {
+ background-color: #1f897f;
+ padding: 10px;
+ font-weight: 200;
+ letter-spacing: .5;
+ font-size: 1rem;
+ margin-bottom: 15px; }
+
+.picker__month-display {
+ text-transform: uppercase;
+ font-size: 2rem; }
+
+.picker__day-display {
+ font-size: 4.5rem;
+ font-weight: 400; }
+
+.picker__year-display {
+ font-size: 1.8rem;
+ color: rgba(255, 255, 255, 0.4); }
+
+.picker__box {
+ padding: 0; }
+
+.picker__calendar-container {
+ padding: 0 1rem; }
+ .picker__calendar-container thead {
+ border: none; }
+
+.picker__table {
+ margin-top: 0;
+ margin-bottom: .5em; }
+
+.picker__day--infocus {
+ color: #595959;
+ letter-spacing: -.3;
+ padding: .75rem 0;
+ font-weight: 400;
+ border: 1px solid transparent; }
+
+.picker__day.picker__day--today {
+ color: #26a69a; }
+
+.picker__day.picker__day--today.picker__day--selected {
+ color: #fff; }
+
+.picker__weekday {
+ font-size: .9rem; }
+
+.picker__day--selected,
+.picker__day--selected:hover,
+.picker--focused .picker__day--selected {
+ border-radius: 50%;
+ -webkit-transform: scale(0.9);
+ -moz-transform: scale(0.9);
+ -ms-transform: scale(0.9);
+ -o-transform: scale(0.9);
+ transform: scale(0.9);
+ background-color: #26a69a;
+ color: #ffffff; }
+ .picker__day--selected.picker__day--outfocus,
+ .picker__day--selected:hover.picker__day--outfocus,
+ .picker--focused .picker__day--selected.picker__day--outfocus {
+ background-color: #a1ded8; }
+
+.picker__footer {
+ text-align: right;
+ padding: 5px 10px; }
+
+.picker__close, .picker__today {
+ font-size: 1.1rem;
+ padding: 0 1rem;
+ color: #26a69a; }
+
+.picker__nav--prev:before,
+.picker__nav--next:before {
+ content: " ";
+ border-top: .5em solid transparent;
+ border-bottom: .5em solid transparent;
+ border-right: 0.75em solid #676767;
+ width: 0;
+ height: 0;
+ display: block;
+ margin: 0 auto; }
+
+.picker__nav--next:before {
+ border-right: 0;
+ border-left: 0.75em solid #676767; }
+
+button.picker__today:focus, button.picker__clear:focus, button.picker__close:focus {
+ background-color: #a1ded8; }
+
+/* ==========================================================================
+ $BASE-TIME-PICKER
+ ========================================================================== */
+/**
+ * The list of times.
+ */
+.picker__list {
+ list-style: none;
+ padding: 0.75em 0 4.2em;
+ margin: 0; }
+
+/**
+ * The times on the clock.
+ */
+.picker__list-item {
+ border-bottom: 1px solid #dddddd;
+ border-top: 1px solid #dddddd;
+ margin-bottom: -1px;
+ position: relative;
+ background: #ffffff;
+ padding: .75em 1.25em; }
+
+@media (min-height: 46.75em) {
+ .picker__list-item {
+ padding: .5em 1em; } }
+/* Hovered time */
+.picker__list-item:hover {
+ cursor: pointer;
+ color: #000000;
+ background: #b1dcfb;
+ border-color: #0089ec;
+ z-index: 10; }
+
+/* Highlighted and hovered/focused time */
+.picker__list-item--highlighted {
+ border-color: #0089ec;
+ z-index: 10; }
+
+.picker__list-item--highlighted:hover,
+.picker--focused .picker__list-item--highlighted {
+ cursor: pointer;
+ color: #000000;
+ background: #b1dcfb; }
+
+/* Selected and hovered/focused time */
+.picker__list-item--selected,
+.picker__list-item--selected:hover,
+.picker--focused .picker__list-item--selected {
+ background: #0089ec;
+ color: #ffffff;
+ z-index: 10; }
+
+/* Disabled time */
+.picker__list-item--disabled,
+.picker__list-item--disabled:hover,
+.picker--focused .picker__list-item--disabled {
+ background: #f5f5f5;
+ border-color: #f5f5f5;
+ color: #dddddd;
+ cursor: default;
+ border-color: #dddddd;
+ z-index: auto; }
+
+/**
+ * The clear button
+ */
+.picker--time .picker__button--clear {
+ display: block;
+ width: 80%;
+ margin: 1em auto 0;
+ padding: 1em 1.25em;
+ background: none;
+ border: 0;
+ font-weight: 500;
+ font-size: .67em;
+ text-align: center;
+ text-transform: uppercase;
+ color: #666; }
+
+.picker--time .picker__button--clear:hover,
+.picker--time .picker__button--clear:focus {
+ color: #000000;
+ background: #b1dcfb;
+ background: #ee2200;
+ border-color: #ee2200;
+ cursor: pointer;
+ color: #ffffff;
+ outline: none; }
+
+.picker--time .picker__button--clear:before {
+ top: -0.25em;
+ color: #666;
+ font-size: 1.25em;
+ font-weight: bold; }
+
+.picker--time .picker__button--clear:hover:before,
+.picker--time .picker__button--clear:focus:before {
+ color: #ffffff; }
+
+/* ==========================================================================
+ $DEFAULT-TIME-PICKER
+ ========================================================================== */
+/**
+ * The frame the bounds the time picker.
+ */
+.picker--time .picker__frame {
+ min-width: 256px;
+ max-width: 320px; }
+
+/**
+ * The picker box.
+ */
+.picker--time .picker__box {
+ font-size: 1em;
+ background: #f2f2f2;
+ padding: 0; }
+
+@media (min-height: 40.125em) {
+ .picker--time .picker__box {
+ margin-bottom: 5em; } }
+
+/*# sourceMappingURL=materialize.css.map */
diff --git a/system/admin/static/editor/css/materialize.css.map b/system/admin/static/editor/css/materialize.css.map
new file mode 100644
index 0000000..ec81214
--- /dev/null
+++ b/system/admin/static/editor/css/materialize.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["../sass/components/_color.scss","../sass/components/_normalize.scss","../sass/components/_global.scss","../sass/components/_variables.scss","../sass/components/_prefixer.scss","../sass/components/_icons-material-design.scss","../sass/components/_grid.scss","../sass/components/_navbar.scss","../sass/components/_roboto.scss","../sass/components/_typography.scss","../sass/components/_cards.scss","../sass/components/_toast.scss","../sass/components/_tabs.scss","../sass/components/_tooltip.scss","../sass/components/_buttons.scss","../sass/components/_dropdown.scss","../sass/components/_waves.scss","../sass/components/_modal.scss","../sass/components/_collapsible.scss","../sass/components/_materialbox.scss","../sass/components/_form.scss","../sass/components/_table_of_contents.scss","../sass/components/_sideNav.scss","../sass/components/_preloader.scss","../sass/components/_slider.scss","../sass/components/date_picker/_default.scss","../sass/components/date_picker/_default.date.scss","../sass/components/date_picker/_default.time.scss"],
+"names": [],
+"file": "materialize.css"
+}
diff --git a/system/admin/static/editor/font/roboto/Roboto-Bold.ttf b/system/admin/static/editor/font/roboto/Roboto-Bold.ttf
new file mode 100644
index 0000000..68822ca
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Bold.ttf
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Bold.woff b/system/admin/static/editor/font/roboto/Roboto-Bold.woff
new file mode 100644
index 0000000..1f75afd
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Bold.woff
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Bold.woff2 b/system/admin/static/editor/font/roboto/Roboto-Bold.woff2
new file mode 100644
index 0000000..350d1c3
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Bold.woff2
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Light.ttf b/system/admin/static/editor/font/roboto/Roboto-Light.ttf
new file mode 100644
index 0000000..aa45340
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Light.ttf
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Light.woff b/system/admin/static/editor/font/roboto/Roboto-Light.woff
new file mode 100644
index 0000000..3480c6c
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Light.woff
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Light.woff2 b/system/admin/static/editor/font/roboto/Roboto-Light.woff2
new file mode 100644
index 0000000..9a4d98c
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Light.woff2
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Medium.ttf b/system/admin/static/editor/font/roboto/Roboto-Medium.ttf
new file mode 100644
index 0000000..a3c1a1f
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Medium.ttf
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Medium.woff b/system/admin/static/editor/font/roboto/Roboto-Medium.woff
new file mode 100644
index 0000000..1186773
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Medium.woff
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Medium.woff2 b/system/admin/static/editor/font/roboto/Roboto-Medium.woff2
new file mode 100644
index 0000000..d10a592
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Medium.woff2
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Regular.ttf b/system/admin/static/editor/font/roboto/Roboto-Regular.ttf
new file mode 100644
index 0000000..0e58508
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Regular.ttf
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Regular.woff b/system/admin/static/editor/font/roboto/Roboto-Regular.woff
new file mode 100644
index 0000000..f823258
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Regular.woff
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Regular.woff2 b/system/admin/static/editor/font/roboto/Roboto-Regular.woff2
new file mode 100644
index 0000000..b7082ef
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Regular.woff2
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Thin.ttf b/system/admin/static/editor/font/roboto/Roboto-Thin.ttf
new file mode 100644
index 0000000..8779333
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Thin.ttf
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Thin.woff b/system/admin/static/editor/font/roboto/Roboto-Thin.woff
new file mode 100644
index 0000000..2a98c1e
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Thin.woff
Binary files differ
diff --git a/system/admin/static/editor/font/roboto/Roboto-Thin.woff2 b/system/admin/static/editor/font/roboto/Roboto-Thin.woff2
new file mode 100644
index 0000000..a38025a
--- /dev/null
+++ b/system/admin/static/editor/font/roboto/Roboto-Thin.woff2
Binary files differ
diff --git a/system/admin/static/editor/js/ckMaterializeOverrides.js b/system/admin/static/editor/js/ckMaterializeOverrides.js
new file mode 100644
index 0000000..fd1b2db
--- /dev/null
+++ b/system/admin/static/editor/js/ckMaterializeOverrides.js
@@ -0,0 +1,172 @@
+(function ($) {
+ $.fn.ckTooltip = function (options) {
+ var timeout = null,
+ counter = null,
+ started = false,
+ counterInterval = null,
+ margin = 5;
+
+ // Defaults
+ var defaults = {
+ delay: 350
+ };
+ options = $.extend(defaults, options);
+
+ return this.each(function(){
+ var origin = $(this);
+
+ // Create Text span
+ var tooltip_text = $('<span></span>').text(origin.attr('data-tooltip'));
+
+ // Create tooltip
+ var newTooltip = $('<div></div>');
+ newTooltip.addClass('material-tooltip').append(tooltip_text);
+ newTooltip.appendTo($('body'));
+
+ var backdrop = $('<div></div>').addClass('backdrop');
+ backdrop.appendTo(newTooltip);
+ backdrop.css({ top: 0, left:0 });
+
+ //Destroy previously binded events
+ //$(this).off('mouseenter mouseleave');
+
+ $.event.special.destroyed = {
+ remove: function(o) {
+ if (o.handler) {
+ o.handler();
+ }
+ }
+ };
+ $(this).bind('destroyed', function() {
+ newTooltip.remove();
+ });
+
+ // Mouse In
+ $(this).on({
+ mouseenter: function(e) {
+ var tooltip_delay = origin.data("delay");
+
+ tooltip_delay = (tooltip_delay === undefined || tooltip_delay === '') ? options.delay : tooltip_delay;
+ counter = 0;
+ counterInterval = setInterval(function(){
+ counter += 10;
+
+ if (counter >= tooltip_delay && started === false) {
+ started = true;
+ newTooltip.css({ display: 'block', left: '0px', top: '0px' });
+
+ // Set Tooltip text
+ newTooltip.children('span').text(origin.attr('data-tooltip'));
+
+ // Tooltip positioning
+ var originWidth = origin.outerWidth();
+ var originHeight = origin.outerHeight();
+ var tooltipPosition = origin.attr('data-position');
+ var tooltipHeight = newTooltip.outerHeight();
+ var tooltipWidth = newTooltip.outerWidth();
+ var tooltipVerticalMovement = '0px';
+ var tooltipHorizontalMovement = '0px';
+ var scale_factor = 8;
+
+ if (tooltipPosition === "top") {
+ // Top Position
+ newTooltip.css({
+ top: origin.offset().top - tooltipHeight - margin,
+ left: origin.offset().left + originWidth/2 - tooltipWidth/2
+ });
+ tooltipVerticalMovement = '-10px';
+ backdrop.css({
+ borderRadius: '14px 14px 0 0',
+ transformOrigin: '50% 90%',
+ marginTop: tooltipHeight,
+ marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
+
+ });
+ }
+ // Left Position
+ else if (tooltipPosition === "left") {
+ newTooltip.css({
+ top: origin.offset().top + originHeight/2 - tooltipHeight/2,
+ left: origin.offset().left - tooltipWidth - margin
+ });
+ tooltipHorizontalMovement = '-10px';
+ backdrop.css({
+ width: '14px',
+ height: '14px',
+ borderRadius: '14px 0 0 14px',
+ transformOrigin: '95% 50%',
+ marginTop: tooltipHeight/2,
+ marginLeft: tooltipWidth
+ });
+ }
+ // Right Position
+ else if (tooltipPosition === "right") {
+ newTooltip.css({
+ top: origin.offset().top + originHeight/2 - tooltipHeight/2,
+ left: origin.offset().left + originWidth + margin
+ });
+ tooltipHorizontalMovement = '+10px';
+ backdrop.css({
+ width: '14px',
+ height: '14px',
+ borderRadius: '0 14px 14px 0',
+ transformOrigin: '5% 50%',
+ marginTop: tooltipHeight/2,
+ marginLeft: '0px'
+ });
+ }
+ else {
+ // Bottom Position
+ newTooltip.css({
+ top: origin.offset().top + origin.outerHeight() + margin,
+ left: origin.offset().left + originWidth/2 - tooltipWidth/2
+ });
+ tooltipVerticalMovement = '+10px';
+ backdrop.css({
+ marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
+ });
+ }
+
+ // Calculate Scale to fill
+ scale_factor = tooltipWidth / 8;
+ if (scale_factor < 8) {
+ scale_factor = 8;
+ }
+ if (tooltipPosition === "right" || tooltipPosition === "left") {
+ scale_factor = tooltipWidth / 10;
+ if (scale_factor < 6)
+ scale_factor = 6;
+ }
+
+ newTooltip.velocity({ opacity: 1, marginTop: tooltipVerticalMovement, marginLeft: tooltipHorizontalMovement}, { duration: 150, queue: false });
+ backdrop.css({ display: 'block' })
+ .velocity({opacity:1},{duration: 50, delay: 0, queue: false})
+ .velocity({scale: scale_factor}, {duration: 150, delay: 0, queue: false, easing: 'easeInOutQuad'});
+ }
+ }, 10); // End Interval
+
+ // Mouse Out
+ },
+ mouseleave: function(){
+ // Reset State
+ clearInterval(counterInterval);
+ counter = 0;
+
+ // Animate back
+ newTooltip.velocity({
+ opacity: 0, marginTop: 0, marginLeft: 0}, { duration: 150, queue: false, delay: 50 }
+ );
+ backdrop.velocity({opacity: 0, scale: 1}, {
+ duration:150,
+ delay: 50, queue: false,
+ complete: function(){
+ backdrop.css('display', 'none');
+ newTooltip.css('display', 'none');
+ started = false;}
+ });
+ }
+ });
+ });
+ };
+
+}(jQuery));
diff --git a/system/admin/static/editor/js/materialNote.js b/system/admin/static/editor/js/materialNote.js
new file mode 100644
index 0000000..02e1bd2
--- /dev/null
+++ b/system/admin/static/editor/js/materialNote.js
@@ -0,0 +1,7469 @@
+/**
+ * MaterialNote v1.2.1
+ * Super simple wysiwyg editor on Materialize
+ * a fork of materialnote.js => http://materialnote.org/
+ *
+ * original summernote credits:
+ * summernote.js
+ * Copyright 2013-2015 Alan Hong. and other contributors
+ * summernote (and so materialNote) may be freely distributed under the MIT license./
+ * (https://raw.githubusercontent.com/Cerealkillerway/materialNote/master/license.txt)
+ *
+ * edited by CK (http://www.web-forge.info)
+ * thanks to Tox for code review (http://emanuele.itoscano.com/)
+ */
+(function(factory) {
+ /* global define */
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['jquery'], factory);
+ } else {
+ // Browser globals: jQuery
+ factory(window.jQuery);
+ }
+}(function($) {
+
+ if (!Array.prototype.reduce) {
+ /**
+ * Array.prototype.reduce polyfill
+ * @param {Function} callback
+ * @param {Value} [initialValue]
+ * @return {Value}
+ * @see http://goo.gl/WNriQD
+ */
+ Array.prototype.reduce = function(callback) {
+ var t = Object(this), len = t.length >>> 0, k = 0, value;
+
+ if (arguments.length === 2) {
+ value = arguments[1];
+ } else {
+ while (k < len && !(k in t)) {
+ k++;
+ }
+ if (k >= len) {
+ throw new TypeError('Reduce of empty array with no initial value');
+ }
+ value = t[k++];
+ }
+ for (; k < len; k++) {
+ if (k in t) {
+ value = callback(value, t[k], k, t);
+ }
+ }
+ return value;
+ };
+ }
+
+ if ('function' !== typeof Array.prototype.filter) {
+ /**
+ * Array.prototype.filter polyfill
+ * @param {Function} func
+ * @return {Array}
+ * @see http://goo.gl/T1KFnq
+ */
+ Array.prototype.filter = function(func) {
+ var t = Object(this), len = t.length >>> 0;
+ var res = [];
+ var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
+
+ for (var i = 0; i < len; i++) {
+ if (i in t) {
+ var val = t[i];
+
+ if (func.call(thisArg, val, i, t)) {
+ res.push(val);
+ }
+ }
+ }
+ return res;
+ };
+ }
+
+var isSupportAmd = typeof define === 'function' && define.amd;
+
+/**
+* returns whether font is installed or not.
+* @param {String} fontName
+* @return {Boolean}
+*/
+var isFontInstalled = function(fontName) {
+ if (fontName === "Roboto") return true;
+ var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';
+ var $tester = $('<div>').css({
+ position: 'absolute',
+ left: '-9999px',
+ top: '-9999px',
+ fontSize: '200px'
+ }).text('mmmmmmmmmwwwwwww').appendTo(document.body);
+
+ var originalWidth = $tester.css('fontFamily', testFontName).width();
+ var width = $tester.css('fontFamily', fontName + ',' + testFontName).width();
+
+ $tester.remove();
+
+ return originalWidth !== width;
+};
+
+
+var userAgent = navigator.userAgent;
+
+/**
+* @class core.agent
+* Object which check platform and agent
+* @singleton
+* @alternateClassName agent
+*/
+var agent = {
+ /** @property {Boolean} [isMac=false] true if this agent is Mac */
+ isMac: navigator.appVersion.indexOf('Mac') > -1,
+ /** @property {Boolean} [isMSIE=false] true if this agent is a Internet Explorer */
+ isMSIE: /MSIE|Trident/i.test(userAgent),
+ /** @property {Boolean} [isFF=false] true if this agent is a Firefox */
+ isFF: /firefox/i.test(userAgent),
+ isWebkit: /webkit/i.test(userAgent),
+ /** @property {Boolean} [isSafari=false] true if this agent is a Safari */
+ isSafari: /safari/i.test(userAgent),
+ /** @property {String} jqueryVersion current jQuery version string */
+ jqueryVersion: parseFloat($.fn.jquery),
+ isSupportAmd: isSupportAmd,
+ hasCodeMirror: isSupportAmd ? require.specified('CodeMirror') : !!window.CodeMirror,
+ isFontInstalled: isFontInstalled,
+ isW3CRangeSupport: !!document.createRange
+};
+
+/**
+* @class core.func
+* func utils (for high-order func's arg)
+* @singleton
+* @alternateClassName func
+*/
+var func = (function() {
+ var eq = function(itemA) {
+ return function(itemB) {
+ return itemA === itemB;
+ };
+ };
+
+ var eq2 = function(itemA, itemB) {
+ return itemA === itemB;
+ };
+
+ var peq2 = function(propName) {
+ return function(itemA, itemB) {
+ return itemA[propName] === itemB[propName];
+ };
+ };
+
+ var ok = function() {
+ return true;
+ };
+
+ var fail = function() {
+ return false;
+ };
+
+ var not = function(f) {
+ return function() {
+ return !f.apply(f, arguments);
+ };
+ };
+
+ var and = function(fA, fB) {
+ return function(item) {
+ return fA(item) && fB(item);
+ };
+ };
+
+ var self = function(a) {
+ return a;
+ };
+
+ var idCounter = 0;
+
+ /**
+ * generate a globally-unique id
+ * @param {String} [prefix]
+ */
+ var uniqueId = function(prefix) {
+ var id = ++idCounter + '';
+
+ return prefix ? prefix + id : id;
+ };
+
+ /**
+ * returns bnd (bounds) from rect
+ * - IE Compatability Issue: http://goo.gl/sRLOAo
+ * - Scroll Issue: http://goo.gl/sNjUc
+ * @param {Rect} rect
+ * @return {Object} bounds
+ * @return {Number} bounds.top
+ * @return {Number} bounds.left
+ * @return {Number} bounds.width
+ * @return {Number} bounds.height
+ */
+ var rect2bnd = function(rect) {
+ var $document = $(document);
+ return {
+ top: rect.top + $document.scrollTop(),
+ left: rect.left + $document.scrollLeft(),
+ width: rect.right - rect.left,
+ height: rect.bottom - rect.top
+ };
+ };
+
+ /**
+ * returns a copy of the object where the keys have become the values and the values the keys.
+ * @param {Object} obj
+ * @return {Object}
+ */
+ var invertObject = function(obj) {
+ var inverted = {};
+
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ inverted[obj[key]] = key;
+ }
+ }
+ return inverted;
+ };
+
+ /**
+ * @param {String} namespace
+ * @param {String} [prefix]
+ * @return {String}
+ */
+ var namespaceToCamel = function(namespace, prefix) {
+ prefix = prefix || '';
+ return prefix + namespace.split('.').map(function(name) {
+ return name.substring(0, 1).toUpperCase() + name.substring(1);
+ }).join('');
+ };
+
+ return {
+ eq: eq,
+ eq2: eq2,
+ peq2: peq2,
+ ok: ok,
+ fail: fail,
+ self: self,
+ not: not,
+ and: and,
+ uniqueId: uniqueId,
+ rect2bnd: rect2bnd,
+ invertObject: invertObject,
+ namespaceToCamel: namespaceToCamel
+ };
+})(); //end func
+
+
+/**
+* @class core.list
+* list utils
+* @singleton
+* @alternateClassName list
+*/
+var list = (function() {
+ /**
+ * returns the first item of an array.
+ * @param {Array} array
+ */
+ var head = function(array) {
+ return array[0];
+ };
+
+ /**
+ * returns the last item of an array.
+ * @param {Array} array
+ */
+ var last = function(array) {
+ return array[array.length - 1];
+ };
+
+ /**
+ * returns everything but the last entry of the array.
+ * @param {Array} array
+ */
+ var initial = function(array) {
+ return array.slice(0, array.length - 1);
+ };
+
+ /**
+ * returns the rest of the items in an array.
+ * @param {Array} array
+ */
+ var tail = function(array) {
+ return array.slice(1);
+ };
+
+ /**
+ * returns item of array
+ */
+ var find = function(array, pred) {
+ for (var idx = 0, len = array.length; idx < len; idx ++) {
+ var item = array[idx];
+
+ if (pred(item)) {
+ return item;
+ }
+ }
+ };
+
+ /**
+ * returns true if all of the values in the array pass the predicate truth test.
+ */
+ var all = function(array, pred) {
+ for (var idx = 0, len = array.length; idx < len; idx ++) {
+ if (!pred(array[idx])) {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ /**
+ * returns true if the value is present in the list.
+ */
+ var contains = function(array, item) {
+ return $.inArray(item, array) !== -1;
+ };
+
+ /**
+ * get sum from a list
+ * @param {Array} array - array
+ * @param {Function} fn - iterator
+ */
+ var sum = function(array, fn) {
+ fn = fn || func.self;
+ return array.reduce(function(memo, v) {
+ return memo + fn(v);
+ }, 0);
+ };
+
+ /**
+ * returns a copy of the collection with array type.
+ * @param {Collection} collection - collection eg) node.childNodes, ...
+ */
+ var from = function(collection) {
+ var result = [], idx = -1, length = collection.length;
+ while (++idx < length) {
+ result[idx] = collection[idx];
+ }
+ return result;
+ };
+
+ /**
+ * cluster elements by predicate function.
+ * @param {Array} array - array
+ * @param {Function} fn - predicate function for cluster rule
+ * @param {Array[]}
+ */
+ var clusterBy = function(array, fn) {
+ if (!array.length) { return []; }
+ var aTail = tail(array);
+
+ return aTail.reduce(function(memo, v) {
+ var aLast = last(memo);
+ if (fn(last(aLast), v)) {
+ aLast[aLast.length] = v;
+ } else {
+ memo[memo.length] = [v];
+ }
+ return memo;
+ }, [[head(array)]]);
+ };
+
+ /**
+ * returns a copy of the array with all falsy values removed
+ * @param {Array} array - array
+ * @param {Function} fn - predicate function for cluster rule
+ */
+ var compact = function(array) {
+ var aResult = [];
+
+ for (var idx = 0, len = array.length; idx < len; idx ++) {
+ if (array[idx]) { aResult.push(array[idx]); }
+ }
+ return aResult;
+ };
+
+ /**
+ * produces a duplicate-free version of the array
+ * @param {Array} array
+ */
+ var unique = function(array) {
+ var results = [];
+
+ for (var idx = 0, len = array.length; idx < len; idx ++) {
+ if (!contains(results, array[idx])) {
+ results.push(array[idx]);
+ }
+ }
+ return results;
+ };
+
+ /**
+ * returns next item.
+ * @param {Array} array
+ */
+ var next = function(array, item) {
+ var idx = array.indexOf(item);
+
+ if (idx === -1) {return null;}
+ return array[idx + 1];
+ };
+
+ /**
+ * returns prev item.
+ * @param {Array} array
+ */
+ var prev = function(array, item) {
+ var idx = array.indexOf(item);
+
+ if (idx === -1) {return null;}
+ return array[idx - 1];
+ };
+
+
+ return {head: head, last: last, initial: initial, tail: tail, prev: prev, next: next, find: find, contains: contains, all: all, sum: sum, from: from, clusterBy: clusterBy, compact: compact, unique: unique};
+})(); //end list
+
+
+var NBSP_CHAR = String.fromCharCode(160);
+var ZERO_WIDTH_NBSP_CHAR = '\ufeff';
+
+/**
+* @class core.dom
+* Dom functions
+* @singleton
+* @alternateClassName dom
+*/
+var dom = (function() {
+ /**
+ * @method isEditable
+ * returns whether node is `note-editable` or not.
+ * @param {Node} node
+ * @return {Boolean}
+ */
+ var isEditable = function(node) {
+ return node && $(node).hasClass('note-editable');
+ };
+
+ /**
+ * @method isControlSizing
+ * returns whether node is `note-control-sizing` or not.
+ * @param {Node} node
+ * @return {Boolean}
+ */
+ var isControlSizing = function(node) {
+ return node && $(node).hasClass('note-control-sizing');
+ };
+
+ /**
+ * @method buildLayoutInfo
+ * build layoutInfo from $editor(.note-editor)
+ * @param {jQuery} $editor
+ * @return {Object}
+ * @return {Function} return.editor
+ * @return {Node} return.dropzone
+ * @return {Node} return.toolbar
+ * @return {Node} return.editable
+ * @return {Node} return.codable
+ * @return {Node} return.popover
+ * @return {Node} return.handle
+ * @return {Node} return.dialog
+ */
+ var buildLayoutInfo = function($editor) {
+ var makeFinder;
+
+ // air mode
+ if ($editor.hasClass('note-air-editor')) {
+ var id = list.last($editor.attr('id').split('-'));
+
+ makeFinder = function(sIdPrefix) {
+ return function() { return $(sIdPrefix + id); };
+ };
+
+ return {
+ editor: function() { return $editor; },
+ holder : function() { return $editor.data('holder'); },
+ editable: function() { return $editor; },
+ popover: makeFinder('#note-popover-'),
+ handle: makeFinder('#note-handle-'),
+ dialog: makeFinder('#note-dialog-')
+ };
+ // frame mode
+ } else {
+ makeFinder = function(sClassName) {
+ return function() { return $editor.find(sClassName); };
+ };
+ return {
+ editor: function() { return $editor; },
+ holder : function() { return $editor.data('holder'); },
+ dropzone: makeFinder('.note-dropzone'),
+ toolbar: makeFinder('.note-toolbar'),
+ editable: makeFinder('.note-editable'),
+ codable: makeFinder('.note-codable'),
+ statusbar: makeFinder('.note-statusbar'),
+ popover: makeFinder('.note-popover'),
+ handle: makeFinder('.note-handle'),
+ dialog: makeFinder('.note-dialog')
+ };
+ }
+ };
+
+ /**
+ * returns makeLayoutInfo from editor's descendant node.
+ * @private
+ * @param {Node} descendant
+ * @return {Object}
+ */
+ var makeLayoutInfo = function(descendant) {
+ var $target = $(descendant).closest('.note-editor, .note-air-editor, .note-air-layout');
+
+ if (!$target.length) {
+ return null;
+ }
+ var $editor;
+
+ if ($target.is('.note-editor, .note-air-editor')) {
+ $editor = $target;
+ } else {
+ $editor = $('#note-editor-' + list.last($target.attr('id').split('-')));
+ }
+ return buildLayoutInfo($editor);
+ };
+
+ /**
+ * @method makePredByNodeName
+ * returns predicate which judge whether nodeName is same
+ * @param {String} nodeName
+ * @return {Function}
+ */
+ var makePredByNodeName = function(nodeName) {
+ nodeName = nodeName.toUpperCase();
+ return function(node) {
+ return node && node.nodeName.toUpperCase() === nodeName;
+ };
+ };
+
+ /**
+ * @method isText
+ * @param {Node} node
+ * @return {Boolean} true if node's type is text(3)
+ */
+ var isText = function(node) {
+ return node && node.nodeType === 3;
+ };
+
+ /**
+ * ex) br, col, embed, hr, img, input, ...
+ * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements
+ */
+ var isVoid = function(node) {
+ return node && /^BR|^IMG|^HR/.test(node.nodeName.toUpperCase());
+ };
+
+ var isPara = function(node) {
+ if (isEditable(node)) {
+ return false;
+ }
+ // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph
+ return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());
+ };
+
+ var isLi = makePredByNodeName('LI');
+
+ var isPurePara = function(node) {
+ return isPara(node) && !isLi(node);
+ };
+
+ var isTable = makePredByNodeName('TABLE');
+
+ var isInline = function(node) {
+ return !isBodyContainer(node) && !isList(node) && !isPara(node) && !isTable(node) && !isBlockquote(node);
+ };
+
+ var isList = function(node) {
+ return node && /^UL|^OL/.test(node.nodeName.toUpperCase());
+ };
+
+ var isCell = function(node) {
+ return node && /^TD|^TH/.test(node.nodeName.toUpperCase());
+ };
+
+ var isBlockquote = makePredByNodeName('BLOCKQUOTE');
+
+ var isBodyContainer = function(node) {
+ return isCell(node) || isBlockquote(node) || isEditable(node);
+ };
+
+ var isAnchor = makePredByNodeName('A');
+
+ var isParaInline = function(node) {
+ return isInline(node) && !!ancestor(node, isPara);
+ };
+
+ var isBodyInline = function(node) {
+ return isInline(node) && !ancestor(node, isPara);
+ };
+
+ var isBody = makePredByNodeName('BODY');
+
+ /**
+ * returns whether nodeB is closest sibling of nodeA
+ * @param {Node} nodeA
+ * @param {Node} nodeB
+ * @return {Boolean}
+ */
+ var isClosestSibling = function(nodeA, nodeB) {
+ return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;
+ };
+
+ /**
+ * returns array of closest siblings with node
+ * @param {Node} node
+ * @param {function} [pred] - predicate function
+ * @return {Node[]}
+ */
+ var withClosestSiblings = function(node, pred) {
+ pred = pred || func.ok;
+ var siblings = [];
+
+ if (node.previousSibling && pred(node.previousSibling)) {
+ siblings.push(node.previousSibling);
+ }
+ siblings.push(node);
+ if (node.nextSibling && pred(node.nextSibling)) {
+ siblings.push(node.nextSibling);
+ }
+ return siblings;
+ };
+
+ /**
+ * blank HTML for cursor position
+ * - [workaround] for MSIE IE doesn't works with bogus br
+ */
+ var blankHTML = agent.isMSIE ? '&nbsp;' : '<br>';
+
+ /**
+ * @method nodeLength
+ * returns #text's text size or element's childNodes size
+ * @param {Node} node
+ */
+ var nodeLength = function(node) {
+ if (isText(node)) {
+ return node.nodeValue.length;
+ }
+ return node.childNodes.length;
+ };
+
+ /**
+ * returns whether node is empty or not.
+ * @param {Node} node
+ * @return {Boolean}
+ */
+ var isEmpty = function(node) {
+ var len = nodeLength(node);
+
+ if (len === 0) {
+ return true;
+ } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {
+ return true;
+ } else if (list.all(node.childNodes, isText) && node.innerHTML === '') {
+ return true;
+ }
+ return false;
+ };
+
+ /**
+ * padding blankHTML if node is empty (for cursor position)
+ */
+ var paddingBlankHTML = function(node) {
+ if (!isVoid(node) && !nodeLength(node)) {
+ node.innerHTML = blankHTML;
+ }
+ };
+
+ /**
+ * find nearest ancestor predicate hit
+ *
+ * @param {Node} node
+ * @param {Function} pred - predicate function
+ */
+ var ancestor = function(node, pred) {
+ while (node) {
+ if (pred(node)) { return node; }
+ if (isEditable(node)) { break; }
+
+ node = node.parentNode;
+ }
+ return null;
+ };
+
+ /**
+ * find nearest ancestor only single child blood line and predicate hit
+ *
+ * @param {Node} node
+ * @param {Function} pred - predicate function
+ */
+ var singleChildAncestor = function(node, pred) {
+ node = node.parentNode;
+
+ while (node) {
+ if (nodeLength(node) !== 1) { break; }
+ if (pred(node)) { return node; }
+ if (isEditable(node)) { break; }
+
+ node = node.parentNode;
+ }
+ return null;
+ };
+
+ /**
+ * returns new array of ancestor nodes (until predicate hit).
+ *
+ * @param {Node} node
+ * @param {Function} [optional] pred - predicate function
+ */
+ var listAncestor = function(node, pred) {
+ pred = pred || func.fail;
+
+ var ancestors = [];
+ ancestor(node, function(el) {
+ if (!isEditable(el)) {
+ ancestors.push(el);
+ }
+
+ return pred(el);
+ });
+ return ancestors;
+ };
+
+ /**
+ * find farthest ancestor predicate hit
+ */
+ var lastAncestor = function(node, pred) {
+ var ancestors = listAncestor(node);
+ return list.last(ancestors.filter(pred));
+ };
+
+ /**
+ * returns common ancestor node between two nodes.
+ *
+ * @param {Node} nodeA
+ * @param {Node} nodeB
+ */
+ var commonAncestor = function(nodeA, nodeB) {
+ var ancestors = listAncestor(nodeA);
+ for (var n = nodeB; n; n = n.parentNode) {
+ if ($.inArray(n, ancestors) > -1) { return n; }
+ }
+ return null; // difference document area
+ };
+
+ /**
+ * listing all previous siblings (until predicate hit).
+ *
+ * @param {Node} node
+ * @param {Function} [optional] pred - predicate function
+ */
+ var listPrev = function(node, pred) {
+ pred = pred || func.fail;
+
+ var nodes = [];
+ while (node) {
+ if (pred(node)) { break; }
+ nodes.push(node);
+ node = node.previousSibling;
+ }
+ return nodes;
+ };
+
+ /**
+ * listing next siblings (until predicate hit).
+ *
+ * @param {Node} node
+ * @param {Function} [pred] - predicate function
+ */
+ var listNext = function(node, pred) {
+ pred = pred || func.fail;
+
+ var nodes = [];
+ while (node) {
+ if (pred(node)) { break; }
+ nodes.push(node);
+ node = node.nextSibling;
+ }
+ return nodes;
+ };
+
+ /**
+ * listing descendant nodes
+ *
+ * @param {Node} node
+ * @param {Function} [pred] - predicate function
+ */
+ var listDescendant = function(node, pred) {
+ var descendents = [];
+ pred = pred || func.ok;
+
+ // start DFS(depth first search) with node
+ (function fnWalk(current) {
+ if (node !== current && pred(current)) {
+ descendents.push(current);
+ }
+ for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {
+ fnWalk(current.childNodes[idx]);
+ }
+ })(node);
+
+ return descendents;
+ };
+
+ /**
+ * wrap node with new tag.
+ *
+ * @param {Node} node
+ * @param {Node} tagName of wrapper
+ * @return {Node} - wrapper
+ */
+ var wrap = function(node, wrapperName) {
+ var parent = node.parentNode;
+ var wrapper = $('<' + wrapperName + '>')[0];
+
+ parent.insertBefore(wrapper, node);
+ wrapper.appendChild(node);
+
+ return wrapper;
+ };
+
+ /**
+ * insert node after preceding
+ *
+ * @param {Node} node
+ * @param {Node} preceding - predicate function
+ */
+ var insertAfter = function(node, preceding) {
+ var next = preceding.nextSibling, parent = preceding.parentNode;
+ if (next) {
+ parent.insertBefore(node, next);
+ } else {
+ parent.appendChild(node);
+ }
+ return node;
+ };
+
+ /**
+ * append elements.
+ *
+ * @param {Node} node
+ * @param {Collection} aChild
+ */
+ var appendChildNodes = function(node, aChild) {
+ $.each(aChild, function(idx, child) {
+ node.appendChild(child);
+ });
+ return node;
+ };
+
+ /**
+ * returns whether boundaryPoint is left edge or not.
+ *
+ * @param {BoundaryPoint} point
+ * @return {Boolean}
+ */
+ var isLeftEdgePoint = function(point) {
+ return point.offset === 0;
+ };
+
+ /**
+ * returns whether boundaryPoint is right edge or not.
+ *
+ * @param {BoundaryPoint} point
+ * @return {Boolean}
+ */
+ var isRightEdgePoint = function(point) {
+ return point.offset === nodeLength(point.node);
+ };
+
+ /**
+ * returns whether boundaryPoint is edge or not.
+ *
+ * @param {BoundaryPoint} point
+ * @return {Boolean}
+ */
+ var isEdgePoint = function(point) {
+ return isLeftEdgePoint(point) || isRightEdgePoint(point);
+ };
+
+ /**
+ * returns wheter node is left edge of ancestor or not.
+ *
+ * @param {Node} node
+ * @param {Node} ancestor
+ * @return {Boolean}
+ */
+ var isLeftEdgeOf = function(node, ancestor) {
+ while (node && node !== ancestor) {
+ if (position(node) !== 0) {
+ return false;
+ }
+ node = node.parentNode;
+ }
+
+ return true;
+ };
+
+ /**
+ * returns whether node is right edge of ancestor or not.
+ *
+ * @param {Node} node
+ * @param {Node} ancestor
+ * @return {Boolean}
+ */
+ var isRightEdgeOf = function(node, ancestor) {
+ while (node && node !== ancestor) {
+ if (position(node) !== nodeLength(node.parentNode) - 1) {
+ return false;
+ }
+ node = node.parentNode;
+ }
+
+ return true;
+ };
+
+ /**
+ * returns offset from parent.
+ *
+ * @param {Node} node
+ */
+ var position = function(node) {
+ var offset = 0;
+ while ((node = node.previousSibling)) {
+ offset += 1;
+ }
+ return offset;
+ };
+
+ var hasChildren = function(node) {
+ return !!(node && node.childNodes && node.childNodes.length);
+ };
+
+ /**
+ * returns previous boundaryPoint
+ *
+ * @param {BoundaryPoint} point
+ * @param {Boolean} isSkipInnerOffset
+ * @return {BoundaryPoint}
+ */
+ var prevPoint = function(point, isSkipInnerOffset) {
+ var node, offset;
+
+ if (point.offset === 0) {
+ if (isEditable(point.node)) {
+ return null;
+ }
+
+ node = point.node.parentNode;
+ offset = position(point.node);
+ } else if (hasChildren(point.node)) {
+ node = point.node.childNodes[point.offset - 1];
+ offset = nodeLength(node);
+ } else {
+ node = point.node;
+ offset = isSkipInnerOffset ? 0 : point.offset - 1;
+ }
+
+ return {
+ node: node,
+ offset: offset
+ };
+ };
+
+ /**
+ * returns next boundaryPoint
+ *
+ * @param {BoundaryPoint} point
+ * @param {Boolean} isSkipInnerOffset
+ * @return {BoundaryPoint}
+ */
+ var nextPoint = function(point, isSkipInnerOffset) {
+ var node, offset;
+
+ if (nodeLength(point.node) === point.offset) {
+ if (isEditable(point.node)) {
+ return null;
+ }
+
+ node = point.node.parentNode;
+ offset = position(point.node) + 1;
+ } else if (hasChildren(point.node)) {
+ node = point.node.childNodes[point.offset];
+ offset = 0;
+ } else {
+ node = point.node;
+ offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;
+ }
+
+ return {
+ node: node,
+ offset: offset
+ };
+ };
+
+ /**
+ * returns whether pointA and pointB is same or not.
+ *
+ * @param {BoundaryPoint} pointA
+ * @param {BoundaryPoint} pointB
+ * @return {Boolean}
+ */
+ var isSamePoint = function(pointA, pointB) {
+ return pointA.node === pointB.node && pointA.offset === pointB.offset;
+ };
+
+ /**
+ * returns whether point is visible (can set cursor) or not.
+ *
+ * @param {BoundaryPoint} point
+ * @return {Boolean}
+ */
+ var isVisiblePoint = function(point) {
+ if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) {
+ return true;
+ }
+
+ var leftNode = point.node.childNodes[point.offset - 1];
+ var rightNode = point.node.childNodes[point.offset];
+ if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {
+ return true;
+ }
+
+ return false;
+ };
+
+ /**
+ * @method prevPointUtil
+ *
+ * @param {BoundaryPoint} point
+ * @param {Function} pred
+ * @return {BoundaryPoint}
+ */
+ var prevPointUntil = function(point, pred) {
+ while (point) {
+ if (pred(point)) {
+ return point;
+ }
+
+ point = prevPoint(point);
+ }
+
+ return null;
+ };
+
+ /**
+ * @method nextPointUntil
+ *
+ * @param {BoundaryPoint} point
+ * @param {Function} pred
+ * @return {BoundaryPoint}
+ */
+ var nextPointUntil = function(point, pred) {
+ while (point) {
+ if (pred(point)) {
+ return point;
+ }
+
+ point = nextPoint(point);
+ }
+
+ return null;
+ };
+
+ /**
+ * returns whether point has character or not.
+ *
+ * @param {Point} point
+ * @return {Boolean}
+ */
+ var isCharPoint = function(point) {
+ if (!isText(point.node)) {
+ return false;
+ }
+
+ var ch = point.node.nodeValue.charAt(point.offset - 1);
+ return ch && (ch !== ' ' && ch !== NBSP_CHAR);
+ };
+
+ /**
+ * @method walkPoint
+ *
+ * @param {BoundaryPoint} startPoint
+ * @param {BoundaryPoint} endPoint
+ * @param {Function} handler
+ * @param {Boolean} isSkipInnerOffset
+ */
+ var walkPoint = function(startPoint, endPoint, handler, isSkipInnerOffset) {
+ var point = startPoint;
+
+ while (point) {
+ handler(point);
+
+ if (isSamePoint(point, endPoint)) {
+ break;
+ }
+
+ var isSkipOffset = isSkipInnerOffset &&
+ startPoint.node !== point.node &&
+ endPoint.node !== point.node;
+ point = nextPoint(point, isSkipOffset);
+ }
+ };
+
+ /**
+ * @method makeOffsetPath
+ *
+ * return offsetPath(array of offset) from ancestor
+ *
+ * @param {Node} ancestor - ancestor node
+ * @param {Node} node
+ */
+ var makeOffsetPath = function(ancestor, node) {
+ var ancestors = listAncestor(node, func.eq(ancestor));
+ return $.map(ancestors, position).reverse();
+ };
+
+ /**
+ * @method fromOffsetPath
+ *
+ * return element from offsetPath(array of offset)
+ *
+ * @param {Node} ancestor - ancestor node
+ * @param {array} offsets - offsetPath
+ */
+ var fromOffsetPath = function(ancestor, offsets) {
+ var current = ancestor;
+ for (var i = 0, len = offsets.length; i < len; i++) {
+ if (current.childNodes.length <= offsets[i]) {
+ current = current.childNodes[current.childNodes.length - 1];
+ } else {
+ current = current.childNodes[offsets[i]];
+ }
+ }
+ return current;
+ };
+
+ /**
+ * @method splitNode
+ *
+ * split element or #text
+ *
+ * @param {BoundaryPoint} point
+ * @param {Object} [options]
+ * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false
+ * @param {Boolean} [options.isNotSplitEdgePoint] - default: false
+ * @return {Node} right node of boundaryPoint
+ */
+ var splitNode = function(point, options) {
+ var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;
+ var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;
+
+ // edge case
+ if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {
+ if (isLeftEdgePoint(point)) {
+ return point.node;
+ } else if (isRightEdgePoint(point)) {
+ return point.node.nextSibling;
+ }
+ }
+
+ // split #text
+ if (isText(point.node)) {
+ return point.node.splitText(point.offset);
+ } else {
+ var childNode = point.node.childNodes[point.offset];
+ var clone = insertAfter(point.node.cloneNode(false), point.node);
+ appendChildNodes(clone, listNext(childNode));
+
+ if (!isSkipPaddingBlankHTML) {
+ paddingBlankHTML(point.node);
+ paddingBlankHTML(clone);
+ }
+
+ return clone;
+ }
+ };
+
+ /**
+ * @method splitTree
+ *
+ * split tree by point
+ *
+ * @param {Node} root - split root
+ * @param {BoundaryPoint} point
+ * @param {Object} [options]
+ * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false
+ * @param {Boolean} [options.isNotSplitEdgePoint] - default: false
+ * @return {Node} right node of boundaryPoint
+ */
+ var splitTree = function(root, point, options) {
+ // ex) [#text, <span>, <p>]
+ var ancestors = listAncestor(point.node, func.eq(root));
+
+ if (!ancestors.length) {
+ return null;
+ } else if (ancestors.length === 1) {
+ return splitNode(point, options);
+ }
+
+ return ancestors.reduce(function(node, parent) {
+ if (node === point.node) {
+ node = splitNode(point, options);
+ }
+
+ return splitNode({
+ node: parent,
+ offset: node ? dom.position(node) : nodeLength(parent)
+ }, options);
+ });
+ };
+
+ /**
+ * split point
+ *
+ * @param {Point} point
+ * @param {Boolean} isInline
+ * @return {Object}
+ */
+ var splitPoint = function(point, isInline) {
+ // find splitRoot, container
+ // - inline: splitRoot is a child of paragraph
+ // - block: splitRoot is a child of bodyContainer
+ var pred = isInline ? isPara : isBodyContainer;
+ var ancestors = listAncestor(point.node, pred);
+ var topAncestor = list.last(ancestors) || point.node;
+
+ var splitRoot, container;
+ if (pred(topAncestor)) {
+ splitRoot = ancestors[ancestors.length - 2];
+ container = topAncestor;
+ } else {
+ splitRoot = topAncestor;
+ container = splitRoot.parentNode;
+ }
+
+ // if splitRoot is exists, split with splitTree
+ var pivot = splitRoot && splitTree(splitRoot, point, {
+ isSkipPaddingBlankHTML: isInline,
+ isNotSplitEdgePoint: isInline
+ });
+
+ // if container is point.node, find pivot with point.offset
+ if (!pivot && container === point.node) {
+ pivot = point.node.childNodes[point.offset];
+ }
+
+ return {
+ rightNode: pivot,
+ container: container
+ };
+ };
+
+ var create = function(nodeName) {
+ return document.createElement(nodeName);
+ };
+
+ var createText = function(text) {
+ return document.createTextNode(text);
+ };
+
+ /**
+ * @method remove
+ *
+ * remove node, (isRemoveChild: remove child or not)
+ *
+ * @param {Node} node
+ * @param {Boolean} isRemoveChild
+ */
+ var remove = function(node, isRemoveChild) {
+ if (!node || !node.parentNode) { return; }
+ if (node.removeNode) { return node.removeNode(isRemoveChild); }
+
+ var parent = node.parentNode;
+ if (!isRemoveChild) {
+ var nodes = [];
+ var i, len;
+ for (i = 0, len = node.childNodes.length; i < len; i++) {
+ nodes.push(node.childNodes[i]);
+ }
+
+ for (i = 0, len = nodes.length; i < len; i++) {
+ parent.insertBefore(nodes[i], node);
+ }
+ }
+
+ parent.removeChild(node);
+ };
+
+ /**
+ * @method removeWhile
+ *
+ * @param {Node} node
+ * @param {Function} pred
+ */
+ var removeWhile = function(node, pred) {
+ while (node) {
+ if (isEditable(node) || !pred(node)) {
+ break;
+ }
+
+ var parent = node.parentNode;
+ remove(node);
+ node = parent;
+ }
+ };
+
+ /**
+ * @method replace
+ *
+ * replace node with provided nodeName
+ *
+ * @param {Node} node
+ * @param {String} nodeName
+ * @return {Node} - new node
+ */
+ var replace = function(node, nodeName) {
+ if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {
+ return node;
+ }
+
+ var newNode = create(nodeName);
+
+ if (node.style.cssText) {
+ newNode.style.cssText = node.style.cssText;
+ }
+
+ appendChildNodes(newNode, list.from(node.childNodes));
+ insertAfter(newNode, node);
+ remove(node);
+
+ return newNode;
+ };
+
+ var isTextarea = makePredByNodeName('TEXTAREA');
+
+ /**
+ * @param {jQuery} $node
+ * @param {Boolean} [stripLinebreaks] - default: false
+ */
+ var value = function($node, stripLinebreaks) {
+ var val = isTextarea($node[0]) ? $node.val() : $node.html();
+ if (stripLinebreaks) {
+ return val.replace(/[\n\r]/g, '');
+ }
+ return val;
+ };
+
+ /**
+ * @method html
+ *
+ * get the HTML contents of node
+ *
+ * @param {jQuery} $node
+ * @param {Boolean} [isNewlineOnBlock]
+ */
+ var html = function($node, isNewlineOnBlock) {
+ var markup = value($node);
+
+ if (isNewlineOnBlock) {
+ var regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g;
+ markup = markup.replace(regexTag, function(match, endSlash, name) {
+ name = name.toUpperCase();
+ var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&
+ !!endSlash;
+ var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);
+
+ return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : '');
+ });
+ markup = $.trim(markup);
+ }
+
+ return markup;
+ };
+
+ return {
+ /** @property {String} NBSP_CHAR */
+ NBSP_CHAR: NBSP_CHAR,
+ /** @property {String} ZERO_WIDTH_NBSP_CHAR */
+ ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,
+ /** @property {String} blank */
+ blank: blankHTML,
+ /** @property {String} emptyPara */
+ emptyPara: '<p>' + blankHTML + '</p>',
+ makePredByNodeName: makePredByNodeName,
+ isEditable: isEditable,
+ isControlSizing: isControlSizing,
+ buildLayoutInfo: buildLayoutInfo,
+ makeLayoutInfo: makeLayoutInfo,
+ isText: isText,
+ isVoid: isVoid,
+ isPara: isPara,
+ isPurePara: isPurePara,
+ isInline: isInline,
+ isBlock: func.not(isInline),
+ isBodyInline: isBodyInline,
+ isBody: isBody,
+ isParaInline: isParaInline,
+ isList: isList,
+ isTable: isTable,
+ isCell: isCell,
+ isBlockquote: isBlockquote,
+ isBodyContainer: isBodyContainer,
+ isAnchor: isAnchor,
+ isDiv: makePredByNodeName('DIV'),
+ isLi: isLi,
+ isBR: makePredByNodeName('BR'),
+ isSpan: makePredByNodeName('SPAN'),
+ isB: makePredByNodeName('B'),
+ isU: makePredByNodeName('U'),
+ isS: makePredByNodeName('S'),
+ isI: makePredByNodeName('I'),
+ isImg: makePredByNodeName('IMG'),
+ isTextarea: isTextarea,
+ isEmpty: isEmpty,
+ isEmptyAnchor: func.and(isAnchor, isEmpty),
+ isClosestSibling: isClosestSibling,
+ withClosestSiblings: withClosestSiblings,
+ nodeLength: nodeLength,
+ isLeftEdgePoint: isLeftEdgePoint,
+ isRightEdgePoint: isRightEdgePoint,
+ isEdgePoint: isEdgePoint,
+ isLeftEdgeOf: isLeftEdgeOf,
+ isRightEdgeOf: isRightEdgeOf,
+ prevPoint: prevPoint,
+ nextPoint: nextPoint,
+ isSamePoint: isSamePoint,
+ isVisiblePoint: isVisiblePoint,
+ prevPointUntil: prevPointUntil,
+ nextPointUntil: nextPointUntil,
+ isCharPoint: isCharPoint,
+ walkPoint: walkPoint,
+ ancestor: ancestor,
+ singleChildAncestor: singleChildAncestor,
+ listAncestor: listAncestor,
+ lastAncestor: lastAncestor,
+ listNext: listNext,
+ listPrev: listPrev,
+ listDescendant: listDescendant,
+ commonAncestor: commonAncestor,
+ wrap: wrap,
+ insertAfter: insertAfter,
+ appendChildNodes: appendChildNodes,
+ position: position,
+ hasChildren: hasChildren,
+ makeOffsetPath: makeOffsetPath,
+ fromOffsetPath: fromOffsetPath,
+ splitTree: splitTree,
+ splitPoint: splitPoint,
+ create: create,
+ createText: createText,
+ remove: remove,
+ removeWhile: removeWhile,
+ replace: replace,
+ html: html,
+ value: value
+ };
+ })();
+
+
+ var range = (function() {
+
+ /**
+ * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js
+ *
+ * @param {TextRange} textRange
+ * @param {Boolean} isStart
+ * @return {BoundaryPoint}
+ *
+ * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx
+ */
+ var textRangeToPoint = function(textRange, isStart) {
+ var container = textRange.parentElement(), offset;
+
+ var tester = document.body.createTextRange(), prevContainer;
+ var childNodes = list.from(container.childNodes);
+ for (offset = 0; offset < childNodes.length; offset++) {
+ if (dom.isText(childNodes[offset])) {
+ continue;
+ }
+ tester.moveToElementText(childNodes[offset]);
+ if (tester.compareEndPoints('StartToStart', textRange) >= 0) {
+ break;
+ }
+ prevContainer = childNodes[offset];
+ }
+
+ if (offset !== 0 && dom.isText(childNodes[offset - 1])) {
+ var textRangeStart = document.body.createTextRange(), curTextNode = null;
+ textRangeStart.moveToElementText(prevContainer || container);
+ textRangeStart.collapse(!prevContainer);
+ curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;
+
+ var pointTester = textRange.duplicate();
+ pointTester.setEndPoint('StartToStart', textRangeStart);
+ var textCount = pointTester.text.replace(/[\r\n]/g, '').length;
+
+ while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {
+ textCount -= curTextNode.nodeValue.length;
+ curTextNode = curTextNode.nextSibling;
+ }
+
+ /* jshint ignore:start */
+ var dummy = curTextNode.nodeValue; // enforce IE to re-reference curTextNode, hack
+ /* jshint ignore:end */
+
+ if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) &&
+ textCount === curTextNode.nodeValue.length) {
+ textCount -= curTextNode.nodeValue.length;
+ curTextNode = curTextNode.nextSibling;
+ }
+
+ container = curTextNode;
+ offset = textCount;
+ }
+
+ return {
+ cont: container,
+ offset: offset
+ };
+ };
+
+ /**
+ * return TextRange from boundary point (inspired by google closure-library)
+ * @param {BoundaryPoint} point
+ * @return {TextRange}
+ */
+ var pointToTextRange = function(point) {
+ var textRangeInfo = function(container, offset) {
+ var node, isCollapseToStart;
+
+ if (dom.isText(container)) {
+ var prevTextNodes = dom.listPrev(container, func.not(dom.isText));
+ var prevContainer = list.last(prevTextNodes).previousSibling;
+ node = prevContainer || container.parentNode;
+ offset += list.sum(list.tail(prevTextNodes), dom.nodeLength);
+ isCollapseToStart = !prevContainer;
+ } else {
+ node = container.childNodes[offset] || container;
+ if (dom.isText(node)) {
+ return textRangeInfo(node, 0);
+ }
+
+ offset = 0;
+ isCollapseToStart = false;
+ }
+
+ return {
+ node: node,
+ collapseToStart: isCollapseToStart,
+ offset: offset
+ };
+ };
+
+ var textRange = document.body.createTextRange();
+ var info = textRangeInfo(point.node, point.offset);
+
+ textRange.moveToElementText(info.node);
+ textRange.collapse(info.collapseToStart);
+ textRange.moveStart('character', info.offset);
+ return textRange;
+ };
+
+ /**
+ * Wrapped Range
+ *
+ * @constructor
+ * @param {Node} sc - start container
+ * @param {Number} so - start offset
+ * @param {Node} ec - end container
+ * @param {Number} eo - end offset
+ */
+ var WrappedRange = function(sc, so, ec, eo) {
+ this.sc = sc;
+ this.so = so;
+ this.ec = ec;
+ this.eo = eo;
+
+ // nativeRange: get nativeRange from sc, so, ec, eo
+ var nativeRange = function() {
+ if (agent.isW3CRangeSupport) {
+ var w3cRange = document.createRange();
+ w3cRange.setStart(sc, so);
+ w3cRange.setEnd(ec, eo);
+
+ return w3cRange;
+ } else {
+ var textRange = pointToTextRange({
+ node: sc,
+ offset: so
+ });
+
+ textRange.setEndPoint('EndToEnd', pointToTextRange({
+ node: ec,
+ offset: eo
+ }));
+
+ return textRange;
+ }
+ };
+
+ this.getPoints = function() {
+ return {
+ sc: sc,
+ so: so,
+ ec: ec,
+ eo: eo
+ };
+ };
+
+ this.getStartPoint = function() {
+ return {
+ node: sc,
+ offset: so
+ };
+ };
+
+ this.getEndPoint = function() {
+ return {
+ node: ec,
+ offset: eo
+ };
+ };
+
+ /**
+ * select update visible range
+ */
+ this.select = function() {
+ var nativeRng = nativeRange();
+ if (agent.isW3CRangeSupport) {
+ var selection = document.getSelection();
+ if (selection.rangeCount > 0) {
+ selection.removeAllRanges();
+ }
+ selection.addRange(nativeRng);
+ } else {
+ nativeRng.select();
+ }
+
+ return this;
+ };
+
+ /**
+ * @return {WrappedRange}
+ */
+ this.normalize = function() {
+
+ /**
+ * @param {BoundaryPoint} point
+ * @return {BoundaryPoint}
+ */
+ var getVisiblePoint = function(point) {
+ if (!dom.isVisiblePoint(point)) {
+ if (dom.isLeftEdgePoint(point)) {
+ point = dom.nextPointUntil(point, dom.isVisiblePoint);
+ } else {
+ point = dom.prevPointUntil(point, dom.isVisiblePoint);
+ }
+ }
+ return point;
+ };
+
+ var startPoint = getVisiblePoint(this.getStartPoint());
+ var endPoint = getVisiblePoint(this.getEndPoint());
+
+ return new WrappedRange(
+ startPoint.node,
+ startPoint.offset,
+ endPoint.node,
+ endPoint.offset
+ );
+ };
+
+ /**
+ * returns matched nodes on range
+ *
+ * @param {Function} [pred] - predicate function
+ * @param {Object} [options]
+ * @param {Boolean} [options.includeAncestor]
+ * @param {Boolean} [options.fullyContains]
+ * @return {Node[]}
+ */
+ this.nodes = function(pred, options) {
+ pred = pred || func.ok;
+
+ var includeAncestor = options && options.includeAncestor;
+ var fullyContains = options && options.fullyContains;
+
+ // TODO compare points and sort
+ var startPoint = this.getStartPoint();
+ var endPoint = this.getEndPoint();
+
+ var nodes = [];
+ var leftEdgeNodes = [];
+
+ dom.walkPoint(startPoint, endPoint, function(point) {
+ if (dom.isEditable(point.node)) {
+ return;
+ }
+
+ var node;
+ if (fullyContains) {
+ if (dom.isLeftEdgePoint(point)) {
+ leftEdgeNodes.push(point.node);
+ }
+ if (dom.isRightEdgePoint(point) && list.contains(leftEdgeNodes, point.node)) {
+ node = point.node;
+ }
+ } else if (includeAncestor) {
+ node = dom.ancestor(point.node, pred);
+ } else {
+ node = point.node;
+ }
+
+ if (node && pred(node)) {
+ nodes.push(node);
+ }
+ }, true);
+
+ return list.unique(nodes);
+ };
+
+ /**
+ * returns commonAncestor of range
+ * @return {Element} - commonAncestor
+ */
+ this.commonAncestor = function() {
+ return dom.commonAncestor(sc, ec);
+ };
+
+ /**
+ * returns expanded range by pred
+ *
+ * @param {Function} pred - predicate function
+ * @return {WrappedRange}
+ */
+ this.expand = function(pred) {
+ var startAncestor = dom.ancestor(sc, pred);
+ var endAncestor = dom.ancestor(ec, pred);
+
+ if (!startAncestor && !endAncestor) {
+ return new WrappedRange(sc, so, ec, eo);
+ }
+
+ var boundaryPoints = this.getPoints();
+
+ if (startAncestor) {
+ boundaryPoints.sc = startAncestor;
+ boundaryPoints.so = 0;
+ }
+
+ if (endAncestor) {
+ boundaryPoints.ec = endAncestor;
+ boundaryPoints.eo = dom.nodeLength(endAncestor);
+ }
+
+ return new WrappedRange(
+ boundaryPoints.sc,
+ boundaryPoints.so,
+ boundaryPoints.ec,
+ boundaryPoints.eo
+ );
+ };
+
+ /**
+ * @param {Boolean} isCollapseToStart
+ * @return {WrappedRange}
+ */
+ this.collapse = function(isCollapseToStart) {
+ if (isCollapseToStart) {
+ return new WrappedRange(sc, so, sc, so);
+ } else {
+ return new WrappedRange(ec, eo, ec, eo);
+ }
+ };
+
+ /**
+ * splitText on range
+ */
+ this.splitText = function() {
+ var isSameContainer = sc === ec;
+ var boundaryPoints = this.getPoints();
+
+ if (dom.isText(ec) && !dom.isEdgePoint(this.getEndPoint())) {
+ ec.splitText(eo);
+ }
+
+ if (dom.isText(sc) && !dom.isEdgePoint(this.getStartPoint())) {
+ boundaryPoints.sc = sc.splitText(so);
+ boundaryPoints.so = 0;
+
+ if (isSameContainer) {
+ boundaryPoints.ec = boundaryPoints.sc;
+ boundaryPoints.eo = eo - so;
+ }
+ }
+
+ return new WrappedRange(
+ boundaryPoints.sc,
+ boundaryPoints.so,
+ boundaryPoints.ec,
+ boundaryPoints.eo
+ );
+ };
+
+ /**
+ * delete contents on range
+ * @return {WrappedRange}
+ */
+ this.deleteContents = function() {
+ if (this.isCollapsed()) {
+ return this;
+ }
+
+ var rng = this.splitText();
+ var nodes = rng.nodes(null, {
+ fullyContains: true
+ });
+
+ // find new cursor point
+ var point = dom.prevPointUntil(rng.getStartPoint(), function(point) {
+ return !list.contains(nodes, point.node);
+ });
+
+ var emptyParents = [];
+ $.each(nodes, function(idx, node) {
+ // find empty parents
+ var parent = node.parentNode;
+ if (point.node !== parent && dom.nodeLength(parent) === 1) {
+ emptyParents.push(parent);
+ }
+ dom.remove(node, false);
+ });
+
+ // remove empty parents
+ $.each(emptyParents, function(idx, node) {
+ dom.remove(node, false);
+ });
+
+ return new WrappedRange(
+ point.node,
+ point.offset,
+ point.node,
+ point.offset
+ ).normalize();
+ };
+
+ /**
+ * makeIsOn: return isOn(pred) function
+ */
+ var makeIsOn = function(pred) {
+ return function() {
+ var ancestor = dom.ancestor(sc, pred);
+ return !!ancestor && (ancestor === dom.ancestor(ec, pred));
+ };
+ };
+
+ // isOnEditable: judge whether range is on editable or not
+ this.isOnEditable = makeIsOn(dom.isEditable);
+ // isOnList: judge whether range is on list node or not
+ this.isOnList = makeIsOn(dom.isList);
+ // isOnAnchor: judge whether range is on anchor node or not
+ this.isOnAnchor = makeIsOn(dom.isAnchor);
+ // isOnAnchor: judge whether range is on cell node or not
+ this.isOnCell = makeIsOn(dom.isCell);
+
+ /**
+ * @param {Function} pred
+ * @return {Boolean}
+ */
+ this.isLeftEdgeOf = function(pred) {
+ if (!dom.isLeftEdgePoint(this.getStartPoint())) {
+ return false;
+ }
+
+ var node = dom.ancestor(this.sc, pred);
+ return node && dom.isLeftEdgeOf(this.sc, node);
+ };
+
+ /**
+ * returns whether range was collapsed or not
+ */
+ this.isCollapsed = function() {
+ return sc === ec && so === eo;
+ };
+
+ /**
+ * wrap inline nodes which children of body with paragraph
+ *
+ * @return {WrappedRange}
+ */
+ this.wrapBodyInlineWithPara = function() {
+ if (dom.isBodyContainer(sc) && dom.isEmpty(sc)) {
+ sc.innerHTML = dom.emptyPara;
+ return new WrappedRange(sc.firstChild, 0, sc.firstChild, 0);
+ }
+
+ if (dom.isParaInline(sc) || dom.isPara(sc)) {
+ return this.normalize();
+ }
+
+ // find inline top ancestor
+ var topAncestor;
+ if (dom.isInline(sc)) {
+ var ancestors = dom.listAncestor(sc, func.not(dom.isInline));
+ topAncestor = list.last(ancestors);
+ if (!dom.isInline(topAncestor)) {
+ topAncestor = ancestors[ancestors.length - 2] || sc.childNodes[so];
+ }
+ } else {
+ topAncestor = sc.childNodes[so > 0 ? so - 1 : 0];
+ }
+
+ // siblings not in paragraph
+ var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();
+ inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));
+
+ // wrap with paragraph
+ if (inlineSiblings.length) {
+ var para = dom.wrap(list.head(inlineSiblings), 'p');
+ dom.appendChildNodes(para, list.tail(inlineSiblings));
+ }
+
+ return this.normalize();
+ };
+
+ /**
+ * insert node at current cursor
+ *
+ * @param {Node} node
+ * @return {Node}
+ */
+ this.insertNode = function(node) {
+ var rng = this.wrapBodyInlineWithPara().deleteContents();
+ var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));
+
+ if (info.rightNode) {
+ info.rightNode.parentNode.insertBefore(node, info.rightNode);
+ } else {
+ info.container.appendChild(node);
+ }
+
+ return node;
+ };
+
+
+ /**
+ * insert html at current cursor
+ */
+ this.pasteHTML = function(markup) {
+ var self = this;
+ var contentsContainer = $('<div></div>').html(markup)[0];
+ var childNodes = list.from(contentsContainer.childNodes);
+
+ this.wrapBodyInlineWithPara().deleteContents();
+
+ return $.map(childNodes.reverse(), function(childNode) {
+ return self.insertNode(childNode);
+ }).reverse();
+ };
+
+ /**
+ * returns text in range
+ *
+ * @return {String}
+ */
+ this.toString = function() {
+ var nativeRng = nativeRange();
+ return agent.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;
+ };
+
+ /**
+ * returns range for word before cursor
+ *
+ * @param {Boolean} [findAfter] - find after cursor, default: false
+ * @return {WrappedRange}
+ */
+ this.getWordRange = function(findAfter) {
+ var endPoint = this.getEndPoint();
+
+ if (!dom.isCharPoint(endPoint)) {
+ return this;
+ }
+
+ var startPoint = dom.prevPointUntil(endPoint, function(point) {
+ return !dom.isCharPoint(point);
+ });
+
+ if (findAfter) {
+ endPoint = dom.nextPointUntil(endPoint, function(point) {
+ return !dom.isCharPoint(point);
+ });
+ }
+
+ return new WrappedRange(
+ startPoint.node,
+ startPoint.offset,
+ endPoint.node,
+ endPoint.offset
+ );
+ };
+
+ /**
+ * create offsetPath bookmark
+ *
+ * @param {Node} editable
+ */
+ this.bookmark = function(editable) {
+ return {
+ s: {
+ path: dom.makeOffsetPath(editable, sc),
+ offset: so
+ },
+ e: {
+ path: dom.makeOffsetPath(editable, ec),
+ offset: eo
+ }
+ };
+ };
+
+ /**
+ * create offsetPath bookmark base on paragraph
+ *
+ * @param {Node[]} paras
+ */
+ this.paraBookmark = function(paras) {
+ return {
+ s: {
+ path: list.tail(dom.makeOffsetPath(list.head(paras), sc)),
+ offset: so
+ },
+ e: {
+ path: list.tail(dom.makeOffsetPath(list.last(paras), ec)),
+ offset: eo
+ }
+ };
+ };
+
+ /**
+ * getClientRects
+ * @return {Rect[]}
+ */
+ this.getClientRects = function() {
+ var nativeRng = nativeRange();
+ return nativeRng.getClientRects();
+ };
+ };
+
+ /**
+ * @class core.range
+ *
+ * Data structure
+ * * BoundaryPoint: a point of dom tree
+ * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range
+ *
+ * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position
+ *
+ * @singleton
+ * @alternateClassName range
+ */
+ return {
+ /**
+ * @method
+ *
+ * create Range Object From arguments or Browser Selection
+ *
+ * @param {Node} sc - start container
+ * @param {Number} so - start offset
+ * @param {Node} ec - end container
+ * @param {Number} eo - end offset
+ * @return {WrappedRange}
+ */
+ create : function(sc, so, ec, eo) {
+ if (!arguments.length) { // from Browser Selection
+ if (agent.isW3CRangeSupport) {
+ var selection = document.getSelection();
+ if (!selection || selection.rangeCount === 0) {
+ return null;
+ } else if (dom.isBody(selection.anchorNode)) {
+ // Firefox: returns entire body as range on initialization. We won't never need it.
+ return null;
+ }
+
+ var nativeRng = selection.getRangeAt(0);
+ sc = nativeRng.startContainer;
+ so = nativeRng.startOffset;
+ ec = nativeRng.endContainer;
+ eo = nativeRng.endOffset;
+ } else { // IE8: TextRange
+ var textRange = document.selection.createRange();
+ var textRangeEnd = textRange.duplicate();
+ textRangeEnd.collapse(false);
+ var textRangeStart = textRange;
+ textRangeStart.collapse(true);
+
+ var startPoint = textRangeToPoint(textRangeStart, true),
+ endPoint = textRangeToPoint(textRangeEnd, false);
+
+ // same visible point case: range was collapsed.
+ if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) &&
+ dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) &&
+ endPoint.node.nextSibling === startPoint.node) {
+ startPoint = endPoint;
+ }
+
+ sc = startPoint.cont;
+ so = startPoint.offset;
+ ec = endPoint.cont;
+ eo = endPoint.offset;
+ }
+ } else if (arguments.length === 2) { //collapsed
+ ec = sc;
+ eo = so;
+ }
+ return new WrappedRange(sc, so, ec, eo);
+ },
+
+ /**
+ * @method
+ *
+ * create WrappedRange from node
+ *
+ * @param {Node} node
+ * @return {WrappedRange}
+ */
+ createFromNode: function(node) {
+ var sc = node;
+ var so = 0;
+ var ec = node;
+ var eo = dom.nodeLength(ec);
+
+ // browsers can't target a picture or void node
+ if (dom.isVoid(sc)) {
+ so = dom.listPrev(sc).length - 1;
+ sc = sc.parentNode;
+ }
+ if (dom.isBR(ec)) {
+ eo = dom.listPrev(ec).length - 1;
+ ec = ec.parentNode;
+ } else if (dom.isVoid(ec)) {
+ eo = dom.listPrev(ec).length;
+ ec = ec.parentNode;
+ }
+
+ return this.create(sc, so, ec, eo);
+ },
+
+ /**
+ * create WrappedRange from node after position
+ *
+ * @param {Node} node
+ * @return {WrappedRange}
+ */
+ createFromNodeBefore: function(node) {
+ return this.createFromNode(node).collapse(true);
+ },
+
+ /**
+ * create WrappedRange from node after position
+ *
+ * @param {Node} node
+ * @return {WrappedRange}
+ */
+ createFromNodeAfter: function(node) {
+ return this.createFromNode(node).collapse();
+ },
+
+ /**
+ * @method
+ *
+ * create WrappedRange from bookmark
+ *
+ * @param {Node} editable
+ * @param {Object} bookmark
+ * @return {WrappedRange}
+ */
+ createFromBookmark : function(editable, bookmark) {
+ var sc = dom.fromOffsetPath(editable, bookmark.s.path);
+ var so = bookmark.s.offset;
+ var ec = dom.fromOffsetPath(editable, bookmark.e.path);
+ var eo = bookmark.e.offset;
+ return new WrappedRange(sc, so, ec, eo);
+ },
+
+ /**
+ * @method
+ *
+ * create WrappedRange from paraBookmark
+ *
+ * @param {Object} bookmark
+ * @param {Node[]} paras
+ * @return {WrappedRange}
+ */
+ createFromParaBookmark: function(bookmark, paras) {
+ var so = bookmark.s.offset;
+ var eo = bookmark.e.offset;
+ var sc = dom.fromOffsetPath(list.head(paras), bookmark.s.path);
+ var ec = dom.fromOffsetPath(list.last(paras), bookmark.e.path);
+
+ return new WrappedRange(sc, so, ec, eo);
+ }
+ };
+ })();
+
+ /**
+ * @class defaults
+ * @singleton
+ */
+ // >>>>>>> CK
+ var defaults = {
+ /** @property */
+ version: '0.6.9',
+
+ /**
+ * for event options, reference to EventHandler.attach
+ * @property {Object} options
+ * @property {String/Number} [options.width=null] set editor width
+ * @property {String/Number} [options.height=null] set editor height, ex) 300
+ * @property {String/Number} options.minHeight set minimum height of editor
+ * @property {String/Number} options.maxHeight
+ * @property {String/Number} options.focus
+ * @property {Number} options.tabsize
+ * @property {Boolean} options.styleWithSpan
+ * @property {Object} options.codemirror
+ * @property {Object} [options.codemirror.mode='text/html']
+ * @property {Object} [options.codemirror.htmlMode=true]
+ * @property {Object} [options.codemirror.lineNumbers=true]
+ * @property {String} [options.lang=en-US] language 'en-US', 'ko-KR', ...
+ * @property {String} [options.direction=null] text direction, ex) 'rtl'
+ * @property {Array} [options.toolbar]
+ * @property {Boolean} [options.airMode=false]
+ * @property {Array} [options.airPopover]
+ * @property {Fucntion} [options.onInit] initialize
+ * @property {Fucntion} [options.onsubmit]
+ */
+ options: {
+ // >>>>>>> CK extra options
+ defaultTextColor: '#212121', // default text color (used by color tool)
+ defaultBackColor: '#ddd', // default text color (used by color tool)
+ followingToolbar: true, // make the toolbar follow on window scroll
+ otherStaticBarClass: "staticTop", // default class for other static bars eventually used on webapp
+
+ width: null, // set editor width
+ height: null, // set editor height, ex) 300
+
+ minHeight: null, // set minimum height of editor
+ maxHeight: null, // set maximum height of editor
+
+ focus: false, // set focus to editable area after initializing materialnote
+
+ tabsize: 4, // size of tab ex) 2 or 4
+ styleWithSpan: true, // style with span (Chrome and FF only)
+
+ disableLinkTarget: false, // hide link Target Checkbox
+ disableDragAndDrop: false, // disable drag and drop event
+ disableResizeEditor: false, // disable resizing editor
+
+ shortcuts: true, // enable keyboard shortcuts
+
+ placeholder: false, // enable placeholder text
+ prettifyHtml: true, // enable prettifying html while toggling codeview
+
+ iconPrefix: '', // prefix for css icon classes
+ icons: {
+ font: {
+ bold: 'format_bold',
+ italic: 'format_italic',
+ underline: 'format_underlined',
+ clear: 'clear',
+ height: 'format_size',
+ strikethrough: 'strikethrough_s',
+ superscript: 'vertical_align_top',
+ subscript: 'vertical_align_bottom'
+ },
+ image: {
+ image: 'image',
+ floatLeft: 'format_align_left',
+ floatRight: 'format_align_right',
+ floatNone: 'format_align_justify',
+ shapeRounded: 'crop_3_2',
+ shapeCircle: 'panorama_fish_eye',
+ shapeThumbnail: 'collections',
+ bordered: 'border_outer',
+ shapeNone: 'image',
+ remove: 'delete'
+ },
+ link: {
+ link: 'insert_link',
+ unlink: 'clear',
+ edit: 'create'
+ },
+ table: {
+ table: 'border_all'
+ },
+ hr: {
+ insert: 'add'
+ },
+ style: {
+ style: 'border_color'
+ },
+ lists: {
+ unordered: 'format_list_bulleted',
+ ordered: 'format_list_numbered'
+ },
+ options: {
+ help: 'help',
+ fullscreen: 'settings_overscan',
+ codeview: 'code'
+ },
+ paragraph: {
+ paragraph: 'format_textdirection_l_to_r',
+ outdent: 'format_indent_decrease',
+ indent: 'format_indent_increase',
+ left: 'format_align_left',
+ center: 'format_align_center',
+ right: 'format_align_right',
+ justify: 'format_align_justify'
+ },
+ color: {
+ recent: 'format_color_text'
+ },
+ history: {
+ undo: 'undo',
+ redo: 'redo'
+ },
+ misc: {
+ check: 'check'
+ }
+ },
+
+ codemirror: { // codemirror options
+ mode: 'text/html',
+ htmlMode: true,
+ indentWithTabs: true,
+ tabSize: 4,
+ lineNumbers: true,
+ theme: 'monokai',
+ maxHighlightLength: 'Infinity'
+ },
+
+ // language
+ lang: 'en-US', // language 'en-US', 'ko-KR', ...
+ direction: null, // text direction, ex) 'rtl'
+
+ // toolbar
+ toolbar: [
+ ['style', ['style']],
+ ['font', ['bold', 'italic', 'underline', 'clear']],
+ // ['font', ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'clear']],
+ ['fontname', ['fontname']],
+ ['fontsize', ['fontsize']],
+ ['color', ['color']],
+ ['para', ['ul', 'ol', 'paragraph']],
+ ['height', ['height']],
+ ['table', ['table']],
+ ['insert', ['link', 'picture', 'hr']],
+ ['view', ['fullscreen', 'codeview']],
+ ['help', ['help']]
+ ],
+
+ plugin : {},
+
+ // air mode: inline editor
+ airMode: false,
+ // airPopover: [
+ // ['style', ['style']],
+ // ['font', ['bold', 'italic', 'underline', 'clear']],
+ // ['fontname', ['fontname']],
+ // ['color', ['color']],
+ // ['para', ['ul', 'ol', 'paragraph']],
+ // ['height', ['height']],
+ // ['table', ['table']],
+ // ['insert', ['link', 'picture']],
+ // ['help', ['help']]
+ // ],
+ airPopover: [
+ ['color', ['color']],
+ ['font', ['bold', 'underline', 'clear']],
+ ['para', ['ul', 'paragraph']],
+ ['table', ['table']],
+ ['insert', ['link', 'picture']]
+ ],
+
+ // style tag
+ styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
+
+ // default fontName
+ defaultFontName: 'Roboto',
+
+ // fontName
+ fontNames: [
+ 'Roboto', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',
+ 'Helvetica Neue', 'Helvetica', 'Impact', 'Times New Roman', 'Verdana'
+ ],
+ fontNamesIgnoreCheck: [],
+
+ fontSizes: ['12', '13', '14', '15', '16', '17', '18', '25', '37'],
+
+ // pallete colors(n x n)
+ colors: [//grey brown dpurple purple indigo blue cyan green lgreen yellow amber orange dorange red pink
+ ['#fafafa', '#efebe9', '#7e57c2', '#ab47bc', '#5c6bc0', '#42a5f5', '#26c6da', '#66bb6a', '#9ccc65', '#ffee58', '#ffca28', '#ffa726', '#ff7043', '#ef5350', '#ec407a'],
+ ['#f5f5f5', '#d7ccc8', '#673ab7', '#9c27b0', '#3f51b5', '#2196f3', '#00bcd4', '#4caf50', '#8bc34a', '#ffeb3b', '#ffc107', '#ff9800', '#ff5722', '#f44336', '#e91e63'],
+ ['#eeeeee', '#bcaaa4', '#5e35b1', '#8e24aa', '#3949ab', '#1e88e5', '#00acc1', '#43a047', '#7cb342', '#fdd835', '#ffb300', '#fb8c00', '#f4511e', '#e53935', '#d81b60'],
+ ['#e0e0e0', '#a1887f', '#512da8', '#7b1fa2', '#303f9f', '#1976d2', '#0097a7', '#388e3c', '#689f38', '#fbc02d', '#ffa000', '#f57c00', '#e64a19', '#d32f2f', '#c2185b'],
+ ['#bdbdbd', '#8d6e63', '#4527a0', '#6a1b9a', '#283593', '#1565c0', '#00838f', '#2e7d32', '#558b2f', '#f9a825', '#ff8f00', '#ef6c00', '#d84315', '#c62828', '#ad1457'],
+ ['#9e9e9e', '#795548', '#311b92', '#4a148c', '#1a237e', '#0d47a1', '#006064', '#1b5e20', '#33691e', '#f57f17', '#ff6f00', '#e65100', '#bf360c', '#b71c1c', '#880e4f'],
+ ['#757575', '#6d4c41', '#b388ff', '#ea80fc', '#8c9eff', '#82b1ff', '#84ffff', '#b9f6ca', '#ccff90', '#ffff8d', '#ffe57f', '#ffd180', '#ff9e80', '#ff8a80', '#ff80ab'],
+ ['#616161', '#5d4037', '#7c4dff', '#e040fb', '#536dfe', '#448aff', '#18ffff', '#69f0ae', '#b2ff59', '#ffff00', '#ffd740', '#ffab40', '#ff6e40', '#ff5252', '#ff4081'],
+ ['#424242', '#4e342e', '#651fff', '#d500f9', '#3d5afe', '#2979ff', '#00e5ff', '#00e676', '#76ff03', '#ffea00', '#ffc400', '#ff9100', '#ff3d00', '#ff1744', '#f50057'],
+ ['#212121', '#3e2723', '#6200ea', '#aa00ff', '#304ffe', '#2962ff', '#00b8d4', '#00c853', '#64dd17', '#ffd600', '#ffab00', '#ff6d00', '#dd2c00', '#d50000', '#c51162'],
+ ],
+ // pallete colors(n x n)
+ colorTitles: [
+ //grey brown dpurple purple indigo blue cyan green lgreen yellow amber orange dorange red pink
+ ['grey lighten5', 'brown lighten5', 'deep-purple lighten1', 'purple lighten1', 'indigo lighten1', 'blue lighten1', 'cyan lighten1', 'green lighten1', 'light-green lighten1', 'yellow lighten1', 'amber lighten1', 'orange lighten1', 'deep-orange lighten1', 'red lighten1', 'pink lighten1'],
+ ['grey lighten4', 'brown lighten4', 'deep-purple', 'purple', 'indigo', 'blue', 'cyan', 'green', 'light-green', 'yellow', 'amber', 'orange', 'deep-orange', 'red', 'pink' ],
+ ['grey lighten3', 'brown lighten3', 'deep-purple darken1', 'purple darken1', 'indigo darken1', 'blue darken1', 'cyan darken1', 'green darken1', 'light-green darken1', 'yellow darken1', 'amber darken1', 'orange darken1', 'deep-orange darken1', 'red darken1', 'pink darken1' ],
+ ['grey lighten2', 'brown lighten2', 'deep-purple darken2', 'purple darken2', 'indigo darken2', 'blue darken2', 'cyan darken2', 'green darken2', 'light-green darken2', 'yellow darken2', 'amber darken2', 'orange darken2', 'deep-orange darken2', 'red darken2', 'pink darken2' ],
+ ['grey lighten1', 'brown lighten1', 'deep-purple darken3', 'purple darken3', 'indigo darken3', 'blue darken3', 'cyan darken3', 'green darken3', 'light-green darken3', 'yellow darken3', 'amber darken3', 'orange darken3', 'deep-orange darken3', 'red darken3', 'pink darken3' ],
+ ['grey', 'brown', 'deep-purple darken4', 'purple darken4', 'indigo darken4', 'blue darken4', 'cyan darken4', 'green darken4', 'light-green darken4', 'yellow darken4', 'amber darken4', 'orange darken4', 'deep-orange darken4', 'red darken4', 'pink darken4' ],
+ ['grey darken1', 'brown darken1', 'deep-purple accent1', 'purple accent1', 'indigo accent1', 'blue accent1', 'cyan accent1', 'green accent1', 'light-green accent1', 'yellow accent1', 'amber accent1', 'orange accent1', 'deep-orange accent1', 'red accent1', 'pink accent1' ],
+ ['grey darken2', 'brown darken2', 'deep-purple accent2', 'purple accent2', 'indigo accent2', 'blue accent2', 'cyan accent2', 'green accent2', 'light-green accent2', 'yellow accent2', 'amber accent2', 'orange accent2', 'deep-orange accent2', 'red accent2', 'pink accent2' ],
+ ['grey darken3', 'brown darken3', 'deep-purple accent3', 'purple accent3', 'indigo accent3', 'blue accent3', 'cyan accent3', 'green accent3', 'light-green accent3', 'yellow accent3', 'amber accent3', 'orange accent3', 'deep-orange accent3', 'red accent3', 'pink accent3' ],
+ ['grey darken4', 'brown darken4', 'deep-purple accent4', 'purple accent4', 'indigo accent4', 'blue accent4', 'cyan accent4', 'green accent4', 'light-green accent4', 'yellow accent4', 'amber accent4', 'orange accent4', 'deep-orange accent4', 'red accent4', 'pink accent4' ],
+ ],
+
+ // lineHeight
+ lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],
+
+ // insertTable max size
+ insertTableMaxSize: {
+ col: 12,
+ row: 10
+ },
+
+ // image
+ maximumImageFileSize: null, // size in bytes, null = no limit
+
+ // callbacks
+ oninit: null, // initialize
+ onfocus: null, // editable has focus
+ onblur: null, // editable out of focus
+ onenter: null, // enter key pressed
+ onkeyup: null, // keyup
+ onkeydown: null, // keydown
+ onImageUpload: null, // imageUpload
+ onImageUploadError: null, // imageUploadError
+ onMediaDelete: null, // media delete
+ onToolbarClick: null,
+ onsubmit: null,
+
+ /**
+ * manipulate link address when user create link
+ * @param {String} sLinkUrl
+ * @return {String}
+ */
+ onCreateLink: function(sLinkUrl) {
+ if (sLinkUrl.indexOf('@') !== -1 && sLinkUrl.indexOf(':') === -1) {
+ sLinkUrl = 'mailto:' + sLinkUrl;
+ }
+
+ return sLinkUrl;
+ },
+
+ keyMap: {
+ pc: {
+ 'ENTER': 'insertParagraph',
+ 'CTRL+Z': 'undo',
+ 'CTRL+Y': 'redo',
+ 'TAB': 'tab',
+ 'SHIFT+TAB': 'untab',
+ 'CTRL+B': 'bold',
+ 'CTRL+I': 'italic',
+ 'CTRL+U': 'underline',
+ 'CTRL+SHIFT+S': 'strikethrough',
+ 'CTRL+BACKSLASH': 'removeFormat',
+ 'CTRL+SHIFT+L': 'justifyLeft',
+ 'CTRL+SHIFT+E': 'justifyCenter',
+ 'CTRL+SHIFT+R': 'justifyRight',
+ 'CTRL+SHIFT+J': 'justifyFull',
+ 'CTRL+SHIFT+NUM7': 'insertUnorderedList',
+ 'CTRL+SHIFT+NUM8': 'insertOrderedList',
+ 'CTRL+LEFTBRACKET': 'outdent',
+ 'CTRL+RIGHTBRACKET': 'indent',
+ 'CTRL+NUM0': 'formatPara',
+ 'CTRL+NUM1': 'formatH1',
+ 'CTRL+NUM2': 'formatH2',
+ 'CTRL+NUM3': 'formatH3',
+ 'CTRL+NUM4': 'formatH4',
+ 'CTRL+NUM5': 'formatH5',
+ 'CTRL+NUM6': 'formatH6',
+ 'CTRL+ENTER': 'insertHorizontalRule',
+ 'CTRL+K': 'showLinkDialog'
+ },
+
+ mac: {
+ 'ENTER': 'insertParagraph',
+ 'CMD+Z': 'undo',
+ 'CMD+SHIFT+Z': 'redo',
+ 'TAB': 'tab',
+ 'SHIFT+TAB': 'untab',
+ 'CMD+B': 'bold',
+ 'CMD+I': 'italic',
+ 'CMD+U': 'underline',
+ 'CMD+SHIFT+S': 'strikethrough',
+ 'CMD+BACKSLASH': 'removeFormat',
+ 'CMD+SHIFT+L': 'justifyLeft',
+ 'CMD+SHIFT+E': 'justifyCenter',
+ 'CMD+SHIFT+R': 'justifyRight',
+ 'CMD+SHIFT+J': 'justifyFull',
+ 'CMD+SHIFT+NUM7': 'insertUnorderedList',
+ 'CMD+SHIFT+NUM8': 'insertOrderedList',
+ 'CMD+LEFTBRACKET': 'outdent',
+ 'CMD+RIGHTBRACKET': 'indent',
+ 'CMD+NUM0': 'formatPara',
+ 'CMD+NUM1': 'formatH1',
+ 'CMD+NUM2': 'formatH2',
+ 'CMD+NUM3': 'formatH3',
+ 'CMD+NUM4': 'formatH4',
+ 'CMD+NUM5': 'formatH5',
+ 'CMD+NUM6': 'formatH6',
+ 'CMD+ENTER': 'insertHorizontalRule',
+ 'CMD+K': 'showLinkDialog'
+ }
+ }
+ },
+
+ // default language: en-US
+ lang: {
+ 'en-US': {
+ font: {
+ bold: 'Bold',
+ italic: 'Italic',
+ underline: 'Underline',
+ clear: 'Remove Font Style',
+ height: 'Line Height',
+ name: 'Font Family',
+ strikethrough: 'Strikethrough',
+ subscript: 'Subscript',
+ superscript: 'Superscript',
+ size: 'Font Size'
+ },
+ image: {
+ image: 'Picture',
+ insert: 'Insert Image',
+ resizeFull: 'Resize Full',
+ resizeHalf: 'Resize Half',
+ resizeQuarter: 'Resize Quarter',
+ floatLeft: 'Float Left',
+ floatRight: 'Float Right',
+ floatNone: 'Float None',
+ shapeRounded: 'Shape: Rounded',
+ shapeCircle: 'Shape: Circle',
+ bordered: 'Bordered',
+ shapeThumbnail: 'Shape: Thumbnail',
+ shapeNone: 'Shape: None',
+ dragImageHere: 'Drag image or text here',
+ dropImage: 'Drop image or Text',
+ selectFromFiles: 'Select from files',
+ maximumFileSize: 'Maximum file size',
+ maximumFileSizeError: 'Maximum file size exceeded.',
+ url: 'Image URL',
+ remove: 'Remove Image'
+ },
+ link: {
+ link: 'Link',
+ insert: 'Insert Link',
+ unlink: 'Unlink',
+ edit: 'Edit',
+ textToDisplay: 'Text to display',
+ url: 'To what URL should this link go?',
+ openInNewWindow: 'Open in new window'
+ },
+ table: {
+ table: 'Table',
+ striped: 'Striped',
+ hoverable: 'Hoverable',
+ responsive: 'Responsive',
+ bordered: 'Bordered'
+ },
+ hr: {
+ insert: 'Insert Horizontal Rule'
+ },
+ style: {
+ style: 'Style',
+ normal: 'Normal',
+ blockquote: 'Quote',
+ pre: 'Code',
+ h1: 'Header 1',
+ h2: 'Header 2',
+ h3: 'Header 3',
+ h4: 'Header 4',
+ h5: 'Header 5',
+ h6: 'Header 6'
+ },
+ lists: {
+ unordered: 'Unordered list',
+ ordered: 'Ordered list'
+ },
+ options: {
+ help: 'Help',
+ fullscreen: 'Full Screen',
+ codeview: 'Code View'
+ },
+ paragraph: {
+ paragraph: 'Paragraph',
+ outdent: 'Outdent',
+ indent: 'Indent',
+ left: 'Align left',
+ center: 'Align center',
+ right: 'Align right',
+ justify: 'Justify full'
+ },
+ color: {
+ recent: 'Recent Color',
+ more: 'More Color',
+ background: 'Back',
+ foreground: 'Text',
+ transparent: 'Transparent',
+ setTransparent: 'Transparent',
+ reset: 'Reset',
+ resetToDefault: 'Default'
+ },
+ shortcut: {
+ shortcuts: 'Keyboard shortcuts',
+ close: 'Close',
+ textFormatting: 'Text formatting',
+ action: 'Action',
+ paragraphFormatting: 'Paragraph formatting',
+ documentStyle: 'Document Style',
+ extraKeys: 'Extra keys'
+ },
+ history: {
+ undo: 'Undo',
+ redo: 'Redo'
+ }
+ }
+ }
+ };
+
+ /**
+ * @class core.async
+ *
+ * Async functions which returns `Promise`
+ *
+ * @singleton
+ * @alternateClassName async
+ */
+ var async = (function() {
+ /**
+ * @method readFileAsDataURL
+ *
+ * read contents of file as representing URL
+ *
+ * @param {File} file
+ * @return {Promise} - then: sDataUrl
+ */
+ var readFileAsDataURL = function(file) {
+ return $.Deferred(function(deferred) {
+ $.extend(new FileReader(), {
+ onload: function(e) {
+ var sDataURL = e.target.result;
+ deferred.resolve(sDataURL);
+ },
+ onerror: function() {
+ deferred.reject(this);
+ }
+ }).readAsDataURL(file);
+ }).promise();
+ };
+
+ /**
+ * @method createImage
+ *
+ * create `<image>` from url string
+ *
+ * @param {String} sUrl
+ * @param {String} filename
+ * @return {Promise} - then: $image
+ */
+ var createImage = function(sUrl, filename) {
+ return $.Deferred(function(deferred) {
+ var $img = $('<img>');
+
+ $img.one('load', function() {
+ $img.off('error abort');
+ deferred.resolve($img);
+ }).one('error abort', function() {
+ $img.off('load').detach();
+ deferred.reject($img);
+ }).css({
+ display: 'none'
+ }).appendTo(document.body).attr({
+ 'src': sUrl,
+ 'data-filename': filename
+ });
+ }).promise();
+ };
+
+ return {
+ readFileAsDataURL: readFileAsDataURL,
+ createImage: createImage
+ };
+ })();
+
+ /**
+ * @class core.key
+ *
+ * Object for keycodes.
+ *
+ * @singleton
+ * @alternateClassName key
+ */
+ var key = (function() {
+ var keyMap = {
+ 'BACKSPACE': 8,
+ 'TAB': 9,
+ 'ENTER': 13,
+ 'SPACE': 32,
+
+ // Number: 0-9
+ 'NUM0': 48,
+ 'NUM1': 49,
+ 'NUM2': 50,
+ 'NUM3': 51,
+ 'NUM4': 52,
+ 'NUM5': 53,
+ 'NUM6': 54,
+ 'NUM7': 55,
+ 'NUM8': 56,
+
+ // Alphabet: a-z
+ 'B': 66,
+ 'E': 69,
+ 'I': 73,
+ 'J': 74,
+ 'K': 75,
+ 'L': 76,
+ 'R': 82,
+ 'S': 83,
+ 'U': 85,
+ 'Y': 89,
+ 'Z': 90,
+
+ 'SLASH': 191,
+ 'LEFTBRACKET': 219,
+ 'BACKSLASH': 220,
+ 'RIGHTBRACKET': 221
+ };
+
+ return {
+ /**
+ * @method isEdit
+ *
+ * @param {Number} keyCode
+ * @return {Boolean}
+ */
+ isEdit: function(keyCode) {
+ return list.contains([8, 9, 13, 32], keyCode);
+ },
+ /**
+ * @method isMove
+ *
+ * @param {Number} keyCode
+ * @return {Boolean}
+ */
+ isMove: function(keyCode) {
+ return list.contains([37, 38, 39, 40], keyCode);
+ },
+ /**
+ * @property {Object} nameFromCode
+ * @property {String} nameFromCode.8 "BACKSPACE"
+ */
+ nameFromCode: func.invertObject(keyMap),
+ code: keyMap
+ };
+ })();
+
+ /**
+ * @class editing.History
+ *
+ * Editor History
+ *
+ */
+ var History = function($editable) {
+ var stack = [], stackOffset = -1;
+ var editable = $editable[0];
+
+ var makeSnapshot = function() {
+ var rng = range.create();
+ var emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}};
+
+ return {
+ contents: $editable.html(),
+ bookmark: (rng ? rng.bookmark(editable) : emptyBookmark)
+ };
+ };
+
+ var applySnapshot = function(snapshot) {
+ if (snapshot.contents !== null) {
+ $editable.html(snapshot.contents);
+ }
+ if (snapshot.bookmark !== null) {
+ range.createFromBookmark(editable, snapshot.bookmark).select();
+ }
+ };
+
+ /**
+ * undo
+ */
+ this.undo = function() {
+ if (0 < stackOffset) {
+ stackOffset--;
+ applySnapshot(stack[stackOffset]);
+ }
+ };
+
+ /**
+ * redo
+ */
+ this.redo = function() {
+ if (stack.length - 1 > stackOffset) {
+ stackOffset++;
+ applySnapshot(stack[stackOffset]);
+ }
+ };
+
+ /**
+ * recorded undo
+ */
+ this.recordUndo = function() {
+ stackOffset++;
+
+ // Wash out stack after stackOffset
+ if (stack.length > stackOffset) {
+ stack = stack.slice(0, stackOffset);
+ }
+
+ // Create new snapshot and push it to the end
+ stack.push(makeSnapshot());
+ };
+
+ // Create first undo stack
+ this.recordUndo();
+ };
+
+ /**
+ * @class editing.Style
+ *
+ * Style
+ *
+ */
+ var Style = function() {
+ /**
+ * @method jQueryCSS
+ *
+ * [workaround] for old jQuery
+ * passing an array of style properties to .css()
+ * will result in an object of property-value pairs.
+ * (compability with version < 1.9)
+ *
+ * @private
+ * @param {jQuery} $obj
+ * @param {Array} propertyNames - An array of one or more CSS properties.
+ * @return {Object}
+ */
+ var jQueryCSS = function($obj, propertyNames) {
+ if (agent.jqueryVersion < 1.9) {
+ var result = {};
+ $.each(propertyNames, function(idx, propertyName) {
+ result[propertyName] = $obj.css(propertyName);
+ });
+ return result;
+ }
+ return $obj.css.call($obj, propertyNames);
+ };
+
+ /**
+ * paragraph level style
+ *
+ * @param {WrappedRange} rng
+ * @param {Object} styleInfo
+ */
+ this.stylePara = function(rng, styleInfo) {
+ $.each(rng.nodes(dom.isPara, {
+ includeAncestor: true
+ }), function(idx, para) {
+ $(para).css(styleInfo);
+ });
+ };
+
+ /**
+ * insert and returns styleNodes on range.
+ *
+ * @param {WrappedRange} rng
+ * @param {Object} [options] - options for styleNodes
+ * @param {String} [options.nodeName] - default: `SPAN`
+ * @param {Boolean} [options.expandClosestSibling] - default: `false`
+ * @param {Boolean} [options.onlyPartialContains] - default: `false`
+ * @return {Node[]}
+ */
+ this.styleNodes = function(rng, options) {
+ rng = rng.splitText();
+
+ var nodeName = options && options.nodeName || 'SPAN';
+ var expandClosestSibling = !!(options && options.expandClosestSibling);
+ var onlyPartialContains = !!(options && options.onlyPartialContains);
+
+ if (rng.isCollapsed()) {
+ return [rng.insertNode(dom.create(nodeName))];
+ }
+
+ var pred = dom.makePredByNodeName(nodeName);
+ var nodes = $.map(rng.nodes(dom.isText, {
+ fullyContains: true
+ }), function(text) {
+ return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);
+ });
+
+ if (expandClosestSibling) {
+ if (onlyPartialContains) {
+ var nodesInRange = rng.nodes();
+ // compose with partial contains predication
+ pred = func.and(pred, function(node) {
+ return list.contains(nodesInRange, node);
+ });
+ }
+
+ return $.map(nodes, function(node) {
+ var siblings = dom.withClosestSiblings(node, pred);
+ var head = list.head(siblings);
+ var tails = list.tail(siblings);
+ $.each(tails, function(idx, elem) {
+ dom.appendChildNodes(head, elem.childNodes);
+ dom.remove(elem);
+ });
+ return list.head(siblings);
+ });
+ } else {
+ return nodes;
+ }
+ };
+
+ /**
+ * get current style on cursor
+ *
+ * @param {WrappedRange} rng
+ * @param {Node} target - target element on event
+ * @return {Object} - object contains style properties.
+ */
+ this.current = function(rng, target) {
+ var $cont = $(dom.isText(rng.sc) ? rng.sc.parentNode : rng.sc);
+ var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];
+ var styleInfo = jQueryCSS($cont, properties) || {};
+
+ styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10);
+
+ // document.queryCommandState for toggle state
+ styleInfo['font-bold'] = document.queryCommandState('bold') ? 'bold' : 'normal';
+ styleInfo['font-italic'] = document.queryCommandState('italic') ? 'italic' : 'normal';
+ styleInfo['font-underline'] = document.queryCommandState('underline') ? 'underline' : 'normal';
+ styleInfo['font-strikethrough'] = document.queryCommandState('strikeThrough') ? 'strikethrough' : 'normal';
+ styleInfo['font-superscript'] = document.queryCommandState('superscript') ? 'superscript' : 'normal';
+ styleInfo['font-subscript'] = document.queryCommandState('subscript') ? 'subscript' : 'normal';
+
+ // list-style-type to list-style(unordered, ordered)
+ if (!rng.isOnList()) {
+ styleInfo['list-style'] = 'none';
+ } else {
+ var aOrderedType = ['circle', 'disc', 'disc-leading-zero', 'square'];
+ var isUnordered = $.inArray(styleInfo['list-style-type'], aOrderedType) > -1;
+ styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';
+ }
+
+ var para = dom.ancestor(rng.sc, dom.isPara);
+ if (para && para.style['line-height']) {
+ styleInfo['line-height'] = para.style.lineHeight;
+ } else {
+ var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);
+ styleInfo['line-height'] = lineHeight.toFixed(1);
+ }
+
+ styleInfo.image = dom.isImg(target) && target;
+ styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);
+ styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);
+ styleInfo.range = rng;
+
+ return styleInfo;
+ };
+ };
+
+
+ /**
+ * @class editing.Bullet
+ *
+ * @alternateClassName Bullet
+ */
+ var Bullet = function() {
+ /**
+ * @method insertOrderedList
+ *
+ * toggle ordered list
+ *
+ * @type command
+ */
+ this.insertOrderedList = function() {
+ this.toggleList('OL');
+ };
+
+ /**
+ * @method insertUnorderedList
+ *
+ * toggle unordered list
+ *
+ * @type command
+ */
+ this.insertUnorderedList = function() {
+ this.toggleList('UL');
+ };
+
+ /**
+ * @method indent
+ *
+ * indent
+ *
+ * @type command
+ */
+ this.indent = function() {
+ var self = this;
+ var rng = range.create().wrapBodyInlineWithPara();
+
+ var paras = rng.nodes(dom.isPara, { includeAncestor: true });
+ var clustereds = list.clusterBy(paras, func.peq2('parentNode'));
+
+ $.each(clustereds, function(idx, paras) {
+ var head = list.head(paras);
+ if (dom.isLi(head)) {
+ self.wrapList(paras, head.parentNode.nodeName);
+ } else {
+ $.each(paras, function(idx, para) {
+ $(para).css('marginLeft', function(idx, val) {
+ return (parseInt(val, 10) || 0) + 25;
+ });
+ });
+ }
+ });
+
+ rng.select();
+ };
+
+ /**
+ * @method outdent
+ *
+ * outdent
+ *
+ * @type command
+ */
+ this.outdent = function() {
+ var self = this;
+ var rng = range.create().wrapBodyInlineWithPara();
+
+ var paras = rng.nodes(dom.isPara, { includeAncestor: true });
+ var clustereds = list.clusterBy(paras, func.peq2('parentNode'));
+
+ $.each(clustereds, function(idx, paras) {
+ var head = list.head(paras);
+ if (dom.isLi(head)) {
+ self.releaseList([paras]);
+ } else {
+ $.each(paras, function(idx, para) {
+ $(para).css('marginLeft', function(idx, val) {
+ val = (parseInt(val, 10) || 0);
+ return val > 25 ? val - 25 : '';
+ });
+ });
+ }
+ });
+
+ rng.select();
+ };
+
+ /**
+ * @method toggleList
+ *
+ * toggle list
+ *
+ * @param {String} listName - OL or UL
+ */
+ this.toggleList = function(listName) {
+ var self = this;
+ var rng = range.create().wrapBodyInlineWithPara();
+
+ var paras = rng.nodes(dom.isPara, { includeAncestor: true });
+ var bookmark = rng.paraBookmark(paras);
+ var clustereds = list.clusterBy(paras, func.peq2('parentNode'));
+
+ // paragraph to list
+ if (list.find(paras, dom.isPurePara)) {
+ var wrappedParas = [];
+ $.each(clustereds, function(idx, paras) {
+ wrappedParas = wrappedParas.concat(self.wrapList(paras, listName));
+ });
+ paras = wrappedParas;
+ // list to paragraph or change list style
+ } else {
+ var diffLists = rng.nodes(dom.isList, {
+ includeAncestor: true
+ }).filter(function(listNode) {
+ return !$.nodeName(listNode, listName);
+ });
+
+ if (diffLists.length) {
+ $.each(diffLists, function(idx, listNode) {
+ dom.replace(listNode, listName);
+ });
+ } else {
+ paras = this.releaseList(clustereds, true);
+ }
+ }
+
+ range.createFromParaBookmark(bookmark, paras).select();
+ };
+
+ /**
+ * @method wrapList
+ *
+ * @param {Node[]} paras
+ * @param {String} listName
+ * @return {Node[]}
+ */
+ this.wrapList = function(paras, listName) {
+ var head = list.head(paras);
+ var last = list.last(paras);
+
+ var prevList = dom.isList(head.previousSibling) && head.previousSibling;
+ var nextList = dom.isList(last.nextSibling) && last.nextSibling;
+
+ var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);
+
+ // P to LI
+ paras = $.map(paras, function(para) {
+ return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;
+ });
+
+ // append to list(<ul>, <ol>)
+ dom.appendChildNodes(listNode, paras);
+
+ if (nextList) {
+ dom.appendChildNodes(listNode, list.from(nextList.childNodes));
+ dom.remove(nextList);
+ }
+
+ return paras;
+ };
+
+ /**
+ * @method releaseList
+ *
+ * @param {Array[]} clustereds
+ * @param {Boolean} isEscapseToBody
+ * @return {Node[]}
+ */
+ this.releaseList = function(clustereds, isEscapseToBody) {
+ var releasedParas = [];
+
+ $.each(clustereds, function(idx, paras) {
+ var head = list.head(paras);
+ var last = list.last(paras);
+
+ var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) :
+ head.parentNode;
+ var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {
+ node: last.parentNode,
+ offset: dom.position(last) + 1
+ }, {
+ isSkipPaddingBlankHTML: true
+ }) : null;
+
+ var middleList = dom.splitTree(headList, {
+ node: head.parentNode,
+ offset: dom.position(head)
+ }, {
+ isSkipPaddingBlankHTML: true
+ });
+
+ paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) :
+ list.from(middleList.childNodes).filter(dom.isLi);
+
+ // LI to P
+ if (isEscapseToBody || !dom.isList(headList.parentNode)) {
+ paras = $.map(paras, function(para) {
+ return dom.replace(para, 'P');
+ });
+ }
+
+ $.each(list.from(paras).reverse(), function(idx, para) {
+ dom.insertAfter(para, headList);
+ });
+
+ // remove empty lists
+ var rootLists = list.compact([headList, middleList, lastList]);
+ $.each(rootLists, function(idx, rootList) {
+ var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));
+ $.each(listNodes.reverse(), function(idx, listNode) {
+ if (!dom.nodeLength(listNode)) {
+ dom.remove(listNode, true);
+ }
+ });
+ });
+
+ releasedParas = releasedParas.concat(paras);
+ });
+
+ return releasedParas;
+ };
+ };
+
+
+ /**
+ * @class editing.Typing
+ *
+ * Typing
+ *
+ */
+ var Typing = function() {
+
+ // a Bullet instance to toggle lists off
+ var bullet = new Bullet();
+
+ /**
+ * insert tab
+ *
+ * @param {jQuery} $editable
+ * @param {WrappedRange} rng
+ * @param {Number} tabsize
+ */
+ this.insertTab = function($editable, rng, tabsize) {
+ var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));
+ rng = rng.deleteContents();
+ rng.insertNode(tab, true);
+
+ rng = range.create(tab, tabsize);
+ rng.select();
+ };
+
+ /**
+ * insert paragraph
+ */
+ this.insertParagraph = function() {
+ var rng = range.create();
+
+ // deleteContents on range.
+ rng = rng.deleteContents();
+
+ // Wrap range if it needs to be wrapped by paragraph
+ rng = rng.wrapBodyInlineWithPara();
+
+ // finding paragraph
+ var splitRoot = dom.ancestor(rng.sc, dom.isPara);
+
+ var nextPara;
+ // on paragraph: split paragraph
+ if (splitRoot) {
+ // if it is an empty line with li
+ if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) {
+ // disable UL/OL and escape!
+ bullet.toggleList(splitRoot.parentNode.nodeName);
+ return;
+ // if new line has content (not a line break)
+ } else {
+ nextPara = dom.splitTree(splitRoot, rng.getStartPoint());
+
+ var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);
+ emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));
+
+ $.each(emptyAnchors, function(idx, anchor) {
+ dom.remove(anchor);
+ });
+ }
+ // no paragraph: insert empty paragraph
+ } else {
+ var next = rng.sc.childNodes[rng.so];
+ nextPara = $(dom.emptyPara)[0];
+ if (next) {
+ rng.sc.insertBefore(nextPara, next);
+ } else {
+ rng.sc.appendChild(nextPara);
+ }
+ }
+
+ range.create(nextPara, 0).normalize().select();
+
+ };
+
+ };
+
+ /**
+ * @class editing.Table
+ *
+ * Table
+ *
+ */
+ var Table = function() {
+ /**
+ * handle tab key
+ *
+ * @param {WrappedRange} rng
+ * @param {Boolean} isShift
+ */
+ this.tab = function(rng, isShift) {
+ var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);
+ var table = dom.ancestor(cell, dom.isTable);
+ var cells = dom.listDescendant(table, dom.isCell);
+
+ var nextCell = list[isShift ? 'prev' : 'next'](cells, cell);
+ if (nextCell) {
+ range.create(nextCell, 0).select();
+ }
+ };
+
+ /**
+ * create empty table element
+ *
+ * @param {Number} rowCount
+ * @param {Number} colCount
+ * @return {Node}
+ */
+ this.createTable = function(tOptions) {
+ var tds = [], tdHTML;
+ var theaders = [];
+ var colCount = tOptions[0];
+ var rowCount = tOptions[1];
+ var classes = tOptions.slice(2, tOptions.length);
+
+ for (var idxCol = 0; idxCol < colCount; idxCol++) {
+ //tds.push('<td>' + dom.blank + '</td>');
+ tds.push('<td>(item)</td>');
+ theaders.push('<th>header</th>');
+ }
+ tdHTML = tds.join('');
+ theaders = theaders.join('');
+
+ var trs = [], trHTML;
+ for (var idxRow = 0; idxRow < rowCount; idxRow++) {
+ trs.push('<tr>' + tdHTML + '</tr>');
+ }
+ trHTML = trs.join('');
+
+ return $('<table class="' + classes.join(' ') + '"><thead><tr>' + theaders + '</tr></thead><tbody>' + trHTML + '</tbody></table>')[0];
+ };
+ };
+
+
+ var KEY_BOGUS = 'bogus';
+
+ /**
+ * @class editing.Editor
+ *
+ * Editor
+ *
+ */
+ var Editor = function(handler) {
+
+ var style = new Style();
+ var table = new Table();
+ var typing = new Typing();
+ var bullet = new Bullet();
+
+ /**
+ * @method createRange
+ *
+ * create range
+ *
+ * @param {jQuery} $editable
+ * @return {WrappedRange}
+ */
+ this.createRange = function($editable) {
+ this.focus($editable);
+ return range.create();
+ };
+
+ /**
+ * @method saveRange
+ *
+ * save current range
+ *
+ * @param {jQuery} $editable
+ * @param {Boolean} [thenCollapse=false]
+ */
+ this.saveRange = function($editable, thenCollapse) {
+ this.focus($editable);
+ $editable.data('range', range.create());
+ if (thenCollapse) {
+ range.create().collapse().select();
+ }
+ };
+
+ /**
+ * @method saveRange
+ *
+ * save current node list to $editable.data('childNodes')
+ *
+ * @param {jQuery} $editable
+ */
+ this.saveNode = function($editable) {
+ // copy child node reference
+ var copy = [];
+ for (var key = 0, len = $editable[0].childNodes.length; key < len; key++) {
+ copy.push($editable[0].childNodes[key]);
+ }
+ $editable.data('childNodes', copy);
+ };
+
+ /**
+ * @method restoreRange
+ *
+ * restore lately range
+ *
+ * @param {jQuery} $editable
+ */
+ this.restoreRange = function($editable) {
+ var rng = $editable.data('range');
+ if (rng) {
+ rng.select();
+ this.focus($editable);
+ }
+ };
+
+ /**
+ * @method restoreNode
+ *
+ * restore lately node list
+ *
+ * @param {jQuery} $editable
+ */
+ this.restoreNode = function($editable) {
+ $editable.html('');
+ var child = $editable.data('childNodes');
+ for (var index = 0, len = child.length; index < len; index++) {
+ $editable[0].appendChild(child[index]);
+ }
+ };
+ /**
+ * @method currentStyle
+ *
+ * current style
+ *
+ * @param {Node} target
+ * @return {Boolean} false if range is no
+ */
+ this.currentStyle = function(target) {
+ var rng = range.create();
+ return rng ? rng.isOnEditable() && style.current(rng, target) : false;
+ };
+
+ var triggerOnBeforeChange = function($editable) {
+ var $holder = dom.makeLayoutInfo($editable).holder();
+ handler.bindCustomEvent(
+ $holder, $editable.data('callbacks'), 'before.command'
+ )($editable.html(), $editable);
+ };
+
+ var triggerOnChange = function($editable) {
+ var $holder = dom.makeLayoutInfo($editable).holder();
+ handler.bindCustomEvent(
+ $holder, $editable.data('callbacks'), 'change'
+ )($editable.html(), $editable);
+ };
+
+ /**
+ * @method undo
+ * undo
+ * @param {jQuery} $editable
+ */
+ this.undo = function($editable) {
+ triggerOnBeforeChange($editable);
+ $editable.data('NoteHistory').undo();
+ triggerOnChange($editable);
+ };
+
+ /**
+ * @method redo
+ * redo
+ * @param {jQuery} $editable
+ */
+ this.redo = function($editable) {
+ triggerOnBeforeChange($editable);
+ $editable.data('NoteHistory').redo();
+ triggerOnChange($editable);
+ };
+
+ var self = this;
+ /**
+ * @method beforeCommand
+ * before command
+ * @param {jQuery} $editable
+ */
+ var beforeCommand = this.beforeCommand = function($editable) {
+ triggerOnBeforeChange($editable);
+ // keep focus on editable before command execution
+ self.focus($editable);
+ };
+
+ /**
+ * @method afterCommand
+ * after command
+ * @param {jQuery} $editable
+ * @param {Boolean} isPreventTrigger
+ */
+ var afterCommand = this.afterCommand = function($editable, isPreventTrigger) {
+ $editable.data('NoteHistory').recordUndo();
+ if (!isPreventTrigger) {
+ triggerOnChange($editable);
+ }
+ };
+
+ /**
+ * @method bold
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method italic
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method underline
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method strikethrough
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method formatBlock
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method superscript
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method subscript
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method justifyLeft
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method justifyCenter
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method justifyRight
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method justifyFull
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method formatBlock
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method removeFormat
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method backColor
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method foreColor
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method insertHorizontalRule
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /**
+ * @method fontName
+ *
+ * change font name
+ *
+ * @param {jQuery} $editable
+ * @param {Mixed} value
+ */
+
+ /* jshint ignore:start */
+ // native commands(with execCommand), generate function for execCommand
+ // >>>>>>> CK
+ var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript',
+ 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull',
+ 'formatBlock', 'removeFormat',
+ 'backColor', 'foreColor', 'fontName'];
+
+ for (var idx = 0, len = commands.length; idx < len; idx ++) {
+ this[commands[idx]] = (function(sCmd) {
+ return function($editable, value) {
+ beforeCommand($editable);
+
+ document.execCommand(sCmd, false, value);
+
+ afterCommand($editable, true);
+ };
+ })(commands[idx]);
+ }
+ /* jshint ignore:end */
+
+ this.insertHorizontalRule = function() {
+ var hrNode = $('<div />');
+ hrNode.addClass('divider');
+
+ range.create().insertNode(hrNode[0]);
+ };
+
+ /**
+ * @method tab
+ *
+ * handle tab key
+ *
+ * @param {jQuery} $editable
+ * @param {Object} options
+ */
+ this.tab = function($editable, options) {
+ var rng = this.createRange($editable);
+ if (rng.isCollapsed() && rng.isOnCell()) {
+ table.tab(rng);
+ } else {
+ beforeCommand($editable);
+ typing.insertTab($editable, rng, options.tabsize);
+ afterCommand($editable);
+ }
+ };
+
+ /**
+ * @method untab
+ *
+ * handle shift+tab key
+ *
+ */
+ this.untab = function($editable) {
+ var rng = this.createRange($editable);
+ if (rng.isCollapsed() && rng.isOnCell()) {
+ table.tab(rng, true);
+ }
+ };
+
+ /**
+ * @method insertParagraph
+ *
+ * insert paragraph
+ *
+ * @param {Node} $editable
+ */
+ this.insertParagraph = function($editable) {
+ beforeCommand($editable);
+ typing.insertParagraph($editable);
+ afterCommand($editable);
+ };
+
+ /**
+ * @method insertOrderedList
+ *
+ * @param {jQuery} $editable
+ */
+ this.insertOrderedList = function($editable) {
+ beforeCommand($editable);
+ bullet.insertOrderedList($editable);
+ afterCommand($editable);
+ };
+
+ /**
+ * @param {jQuery} $editable
+ */
+ this.insertUnorderedList = function($editable) {
+ beforeCommand($editable);
+ bullet.insertUnorderedList($editable);
+ afterCommand($editable);
+ };
+
+ /**
+ * @param {jQuery} $editable
+ */
+ this.indent = function($editable) {
+ beforeCommand($editable);
+ bullet.indent($editable);
+ afterCommand($editable);
+ };
+
+ /**
+ * @param {jQuery} $editable
+ */
+ this.outdent = function($editable) {
+ beforeCommand($editable);
+ bullet.outdent($editable);
+ afterCommand($editable);
+ };
+
+ /**
+ * insert image
+ *
+ * @param {jQuery} $editable
+ * @param {String} sUrl
+ */
+ this.insertImage = function($editable, sUrl, filename) {
+ async.createImage(sUrl, filename).then(function($image) {
+ beforeCommand($editable);
+ $image.css({
+ display: '',
+ width: Math.min($editable.width(), $image.width())
+ });
+ range.create().insertNode($image[0]);
+ range.createFromNodeAfter($image[0]).select();
+ afterCommand($editable);
+ }).fail(function() {
+ var $holder = dom.makeLayoutInfo($editable).holder();
+ handler.bindCustomEvent(
+ $holder, $editable.data('callbacks'), 'image.upload.error'
+ )();
+ });
+ };
+
+ /**
+ * @method insertNode
+ * insert node
+ * @param {Node} $editable
+ * @param {Node} node
+ */
+ this.insertNode = function($editable, node) {
+ beforeCommand($editable);
+ range.create().insertNode(node);
+ range.createFromNodeAfter(node).select();
+ afterCommand($editable);
+ };
+
+ /**
+ * insert text
+ * @param {Node} $editable
+ * @param {String} text
+ */
+ this.insertText = function($editable, text) {
+ beforeCommand($editable);
+ var textNode = range.create().insertNode(dom.createText(text));
+ range.create(textNode, dom.nodeLength(textNode)).select();
+ afterCommand($editable);
+ };
+
+ /**
+ * paste HTML
+ * @param {Node} $editable
+ * @param {String} markup
+ */
+ this.pasteHTML = function($editable, markup) {
+ beforeCommand($editable);
+ var contents = range.create().pasteHTML(markup);
+ range.createFromNodeAfter(list.last(contents)).select();
+ afterCommand($editable);
+ };
+
+ /**
+ * formatBlock
+ *
+ * @param {jQuery} $editable
+ * @param {String} tagName
+ */
+ this.formatBlock = function($editable, tagName) {
+ beforeCommand($editable);
+ // [workaround] for MSIE, IE need `<`
+ tagName = agent.isMSIE ? '<' + tagName + '>' : tagName;
+ document.execCommand('FormatBlock', false, tagName);
+ afterCommand($editable);
+ };
+
+ this.formatPara = function($editable) {
+ beforeCommand($editable);
+ this.formatBlock($editable, 'P');
+ afterCommand($editable);
+ };
+
+ /* jshint ignore:start */
+ for (var idx = 1; idx <= 6; idx ++) {
+ this['formatH' + idx] = function(idx) {
+ return function($editable) {
+ this.formatBlock($editable, 'H' + idx);
+ };
+ }(idx);
+ };
+ /* jshint ignore:end */
+
+ /**
+ * fontSize
+ *
+ * @param {jQuery} $editable
+ * @param {String} value - px
+ */
+ this.fontSize = function($editable, value) {
+ var rng = range.create();
+ var isCollapsed = rng.isCollapsed();
+
+ if (isCollapsed) {
+ var spans = style.styleNodes(rng);
+ var firstSpan = list.head(spans);
+
+ $(spans).css({
+ 'font-size': value + 'px'
+ });
+
+ // [workaround] added styled bogus span for style
+ // - also bogus character needed for cursor position
+ if (firstSpan && !dom.nodeLength(firstSpan)) {
+ firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;
+ range.createFromNodeAfter(firstSpan.firstChild).select();
+ $editable.data(KEY_BOGUS, firstSpan);
+ }
+ } else {
+ beforeCommand($editable);
+ $(style.styleNodes(rng)).css({
+ 'font-size': value + 'px'
+ });
+ afterCommand($editable);
+ }
+ };
+
+ /**
+ * remove bogus node and character
+ */
+ this.removeBogus = function($editable) {
+ var bogusNode = $editable.data(KEY_BOGUS);
+ if (!bogusNode) {
+ return;
+ }
+
+ var textNode = list.find(list.from(bogusNode.childNodes), dom.isText);
+
+ var bogusCharIdx = textNode.nodeValue.indexOf(dom.ZERO_WIDTH_NBSP_CHAR);
+ if (bogusCharIdx !== -1) {
+ textNode.deleteData(bogusCharIdx, 1);
+ }
+
+ if (dom.isEmpty(bogusNode)) {
+ dom.remove(bogusNode);
+ }
+
+ $editable.removeData(KEY_BOGUS);
+ };
+
+ /**
+ * lineHeight
+ * @param {jQuery} $editable
+ * @param {String} value
+ */
+ this.lineHeight = function($editable, value) {
+ beforeCommand($editable);
+ style.stylePara(range.create(), {
+ lineHeight: value
+ });
+ afterCommand($editable);
+ };
+
+ /**
+ * unlink
+ *
+ * @type command
+ *
+ * @param {jQuery} $editable
+ */
+ this.unlink = function($editable) {
+ var rng = this.createRange($editable);
+ if (rng.isOnAnchor()) {
+ var anchor = dom.ancestor(rng.sc, dom.isAnchor);
+ rng = range.createFromNode(anchor);
+ rng.select();
+
+ beforeCommand($editable);
+ document.execCommand('unlink');
+ afterCommand($editable);
+ }
+ };
+
+ /**
+ * create link (command)
+ *
+ * @param {jQuery} $editable
+ * @param {Object} linkInfo
+ * @param {Object} options
+ */
+ this.createLink = function($editable, linkInfo, options) {
+ var linkUrl = linkInfo.url;
+ var linkText = linkInfo.text;
+ var isNewWindow = linkInfo.newWindow;
+ var rng = linkInfo.range;
+ var isTextChanged = rng.toString() !== linkText;
+
+ beforeCommand($editable);
+
+ if (options.onCreateLink) {
+ linkUrl = options.onCreateLink(linkUrl);
+ }
+
+ var anchors = [];
+ if (isTextChanged) {
+ // Create a new link when text changed.
+ var anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]);
+ anchors.push(anchor);
+ } else {
+ anchors = style.styleNodes(rng, {
+ nodeName: 'A',
+ expandClosestSibling: true,
+ onlyPartialContains: true
+ });
+ }
+
+ $.each(anchors, function(idx, anchor) {
+ $(anchor).attr('href', linkUrl);
+ if (isNewWindow) {
+ $(anchor).attr('target', '_blank');
+ } else {
+ $(anchor).removeAttr('target');
+ }
+ });
+
+ var startRange = range.createFromNodeBefore(list.head(anchors));
+ var startPoint = startRange.getStartPoint();
+ var endRange = range.createFromNodeAfter(list.last(anchors));
+ var endPoint = endRange.getEndPoint();
+
+ range.create(
+ startPoint.node,
+ startPoint.offset,
+ endPoint.node,
+ endPoint.offset
+ ).select();
+
+ afterCommand($editable);
+ };
+
+ /**
+ * returns link info
+ *
+ * @return {Object}
+ * @return {WrappedRange} return.range
+ * @return {String} return.text
+ * @return {Boolean} [return.isNewWindow=true]
+ * @return {String} [return.url='']
+ */
+ this.getLinkInfo = function($editable) {
+ this.focus($editable);
+
+ var rng = range.create().expand(dom.isAnchor);
+
+ // Get the first anchor on range(for edit).
+ var $anchor = $(list.head(rng.nodes(dom.isAnchor)));
+
+ return {
+ range: rng,
+ text: rng.toString(),
+ isNewWindow: $anchor.length ? $anchor.attr('target') === '_blank' : false,
+ url: $anchor.length ? $anchor.attr('href') : ''
+ };
+ };
+
+ /**
+ * setting color
+ *
+ * @param {Node} $editable
+ * @param {Object} sObjColor color code
+ * @param {String} sObjColor.foreColor foreground color
+ * @param {String} sObjColor.backColor background color
+ */
+ this.color = function($editable, sObjColor) {
+ var oColor = JSON.parse(sObjColor);
+ var foreColor = oColor.foreColor, backColor = oColor.backColor;
+
+ beforeCommand($editable);
+
+ if (foreColor) { document.execCommand('foreColor', false, foreColor); }
+ if (backColor) { document.execCommand('backColor', false, backColor); }
+
+ afterCommand($editable);
+ };
+
+ /**
+ * insert Table
+ *
+ * @param {Node} $editable
+ * @param {String} sDim dimension of table (ex : "5x5")
+ */
+ this.insertTable = function($editable, sDim) {
+ var tOptions = sDim.split('x');
+ beforeCommand($editable);
+
+ var rng = range.create().deleteContents();
+ rng.insertNode(table.createTable(tOptions));
+ afterCommand($editable);
+ };
+
+ /**
+ * float me
+ *
+ * @param {jQuery} $editable
+ * @param {String} value
+ * @param {jQuery} $target
+ */
+ this.floatMe = function($editable, value, $target) {
+ beforeCommand($editable);
+ $target.css('float', value);
+ afterCommand($editable);
+ };
+
+ /**
+ * change image shape
+ *
+ * @param {jQuery} $editable
+ * @param {String} value css class
+ * @param {Node} $target
+ */
+ this.imageShape = function($editable, value, $target) {
+ beforeCommand($editable);
+
+ $target.removeClass('img-rounded img-circle img-thumbnail img-bordered');
+
+ if (value) {
+ $target.addClass(value);
+ }
+
+ afterCommand($editable);
+ };
+
+ /**
+ * >>>>>>> CK
+ * change image class
+ *
+ * @param {jQuery} $editable
+ * @param {String} value css class
+ * @param {Node} $target
+ */
+ this.imageClass = function($editable, value, $target) {
+ beforeCommand($editable);
+
+ if (value) {
+ if ($target.hasClass(value)) {
+ $target.removeClass(value);
+ } else {
+ $target.addClass(value);
+ }
+ }
+
+ afterCommand($editable);
+ };
+
+ /**
+ * resize overlay element
+ * @param {jQuery} $editable
+ * @param {String} value
+ * @param {jQuery} $target - target element
+ */
+ this.resize = function($editable, value, $target) {
+ beforeCommand($editable);
+
+ $target.css({
+ width: value * 100 + '%',
+ height: ''
+ });
+
+ afterCommand($editable);
+ };
+
+ /**
+ * @param {Position} pos
+ * @param {jQuery} $target - target element
+ * @param {Boolean} [bKeepRatio] - keep ratio
+ */
+ this.resizeTo = function(pos, $target, bKeepRatio) {
+ var imageSize;
+ if (bKeepRatio) {
+ var newRatio = pos.y / pos.x;
+ var ratio = $target.data('ratio');
+ imageSize = {
+ width: ratio > newRatio ? pos.x : pos.y / ratio,
+ height: ratio > newRatio ? pos.x * ratio : pos.y
+ };
+ } else {
+ imageSize = {
+ width: pos.x,
+ height: pos.y
+ };
+ }
+
+ $target.css(imageSize);
+ };
+
+ /**
+ * remove media object
+ *
+ * @param {jQuery} $editable
+ * @param {String} value - dummy argument (for keep interface)
+ * @param {jQuery} $target - target element
+ */
+ this.removeMedia = function($editable, value, $target) {
+ beforeCommand($editable);
+ $target.detach();
+
+ handler.bindCustomEvent(
+ $(), $editable.data('callbacks'), 'media.delete'
+ )($target, $editable);
+
+ afterCommand($editable);
+ };
+
+ /**
+ * set focus
+ *
+ * @param $editable
+ */
+ this.focus = function($editable) {
+ $editable.focus();
+
+ // [workaround] for firefox bug http://goo.gl/lVfAaI
+ if (agent.isFF && !range.create().isOnEditable()) {
+ range.createFromNode($editable[0])
+ .normalize()
+ .collapse()
+ .select();
+ }
+ };
+
+ /**
+ * returns whether contents is empty or not.
+ *
+ * @param {jQuery} $editable
+ * @return {Boolean}
+ */
+ this.isEmpty = function($editable) {
+ return dom.isEmpty($editable[0]) || dom.emptyPara === $editable.html();
+ };
+ };
+
+ /**
+ * @class module.Button
+ *
+ * Button
+ */
+ var Button = function() {
+ /**
+ * update button status
+ *
+ * @param {jQuery} $container
+ * @param {Object} styleInfo
+ */
+ this.update = function($container, styleInfo) {
+ /**
+ * handle dropdown's check mark (for fontname, fontsize, lineHeight).
+ * @param {jQuery} $btn
+ * @param {Number} value
+ */
+ var checkDropdownMenu = function($btn, value) {
+ $btn.find('.dropdown-menu li').each(function() {
+
+ var div = $(this).children('div');
+ var currentValue = div.data('value');
+
+ // always compare string to avoid creating another func.
+ if ((currentValue + '') === (value + '')) {
+ div.children('i').removeClass('transparent');
+ } else {
+ div.children('i').addClass('transparent');
+ }
+ });
+ };
+
+ /**
+ * update button state(active or not).
+ *
+ * @private
+ * @param {String} selector
+ * @param {Function} pred
+ */
+ var btnState = function(selector, pred) {
+ var $btn = $container.find(selector);
+
+ $btn.toggleClass('active', pred());
+ };
+
+ if (styleInfo.image) {
+ var $img = $(styleInfo.image);
+
+ btnState('.btn[data-event="imageClass"][data-value="img-rounded"]', function() {
+ return $img.hasClass('img-rounded');
+ });
+ btnState('.btn[data-event="imageClass"][data-value="img-circle"]', function() {
+ return $img.hasClass('img-circle');
+ });
+ btnState('.btn[data-event="imageClass"][data-value="img-thumbnail"]', function() {
+ return $img.hasClass('img-thumbnail');
+ });
+ btnState('.btn[data-event="imageClass"][data-value="img-bordered"]', function() {
+ return $img.hasClass('img-bordered');
+ });
+ btnState('.btn[data-event="imageShape"]:not([data-value])', function() {
+ return !$img.is('.img-rounded, .img-circle, .img-thumbnail, .img-bordered');
+ });
+
+ var imgFloat = $img.css('float');
+ btnState('.btn[data-event="floatMe"][data-value="left"]', function() {
+ return imgFloat === 'left';
+ });
+ btnState('.btn[data-event="floatMe"][data-value="right"]', function() {
+ return imgFloat === 'right';
+ });
+ btnState('.btn[data-event="floatMe"][data-value="none"]', function() {
+ return imgFloat !== 'left' && imgFloat !== 'right';
+ });
+
+ var style = $img.attr('style');
+ btnState('.btn[data-event="resize"][data-value="1"]', function() {
+ return !!/(^|\s)(max-)?width\s*:\s*100%/.test(style);
+ });
+ btnState('.btn[data-event="resize"][data-value="0.5"]', function() {
+ return !!/(^|\s)(max-)?width\s*:\s*50%/.test(style);
+ });
+ btnState('.btn[data-event="resize"][data-value="0.25"]', function() {
+ return !!/(^|\s)(max-)?width\s*:\s*25%/.test(style);
+ });
+ return;
+ }
+
+ // fontname
+ var $fontname = $container.find('.note-fontname[data-name=fontname]');
+ if ($fontname.length) {
+ var selectedFont = styleInfo['font-family'];
+ if (!!selectedFont) {
+
+ var list = selectedFont.split(',');
+ for (var i = 0, len = list.length; i < len; i++) {
+ selectedFont = list[i].replace(/[\'\"]/g, '').replace(/\s+$/, '').replace(/^\s+/, '');
+ if (agent.isFontInstalled(selectedFont)) {
+ break;
+ }
+ }
+
+ $fontname.find('.note-current-fontname').text(selectedFont);
+ checkDropdownMenu($fontname, selectedFont);
+
+ }
+ }
+
+ // fontsize
+ var $fontsize = $container.find('.note-fontsize[data-name=fontsize]');
+ $fontsize.find('.note-current-fontsize').text(styleInfo['font-size']);
+ checkDropdownMenu($fontsize, parseFloat(styleInfo['font-size']));
+
+ // lineheight
+ var $lineHeight = $container.find('.note-height[data-name=lineheight]');
+ checkDropdownMenu($lineHeight, parseFloat(styleInfo['line-height']));
+
+ btnState('.btn[data-event="bold"]', function() {
+ return styleInfo['font-bold'] === 'bold';
+ });
+ btnState('.btn[data-event="italic"]', function() {
+ return styleInfo['font-italic'] === 'italic';
+ });
+ btnState('.btn[data-event="underline"]', function() {
+ return styleInfo['font-underline'] === 'underline';
+ });
+ btnState('.btn[data-event="strikethrough"]', function() {
+ return styleInfo['font-strikethrough'] === 'strikethrough';
+ });
+ btnState('.btn[data-event="superscript"]', function() {
+ return styleInfo['font-superscript'] === 'superscript';
+ });
+ btnState('.btn[data-event="subscript"]', function() {
+ return styleInfo['font-subscript'] === 'subscript';
+ });
+ btnState('.btn[data-event="justifyLeft"]', function() {
+ return styleInfo['text-align'] === 'left' || styleInfo['text-align'] === 'start';
+ });
+ btnState('.btn[data-event="justifyCenter"]', function() {
+ return styleInfo['text-align'] === 'center';
+ });
+ btnState('.btn[data-event="justifyRight"]', function() {
+ return styleInfo['text-align'] === 'right';
+ });
+ btnState('.btn[data-event="justifyFull"]', function() {
+ return styleInfo['text-align'] === 'justify';
+ });
+ btnState('.btn[data-event="insertUnorderedList"]', function() {
+ return styleInfo['list-style'] === 'unordered';
+ });
+ btnState('.btn[data-event="insertOrderedList"]', function() {
+ return styleInfo['list-style'] === 'ordered';
+ });
+ };
+
+ /**
+ * update recent color
+ *
+ * @param {Node} button
+ * @param {String} eventName
+ * @param {Mixed} value
+ */
+ this.updateRecentColor = function(button, eventName, value) {
+ var $color = $(button).closest('.note-color');
+ var $recentColor = $color.find('.note-recent-color');
+ var colorInfo = JSON.parse($recentColor.attr('data-value'));
+ var sKey = eventName === 'backColor' ? 'background-color' : 'color';
+
+ colorInfo[eventName] = value;
+ $recentColor.attr('data-value', JSON.stringify(colorInfo));
+ $recentColor.css(sKey, value);
+ };
+ };
+
+ /**
+ * @class module.Toolbar
+ *
+ * Toolbar
+ */
+ var Toolbar = function() {
+ var button = new Button();
+
+ this.update = function($toolbar, styleInfo) {
+ button.update($toolbar, styleInfo);
+ };
+
+ /**
+ * @param {Node} button
+ * @param {String} eventName
+ * @param {String} value
+ */
+ this.updateRecentColor = function(buttonNode, eventName, value) {
+ button.updateRecentColor(buttonNode, eventName, value);
+ };
+
+ /**
+ * activate buttons exclude codeview
+ * @param {jQuery} $toolbar
+ */
+ this.activate = function($toolbar) {
+ $toolbar.find('button, .btn')
+ .not('.btn[data-event="codeview"]')
+ .removeClass('disabled');
+ };
+
+ /**
+ * deactivate buttons exclude codeview
+ * @param {jQuery} $toolbar
+ */
+ this.deactivate = function($toolbar) {
+ $toolbar.find('button, .btn')
+ .not('.btn[data-event="codeview"]')
+ .addClass('disabled');
+ };
+
+ /**
+ * @param {jQuery} $container
+ * @param {Boolean} [bFullscreen=false]
+ */
+ this.updateFullscreen = function($container, bFullscreen) {
+ var $btn = $container.find('.btn[data-event="fullscreen"]');
+ $btn.toggleClass('active', bFullscreen);
+ };
+
+ /**
+ * @param {jQuery} $container
+ * @param {Boolean} [isCodeview=false]
+ */
+ this.updateCodeview = function($container, isCodeview) {
+ var $btn = $container.find('.btn[data-event="codeview"]');
+ $btn.toggleClass('active', isCodeview);
+
+ if (isCodeview) {
+ this.deactivate($container);
+ } else {
+ this.activate($container);
+ }
+ };
+
+ /**
+ * get button in toolbar
+ *
+ * @param {jQuery} $editable
+ * @param {String} name
+ * @return {jQuery}
+ */
+ this.get = function($editable, name) {
+ var $toolbar = dom.makeLayoutInfo($editable).toolbar();
+
+ return $toolbar.find('[data-name=' + name + ']');
+ };
+
+ /**
+ * set button state
+ * @param {jQuery} $editable
+ * @param {String} name
+ * @param {Boolean} [isActive=true]
+ */
+ this.setButtonState = function($editable, name, isActive) {
+ isActive = (isActive === false) ? false : true;
+
+ var $button = this.get($editable, name);
+ $button.toggleClass('active', isActive);
+ };
+ };
+
+ var EDITABLE_PADDING = 24;
+
+ var Statusbar = function() {
+ var $document = $(document);
+
+ this.attach = function(layoutInfo, options) {
+ if (!options.disableResizeEditor) {
+ layoutInfo.statusbar().on('mousedown', hStatusbarMousedown);
+ }
+ };
+
+ /**
+ * `mousedown` event handler on statusbar
+ *
+ * @param {MouseEvent} event
+ */
+ var hStatusbarMousedown = function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+
+ var $editable = dom.makeLayoutInfo(event.target).editable();
+ var editableTop = $editable.offset().top - $document.scrollTop();
+
+ var layoutInfo = dom.makeLayoutInfo(event.currentTarget || event.target);
+ var options = layoutInfo.editor().data('options');
+
+ $document.on('mousemove', function(event) {
+ var nHeight = event.clientY - (editableTop + EDITABLE_PADDING);
+
+ nHeight = (options.minHeight > 0) ? Math.max(nHeight, options.minHeight) : nHeight;
+ nHeight = (options.maxHeight > 0) ? Math.min(nHeight, options.maxHeight) : nHeight;
+
+ $editable.height(nHeight);
+ }).one('mouseup', function() {
+ $document.off('mousemove');
+ });
+ };
+ };
+
+ /**
+ * @class module.Popover
+ *
+ * Popover (http://getbootstrap.com/javascript/#popovers)
+ *
+ */
+ var Popover = function() {
+ var button = new Button();
+
+ /**
+ * returns position from placeholder
+ *
+ * @private
+ * @param {Node} placeholder
+ * @param {Boolean} isAirMode
+ * @return {Object}
+ * @return {Number} return.left
+ * @return {Number} return.top
+ */
+ var posFromPlaceholder = function(placeholder, isAirMode) {
+ var $placeholder = $(placeholder);
+ var pos = isAirMode ? $placeholder.offset() : $placeholder.position();
+ var height = $placeholder.outerHeight(true); // include margin
+
+ // popover below placeholder.
+ return {
+ left: pos.left,
+ top: pos.top + height
+ };
+ };
+
+ /**
+ * show popover
+ *
+ * @private
+ * @param {jQuery} popover
+ * @param {Position} pos
+ */
+ var showPopover = function($popover, pos) {
+ $popover.css({
+ display: 'block',
+ left: pos.left,
+ top: pos.top
+ });
+ };
+
+ var PX_POPOVER_ARROW_OFFSET_X = 20;
+
+ /**
+ * update current state
+ * @param {jQuery} $popover - popover container
+ * @param {Object} styleInfo - style object
+ * @param {Boolean} isAirMode
+ */
+ this.update = function($popover, styleInfo, isAirMode) {
+ button.update($popover, styleInfo);
+
+ var $linkPopover = $popover.find('.note-link-popover');
+ if (styleInfo.anchor) {
+ var $anchor = $linkPopover.find('a');
+ var href = $(styleInfo.anchor).attr('href');
+ var target = $(styleInfo.anchor).attr('target');
+ $anchor.attr('href', href).html(href);
+ if (!target) {
+ $anchor.removeAttr('target');
+ } else {
+ $anchor.attr('target', '_blank');
+ }
+ showPopover($linkPopover, posFromPlaceholder(styleInfo.anchor, isAirMode));
+ } else {
+ $linkPopover.hide();
+ }
+
+ var $imagePopover = $popover.find('.note-image-popover');
+ if (styleInfo.image) {
+ showPopover($imagePopover, posFromPlaceholder(styleInfo.image, isAirMode));
+ } else {
+ $imagePopover.hide();
+ }
+
+ var $airPopover = $popover.find('.note-air-popover');
+ if (isAirMode && !styleInfo.range.isCollapsed()) {
+ var rect = list.last(styleInfo.range.getClientRects());
+ if (rect) {
+ var bnd = func.rect2bnd(rect);
+ showPopover($airPopover, {
+ left: Math.max(bnd.left + bnd.width / 2 - PX_POPOVER_ARROW_OFFSET_X, 0),
+ top: bnd.top + bnd.height
+ });
+ }
+ } else {
+ $airPopover.hide();
+ }
+ };
+
+ /**
+ * @param {Node} button
+ * @param {String} eventName
+ * @param {String} value
+ */
+ this.updateRecentColor = function(button, eventName, value) {
+ button.updateRecentColor(button, eventName, value);
+ };
+
+ /**
+ * hide all popovers
+ * @param {jQuery} $popover - popover container
+ */
+ this.hide = function($popover) {
+ $popover.children().hide();
+ };
+ };
+
+ /**
+ * @class module.Handle
+ *
+ * Handle
+ */
+ var Handle = function(handler) {
+ var $document = $(document);
+
+ /**
+ * `mousedown` event handler on $handle
+ * - controlSizing: resize image
+ *
+ * @param {MouseEvent} event
+ */
+ var hHandleMousedown = function(event) {
+ if (dom.isControlSizing(event.target)) {
+ event.preventDefault();
+ event.stopPropagation();
+
+ var layoutInfo = dom.makeLayoutInfo(event.target),
+ $handle = layoutInfo.handle(),
+ $popover = layoutInfo.popover(),
+ $editable = layoutInfo.editable(),
+ $editor = layoutInfo.editor();
+
+ var target = $handle.find('.note-control-selection').data('target'),
+ $target = $(target), posStart = $target.offset(),
+ scrollTop = $document.scrollTop();
+
+ var isAirMode = $editor.data('options').airMode;
+
+ $document.on('mousemove', function(event) {
+ handler.invoke('editor.resizeTo', {
+ x: event.clientX - posStart.left,
+ y: event.clientY - (posStart.top - scrollTop)
+ }, $target, !event.shiftKey);
+
+ handler.invoke('handle.update', $handle, {image: target}, isAirMode);
+ handler.invoke('popover.update', $popover, {image: target}, isAirMode);
+ }).one('mouseup', function() {
+ $document.off('mousemove');
+ handler.invoke('editor.afterCommand', $editable);
+ });
+
+ if (!$target.data('ratio')) { // original ratio.
+ $target.data('ratio', $target.height() / $target.width());
+ }
+ }
+ };
+
+ this.attach = function(layoutInfo) {
+ layoutInfo.handle().on('mousedown', hHandleMousedown);
+ };
+
+ /**
+ * update handle
+ * @param {jQuery} $handle
+ * @param {Object} styleInfo
+ * @param {Boolean} isAirMode
+ */
+ this.update = function($handle, styleInfo, isAirMode) {
+ var $selection = $handle.find('.note-control-selection');
+ if (styleInfo.image) {
+ var $image = $(styleInfo.image);
+ var pos = isAirMode ? $image.offset() : $image.position();
+
+ // include margin
+ var imageSize = {
+ w: $image.outerWidth(true),
+ h: $image.outerHeight(true)
+ };
+
+ $selection.css({
+ display: 'block',
+ left: pos.left,
+ top: pos.top,
+ width: imageSize.w,
+ height: imageSize.h
+ }).data('target', styleInfo.image); // save current image element.
+ var sizingText = imageSize.w + 'x' + imageSize.h;
+ $selection.find('.note-control-selection-info').text(sizingText);
+ } else {
+ $selection.hide();
+ }
+ };
+
+ /**
+ * hide
+ *
+ * @param {jQuery} $handle
+ */
+ this.hide = function($handle) {
+ $handle.children().hide();
+ };
+ };
+
+ var Fullscreen = function(handler) {
+ var $window = $(window);
+ var $scrollbar = $('html, body');
+
+ /**
+ * toggle fullscreen
+ *
+ * @param {Object} layoutInfo
+ */
+ this.toggle = function(layoutInfo) {
+
+ var $editor = layoutInfo.editor(),
+ $toolbar = layoutInfo.toolbar(),
+ $editable = layoutInfo.editable(),
+ $codable = layoutInfo.codable();
+
+ var resize = function(size) {
+ $editable.css('height', size.h);
+ $codable.css('height', size.h);
+ if ($codable.data('cmeditor')) {
+ $codable.data('cmeditor').setsize(null, size.h);
+ }
+ };
+
+ $editor.toggleClass('fullscreen');
+ var isFullscreen = $editor.hasClass('fullscreen');
+ if (isFullscreen) {
+
+ $editable.data('orgheight', $editable.css('height'));
+
+ $window.on('resize', function() {
+ resize({
+ h: $window.height() - $toolbar.outerHeight()
+ });
+ }).trigger('resize');
+
+ $scrollbar.css('overflow', 'hidden');
+ $toolbar.css('top', 0);
+ } else {
+ $window.off('resize');
+ resize({
+ h: $editable.data('orgheight')
+ });
+ $scrollbar.css('overflow', 'visible');
+ }
+
+ handler.invoke('toolbar.updateFullscreen', $toolbar, isFullscreen);
+ };
+ };
+
+
+ var CodeMirror;
+ if (agent.hasCodeMirror) {
+ if (agent.isSupportAmd) {
+ require(['CodeMirror'], function(cm) {
+ CodeMirror = cm;
+ });
+ } else {
+ CodeMirror = window.CodeMirror;
+ }
+ }
+
+ /**
+ * @class Codeview
+ */
+ var Codeview = function(handler) {
+
+ this.sync = function(layoutInfo) {
+ var isCodeview = handler.invoke('codeview.isActivated', layoutInfo);
+ if (isCodeview && agent.hasCodeMirror) {
+ layoutInfo.codable().data('cmEditor').save();
+ }
+ };
+
+ /**
+ * @param {Object} layoutInfo
+ * @return {Boolean}
+ */
+ this.isActivated = function(layoutInfo) {
+ var $editor = layoutInfo.editor();
+ return $editor.hasClass('codeview');
+ };
+
+ /**
+ * toggle codeview
+ *
+ * @param {Object} layoutInfo
+ */
+ this.toggle = function(layoutInfo) {
+ if (this.isActivated(layoutInfo)) {
+ this.deactivate(layoutInfo);
+ } else {
+ this.activate(layoutInfo);
+ }
+ };
+
+ //var originalValue;
+ /**
+ * activate code view
+ *
+ * @param {Object} layoutInfo
+ */
+ this.activate = function(layoutInfo) {
+ var $editor = layoutInfo.editor(),
+ $toolbar = layoutInfo.toolbar(),
+ $editable = layoutInfo.editable(),
+ $codable = layoutInfo.codable(),
+ $popover = layoutInfo.popover(),
+ $handle = layoutInfo.handle();
+
+ var options = $editor.data('options');
+ var codeString = dom.html($editable, false);
+
+ // >>>>>>> CK indentation function
+ function beautifyHTML(code, level, insideLastBlock, dictionary) {
+ var openTag = code.indexOf('<');
+ var closeTag = code.indexOf('>');
+ var chunk;
+
+ if (openTag === 0) {
+ //first thing is a tag
+ chunk = code.substring(0, closeTag + 1);
+ code = code.substring(closeTag + 1);
+
+ if (chunk.indexOf("</") === 0) {
+ level--;
+ insideLastBlock = false;
+ } else {
+ if (insideLastBlock) {
+ level++;
+ }
+
+ //check if current tag is a self closing tag (no indent next line in this case)
+ var found = false;
+
+ for (var i = 0; i < dictionary.length; i++) {
+ if (chunk.indexOf(dictionary[i]) === 0) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ insideLastBlock = true;
+ } else {
+ insideLastBlock = false;
+ }
+ }
+ } else {
+ //first thing is content
+ chunk = code.substring(0, openTag);
+ code = code.substring(openTag);
+
+ if (insideLastBlock) {
+ level++;
+ }
+ insideLastBlock = false;
+ }
+ chunk = new Array(level + 1).join(' ') + chunk.trim();
+
+ //console.log(level);
+ //console.log(chunk);
+ //console.log(code);
+
+ if (code.length === 0) {
+ return chunk;
+ }
+ return chunk + "\n" + beautifyHTML(code.trim(), level, insideLastBlock, dictionary);
+ }
+
+ //originalValue = codeString;
+
+ var selfCloseTags = ['<img', '<br', '<hr'];
+ codeString = beautifyHTML(codeString, 0, false, selfCloseTags);
+ // CK end -----------------------
+
+ $codable.val(codeString);
+
+ var buttonHeight = $toolbar.find('.btn[data-event=codeview]').height();
+ var areaHeight = $(window).height() - buttonHeight;
+ $codable.height($editable.height());
+
+ handler.invoke('toolbar.updateCodeview', $toolbar, true);
+ handler.invoke('popover.hide', $popover);
+ handler.invoke('handle.hide', $handle);
+
+ $editor.addClass('codeview');
+
+ $codable.focus();
+
+ // activate CodeMirror as codable
+ if (agent.hasCodeMirror) {
+ var cmEditor = CodeMirror.fromTextArea($codable[0], options.codemirror);
+
+ // CodeMirror TernServer
+ if (options.codemirror.tern) {
+ var server = new CodeMirror.TernServer(options.codemirror.tern);
+ cmEditor.ternServer = server;
+ cmEditor.on('cursorActivity', function(cm) {
+ server.updateArgHints(cm);
+ });
+ }
+
+ // CodeMirror hasn't Padding.
+ if ($editor.hasClass('fullscreen')) {
+ cmEditor.setSize(null, areaHeight);
+ }
+ else {
+ cmEditor.setSize(null, $editable.outerHeight());
+ }
+
+ $codable.data('cmEditor', cmEditor);
+ }
+ };
+
+ /**
+ * deactivate code view
+ *
+ * @param {Object} layoutInfo
+ */
+ this.deactivate = function(layoutInfo) {
+ var $holder = layoutInfo.holder(),
+ $editor = layoutInfo.editor(),
+ $toolbar = layoutInfo.toolbar(),
+ $editable = layoutInfo.editable(),
+ $codable = layoutInfo.codable();
+
+ var options = $editor.data('options');
+
+ // deactivate CodeMirror as codable
+ if (agent.hasCodeMirror) {
+ var cmEditor = $codable.data('cmEditor');
+ $codable.val(cmEditor.getValue());
+ cmEditor.toTextArea();
+ }
+
+ var value = dom.value($codable, options.prettifyHtml) || dom.emptyPara;
+ //var value = originalValue;
+ var isChange = $editable.html() !== value;
+
+ $editable.html(value);
+ $editable.height(options.height ? $codable.height() : 'auto');
+ $editor.removeClass('codeview');
+
+ if (isChange) {
+ handler.bindCustomEvent(
+ $holder, $editable.data('callbacks'), 'change'
+ )($editable.html(), $editable);
+ }
+
+ $editable.focus();
+
+ handler.invoke('toolbar.updateCodeview', $toolbar, false);
+ };
+ };
+
+ var DragAndDrop = function(handler) {
+ var $document = $(document);
+
+ /**
+ * attach Drag and Drop Events
+ *
+ * @param {Object} layoutInfo - layout Informations
+ * @param {Object} options
+ */
+ this.attach = function(layoutInfo, options) {
+ if (options.airMode || options.disableDragAndDrop) {
+ // prevent default drop event
+ $document.on('drop', function(e) {
+ e.preventDefault();
+ });
+ } else {
+ this.attachDragAndDropEvent(layoutInfo, options);
+ }
+ };
+
+ /**
+ * attach Drag and Drop Events
+ *
+ * @param {Object} layoutInfo - layout Informations
+ * @param {Object} options
+ */
+ this.attachDragAndDropEvent = function(layoutInfo, options) {
+ var collection = $(),
+ $editor = layoutInfo.editor(),
+ $dropzone = layoutInfo.dropzone(),
+ $dropzoneMessage = $dropzone.find('.note-dropzone-message');
+
+ // show dropzone on dragenter when dragging a object to document
+ // -but only if the editor is visible, i.e. has a positive width and height
+ $document.on('dragenter', function(e) {
+ var isCodeview = handler.invoke('codeview.isActivated', layoutInfo);
+ var hasEditorSize = $editor.width() > 0 && $editor.height() > 0;
+ if (!isCodeview && !collection.length && hasEditorSize) {
+ $editor.addClass('dragover');
+ $dropzone.width($editor.width());
+ $dropzone.height($editor.height());
+ $dropzoneMessage.text(options.langInfo.image.dragImageHere);
+ }
+ collection = collection.add(e.target);
+ }).on('dragleave', function(e) {
+ collection = collection.not(e.target);
+ if (!collection.length) {
+ $editor.removeClass('dragover');
+ }
+ }).on('drop', function() {
+ collection = $();
+ $editor.removeClass('dragover');
+ });
+
+ // change dropzone's message on hover.
+ $dropzone.on('dragenter', function() {
+ $dropzone.addClass('hover');
+ $dropzoneMessage.text(options.langInfo.image.dropImage);
+ }).on('dragleave', function() {
+ $dropzone.removeClass('hover');
+ $dropzoneMessage.text(options.langInfo.image.dragImageHere);
+ });
+
+ // attach dropImage
+ $dropzone.on('drop', function(event) {
+
+ var dataTransfer = event.originalEvent.dataTransfer;
+ var layoutInfo = dom.makeLayoutInfo(event.currentTarget || event.target);
+
+ if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {
+ event.preventDefault();
+ layoutInfo.editable().focus();
+ handler.insertImages(layoutInfo, dataTransfer.files);
+ } else {
+ var insertNodefunc = function() {
+ layoutInfo.holder().materialnote('insertNode', this);
+ };
+
+ for (var i = 0, len = dataTransfer.types.length; i < len; i++) {
+ var type = dataTransfer.types[i];
+ var content = dataTransfer.getData(type);
+
+ if (type.toLowerCase().indexOf('text') > -1) {
+ layoutInfo.holder().materialnote('pasteHTML', content);
+ } else {
+ $(content).each(insertNodefunc);
+ }
+ }
+ }
+ }).on('dragover', false); // prevent default dragover event
+ };
+ };
+
+ var Clipboard = function(handler) {
+
+ var $paste;
+
+ this.attach = function(layoutInfo) {
+
+ if (window.clipboardData || agent.isFF) {
+ $paste = $('<div />').attr('contenteditable', true).css({
+ position : 'absolute',
+ left : -100000,
+ 'opacity' : 0
+ });
+ layoutInfo.editable().after($paste);
+ $paste.one('paste', hPasteClipboardImage);
+
+ layoutInfo.editable().on('keydown', function(e) {
+ if (e.ctrlKey && e.keyCode === 86) { // CTRL+V
+ handler.invoke('saveRange', layoutInfo.editable());
+ if ($paste) {
+ $paste.focus();
+ }
+ }
+ });
+ }
+
+ layoutInfo.editable().on('paste', hPasteClipboardImage);
+ };
+
+ /**
+ * paste clipboard image
+ *
+ * @param {Event} event
+ */
+ var hPasteClipboardImage = function(event) {
+
+ var clipboardData = event.originalEvent.clipboardData;
+ var layoutInfo = dom.makeLayoutInfo(event.currentTarget || event.target);
+ var $editable = layoutInfo.editable();
+
+ if (!clipboardData || !clipboardData.items || !clipboardData.items.length) {
+
+ var callbacks = $editable.data('callbacks');
+ // only can run if it has onImageUpload method
+ if (!callbacks.onImageUpload) {
+ return;
+ }
+
+ setTimeout(function() {
+ if (!$paste) {
+ return;
+ }
+
+ var imgNode = $paste[0].firstChild;
+ if (!imgNode) {
+ return;
+ }
+
+ handler.invoke('restoreRange', $editable);
+ if (!dom.isImg(imgNode)) {
+ handler.invoke('pasteHTML', $editable, $paste.html());
+ } else {
+ var datauri = imgNode.src;
+
+ var data = atob(datauri.split(',')[1]);
+ var array = new Uint8Array(data.length);
+ for (var i = 0; i < data.length; i++) {
+ array[i] = data.charCodeAt(i);
+ }
+
+ var blob = new Blob([array], { type : 'image/png' });
+ blob.name = 'clipboard.png';
+ handler.invoke('focus', $editable);
+ handler.insertImages(layoutInfo, [blob]);
+ }
+
+ $paste.remove();
+
+ }, 0);
+
+ return;
+ }
+
+ var item = list.head(clipboardData.items);
+ var isClipboardImage = item.kind === 'file' && item.type.indexOf('image/') !== -1;
+
+ if (isClipboardImage) {
+ handler.insertImages(layoutInfo, [item.getAsFile()]);
+ }
+
+ handler.invoke('editor.afterCommand', $editable);
+ };
+ };
+
+ var LinkDialog = function(handler) {
+
+ /**
+ * toggle button status
+ *
+ * @private
+ * @param {jQuery} $btn
+ * @param {Boolean} isEnable
+ */
+ var toggleBtn = function($btn, isEnable) {
+ $btn.toggleClass('disabled', !isEnable);
+ $btn.attr('disabled', !isEnable);
+ };
+
+ /**
+ * bind enter key
+ *
+ * @private
+ * @param {jQuery} $input
+ * @param {jQuery} $btn
+ */
+ var bindEnterKey = function($input, $btn) {
+ $input.on('keypress', function(event) {
+ if (event.keyCode === key.code.ENTER) {
+ $btn.trigger('click');
+ }
+ });
+ };
+
+ /**
+ * Show link dialog and set event handlers on dialog controls.
+ *
+ * @param {jQuery} $editable
+ * @param {jQuery} $dialog
+ * @param {Object} linkInfo
+ * @return {Promise}
+ */
+ this.showLinkDialog = function($editable, $dialog, linkInfo) {
+ return $.Deferred(function(deferred) {
+ var $linkDialog = $dialog.find('.note-link-dialog');
+ var $linkText = $linkDialog.find('.note-link-text'),
+ $linkTextLabel = $linkText.next('label'),
+ $linkUrl = $linkDialog.find('.note-link-url'),
+ $linkBtn = $linkDialog.find('.note-link-btn'),
+ $closeBtn = $linkDialog.find('.btnClose');
+ var $openInNewWindow = $linkDialog.find('input[type=checkbox]');
+
+ $linkDialog.openModal();
+ $linkText.val(linkInfo.text);
+ if (linkInfo.text.length > 0) $linkTextLabel.addClass('active');
+
+ $linkText.on('keyup', function() {
+ toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());
+ // if linktext was modified by keyup,
+ // stop cloning text from linkUrl
+ linkInfo.text = $linkText.val();
+ });
+
+ $closeBtn.click(function(event) {
+ event.preventDefault();
+
+ $linkDialog.closeModal();
+ });
+
+ // if no url was given, copy text to url
+ if (!linkInfo.url) {
+ linkInfo.url = linkInfo.text || 'http://';
+ toggleBtn($linkBtn, linkInfo.text);
+ }
+
+ $linkUrl.on('keyup', function() {
+ toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());
+ // display same link on `Text to display` input
+ // when create a new link
+ if (!linkInfo.text) {
+ $linkTextLabel.addClass('active');
+ $linkText.val($linkUrl.val());
+ }
+ }).val(linkInfo.url).trigger('focus').trigger('select');
+
+ bindEnterKey($linkUrl, $linkBtn);
+ bindEnterKey($linkText, $linkBtn);
+
+ $openInNewWindow.prop('checked', linkInfo.newWindow);
+
+ $linkBtn.one('click', function(event) {
+ event.preventDefault();
+
+ deferred.resolve({
+ range: linkInfo.range,
+ url: $linkUrl.val(),
+ text: $linkText.val(),
+ newWindow: $openInNewWindow.is(':checked')
+ });
+
+ $('.note-link-text').val('');
+ $('.note-link-text').next('label').removeClass('active');
+ $('.note-link-url').val('');
+ $linkDialog.closeModal();
+ });
+ }).promise();
+ };
+
+ /**
+ * @param {Object} layoutInfo
+ */
+ this.show = function(layoutInfo) {
+ var $editor = layoutInfo.editor(),
+ $dialog = layoutInfo.dialog(),
+ $editable = layoutInfo.editable(),
+ $popover = layoutInfo.popover(),
+ linkInfo = handler.invoke('editor.getLinkInfo', $editable);
+
+ var options = $editor.data('options');
+
+ handler.invoke('editor.saveRange', $editable);
+ this.showLinkDialog($editable, $dialog, linkInfo).then(function(linkInfo) {
+ handler.invoke('editor.restoreRange', $editable);
+ handler.invoke('editor.createLink', $editable, linkInfo, options);
+ // hide popover after creating link
+ handler.invoke('popover.hide', $popover);
+ }).fail(function() {
+ handler.invoke('editor.restoreRange', $editable);
+ });
+ };
+ };
+
+ var ImageDialog = function(handler) {
+ /**
+ * toggle button status
+ *
+ * @private
+ * @param {jQuery} $btn
+ * @param {Boolean} isEnable
+ */
+ var toggleBtn = function($btn, isEnable) {
+ $btn.toggleClass('disabled', !isEnable);
+ $btn.attr('disabled', !isEnable);
+ };
+
+ /**
+ * bind enter key
+ *
+ * @private
+ * @param {jQuery} $input
+ * @param {jQuery} $btn
+ */
+ var bindEnterKey = function($input, $btn) {
+ $input.on('keypress', function(event) {
+ if (event.keyCode === key.code.ENTER) {
+ $btn.trigger('click');
+ }
+ });
+ };
+
+ this.show = function(layoutInfo) {
+ var $dialog = layoutInfo.dialog(),
+ $editable = layoutInfo.editable();
+
+ handler.invoke('editor.saveRange', $editable);
+ this.showImageDialog($editable, $dialog).then(function(data) {
+ handler.invoke('editor.restoreRange', $editable);
+
+ if (typeof data === 'string') {
+ // image url
+ handler.invoke('editor.insertImage', $editable, data);
+ } else {
+ // array of files
+ handler.insertImages(layoutInfo, data);
+ }
+ }).fail(function() {
+ handler.invoke('editor.restoreRange', $editable);
+ });
+ };
+
+ /**
+ * show image dialog
+ *
+ * @param {jQuery} $editable
+ * @param {jQuery} $dialog
+ * @return {Promise}
+ */
+ this.showImageDialog = function($editable, $dialog) {
+ return $.Deferred(function(deferred) {
+ var $imageDialog = $dialog.find('.note-image-dialog');
+ var $imageInput = $dialog.find('.note-image-input'),
+ $imageUrl = $dialog.find('.note-image-url'),
+ $imageBtn = $dialog.find('.note-image-btn'),
+ $closeBtn = $imageDialog.find('.btnClose');
+
+ $imageDialog.openModal();
+ // Cloning imageInput to clear element.
+ $imageInput.replaceWith($imageInput.clone()
+ .on('change', function() {
+ deferred.resolve(this.files || this.value);
+ $imageUrl.val('');
+ $imageDialog.closeModal();
+ deferred.resolve();
+ })
+ .val('')
+ );
+
+ $imageBtn.click(function(event) {
+ event.preventDefault();
+
+ deferred.resolve($imageUrl.val());
+ $imageUrl.val('');
+ $imageDialog.closeModal();
+ deferred.resolve();
+ });
+
+ $closeBtn.click(function(event) {
+ event.preventDefault();
+
+ $imageDialog.closeModal();
+ });
+
+ $imageUrl.on('keyup paste', function(event) {
+ var url;
+
+ if (event.type === 'paste') {
+ url = event.originalEvent.clipboardData.getData('text');
+ } else {
+ url = $imageUrl.val();
+ }
+ toggleBtn($imageBtn, url);
+ });
+
+ bindEnterKey($imageUrl, $imageBtn);
+ });
+ };
+ };
+
+ var HelpDialog = function(handler) {
+ /**
+ * show help dialog
+ *
+ * @param {jQuery} $editable
+ * @param {jQuery} $dialog
+ * @return {Promise}
+ */
+ this.showHelpDialog = function($editable, $dialog) {
+ return $.Deferred(function(deferred) {
+ var $helpDialog = $dialog.find('.note-help-dialog');
+
+ $helpDialog.openModal();
+ deferred.resolve();
+ }).promise();
+ };
+
+ /**
+ * @param {Object} layoutInfo
+ */
+ this.show = function(layoutInfo) {
+ var $dialog = layoutInfo.dialog(),
+ $editable = layoutInfo.editable();
+
+ handler.invoke('editor.saveRange', $editable, true);
+ this.showHelpDialog($editable, $dialog).then(function() {
+ handler.invoke('editor.restoreRange', $editable);
+ });
+ };
+ };
+
+
+ /**
+ * @class EventHandler
+ *
+ * EventHandler
+ * - TODO: new instance per a editor
+ */
+ var EventHandler = function() {
+ /**
+ * Modules
+ */
+ var modules = this.modules = {
+ editor: new Editor(this),
+ toolbar: new Toolbar(this),
+ statusbar: new Statusbar(this),
+ popover: new Popover(this),
+ handle: new Handle(this),
+ fullscreen: new Fullscreen(this),
+ codeview: new Codeview(this),
+ dragAndDrop: new DragAndDrop(this),
+ clipboard: new Clipboard(this),
+ linkDialog: new LinkDialog(this),
+ imageDialog: new ImageDialog(this),
+ helpDialog: new HelpDialog(this)
+ };
+
+ /**
+ * invoke module's method
+ *
+ * @param {String} moduleAndMethod - ex) 'editor.redo'
+ * @param {...*} arguments - arguments of method
+ * @return {*}
+ */
+ this.invoke = function() {
+ var moduleAndMethod = list.head(list.from(arguments));
+ var args = list.tail(list.from(arguments));
+
+ var splits = moduleAndMethod.split('.');
+ var hasSeparator = splits.length > 1;
+ var moduleName = hasSeparator && list.head(splits);
+ var methodName = hasSeparator ? list.last(splits) : list.head(splits);
+
+ var module = this.getModule(moduleName);
+ var method = module[methodName];
+
+ return method && method.apply(module, args);
+ };
+
+ /**
+ * returns module
+ *
+ * @param {String} moduleName - name of module
+ * @return {Module} - defaults is editor
+ */
+ this.getModule = function(moduleName) {
+ return this.modules[moduleName] || this.modules.editor;
+ };
+
+ /**
+ * @param {jQuery} $holder
+ * @param {Object} callbacks
+ * @param {String} eventNamespace
+ * @returns {Function}
+ */
+ var bindCustomEvent = this.bindCustomEvent = function($holder, callbacks, eventNamespace) {
+ return function() {
+ var callback = callbacks[func.namespaceToCamel(eventNamespace, 'on')];
+ if (callback) {
+ callback.apply($holder[0], arguments);
+ }
+ return $holder.trigger('materialnote.' + eventNamespace, arguments);
+ };
+ };
+
+ /**
+ * insert Images from file array.
+ *
+ * @private
+ * @param {Object} layoutInfo
+ * @param {File[]} files
+ */
+ this.insertImages = function(layoutInfo, files) {
+ var $editor = layoutInfo.editor(),
+ $editable = layoutInfo.editable(),
+ $holder = layoutInfo.holder();
+
+ var callbacks = $editable.data('callbacks');
+ var options = $editor.data('options');
+
+ // If onImageUpload options setted
+ if (callbacks.onImageUpload) {
+ bindCustomEvent($holder, callbacks, 'image.upload')(files);
+ // else insert Image as dataURL
+ } else {
+ $.each(files, function(idx, file) {
+ var filename = file.name;
+ if (options.maximumImageFileSize && options.maximumImageFileSize < file.size) {
+ bindCustomEvent($holder, callbacks, 'image.upload.error')(options.langInfo.image.maximumFileSizeError);
+ } else {
+ async.readFileAsDataURL(file).then(function(sDataURL) {
+ modules.editor.insertImage($editable, sDataURL, filename);
+ }).fail(function() {
+ bindCustomEvent($holder, callbacks, 'image.upload.error')(options.langInfo.image.maximumFileSizeError);
+ });
+ }
+ });
+ }
+ };
+
+ var commands = {
+ /**
+ * @param {Object} layoutInfo
+ */
+ showLinkDialog: function(layoutInfo) {
+ modules.linkDialog.show(layoutInfo);
+ },
+
+ /**
+ * @param {Object} layoutInfo
+ */
+ showImageDialog: function(layoutInfo) {
+ modules.imageDialog.show(layoutInfo);
+ },
+
+ /**
+ * @param {Object} layoutInfo
+ */
+ showHelpDialog: function(layoutInfo) {
+ modules.helpDialog.show(layoutInfo);
+ },
+
+ /**
+ * @param {Object} layoutInfo
+ */
+ fullscreen: function(layoutInfo) {
+ modules.fullscreen.toggle(layoutInfo);
+ },
+
+ /**
+ * @param {Object} layoutInfo
+ */
+ codeview: function(layoutInfo) {
+ modules.codeview.toggle(layoutInfo);
+ }
+ };
+
+ var hMousedown = function(event) {
+ //preventDefault Selection for FF, IE8+
+ if (dom.isImg(event.target)) {
+ event.preventDefault();
+ }
+ };
+
+ var hKeyupAndMouseup = function(event) {
+ var layoutInfo = dom.makeLayoutInfo(event.currentTarget || event.target);
+ modules.editor.removeBogus(layoutInfo.editable());
+ hToolbarAndPopoverUpdate(event);
+ };
+
+ var hToolbarAndPopoverUpdate = function(event) {
+ // delay for range after mouseup
+ setTimeout(function() {
+ var layoutInfo = dom.makeLayoutInfo(event.currentTarget || event.target);
+ var styleInfo = modules.editor.currentStyle(event.target);
+ if (!styleInfo) { return; }
+
+ var isAirMode = layoutInfo.editor().data('options').airMode;
+ if (!isAirMode) {
+ modules.toolbar.update(layoutInfo.toolbar(), styleInfo);
+ }
+
+ modules.popover.update(layoutInfo.popover(), styleInfo, isAirMode);
+ modules.handle.update(layoutInfo.handle(), styleInfo, isAirMode);
+ }, 0);
+ };
+
+ var hScroll = function(event) {
+ var layoutInfo = dom.makeLayoutInfo(event.currentTarget || event.target);
+ //hide popover and handle when scrolled
+ modules.popover.hide(layoutInfo.popover());
+ modules.handle.hide(layoutInfo.handle());
+ };
+
+ var hToolbarAndPopoverMousedown = function(event) {
+ // prevent default event when insertTable (FF, Webkit)
+ var $btn = $(event.target).closest('[data-event]');
+ if ($btn.length) {
+ event.preventDefault();
+ }
+ };
+
+ var hToolbarAndPopoverClick = function(event) {
+ var $btn = $(event.target).closest('[data-event]');
+
+ if ($btn.length) {
+ var eventName = $btn.attr('data-event'),
+ value = $btn.attr('data-value'),
+ hide = $btn.attr('data-hide');
+
+ var layoutInfo = dom.makeLayoutInfo(event.target);
+
+ // before command: detect control selection element($target)
+ var $target;
+ if ($.inArray(eventName, ['resize', 'floatMe', 'removeMedia', 'imageShape', 'imageClass']) !== -1) {
+ var $selection = layoutInfo.handle().find('.note-control-selection');
+ $target = $($selection.data('target'));
+ }
+
+ // If requested, hide the popover when the button is clicked.
+ // Useful for things like showHelpDialog.
+ if (hide) {
+ $btn.parents('.popover').hide();
+ }
+
+ if ($.isFunction($.materialnote.pluginEvents[eventName])) {
+ $.materialnote.pluginEvents[eventName](event, modules.editor, layoutInfo, value);
+ } else if (modules.editor[eventName]) { // on command
+ var $editable = layoutInfo.editable();
+ $editable.focus();
+ modules.editor[eventName]($editable, value, $target);
+ event.preventDefault();
+ } else if (commands[eventName]) {
+ commands[eventName].call(this, layoutInfo);
+ event.preventDefault();
+ }
+
+ // after command
+ if ($.inArray(eventName, ['backColor', 'foreColor']) !== -1) {
+ var options = layoutInfo.editor().data('options', options);
+ var module = options.airMode ? modules.popover : modules.toolbar;
+ module.updateRecentColor(list.head($btn), eventName, value);
+ }
+
+ hToolbarAndPopoverUpdate(event);
+ }
+ };
+
+ var gridUnit = 26;
+ var hDimensionPickerMove = function(event, options) {
+ var $picker = $(event.target.parentNode); // target is mousecatcher
+ var $dropdown = $picker.parent();
+ var $dimensionDisplay = $picker.next();
+ var $catcher = $picker.find('.note-dimension-picker-mousecatcher');
+ var $highlighted = $picker.find('.note-dimension-picker-highlighted');
+ var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');
+ var $hoverableOption = $dropdown.find("[id$='-hoverable']");
+ var $borderedOption = $dropdown.find("[id$='-bordered']");
+ var $stripedOption = $dropdown.find("[id$='-striped']");
+ var $responsiveOption = $dropdown.find("[id$='-responsive']");
+
+ var posOffset;
+ // HTML5 with jQuery - e.offsetX is undefined in Firefox
+ if (event.offsetX === undefined) {
+ var posCatcher = $(event.target).offset();
+
+ posOffset = {
+ x: event.pageX - posCatcher.left,
+ y: event.pageY - posCatcher.top
+ };
+ } else {
+ posOffset = {
+ x: event.offsetX,
+ y: event.offsetY
+ };
+ }
+
+ var dim = {
+ c: Math.ceil(posOffset.x / gridUnit) || 1,
+ r: Math.ceil(posOffset.y / gridUnit) || 1
+ };
+ /*console.log(posOffset);
+ console.log(dim);
+ console.log('------------------');*/
+
+ var tableOptions = [];
+ if ($hoverableOption.is(':checked')) tableOptions.push('hoverable');
+ if ($borderedOption.is(':checked')) tableOptions.push('bordered');
+ if ($stripedOption.is(':checked')) tableOptions.push('striped');
+ if ($responsiveOption.is(':checked')) tableOptions.push('responsive-table');
+
+ $highlighted.css({ width: (dim.c * gridUnit) + 'px', height: (dim.r * gridUnit) + 'px' });
+ $catcher.attr('data-value', dim.c + 'x' + dim.r + 'x' + tableOptions.join('x'));
+
+ //if (3 < dim.c && dim.c < options.insertTableMaxSize.col) {
+ $unhighlighted.css({ width: (options.insertTableMaxSize * gridUnit) + 'px'});
+ //}
+
+ if (3 < dim.r && dim.r < options.insertTableMaxSize.row) {
+ $unhighlighted.css({ height: ((dim.r + 1) * gridUnit) + 'px'});
+ }
+
+ $dimensionDisplay.html(dim.c + ' x ' + dim.r);
+ };
+
+ /**
+ * bind KeyMap on keydown
+ *
+ * @param {Object} layoutInfo
+ * @param {Object} keyMap
+ */
+ this.bindKeyMap = function(layoutInfo, keyMap) {
+ var $editor = layoutInfo.editor();
+ var $editable = layoutInfo.editable();
+
+ $editable.on('keydown', function(event) {
+ var keys = [];
+
+ // modifier
+ if (event.metaKey) { keys.push('CMD'); }
+ if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); }
+ if (event.shiftKey) { keys.push('SHIFT'); }
+
+ // keycode
+ var keyName = key.nameFromCode[event.keyCode];
+ if (keyName) {
+ keys.push(keyName);
+ }
+
+ var pluginEvent;
+ var keyString = keys.join('+');
+ var eventName = keyMap[keyString];
+ if (eventName) {
+ // FIXME materialnote doesn't support event pipeline yet.
+ // - Plugin -> Base Code
+ pluginEvent = $.materialnote.pluginEvents[keyString];
+ if ($.isFunction(pluginEvent)) {
+ if (pluginEvent(event, modules.editor, layoutInfo)) {
+ return false;
+ }
+ }
+
+ pluginEvent = $.materialnote.pluginEvents[eventName];
+
+ if ($.isFunction(pluginEvent)) {
+ pluginEvent(event, modules.editor, layoutInfo);
+ } else if (modules.editor[eventName]) {
+ modules.editor[eventName]($editable, $editor.data('options'));
+ event.preventDefault();
+ } else if (commands[eventName]) {
+ commands[eventName].call(this, layoutInfo);
+ event.preventDefault();
+ }
+ } else if (key.isEdit(event.keyCode)) {
+ modules.editor.afterCommand($editable);
+ }
+ });
+ };
+
+ /**
+ * attach eventhandler
+ *
+ * @param {Object} layoutInfo - layout Informations
+ * @param {Object} options - user options include custom event handlers
+ */
+ this.attach = function(layoutInfo, options) {
+ // handlers for editable
+ if (options.shortcuts) {
+ this.bindKeyMap(layoutInfo, options.keyMap[agent.isMac ? 'mac' : 'pc']);
+ }
+ layoutInfo.editable().on('mousedown', hMousedown);
+ layoutInfo.editable().on('keyup mouseup', hKeyupAndMouseup);
+ layoutInfo.editable().on('scroll', hScroll);
+
+ // handler for clipboard
+ modules.clipboard.attach(layoutInfo, options);
+
+ // handler for handle and popover
+ modules.handle.attach(layoutInfo, options);
+ layoutInfo.popover().on('click', hToolbarAndPopoverClick);
+ layoutInfo.popover().on('mousedown', hToolbarAndPopoverMousedown);
+
+ // handler for drag and drop
+ modules.dragAndDrop.attach(layoutInfo, options);
+
+ // handlers for frame mode (toolbar, statusbar)
+ if (!options.airMode) {
+ // handler for toolbar
+ layoutInfo.toolbar().on('click', hToolbarAndPopoverClick);
+ layoutInfo.toolbar().on('mousedown', hToolbarAndPopoverMousedown);
+
+ // handler for statusbar
+ modules.statusbar.attach(layoutInfo, options);
+ }
+
+ // handler for table dimension
+ var $catcherContainer = options.airMode ? layoutInfo.popover() :
+ layoutInfo.toolbar();
+ var $catcher = $catcherContainer.find('.note-dimension-picker-mousecatcher');
+ $catcher.css({
+ width: options.insertTableMaxSize.col * gridUnit + 'px',
+ height: options.insertTableMaxSize.row * gridUnit + 'px'
+ }).on('mousemove', function(event) {
+ hDimensionPickerMove(event, options);
+ });
+
+ // save options on editor
+ layoutInfo.editor().data('options', options);
+
+ // ret styleWithCSS for backColor / foreColor clearing with 'inherit'.
+ if (!agent.isMSIE) {
+ // [workaround] for Firefox
+ // - protect FF Error: NS_ERROR_FAILURE: Failure
+ setTimeout(function() {
+ document.execCommand('styleWithCSS', 0, options.styleWithSpan);
+ }, 0);
+ }
+
+ // History
+ var history = new History(layoutInfo.editable());
+ layoutInfo.editable().data('NoteHistory', history);
+
+ // All editor status will be saved on editable with jquery's data
+ // for support multiple editor with singleton object.
+ layoutInfo.editable().data('callbacks', {
+ onInit: options.onInit,
+ onFocus: options.onFocus,
+ onBlur: options.onBlur,
+ onKeydown: options.onKeydown,
+ onKeyup: options.onKeyup,
+ onMousedown: options.onMousedown,
+ onEnter: options.onEnter,
+ onPaste: options.onPaste,
+ onBeforeCommand: options.onBeforeCommand,
+ onChange: options.onChange,
+ onImageUpload: options.onImageUpload,
+ onImageUploadError: options.onImageUploadError,
+ onMediaDelete: options.onMediaDelete,
+ onToolbarClick: options.onToolbarClick
+ });
+
+ // Textarea: auto filling the code before form submit.
+ if (dom.isTextarea(list.head(layoutInfo.holder()))) {
+ layoutInfo.holder().closest('form').submit(function() {
+ layoutInfo.holder().val(layoutInfo.holder().code());
+ });
+ }
+ };
+
+ /**
+ * attach jquery custom event
+ *
+ * @param {Object} layoutInfo - layout Informations
+ */
+ this.attachCustomEvent = function(layoutInfo, options) {
+ var $holder = layoutInfo.holder();
+ var $editable = layoutInfo.editable();
+ var callbacks = $editable.data('callbacks');
+
+ $editable.focus(bindCustomEvent($holder, callbacks, 'focus'));
+ $editable.blur(bindCustomEvent($holder, callbacks, 'blur'));
+
+ $editable.keydown(function(event) {
+ if (event.keyCode === key.code.ENTER) {
+ bindCustomEvent($holder, callbacks, 'enter').call(this, event);
+ }
+ bindCustomEvent($holder, callbacks, 'keydown').call(this, event);
+ });
+ $editable.keyup(bindCustomEvent($holder, callbacks, 'keyup'));
+
+ $editable.on('mousedown', bindCustomEvent($holder, callbacks, 'mousedown'));
+ $editable.on('mouseup', bindCustomEvent($holder, callbacks, 'mouseup'));
+ $editable.on('scroll', bindCustomEvent($holder, callbacks, 'scroll'));
+
+ $editable.on('paste', bindCustomEvent($holder, callbacks, 'paste'));
+
+ // [workaround] for old IE - IE8 don't have input events
+ // - TODO check IE version
+ var changeEventName = agent.isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';
+ $editable.on(changeEventName, function() {
+ bindCustomEvent($holder, callbacks, 'change')($editable.html(), $editable);
+ });
+
+ if (!options.airMode) {
+ layoutInfo.toolbar().click(bindCustomEvent($holder, callbacks, 'toolbar.click'));
+ layoutInfo.popover().click(bindCustomEvent($holder, callbacks, 'popover.click'));
+ }
+
+ // Textarea: auto filling the code before form submit.
+ if (dom.isTextarea(list.head($holder))) {
+ $holder.closest('form').submit(function(e) {
+ bindCustomEvent($holder, callbacks, 'submit').call(this, e, $holder.code());
+ });
+ }
+
+ // fire init event
+ bindCustomEvent($holder, callbacks, 'init')(layoutInfo);
+
+ // fire plugin init event
+ for (var i = 0, len = $.materialnote.plugins.length; i < len; i++) {
+ if ($.isFunction($.materialnote.plugins[i].init)) {
+ $.materialnote.plugins[i].init(layoutInfo);
+ }
+ }
+ };
+
+ this.detach = function(layoutInfo, options) {
+ layoutInfo.holder().off();
+ layoutInfo.editable().off();
+
+ layoutInfo.popover().off();
+ layoutInfo.handle().off();
+ layoutInfo.dialog().off();
+
+ if (!options.airMode) {
+ layoutInfo.dropzone().off();
+ layoutInfo.toolbar().off();
+ layoutInfo.statusbar().off();
+ }
+ };
+ };
+
+ /**
+ * @class Renderer
+ *
+ * renderer
+ *
+ * rendering toolbar and editable
+ */
+ var Renderer = function() {
+
+ /**
+ * bootstrap button template
+ * @private
+ * @param {String} label button name
+ * @param {Object} [options] button options
+ * @param {String} [options.event] data-event
+ * @param {String} [options.className] button's class name
+ * @param {String} [options.value] data-value
+ * @param {String} [options.title] button's title for popup
+ * @param {String} [options.dropdown] dropdown html
+ * @param {String} [options.hide] data-hide
+ */
+
+ // >>>>>>> CK altered
+ var tplButton = function(label, options) {
+ var event = options.event;
+ var value = options.value;
+ var title = options.title;
+ var style = options.style;
+ var btnClassName = options.btnClassName;
+ var className = options.className;
+ var dropdown = options.dropdown;
+ var hide = options.hide;
+
+ if (!dropdown) {
+ var button = [
+ '<div class="waves-effect waves-light btn',
+ (className ? " " + className : '') + '"',
+ (title ? ' title="' + title + '"' : ''),
+ (style ? ' style="' + style + '"' : ''),
+ (event ? ' data-event="' + event + '"' : ''),
+ (value ? ' data-value=\'' + value + '\'' : ''),
+ (hide ? ' data-hide=\'' + hide + '\'' : ''),
+ ' tabindex="-1">' + label + '</div>'
+ ].join('');
+
+ return button;
+ } else {
+ var list = [
+ '<div class="btn-group',
+ (className ? " " + className : '') + '">',
+ '<button class="waves-effect waves-light btn dropdown ' + (btnClassName ? btnClassName : '') + '"',
+ (title ? ' title="' + title + '"' : ''),
+ (event ? ' data-event="' + event + '"' : ''),
+ (value ? ' data-value=\'' + value + '\'' : ''),
+ (hide ? ' data-hide=\'' + hide + '\'' : ''),
+ '><i class="material-icons left">arrow_drop_down</i>' + label + '</button>',
+ dropdown,
+ '</div>'
+ ].join('');
+
+ return list;
+ }
+ };
+
+ /**
+ * bootstrap icon button template
+ * @private
+ * @param {String} iconClassName
+ * @param {Object} [options]
+ * @param {String} [options.event]
+ * @param {String} [options.value]
+ * @param {String} [options.title]
+ * @param {String} [options.dropdown]
+ */
+ // >>>>>>> CK
+ var tplIconButton = function(iconClassName, options) {
+ var label = '<i class="material-icons">' + iconClassName + '</i>';
+ return tplButton(label, options);
+ };
+
+ /**
+ * bootstrap popover template
+ * @private
+ * @param {String} className
+ * @param {String} content
+ */
+ var tplPopover = function(className, content) {
+ var $popover = $('<div class="' + className + ' popover bottom in" style="display: none;">' +
+ '<div class="arrow"></div>' +
+ '<div class="popover-content">' +
+ '</div>' +
+ '</div>');
+
+ $popover.find('.popover-content').append(content);
+ return $popover;
+ };
+
+ /**
+ * bootstrap dialog template
+ *
+ * @param {String} className
+ * @param {String} [title='']
+ * @param {String} body
+ * @param {String} [footer='']
+ */
+ // >>>>>>> CK dialog
+ var tplDialog = function(className, title, body, footer) {
+
+ var modal = [
+ '<div class="' + className + ' modal modal-fixed-footer">',
+ '<div class="modal-content">',
+ (title ? '<h4>' + title + '</h4>' : ''),
+ '<p>' + body + '</p>',
+ '</div>',
+ (footer ? '<div class="modal-footer">' + footer + '</div>' : ''),
+ '</div>'
+ ].join('');
+
+ return modal;
+ };
+
+ var tplButtonInfo = {
+ picture: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.image.image, {
+ event: 'showImageDialog',
+ title: lang.image.image,
+ hide: true
+ });
+ },
+ link: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.link.link, {
+ event: 'showLinkDialog',
+ title: lang.link.link,
+ hide: true
+ });
+ },
+ table: function(lang, options) {
+ var dropdown = '<ul class="note-table dropdown-menu">' +
+ '<div class="row">' +
+ '<div class="col s6 preventDropClose"><input type="checkbox" id="' + materialUniqueId + '-bordered" checked="checked" /><label for="' + materialUniqueId + '-bordered">' + lang.table.bordered + '</label></div>' +
+ '<div class="col s6 preventDropClose"><input type="checkbox" id="' + materialUniqueId + '-striped" checked="checked" /><label for="' + materialUniqueId + '-striped">' + lang.table.striped + '</label></div>' +
+ '</div>' +
+ '<div class="row">' +
+ '<div class="col s6 preventDropClose"><input type="checkbox" id="' + materialUniqueId + '-hoverable" checked="checked" /><label for="' + materialUniqueId + '-hoverable">' + lang.table.hoverable + '</label></div>' +
+ '<div class="col s6 preventDropClose"><input type="checkbox" id="' + materialUniqueId + '-responsive" checked="checked" /><label for="' + materialUniqueId + '-responsive">' + lang.table.responsive + '</label></div>' +
+ '</div>' +
+ '<div class="note-dimension-picker">' +
+ '<div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"></div>' +
+ '<div class="note-dimension-picker-highlighted"></div>' +
+ '<div class="note-dimension-picker-unhighlighted"></div>' +
+ '</div>' +
+ '<div class="note-dimension-display"> 1 x 1 </div>' +
+ '</ul>';
+ return tplIconButton(options.iconPrefix + options.icons.table.table, {
+ title: lang.table.table,
+ dropdown: dropdown
+ });
+ },
+ style: function(lang, options) {
+ var items = options.styleTags.reduce(function(memo, v) {
+ var label = lang.style[v === 'p' ? 'normal' : v];
+
+ return memo + '<li><div data-event="formatBlock" data-value="' + v + '">' +
+ ((v === 'p' || v === 'pre') ? label : '<' + v + '>' + label + '</' + v + '>') +
+ '</div></li>';
+ }, '');
+
+ return tplIconButton(options.iconPrefix + options.icons.style.style, {
+ title: lang.style.style,
+ dropdown: '<ul class="dropdown-menu largeDropdown">' + items + '</ul>'
+ });
+ },
+ fontname: function(lang, options) {
+ var realFontList = [];
+ var items = options.fontNames.reduce(function(memo, v) {
+ if (!agent.isFontInstalled(v) && options.fontNamesIgnoreCheck.indexOf(v) === -1) {
+ return memo;
+ }
+ realFontList.push(v);
+ return memo + '<li><div data-event="fontName" data-value="' + v + '" style="font-family:\'' + v + '\'">' +
+ '<i class="material-icons tiny transparent">' + options.iconPrefix + options.icons.misc.check + '</i> ' + v + '</div></li>';
+ }, '');
+
+ var hasDefaultFont = agent.isFontInstalled(options.defaultFontName);
+ var defaultFontName = (hasDefaultFont) ? options.defaultFontName : realFontList[0];
+ var label = '<div class="note-current-fontname">' + defaultFontName + '</div>';
+ console.log('editing right file...')
+ return tplButton(label, {
+ title: lang.font.name,
+ className: 'note-fontname',
+ dropdown: '<ul class="dropdown-menu note-check">' + items + '</ul>'
+ });
+ },
+ fontsize: function(lang, options) {
+ var items = options.fontSizes.reduce(function(memo, v) {
+ return memo + '<li><div data-event="fontSize" data-value="' + v + '">' +
+ '<i class="material-icons tiny transparent">' + options.iconPrefix + options.icons.misc.check + '</i> ' + v +
+ '</div></li>';
+ }, '');
+
+ var label = '<span class="note-current-fontsize">15</span>';
+ return tplButton(label, {
+ title: lang.font.size,
+ className: 'note-fontsize',
+ dropdown: '<ul class="dropdown-menu note-check">' + items + '</ul>'
+ });
+ },
+ color: function(lang, options) {
+ // >>>>>>> CK
+ var colorButtonLabel = '<i class="material-icons">' + options.icons.color.recent + '</i>',
+ colorButton = tplButton(colorButtonLabel, {
+ className: 'note-recent-color',
+ title: lang.color.recent,
+ style: "color: " + options.defaultTextColor + "; background-color: " + options.defaultBackColor + ";",
+ event: 'color',
+ value: '{"backColor": "' + options.defaultBackColor + '"}'
+ });
+
+ var dropdown = '<ul id="colors" class="dropdown-menu">' +
+ '<li>' +
+ '<div class="col s12">' +
+ '<ul class="tabs">' +
+ '<li class="tab"><span class="active">' + lang.color.foreground + '</span></li>' +
+ '<li class="tab"><span>' + lang.color.background + '</span></li>' +
+ '</ul>' +
+ '</div>' +
+ '<div class="col s12 colorTable">' +
+ '<div id="' + materialUniqueId + '-foreColor">' +
+ '<div class="note-color-reset waves-effect waves-light btn" data-event="foreColor" data-value="' + options.defaultTextColor + '" title="' + lang.color.reset + '">' +
+ lang.color.resetToDefault +
+ '</div>' +
+ '<div class="colorName"></div>' +
+ '<div class="note-color-palette" data-target-event="foreColor"></div>' +
+ '</div>' +
+ '<div id="' + materialUniqueId + '-backColor">' +
+ '<div class="note-color-reset waves-effect waves-light btn" data-event="backColor"' + ' data-value="' + options.defaultBackColor + '" title="' + lang.color.transparent + '">' +
+ lang.color.setTransparent +
+ '</div>' +
+ '<div class="colorName"></div>' +
+ '<div class="note-color-palette" data-target-event="backColor"></div>' +
+ '</div>' +
+ '</div>' +
+ '</li>' +
+ '</ul>';
+
+ var moreButton = tplButton('', {
+ title: lang.color.more,
+ className: 'closeLeft',
+ dropdown: dropdown
+ });
+
+ return moreButton + colorButton;
+ },
+ bold: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.font.bold, {
+ event: 'bold',
+ title: lang.font.bold
+ });
+ },
+ italic: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.font.italic, {
+ event: 'italic',
+ title: lang.font.italic
+ });
+ },
+ underline: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.font.underline, {
+ event: 'underline',
+ title: lang.font.underline
+ });
+ },
+ strikethrough: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.font.strikethrough, {
+ event: 'strikethrough',
+ title: lang.font.strikethrough
+ });
+ },
+ superscript: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.font.superscript, {
+ event: 'superscript',
+ title: lang.font.superscript
+ });
+ },
+ subscript: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.font.subscript, {
+ event: 'subscript',
+ title: lang.font.subscript
+ });
+ },
+ clear: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.font.clear, {
+ event: 'removeFormat',
+ title: lang.font.clear
+ });
+ },
+ ul: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.lists.unordered, {
+ event: 'insertUnorderedList',
+ title: lang.lists.unordered
+ });
+ },
+ ol: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.lists.ordered, {
+ event: 'insertOrderedList',
+ title: lang.lists.ordered
+ });
+ },
+ //>>>>>>> CK paragraph single buttons
+ leftButton: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.paragraph.left, {
+ title: lang.paragraph.left,
+ event: 'justifyLeft'
+ });
+ },
+ centerButton: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.paragraph.center, {
+ title: lang.paragraph.center,
+ event: 'justifyCenter'
+ });
+ },
+ rightButton: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.paragraph.right, {
+ title: lang.paragraph.right,
+ event: 'justifyRight'
+ });
+ },
+ justifyButton: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.paragraph.justify, {
+ title: lang.paragraph.justify,
+ event: 'justifyFull'
+ });
+ },
+ outdentButton: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.paragraph.outdent, {
+ title: lang.paragraph.outdent,
+ event: 'outdent'
+ });
+ },
+ indentButton: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.paragraph.indent, {
+ title: lang.paragraph.indent,
+ event: 'indent'
+ });
+ },
+
+ paragraph: function(lang, options) {
+ var leftButton = tplIconButton(options.iconPrefix + options.icons.paragraph.left, {
+ title: lang.paragraph.left,
+ event: 'justifyLeft'
+ });
+ var centerButton = tplIconButton(options.iconPrefix + options.icons.paragraph.center, {
+ title: lang.paragraph.center,
+ event: 'justifyCenter'
+ });
+ var rightButton = tplIconButton(options.iconPrefix + options.icons.paragraph.right, {
+ title: lang.paragraph.right,
+ event: 'justifyRight'
+ });
+ var justifyButton = tplIconButton(options.iconPrefix + options.icons.paragraph.justify, {
+ title: lang.paragraph.justify,
+ event: 'justifyFull'
+ });
+
+ var outdentButton = tplIconButton(options.iconPrefix + options.icons.paragraph.outdent, {
+ title: lang.paragraph.outdent,
+ event: 'outdent'
+ });
+ var indentButton = tplIconButton(options.iconPrefix + options.icons.paragraph.indent, {
+ title: lang.paragraph.indent,
+ event: 'indent'
+ });
+
+ var dropdown = '<ul class="dropdown-menu">' +
+ '<div class="note-align btn-group">' +
+ leftButton + centerButton + rightButton + justifyButton +
+ '</div>' +
+ '<div class="note-list btn-group">' +
+ indentButton + outdentButton +
+ '</div>' +
+ '</ul>';
+
+ return tplIconButton(options.iconPrefix + options.icons.paragraph.paragraph, {
+ title: lang.paragraph.paragraph,
+ dropdown: dropdown
+ });
+ },
+ lineheight: function(lang, options) {
+ var items = options.lineHeights.reduce(function(memo, v) {
+ return memo + '<li><div data-event="lineHeight" data-value="' + parseFloat(v) + '">' +
+ '<i class="material-icons tiny transparent">' + options.iconPrefix + options.icons.misc.check + '</i> ' + v +
+ '</div></li>';
+ }, '');
+
+ return tplIconButton(options.iconPrefix + options.icons.font.height, {
+ title: lang.font.height,
+ className: 'note-height',
+ dropdown: '<ul class="dropdown-menu note-check">' + items + '</ul>'
+ });
+
+ },
+ help: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.options.help, {
+ event: 'showHelpDialog',
+ title: lang.options.help,
+ hide: true
+ });
+ },
+ fullscreen: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.options.fullscreen, {
+ event: 'fullscreen',
+ title: lang.options.fullscreen
+ });
+ },
+ codeview: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.options.codeview, {
+ event: 'codeview',
+ title: lang.options.codeview
+ });
+ },
+ undo: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.history.undo, {
+ event: 'undo',
+ title: lang.history.undo
+ });
+ },
+ redo: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.history.redo, {
+ event: 'redo',
+ title: lang.history.redo
+ });
+ },
+ hr: function(lang, options) {
+ return tplIconButton(options.iconPrefix + options.icons.hr.insert, {
+ event: 'insertHorizontalRule',
+ title: lang.hr.insert
+ });
+ }
+ };
+
+ var tplPopovers = function(lang, options) {
+ var tplLinkPopover = function() {
+ var linkButton = tplIconButton(options.iconPrefix + options.icons.link.edit, {
+ title: lang.link.edit,
+ event: 'showLinkDialog',
+ hide: true
+ });
+ var unlinkButton = tplIconButton(options.iconPrefix + options.icons.link.unlink, {
+ title: lang.link.unlink,
+ event: 'unlink'
+ });
+ var content = '<a href="https://www.bosssauce.it" target="_blank">www.bosssauce.it</a>&nbsp;&nbsp;' +
+ '<div class="note-insert btn-group">' +
+ linkButton + unlinkButton +
+ '</div>';
+ return tplPopover('note-link-popover', content);
+ };
+
+ var tplImagePopover = function() {
+ var fullButton = tplButton('<span class="note-fontsize-10">100%</span>', {
+ title: lang.image.resizeFull,
+ event: 'resize',
+ value: '1'
+ });
+ var halfButton = tplButton('<span class="note-fontsize-10">50%</span>', {
+ title: lang.image.resizeHalf,
+ event: 'resize',
+ value: '0.5'
+ });
+ var quarterButton = tplButton('<span class="note-fontsize-10">25%</span>', {
+ title: lang.image.resizeQuarter,
+ event: 'resize',
+ value: '0.25'
+ });
+
+ var leftButton = tplIconButton(options.iconPrefix + options.icons.image.floatLeft, {
+ title: lang.image.floatLeft,
+ event: 'floatMe',
+ value: 'left'
+ });
+ var rightButton = tplIconButton(options.iconPrefix + options.icons.image.floatRight, {
+ title: lang.image.floatRight,
+ event: 'floatMe',
+ value: 'right'
+ });
+ var justifyButton = tplIconButton(options.iconPrefix + options.icons.image.floatNone, {
+ title: lang.image.floatNone,
+ event: 'floatMe',
+ value: 'none'
+ });
+
+ var roundedButton = tplIconButton(options.iconPrefix + options.icons.image.shapeRounded, {
+ title: lang.image.shapeRounded,
+ event: 'imageClass',
+ value: 'img-rounded'
+ });
+ var circleButton = tplIconButton(options.iconPrefix + options.icons.image.shapeCircle, {
+ title: lang.image.shapeCircle,
+ event: 'imageClass',
+ value: 'img-circle'
+ });
+ var thumbnailButton = tplIconButton(options.iconPrefix + options.icons.image.shapeThumbnail, {
+ title: lang.image.shapeThumbnail,
+ event: 'imageClass',
+ value: 'img-thumbnail'
+ });
+ var borderedButton = tplIconButton(options.iconPrefix + options.icons.image.bordered, {
+ title: lang.image.bordered,
+ event: 'imageClass',
+ value: 'img-bordered'
+ });
+ var noneButton = tplIconButton(options.iconPrefix + options.icons.image.shapeNone, {
+ title: lang.image.shapeNone,
+ event: 'imageShape',
+ value: ''
+ });
+
+ var removeButton = tplIconButton(options.iconPrefix + options.icons.image.remove, {
+ title: lang.image.remove,
+ event: 'removeMedia',
+ value: 'none'
+ });
+
+ var content = //'<div class="btn-group">' + fullButton + halfButton + quarterButton + '</div>' +
+ '<div class="btn-group">' + leftButton + rightButton + justifyButton + '</div>' +
+ '<div class="btn-group">' + roundedButton + circleButton + thumbnailButton + borderedButton + noneButton + '</div>' +
+ '<div class="btn-group">' + removeButton + '</div>';
+ return tplPopover('note-image-popover', content);
+ };
+
+ var tplAirPopover = function() {
+ var $content = $('<div />');
+ for (var idx = 0, len = options.airPopover.length; idx < len; idx ++) {
+ var group = options.airPopover[idx];
+
+ var $group = $('<div class="note-' + group[0] + ' btn-group">');
+ for (var i = 0, lenGroup = group[1].length; i < lenGroup; i++) {
+ var $button = $(tplButtonInfo[group[1][i]](lang, options));
+
+ $button.attr('data-name', group[1][i]);
+
+ $group.append($button);
+ }
+ $content.append($group);
+ }
+
+ return tplPopover('note-air-popover', $content.children());
+ };
+
+ var $notePopover = $('<div class="note-popover" />');
+
+ $notePopover.append(tplLinkPopover());
+ $notePopover.append(tplImagePopover());
+
+ if (options.airMode) {
+ $notePopover.append(tplAirPopover());
+ }
+
+ return $notePopover;
+ };
+
+ var tplHandles = function() {
+ return '<div class="note-handle">' +
+ '<div class="note-control-selection">' +
+ '<div class="note-control-selection-bg"></div>' +
+ '<div class="note-control-sizing note-control-se"></div>' +
+ '<div class="note-control-selection-info"></div>' +
+ '</div>' +
+ '</div>';
+ };
+
+ /**
+ * shortcut table template
+ * @param {String} title
+ * @param {String} body
+ */
+ var tplShortcut = function(title, keys) {
+ var keyClass = 'note-shortcut-col col-xs-6 note-shortcut-';
+ var body = [];
+
+ for (var i in keys) {
+ if (keys.hasOwnProperty(i)) {
+ body.push(
+ '<tr><td>' + keys[i].kbd + '</td><td>' + keys[i].text + '</td></tr>'
+ );
+ }
+ }
+
+ return '<thead><tr><th>' + title + '</th><th>' + '(keys)' + '</th></tr></thead>' +
+ '<tbody>' + body.join('') + '</tbody>';
+ };
+
+ var tplShortcutText = function(lang) {
+ var keys = [
+ { kbd: '⌘ + B', text: lang.font.bold },
+ { kbd: '⌘ + I', text: lang.font.italic },
+ { kbd: '⌘ + U', text: lang.font.underline },
+ { kbd: '⌘ + \\', text: lang.font.clear }
+ ];
+
+ return tplShortcut(lang.shortcut.textFormatting, keys);
+ };
+
+ var tplShortcutAction = function(lang) {
+ var keys = [
+ { kbd: '⌘ + Z', text: lang.history.undo },
+ { kbd: '⌘ + ⇧ + Z', text: lang.history.redo },
+ { kbd: '⌘ + ]', text: lang.paragraph.indent },
+ { kbd: '⌘ + [', text: lang.paragraph.outdent },
+ { kbd: '⌘ + ENTER', text: lang.hr.insert }
+ ];
+
+ return tplShortcut(lang.shortcut.action, keys);
+ };
+
+ var tplShortcutPara = function(lang) {
+ var keys = [
+ { kbd: '⌘ + ⇧ + L', text: lang.paragraph.left },
+ { kbd: '⌘ + ⇧ + E', text: lang.paragraph.center },
+ { kbd: '⌘ + ⇧ + R', text: lang.paragraph.right },
+ { kbd: '⌘ + ⇧ + J', text: lang.paragraph.justify },
+ { kbd: '⌘ + ⇧ + NUM7', text: lang.lists.ordered },
+ { kbd: '⌘ + ⇧ + NUM8', text: lang.lists.unordered }
+ ];
+
+ return tplShortcut(lang.shortcut.paragraphFormatting, keys);
+ };
+
+ var tplShortcutStyle = function(lang) {
+ var keys = [
+ { kbd: '⌘ + NUM0', text: lang.style.normal },
+ { kbd: '⌘ + NUM1', text: lang.style.h1 },
+ { kbd: '⌘ + NUM2', text: lang.style.h2 },
+ { kbd: '⌘ + NUM3', text: lang.style.h3 },
+ { kbd: '⌘ + NUM4', text: lang.style.h4 },
+ { kbd: '⌘ + NUM5', text: lang.style.h5 },
+ { kbd: '⌘ + NUM6', text: lang.style.h6 }
+ ];
+
+ return tplShortcut(lang.shortcut.documentStyle, keys);
+ };
+
+ var tplExtraShortcuts = function(lang, options) {
+ var extraKeys = options.extraKeys;
+ var keys = [];
+
+ for (var key in extraKeys) {
+ if (extraKeys.hasOwnProperty(key)) {
+ keys.push({ kbd: key, text: extraKeys[key] });
+ }
+ }
+
+ return tplShortcut(lang.shortcut.extraKeys, keys);
+ };
+
+ var tplShortcutTable = function(lang, options) {
+ var template = [
+ '<table class="striped hoverable">' + tplShortcutAction(lang, options) + '</table>',
+ '<table class="striped hoverable">' + tplShortcutStyle(lang, options) + '</table>',
+ '<table class="striped hoverable">' + tplShortcutText(lang, options) + '</table>',
+ '<table class="striped hoverable">' + tplShortcutPara(lang, options) + '</table>'
+ ].join('<br>');
+
+ if (options.extraKeys) {
+ //template.push('<table class="striped hoverable">' + tplExtraShortcuts(lang, options) + '</table>');
+ }
+ return template;
+ };
+
+ var replaceMacKeys = function(sHtml) {
+ return sHtml.replace(/⌘/g, 'Ctrl').replace(/⇧/g, 'Shift');
+ };
+
+ var tplDialogInfo = {
+ image: function(lang, options) {
+ var imageLimitation = '';
+
+ if (options.maximumImageFileSize) {
+ var unit = Math.floor(Math.log(options.maximumImageFileSize) / Math.log(1024));
+ var readableSize = (options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';
+
+ imageLimitation = '<small>' + lang.image.maximumFileSize + ' : ' + readableSize + '</small>';
+ }
+
+ var body = '<div class="row">' +
+ '<div class="col s12">' +
+ '<div class="file-field input-field">' +
+ '<div class="btn">' +
+ '<span>' + lang.image.image + '</span>' +
+ '<input class="note-image-input" name="files" type="file" />' +
+ '</div>' +
+ '<div class="file-path-wrapper">' +
+ '<input class="file-path" type="text" />' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '<div class="row">' +
+ '<div class="input-field col s12">' +
+ '<input class="note-image-url" type="text" />' +
+ '<label>' + lang.image.url + '</label>' +
+ '</div>' +
+ '</div>';
+
+ var footer = '<button class="waves-effect waves-light btn note-image-btn disabled" disabled>' + lang.image.insert + '</button>' +
+ '<button class="waves-effect waves-light btn btnClose">' + lang.shortcut.close + '</button>';
+ return tplDialog('note-image-dialog', lang.image.insert, body, footer);
+ },
+
+ link: function(lang, options) {
+ var body = '<div class="row">' +
+ '<div class="input-field col s12">' +
+ '<input class="note-link-text" type="text" />' +
+ '<label>' + lang.link.textToDisplay + '</label>' +
+ '</div>' +
+ '</div>' +
+ '<div class="row">' +
+ '<div class="input-field col s12">' +
+ '<input class="note-link-url" type="text" value="http://" />' +
+ '<label class="active">' + lang.link.url + '</label>' +
+ '</div>' +
+ '</div>' +
+ (!options.disableLinkTarget ?
+ '<div class="row">' +
+ '<div class="col s12">' +
+ '<input type="checkbox" id="' + materialUniqueId + '-noteInsertLinkNewWindow" checked="checked" />' +
+ '<label for="' + materialUniqueId + '-noteInsertLinkNewWindow">' + lang.link.openInNewWindow + '</label>' +
+ '</div>' +
+ '</div>'
+ : ''
+ );
+
+ var footer = '<button class="waves-effect waves-light btn note-link-btn disabled" disabled>' + lang.link.insert + '</button>' +
+ '<button class="waves-effect waves-light btn btnClose">' + lang.shortcut.close + '</button>';
+ return tplDialog('note-link-dialog', lang.link.insert, body, footer);
+ },
+
+ help: function(lang, options) {
+ var body = (agent.isMac ? tplShortcutTable(lang, options) : replaceMacKeys(tplShortcutTable(lang, options)));
+ var footer = '<button class="waves-effect waves-light btn modal-close">' + lang.shortcut.close + '</button>';
+
+ return tplDialog('note-help-dialog', lang.shortcut.shortcuts, body, footer);
+ }
+ };
+
+ var tplDialogs = function(lang, options) {
+ var dialogs = '';
+
+ $.each(tplDialogInfo, function(idx, tplDialog) {
+ dialogs += tplDialog(lang, options);
+ });
+
+ return '<div class="note-dialog">' + dialogs + '</div>';
+ };
+
+ var tplStatusbar = function() {
+ return '<div class="note-resizebar">' +
+ '<div class="note-icon-bar"></div>' +
+ '<div class="note-icon-bar"></div>' +
+ '<div class="note-icon-bar"></div>' +
+ '</div>';
+ };
+
+ var representShortcut = function(str) {
+ if (agent.isMac) {
+ str = str.replace('CMD', '⌘').replace('SHIFT', '⇧');
+ }
+
+ return str.replace('BACKSLASH', '\\')
+ .replace('SLASH', '/')
+ .replace('LEFTBRACKET', '[')
+ .replace('RIGHTBRACKET', ']');
+ };
+
+ /**
+ * createTooltip
+ * @param {jQuery} $container
+ * @param {Object} keyMap
+ * @param {String} [sPlacement]
+ */
+ // >>>>>>> CK
+ var createTooltip = function($container, keyMap, sPlacement) {
+ $(document).ready(function() {
+ var invertedKeyMap = func.invertObject(keyMap);
+ var $buttons = $container.find('.btn');
+
+ $buttons.each(function(i, elBtn) {
+ var $btn = $(elBtn);
+ var sShortcut = invertedKeyMap[$btn.data('event')];
+ var text = $btn.attr('title');
+
+ if (sShortcut) {
+ $btn.attr('data-tooltip', function(i, v) {
+ text = text + ' (' + representShortcut(sShortcut) + ')';
+
+ $(this).removeAttr('title');
+ return text;
+ });
+ }
+ $btn.attr('data-position', 'bottom');
+ $btn.attr('data-tooltip', text);
+ $btn.removeAttr('title');
+ }).ckTooltip({
+ container: $container,
+ position: 'top',
+ delay: 30
+ });
+ });
+ };
+
+ // >>>>>>> CK
+ // createPalette
+ var createPalette = function($container, options) {
+ var colorInfo = options.colors;
+ var colorTitles = options.colorTitles;
+
+ $container.find('.note-color-palette').each(function() {
+ var $palette = $(this), eventName = $palette.attr('data-target-event');
+ var paletteContents = [];
+
+ for (var row = 0, lenRow = colorInfo.length; row < lenRow; row++) {
+ var colors = colorInfo[row];
+ var titles = colorTitles[row];
+ var buttons = [];
+
+ for (var col = 0, lenCol = colors.length; col < lenCol; col++) {
+ var color = colors[col];
+ var title = titles[col];
+
+ buttons.push(['<button type="button" class="note-color-btn" style="background-color:', color,
+ ';" data-event="', eventName,
+ '" data-value="', color,
+ '" data-description="', title,
+ '" data-toggle="button" tabindex="-1"></button>'].join(''));
+ }
+ paletteContents.push('<div class="note-color-row">' + buttons.join('') + '</div>');
+ }
+ $palette.html(paletteContents.join(''));
+
+ $palette.find('button').mouseenter(function() {
+ $palette.siblings('.colorName').html($(this).data('description'));
+ });
+ $palette.mouseleave(function() {
+ $(this).siblings('.colorName').html('');
+ });
+ });
+ };
+
+ /**
+ * create materialnote layout (air mode)
+ *
+ * @param {jQuery} $holder
+ * @param {Object} options
+ */
+ this.createLayoutByAirMode = function($holder, options) {
+ var langInfo = options.langInfo;
+ var keyMap = options.keyMap[agent.isMac ? 'mac' : 'pc'];
+ var id = func.uniqueId();
+
+ $holder.addClass('note-air-editor note-editable');
+ $holder.attr({
+ 'id': 'note-editor-' + id,
+ 'contentEditable': true
+ });
+
+ var body = document.body;
+
+ // create Popover
+ var $popover = $(tplPopovers(langInfo, options));
+ $popover.addClass('note-air-layout');
+ $popover.attr('id', 'note-popover-' + id);
+ $popover.appendTo(body);
+ createTooltip($popover, keyMap);
+ createPalette($popover, options);
+
+ // create Handle
+ var $handle = $(tplHandles());
+ $handle.addClass('note-air-layout');
+ $handle.attr('id', 'note-handle-' + id);
+ $handle.appendTo(body);
+
+ // create Dialog
+ var $dialog = $(tplDialogs(langInfo, options));
+ $dialog.addClass('note-air-layout');
+ $dialog.attr('id', 'note-dialog-' + id);
+ $dialog.find('button.close, a.modal-close').click(function() {
+ $(this).closest('.modal').closeModal();
+ });
+ $dialog.appendTo(body);
+ };
+
+ /**
+ * create materialnote layout (normal mode)
+ *
+ * @param {jQuery} $holder
+ * @param {Object} options
+ */
+ this.createLayoutByFrame = function($holder, options) {
+ var langInfo = options.langInfo;
+
+ //01. create Editor
+ var $editor = $('<div class="note-editor"></div>');
+ if (options.width) {
+ $editor.width(options.width);
+ }
+
+ //02. statusbar (resizebar)
+ if (options.height > 0) {
+ $('<div class="note-statusbar">' + (options.disableResizeEditor ? '' : tplStatusbar()) + '</div>').prependTo($editor);
+ }
+
+ //03. create Editable
+ var isContentEditable = !$holder.is(':disabled');
+ var $editable = $('<div class="note-editable" contentEditable="' + isContentEditable + '"></div>')
+ .prependTo($editor);
+ if (options.height) {
+ $editable.height(options.height);
+ }
+ if (options.direction) {
+ $editable.attr('dir', options.direction);
+ }
+ var placeholder = $holder.attr('placeholder') || options.placeholder;
+ if (placeholder) {
+ $editable.attr('data-placeholder', placeholder);
+ }
+
+ $editable.html(dom.html($holder));
+
+ //031. create codable
+ $('<textarea class="note-codable"></textarea>').prependTo($editor);
+
+ //04. create Toolbar
+ var $toolbar = $('<div class="note-toolbar btn-toolbar" />');
+ for (var idx = 0, len = options.toolbar.length; idx < len; idx ++) {
+ var groupName = options.toolbar[idx][0];
+ var groupButtons = options.toolbar[idx][1];
+
+ var $group = $('<div class="note-' + groupName + ' btn-group" />');
+ for (var i = 0, btnLength = groupButtons.length; i < btnLength; i++) {
+ var buttonInfo = tplButtonInfo[groupButtons[i]];
+ // continue creating toolbar even if a button doesn't exist
+ if (!$.isFunction(buttonInfo)) { continue; }
+
+ var $button = $(buttonInfo(langInfo, options));
+ $button.attr('data-name', groupButtons[i]); // set button's alias, becuase to get button element from $toolbar
+ $group.append($button);
+ }
+ $toolbar.append($group);
+ }
+
+ $toolbar.prependTo($editor);
+ var keyMap = options.keyMap[agent.isMac ? 'mac' : 'pc'];
+ createPalette($toolbar, options);
+ createTooltip($toolbar, keyMap, 'bottom');
+
+
+ // >>>>>>> CK - following toolbar
+ // following toolbar
+ function followingBar() {
+ // $(window).unbind('scroll');
+ // console.log($._data( $(window)[0], "events" ));
+ $(window).scroll(function() {
+ var isFullscreen = $editor.hasClass('fullscreen');
+
+ if (isFullscreen) {
+ console.log("fullscreen");
+ return false;
+ }
+
+ var toolbar = $editor.children('.note-toolbar');
+ var toolbarHeight = toolbar.outerHeight();
+ var editable = $editor.children('.note-editable');
+ var editableHeight = editable.outerHeight();
+ var editorWidth = $editor.width;
+ var toolbarOffset, editorOffsetTop, editorOffsetBottom;
+ var activateOffset, deactivateOffsetTop, deactivateOffsetBottom;
+ var currentOffset;
+ var relativeOffset;
+ var otherBarHeight;
+
+ // check if the web app is currently using another static bar
+ otherBarHeight = $("." + options.otherStaticBarClass).outerHeight();
+ if (!otherBarHeight) otherBarHeight = 0;
+ //console.log(otherBarHeight);
+
+ currentOffset = $(document).scrollTop();
+ toolbarOffset = toolbar.offset().top;
+ editorOffsetTop = $editor.offset().top;
+ editorOffsetBottom = editorOffsetTop + editableHeight;
+ activateOffset = toolbarOffset - otherBarHeight;
+ deactivateOffsetBottom = editorOffsetBottom - otherBarHeight;
+ deactivateOffsetTop = editorOffsetTop - otherBarHeight;
+
+ if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) {
+ relativeOffset = currentOffset - $editor.offset().top + otherBarHeight;
+ toolbar.css({'top': relativeOffset + 'px', 'z-index': 2000});
+ } else {
+ if ((currentOffset < toolbarOffset) && (currentOffset < deactivateOffsetBottom)) {
+ toolbar.css({'top': 0, 'z-index': 1052});
+
+ if (currentOffset > deactivateOffsetTop) {
+ relativeOffset = currentOffset - $editor.offset().top + otherBarHeight;
+ toolbar.css({'top': relativeOffset + 'px', 'z-index': 2000});
+ }
+ }
+ }
+ });
+ }
+ if (options.followingToolbar) {
+ followingBar();
+ }
+
+ //05. create Popover
+ var $popover = $(tplPopovers(langInfo, options)).prependTo($editor);
+ createPalette($popover, options);
+ createTooltip($popover, keyMap);
+
+ //06. handle(control selection, ...)
+ $(tplHandles()).prependTo($editor);
+
+ //07. create Dialog
+ var $dialog = $(tplDialogs(langInfo, options)).prependTo($editor);
+ $dialog.find('button.close, a.modal-close').click(function() {
+ $(this).closest('.modal').closeModal();
+ });
+
+ //08. create Dropzone
+ $('<div class="note-dropzone"><div class="note-dropzone-message"></div></div>').prependTo($editor);
+
+ //09. Editor/Holder switch
+ $editor.insertAfter($holder);
+ $holder.hide();
+ };
+
+ this.hasNoteEditor = function($holder) {
+ return this.noteEditorFromHolder($holder).length > 0;
+ };
+
+ this.noteEditorFromHolder = function($holder) {
+ if ($holder.hasClass('note-air-editor')) {
+ return $holder;
+ } else if ($holder.next().hasClass('note-editor')) {
+ return $holder.next();
+ } else {
+ return $();
+ }
+ };
+
+ /**
+ * create materialnote layout
+ *
+ * @param {jQuery} $holder
+ * @param {Object} options
+ */
+ this.createLayout = function($holder, options) {
+ if (options.airMode) {
+ this.createLayoutByAirMode($holder, options);
+ } else {
+ this.createLayoutByFrame($holder, options);
+ }
+ };
+
+ /**
+ * returns layoutInfo from holder
+ *
+ * @param {jQuery} $holder - placeholder
+ * @return {Object}
+ */
+ this.layoutInfoFromHolder = function($holder) {
+ var $editor = this.noteEditorFromHolder($holder);
+ if (!$editor.length) {
+ return;
+ }
+
+ // connect $holder to $editor
+ $editor.data('holder', $holder);
+
+ return dom.buildLayoutInfo($editor);
+ };
+
+ /**
+ * removeLayout
+ *
+ * @param {jQuery} $holder - placeholder
+ * @param {Object} layoutInfo
+ * @param {Object} options
+ *
+ */
+ this.removeLayout = function($holder, layoutInfo, options) {
+ if (options.airMode) {
+ $holder.removeClass('note-air-editor note-editable')
+ .removeAttr('id contentEditable');
+
+ layoutInfo.popover().remove();
+ layoutInfo.handle().remove();
+ layoutInfo.dialog().remove();
+ } else {
+ $holder.html(layoutInfo.editable().html());
+
+ layoutInfo.editor().remove();
+ $holder.show();
+ }
+ };
+
+ /**
+ *
+ * @return {Object}
+ * @return {function(label, options=):string} return.button {@link #tplButton function to make text button}
+ * @return {function(iconClass, options=):string} return.iconButton {@link #tplIconButton function to make icon button}
+ * @return {function(className, title=, body=, footer=):string} return.dialog {@link #tplDialog function to make dialog}
+ */
+ this.getTemplate = function() {
+ return {
+ button: tplButton,
+ iconButton: tplIconButton,
+ dialog: tplDialog
+ };
+ };
+
+ /**
+ * add button information
+ *
+ * @param {String} name button name
+ * @param {Function} buttonInfo function to make button, reference to {@link #tplButton},{@link #tplIconButton}
+ */
+ this.addButtonInfo = function(name, buttonInfo) {
+ tplButtonInfo[name] = buttonInfo;
+ };
+
+ /**
+ *
+ * @param {String} name
+ * @param {Function} dialogInfo function to make dialog, reference to {@link #tplDialog}
+ */
+ this.addDialogInfo = function(name, dialogInfo) {
+ tplDialogInfo[name] = dialogInfo;
+ };
+ };
+
+
+ // jQuery namespace for materialnote
+ /**
+ * @class $.materialnote
+ *
+ * materialnote attribute
+ *
+ * @mixin defaults
+ * @singleton
+ *
+ */
+ $.materialnote = $.materialnote || {};
+
+ // extends default settings
+ // - $.materialnote.version
+ // - $.materialnote.options
+ // - $.materialnote.lang
+ $.extend($.materialnote, defaults);
+
+ var renderer = new Renderer();
+ var eventHandler = new EventHandler();
+
+ $.extend($.materialnote, {
+ /** @property {Renderer} */
+ renderer: renderer,
+ /** @property {EventHandler} */
+ eventHandler: eventHandler,
+ /**
+ * @property {Object} core
+ * @property {core.agent} core.agent
+ * @property {core.dom} core.dom
+ * @property {core.range} core.range
+ */
+ core: {
+ agent: agent,
+ list : list,
+ dom: dom,
+ range: range
+ },
+ /**
+ * @property {Object}
+ * pluginEvents event list for plugins
+ * event has name and callback function.
+ *
+ * ```
+ * $.materialnote.addPlugin({
+ * events : {
+ * 'hello' : function(layoutInfo, value, $target) {
+ * console.log('event name is hello, value is ' + value );
+ * }
+ * }
+ * })
+ * ```
+ *
+ * * event name is data-event property.
+ * * layoutInfo is a materialnote layout information.
+ * * value is data-value property.
+ */
+ pluginEvents: {},
+
+ plugins : []
+ });
+
+ /**
+ * @method addPlugin
+ *
+ * add Plugin in materialnote
+ *
+ * materialnote can make a own plugin.
+ *
+ * ### Define plugin
+ * ```
+ * // get template function
+ * var tmpl = $.materialnote.renderer.getTemplate();
+ *
+ * // add a button
+ * $.materialnote.addPlugin({
+ * buttons : {
+ * // "hello" is button's namespace.
+ * "hello" : function(lang, options) {
+ * // make icon button by template function
+ * return tmpl.iconButton(options.iconPrefix + 'header', {
+ * // callback function name when button clicked
+ * event : 'hello',
+ * // set data-value property
+ * value : 'hello',
+ * hide : true
+ * });
+ * }
+ *
+ * },
+ *
+ * events : {
+ * "hello" : function(layoutInfo, value) {
+ * // here is event code
+ * }
+ * }
+ * });
+ * ```
+ * ### Use a plugin in toolbar
+ *
+ * ```
+ * $("#editor").materialnote({
+ * ...
+ * toolbar : [
+ * // display hello plugin in toolbar
+ * ['group', [ 'hello' ]]
+ * ]
+ * ...
+ * });
+ * ```
+ *
+ *
+ * @param {Object} plugin
+ * @param {Object} [plugin.buttons] define plugin button. for detail, see to Renderer.addButtonInfo
+ * @param {Object} [plugin.dialogs] define plugin dialog. for detail, see to Renderer.addDialogInfo
+ * @param {Object} [plugin.events] add event in $.materialnote.pluginEvents
+ * @param {Object} [plugin.langs] update $.materialnote.lang
+ * @param {Object} [plugin.options] update $.materialnote.options
+ */
+ $.materialnote.addPlugin = function(plugin) {
+
+ // save plugin list
+ $.materialnote.plugins.push(plugin);
+
+ if (plugin.buttons) {
+ $.each(plugin.buttons, function(name, button) {
+ renderer.addButtonInfo(name, button);
+ });
+ }
+
+ if (plugin.dialogs) {
+ $.each(plugin.dialogs, function(name, dialog) {
+ renderer.addDialogInfo(name, dialog);
+ });
+ }
+
+ if (plugin.events) {
+ $.each(plugin.events, function(name, event) {
+ $.materialnote.pluginEvents[name] = event;
+ });
+ }
+
+ if (plugin.langs) {
+ $.each(plugin.langs, function(locale, lang) {
+ if ($.materialnote.lang[locale]) {
+ $.extend($.materialnote.lang[locale], lang);
+ }
+ });
+ }
+
+ if (plugin.options) {
+ $.extend($.materialnote.options, plugin.options);
+ }
+ };
+
+ /*
+ * extend $.fn
+ */
+ $.fn.extend({
+ /**
+ * @method
+ * Initialize materialnote
+ * - create editor layout and attach Mouse and keyboard events.
+ *
+ * ```
+ * $("#materialnote").materialnote( { options ..} );
+ * ```
+ *
+ * @member $.fn
+ * @param {Object|String} options reference to $.materialnote.options
+ * @return {this}
+ */
+ materialnote: function() {
+
+ // check first argument's type
+ // - {String}: External API call {{module}}.{{method}}
+ // - {Object}: init options
+ var type = $.type(list.head(arguments));
+ var isExternalAPICalled = type === 'string';
+ var hasInitOptions = type === 'object';
+
+ // extend default options with custom user options
+ var options = hasInitOptions ? list.head(arguments) : {};
+
+ options = $.extend({}, $.materialnote.options, options);
+ options.icons = $.extend({}, $.materialnote.options.icons, options.icons);
+
+ // Include langInfo in options for later use, e.g. for image drag-n-drop
+ // Setup language info with en-US as default
+ options.langInfo = $.extend(true, {}, $.materialnote.lang['en-US'], $.materialnote.lang[options.lang]);
+
+ // override plugin options
+ if (!isExternalAPICalled && hasInitOptions) {
+ for (var i = 0, len = $.materialnote.plugins.length; i < len; i++) {
+ var plugin = $.materialnote.plugins[i];
+
+ if (options.plugin[plugin.name]) {
+ $.materialnote.plugins[i] = $.extend(true, plugin, options.plugin[plugin.name]);
+ }
+ }
+ }
+
+ this.each(function(idx, holder) {
+ // >>>>>>> CK set id for this editor
+ materialUniqueId = $(holder).attr('id');
+
+ var $holder = $(holder);
+
+ // if layout isn't created yet, createLayout and attach events
+ if (!renderer.hasNoteEditor($holder)) {
+ renderer.createLayout($holder, options);
+
+ var layoutInfo = renderer.layoutInfoFromHolder($holder);
+ $holder.data('layoutInfo', layoutInfo);
+
+ eventHandler.attach(layoutInfo, options);
+ eventHandler.attachCustomEvent(layoutInfo, options);
+
+ }
+ });
+
+ var $first = this.first();
+ if ($first.length) {
+ var layoutInfo = renderer.layoutInfoFromHolder($first);
+
+ // external API
+ if (isExternalAPICalled) {
+ var moduleAndMethod = list.head(list.from(arguments));
+ var args = list.tail(list.from(arguments));
+
+ // TODO now external API only works for editor
+ var params = [moduleAndMethod, layoutInfo.editable()].concat(args);
+ return eventHandler.invoke.apply(eventHandler, params);
+ } else if (options.focus) {
+ // focus on first editable element for initialize editor
+ layoutInfo.editable().focus();
+ }
+ }
+
+
+
+ // >>>>>>> CK dropdowns - tabs activation
+ $(this).each(function(index, editor) {
+ var tabs;
+ var tabContainer;
+ var toolbar;
+ var isAir = false;
+
+ if ($(editor).hasClass('note-air-editor')) {
+ var id = $(this).attr('id');
+ if (id) id = id.substring(id.lastIndexOf('-') + 1, id.length);
+
+ editor = $('#note-popover-' + id).find('.note-air-popover');
+ tabContainer = editor.find('ul.tabs');
+ tabs = editor.find('li.tab a');
+ toolbar = $(editor).find('.popover-content button.dropdown');
+ isAir = true;
+ } else {
+ editor = $(editor).next('.note-editor');
+ tabContainer = editor.find('ul.tabs');
+ tabs = editor.find('li.tab a');
+ toolbar = $(editor).find('.note-toolbar button.dropdown');
+ }
+ var go = true;
+
+ function handleDropdowns(select, bar) {
+ var list = $(select).next('ul.dropdown-menu');
+ var container = $(select).parent('.btn-group');
+
+ list.slideUp(0);
+
+ $('.preventDropClose').click(function(event) {
+ event.stopPropagation();
+ });
+
+ $(select).click(function(event) {
+ // calculate dropdown open position to avoid overflow from editor
+ var btnOffset = Math.round($(select).parent('.btn-group').offset().left - toolbar.offset().left);
+ var listBorderWidth = parseInt(list.css("border-left-width"));
+ var editorWidth = editor.outerWidth();
+ var listOffset = listBorderWidth;
+
+ list.css({'max-width': editorWidth + 'px'});
+
+ var listWidth = list.outerWidth();
+ var th = listWidth + btnOffset;
+
+ if (th >= editorWidth) {
+ listOffset = th - editorWidth;
+
+ if (!isAir) {
+ listOffset = listOffset + listBorderWidth;
+ }
+ }
+
+ list.css({'left': '-' + listOffset + 'px'});
+
+ var reopen = true;
+
+ if (list.is(':visible')) reopen = false;
+
+ bar.find('ul.dropdown-menu').slideUp(200);
+
+ if (reopen) {
+ list.slideToggle(200);
+ }
+ event.stopPropagation();
+ });
+
+ tabs.unbind().click(function(event) {
+ go = false;
+ });
+ }
+
+ $(window).click(function(event) {
+ if (go) editor.find('ul.dropdown-menu').slideUp(200);
+ go = true;
+ event.stopPropagation();
+ });
+
+ // dropdowns
+ toolbar.each(function(index, select) {
+ handleDropdowns(select, editor);
+ });
+
+ // activate tabs
+ tabContainer.tabs();
+ });
+
+ return this;
+ },
+
+ /**
+ * @method
+ *
+ * get the HTML contents of note or set the HTML contents of note.
+ *
+ * * get contents
+ * ```
+ * var content = $("#materialnote").code();
+ * ```
+ * * set contents
+ *
+ * ```
+ * $("#materialnote").code(html);
+ * ```
+ *
+ * @member $.fn
+ * @param {String} [html] - HTML contents(optional, set)
+ * @return {this|String} - context(set) or HTML contents of note(get).
+ */
+ code: function(html) {
+ // get the HTML contents of note
+ if (html === undefined) {
+ var $holder = this.first();
+ if (!$holder.length) {
+ return;
+ }
+
+ var layoutInfo = renderer.layoutInfoFromHolder($holder);
+ var $editable = layoutInfo && layoutInfo.editable();
+
+ if ($editable && $editable.length) {
+ var isCodeview = eventHandler.invoke('codeview.isActivated', layoutInfo);
+ eventHandler.invoke('codeview.sync', layoutInfo);
+ return isCodeview ? layoutInfo.codable().val() :
+ layoutInfo.editable().html();
+ }
+ return dom.value($holder);
+ }
+
+ // set the HTML contents of note
+ this.each(function(i, holder) {
+ var layoutInfo = renderer.layoutInfoFromHolder($(holder));
+ var $editable = layoutInfo && layoutInfo.editable();
+ if ($editable) {
+ $editable.html(html);
+ }
+ });
+
+ return this;
+ },
+
+ /**
+ * @method
+ *
+ * destroy Editor Layout and detach Key and Mouse Event
+ *
+ * @member $.fn
+ * @return {this}
+ */
+ destroy: function() {
+ this.each(function(idx, holder) {
+ var $holder = $(holder);
+
+ if (!renderer.hasNoteEditor($holder)) {
+ return;
+ }
+
+ var info = renderer.layoutInfoFromHolder($holder);
+ var options = info.editor().data('options');
+
+ eventHandler.detach(info, options);
+ renderer.removeLayout($holder, info, options);
+ });
+
+ return this;
+ }
+ });
+}));
diff --git a/system/admin/static/editor/license.txt b/system/admin/static/editor/license.txt
new file mode 100644
index 0000000..d978e1d
--- /dev/null
+++ b/system/admin/static/editor/license.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 CK
+
+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 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. \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/_buttons.scss b/system/admin/static/editor/sass/components/_buttons.scss
new file mode 100644
index 0000000..7192bec
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_buttons.scss
@@ -0,0 +1,157 @@
+// shared styles
+.btn, .btn-flat {
+ border: none;
+ border-radius: 2px;
+ display: inline-block;
+ height: $button-height;
+ line-height: $button-line-height;
+ // margin-bottom: 15px;
+ outline: 0;
+ padding: 0 2rem;
+ text-transform: uppercase;
+ vertical-align: middle;
+ // Gets rid of tap active state
+ -webkit-tap-highlight-color: transparent;
+}
+// Disabled shared style
+.btn.disabled, .btn-floating.disabled, .btn-large.disabled, .btn:disabled, .btn-large:disabled, .btn-floating:disabled {
+ background-color: $button-bg-color-disabled !important;
+ box-shadow: none;
+ color: $button-color-disabled !important;
+ cursor: default;
+ * {
+ pointer-events: none;
+ }
+
+ &:hover {
+ background-color: $button-bg-color-disabled;
+ color: $button-color-disabled;
+ }
+}
+// Shared icon styles
+.btn, .btn-floating, .btn-large, .btn-flat {
+ i {
+ font-size: $button-font-size-shared;
+ line-height: inherit;
+ }
+}
+
+// Raised Button
+.btn {
+ text-decoration:none;
+ color: $button-color-raised;
+ background-color: $button-color;
+ text-align: center;
+ letter-spacing: .5px;
+ @extend .z-depth-1;
+ @include transition(.2s ease-out);
+ cursor: pointer;
+
+ &:hover {
+ background-color: lighten($button-color, 5%);
+ @extend .z-depth-1-half;
+ }
+}
+
+// Floating button
+.btn-floating {
+ display: inline-block;
+ color: $button-color-raised;
+ position: relative;
+ overflow: hidden;
+ z-index: 1;
+ width: $button-floating-size;
+ height: $button-floating-size;
+ line-height: $button-floating-size;
+ padding: 0;
+ background-color: $button-color;
+ border-radius: 50%;
+ @extend .z-depth-1;
+ transition: .3s;
+ cursor: pointer;
+ vertical-align: middle;
+
+ i {
+ width: inherit;
+ display: inline-block;
+ text-align: center;
+ color: $button-color-raised;
+ font-size: $button-large-icon-font-size;
+ line-height: $button-floating-size;
+ }
+
+ &:hover {
+ @extend .z-depth-1-half;
+ }
+ &:before {
+ border-radius: 0;
+ }
+ &.btn-large {
+ width: $button-floating-size * 1.5;
+ height: $button-floating-size * 1.5;
+ i{
+ line-height: $button-floating-size * 1.5;
+ }
+ }
+
+}
+// button fix
+button.btn-floating {
+ border: none;
+}
+
+// Fixed Action Button
+.fixed-action-btn {
+ position: fixed;
+ right: 23px;
+ bottom: 23px;
+ padding-top: 15px;
+ margin-bottom: 0;
+ z-index: 998;
+
+ ul {
+ left: 0;
+ right: 0;
+ text-align: center;
+ position: absolute;
+ bottom: 64px;
+ margin: 0;
+
+ li {
+ margin-bottom: 15px;
+ }
+
+ a.btn-floating {
+ opacity: 0;
+ }
+ }
+}
+
+// Flat button
+.btn-flat {
+ box-shadow: none;
+ background-color: transparent;
+ color: $button-color-flat;
+ cursor: pointer;
+
+ &.disabled {
+ color: lighten(#999, 10%);
+ cursor: default;
+ }
+}
+
+// Large button
+.btn-large {
+ @extend .btn;
+ height: $button-height * 1.5;
+ line-height: 56px;
+
+ i {
+ font-size: $button-large-icon-font-size;
+ }
+}
+
+// Block button
+.btn-block {
+ display: block;
+}
diff --git a/system/admin/static/editor/sass/components/_cards.scss b/system/admin/static/editor/sass/components/_cards.scss
new file mode 100644
index 0000000..524d0cf
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_cards.scss
@@ -0,0 +1,152 @@
+
+
+.card-panel {
+ transition: box-shadow .25s;
+ padding: $card-padding;
+ margin: $element-top-margin 0 $element-bottom-margin 0;
+ border-radius: 2px;
+ @extend .z-depth-1;
+ background-color: $card-bg-color;
+}
+
+.card {
+ position: relative;
+ overflow: hidden;
+ margin: $element-top-margin 0 $element-bottom-margin 0;
+ background-color: $card-bg-color;
+ transition: box-shadow .25s;
+ border-radius: 2px;
+ @extend .z-depth-1;
+
+
+ .card-title {
+ color: $card-bg-color;
+ font-size: 24px;
+ font-weight: 300;
+ &.activator {
+ cursor: pointer;
+ }
+ }
+
+ // Card Sizes
+ &.small, &.medium, &.large {
+ position: relative;
+
+ .card-image {
+ overflow: hidden;
+ }
+ .card-content {
+ overflow: hidden;
+ }
+ .card-action {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ }
+ }
+
+ &.small {
+ height: 300px;
+
+ .card-image {
+ height: 150px;
+ }
+ .card-content {
+ height: 150px;
+ }
+
+ }
+
+ &.medium {
+ height: 400px;
+
+ .card-image {
+ height: 250px;
+ }
+ .card-content {
+ height: 150px;
+ }
+ }
+
+ &.large {
+ height: 500px;
+
+ .card-image {
+ height: 330px;
+ }
+ .card-content {
+ height: 170px;
+ }
+ }
+
+
+ .card-image {
+ position: relative;
+
+ // Image background for content
+ img {
+ border-radius: 2px 2px 0 0;
+ position: relative;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ width: 100%;
+ }
+
+ .card-title {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ padding: $card-padding;
+ }
+
+ }
+
+ .card-content {
+ padding: $card-padding;
+ border-radius: 0 0 2px 2px;
+
+
+ p {
+ margin: 0;
+ color: inherit;
+ }
+ .card-title {
+ line-height: 48px;
+ }
+ }
+
+ .card-action {
+ border-top: 1px solid rgba(160,160,160,.2);
+ padding: $card-padding;
+
+ a {
+ color: $card-link-color;
+ margin-right: $card-padding;
+ @include transition(color .3s ease);
+ text-transform: uppercase;
+
+ &:hover { color: $card-link-color-light; }
+ }
+ }
+
+ .card-reveal {
+ padding: $card-padding;
+ position: absolute;
+ background-color: $card-bg-color;
+ width: 100%;
+ overflow-y: auto;
+ top: 100%;
+ height: 100%;
+ z-index: 1;
+ display: none;
+
+ .card-title {
+ cursor: pointer;
+ display: block;
+ }
+
+ }
+}
diff --git a/system/admin/static/editor/sass/components/_collapsible.scss b/system/admin/static/editor/sass/components/_collapsible.scss
new file mode 100644
index 0000000..6b45d1e
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_collapsible.scss
@@ -0,0 +1,85 @@
+.collapsible {
+ border-top: 1px solid $collapsible-border-color;
+ border-right: 1px solid $collapsible-border-color;
+ border-left: 1px solid $collapsible-border-color;
+ margin: $element-top-margin 0 $element-bottom-margin 0;
+ @extend .z-depth-1;
+}
+
+.collapsible-header {
+ display: block;
+ cursor: pointer;
+ height: $collapsible-height;
+ line-height: $collapsible-height;
+ padding: 0 1rem;
+ background-color: $collapsible-header-color;
+ border-bottom: 1px solid $collapsible-border-color;
+
+ i {
+ width: 2rem;
+ font-size: 1.6rem;
+ line-height: $collapsible-height;
+ display: block;
+ float: left;
+ text-align: center;
+ margin-right: 1rem;
+ }
+}
+
+.collapsible-body {
+ display: none;
+ border-bottom: 1px solid $collapsible-border-color;
+ @include box-sizing(border-box);
+
+ p {
+ margin: 0;
+ padding: 2rem;
+ }
+}
+
+// sideNav collapsible styling
+.side-nav {
+
+ .collapsible {
+ border: none;
+ box-shadow: none;
+
+ li { padding: 0; }
+ }
+
+ .collapsible-header {
+ background-color: transparent;
+ border: none;
+ line-height: inherit;
+ height: inherit;
+ margin: 0 1rem;
+
+ i { line-height: inherit; }
+ }
+
+ .collapsible-body {
+ border: 0;
+ background-color: $collapsible-header-color;
+
+ li a { margin: 0 1rem 0 2rem; }
+ }
+
+}
+
+// Popout Collapsible
+
+.collapsible.popout {
+ border: none;
+ box-shadow: none;
+ > li {
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
+ // transform: scaleX(.92);
+ margin: 0 24px;
+ transition: margin .35s cubic-bezier(0.250, 0.460, 0.450, 0.940);
+ }
+ > li.active {
+ box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
+ margin: 16px 0;
+ // transform: scaleX(1);
+ }
+}
diff --git a/system/admin/static/editor/sass/components/_color.scss b/system/admin/static/editor/sass/components/_color.scss
new file mode 100644
index 0000000..95d65d5
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_color.scss
@@ -0,0 +1,412 @@
+// Utility Color Classes
+
+//.success {
+//
+//}
+
+// Google Color Palette defined: http://www.google.com/design/spec/style/color.html
+
+
+$materialize-red: (
+ "lighten-5": #fdeaeb,
+ "lighten-4": #f8c1c3,
+ "lighten-3": #f3989b,
+ "lighten-2": #ee6e73,
+ "lighten-1": #ea454b,
+ "base": #e51c23,
+ "darken-1": #d0181e,
+ "darken-2": #b9151b,
+ "darken-3": #a21318,
+ "darken-4": #8b1014,
+);
+
+$red: (
+ "lighten-5": #FFEBEE,
+ "lighten-4": #FFCDD2,
+ "lighten-3": #EF9A9A,
+ "lighten-2": #E57373,
+ "lighten-1": #EF5350,
+ "base": #F44336,
+ "darken-1": #E53935,
+ "darken-2": #D32F2F,
+ "darken-3": #C62828,
+ "darken-4": #B71C1C,
+ "accent-1": #FF8A80,
+ "accent-2": #FF5252,
+ "accent-3": #FF1744,
+ "accent-4": #D50000
+);
+
+$pink: (
+ "lighten-5": #fce4ec,
+ "lighten-4": #f8bbd0,
+ "lighten-3": #f48fb1,
+ "lighten-2": #f06292,
+ "lighten-1": #ec407a,
+ "base": #e91e63,
+ "darken-1": #d81b60,
+ "darken-2": #c2185b,
+ "darken-3": #ad1457,
+ "darken-4": #880e4f,
+ "accent-1": #ff80ab,
+ "accent-2": #ff4081,
+ "accent-3": #f50057,
+ "accent-4": #c51162
+);
+
+$purple: (
+ "lighten-5": #f3e5f5,
+ "lighten-4": #e1bee7,
+ "lighten-3": #ce93d8,
+ "lighten-2": #ba68c8,
+ "lighten-1": #ab47bc,
+ "base": #9c27b0,
+ "darken-1": #8e24aa,
+ "darken-2": #7b1fa2,
+ "darken-3": #6a1b9a,
+ "darken-4": #4a148c,
+ "accent-1": #ea80fc,
+ "accent-2": #e040fb,
+ "accent-3": #d500f9,
+ "accent-4": #aa00ff
+);
+
+$deep-purple: (
+ "lighten-5": #ede7f6,
+ "lighten-4": #d1c4e9,
+ "lighten-3": #b39ddb,
+ "lighten-2": #9575cd,
+ "lighten-1": #7e57c2,
+ "base": #673ab7,
+ "darken-1": #5e35b1,
+ "darken-2": #512da8,
+ "darken-3": #4527a0,
+ "darken-4": #311b92,
+ "accent-1": #b388ff,
+ "accent-2": #7c4dff,
+ "accent-3": #651fff,
+ "accent-4": #6200ea
+);
+
+$indigo: (
+ "lighten-5": #e8eaf6,
+ "lighten-4": #c5cae9,
+ "lighten-3": #9fa8da,
+ "lighten-2": #7986cb,
+ "lighten-1": #5c6bc0,
+ "base": #3f51b5,
+ "darken-1": #3949ab,
+ "darken-2": #303f9f,
+ "darken-3": #283593,
+ "darken-4": #1a237e,
+ "accent-1": #8c9eff,
+ "accent-2": #536dfe,
+ "accent-3": #3d5afe,
+ "accent-4": #304ffe
+);
+
+$blue: (
+ "lighten-5": #E3F2FD,
+ "lighten-4": #BBDEFB,
+ "lighten-3": #90CAF9,
+ "lighten-2": #64B5F6,
+ "lighten-1": #42A5F5,
+ "base": #2196F3,
+ "darken-1": #1E88E5,
+ "darken-2": #1976D2,
+ "darken-3": #1565C0,
+ "darken-4": #0D47A1,
+ "accent-1": #82B1FF,
+ "accent-2": #448AFF,
+ "accent-3": #2979FF,
+ "accent-4": #2962FF
+);
+
+$light-blue: (
+ "lighten-5": #e1f5fe,
+ "lighten-4": #b3e5fc,
+ "lighten-3": #81d4fa,
+ "lighten-2": #4fc3f7,
+ "lighten-1": #29b6f6,
+ "base": #03a9f4,
+ "darken-1": #039be5,
+ "darken-2": #0288d1,
+ "darken-3": #0277bd,
+ "darken-4": #01579b,
+ "accent-1": #80d8ff,
+ "accent-2": #40c4ff,
+ "accent-3": #00b0ff,
+ "accent-4": #0091ea
+);
+
+$cyan: (
+ "lighten-5": #e0f7fa,
+ "lighten-4": #b2ebf2,
+ "lighten-3": #80deea,
+ "lighten-2": #4dd0e1,
+ "lighten-1": #26c6da,
+ "base": #00bcd4,
+ "darken-1": #00acc1,
+ "darken-2": #0097a7,
+ "darken-3": #00838f,
+ "darken-4": #006064,
+ "accent-1": #84ffff,
+ "accent-2": #18ffff,
+ "accent-3": #00e5ff,
+ "accent-4": #00b8d4
+);
+
+$teal: (
+ "lighten-5": #e0f2f1,
+ "lighten-4": #b2dfdb,
+ "lighten-3": #80cbc4,
+ "lighten-2": #4db6ac,
+ "lighten-1": #26a69a,
+ "base": #009688,
+ "darken-1": #00897b,
+ "darken-2": #00796b,
+ "darken-3": #00695c,
+ "darken-4": #004d40,
+ "accent-1": #a7ffeb,
+ "accent-2": #64ffda,
+ "accent-3": #1de9b6,
+ "accent-4": #00bfa5
+);
+
+$green: (
+ "lighten-5": #E8F5E9,
+ "lighten-4": #C8E6C9,
+ "lighten-3": #A5D6A7,
+ "lighten-2": #81C784,
+ "lighten-1": #66BB6A,
+ "base": #4CAF50,
+ "darken-1": #43A047,
+ "darken-2": #388E3C,
+ "darken-3": #2E7D32,
+ "darken-4": #1B5E20,
+ "accent-1": #B9F6CA,
+ "accent-2": #69F0AE,
+ "accent-3": #00E676,
+ "accent-4": #00C853
+);
+
+$light-green: (
+ "lighten-5": #f1f8e9,
+ "lighten-4": #dcedc8,
+ "lighten-3": #c5e1a5,
+ "lighten-2": #aed581,
+ "lighten-1": #9ccc65,
+ "base": #8bc34a,
+ "darken-1": #7cb342,
+ "darken-2": #689f38,
+ "darken-3": #558b2f,
+ "darken-4": #33691e,
+ "accent-1": #ccff90,
+ "accent-2": #b2ff59,
+ "accent-3": #76ff03,
+ "accent-4": #64dd17
+);
+
+$lime: (
+ "lighten-5": #f9fbe7,
+ "lighten-4": #f0f4c3,
+ "lighten-3": #e6ee9c,
+ "lighten-2": #dce775,
+ "lighten-1": #d4e157,
+ "base": #cddc39,
+ "darken-1": #c0ca33,
+ "darken-2": #afb42b,
+ "darken-3": #9e9d24,
+ "darken-4": #827717,
+ "accent-1": #f4ff81,
+ "accent-2": #eeff41,
+ "accent-3": #c6ff00,
+ "accent-4": #aeea00
+);
+
+$yellow: (
+ "lighten-5": #fffde7,
+ "lighten-4": #fff9c4,
+ "lighten-3": #fff59d,
+ "lighten-2": #fff176,
+ "lighten-1": #ffee58,
+ "base": #ffeb3b,
+ "darken-1": #fdd835,
+ "darken-2": #fbc02d,
+ "darken-3": #f9a825,
+ "darken-4": #f57f17,
+ "accent-1": #ffff8d,
+ "accent-2": #ffff00,
+ "accent-3": #ffea00,
+ "accent-4": #ffd600
+);
+
+$amber: (
+ "lighten-5": #fff8e1,
+ "lighten-4": #ffecb3,
+ "lighten-3": #ffe082,
+ "lighten-2": #ffd54f,
+ "lighten-1": #ffca28,
+ "base": #ffc107,
+ "darken-1": #ffb300,
+ "darken-2": #ffa000,
+ "darken-3": #ff8f00,
+ "darken-4": #ff6f00,
+ "accent-1": #ffe57f,
+ "accent-2": #ffd740,
+ "accent-3": #ffc400,
+ "accent-4": #ffab00
+);
+
+$orange: (
+ "lighten-5": #fff3e0,
+ "lighten-4": #ffe0b2,
+ "lighten-3": #ffcc80,
+ "lighten-2": #ffb74d,
+ "lighten-1": #ffa726,
+ "base": #ff9800,
+ "darken-1": #fb8c00,
+ "darken-2": #f57c00,
+ "darken-3": #ef6c00,
+ "darken-4": #e65100,
+ "accent-1": #ffd180,
+ "accent-2": #ffab40,
+ "accent-3": #ff9100,
+ "accent-4": #ff6d00
+);
+
+$deep-orange: (
+ "lighten-5": #fbe9e7,
+ "lighten-4": #ffccbc,
+ "lighten-3": #ffab91,
+ "lighten-2": #ff8a65,
+ "lighten-1": #ff7043,
+ "base": #ff5722,
+ "darken-1": #f4511e,
+ "darken-2": #e64a19,
+ "darken-3": #d84315,
+ "darken-4": #bf360c,
+ "accent-1": #ff9e80,
+ "accent-2": #ff6e40,
+ "accent-3": #ff3d00,
+ "accent-4": #dd2c00
+);
+
+$brown: (
+ "lighten-5": #efebe9,
+ "lighten-4": #d7ccc8,
+ "lighten-3": #bcaaa4,
+ "lighten-2": #a1887f,
+ "lighten-1": #8d6e63,
+ "base": #795548,
+ "darken-1": #6d4c41,
+ "darken-2": #5d4037,
+ "darken-3": #4e342e,
+ "darken-4": #3e2723
+);
+
+$blue-grey: (
+ "lighten-5": #eceff1,
+ "lighten-4": #cfd8dc,
+ "lighten-3": #b0bec5,
+ "lighten-2": #90a4ae,
+ "lighten-1": #78909c,
+ "base": #607d8b,
+ "darken-1": #546e7a,
+ "darken-2": #455a64,
+ "darken-3": #37474f,
+ "darken-4": #263238
+);
+
+$grey: (
+ "lighten-5": #fafafa,
+ "lighten-4": #f5f5f5,
+ "lighten-3": #eeeeee,
+ "lighten-2": #e0e0e0,
+ "lighten-1": #bdbdbd,
+ "base": #9e9e9e,
+ "darken-1": #757575,
+ "darken-2": #616161,
+ "darken-3": #424242,
+ "darken-4": #212121
+);
+
+$shades: (
+ "black": #000000,
+ "white": #FFFFFF,
+ "transparent": transparent
+);
+
+$colors: (
+ "materialize-red": $materialize-red,
+ "red": $red,
+ "pink": $pink,
+ "purple": $purple,
+ "deep-purple": $deep-purple,
+ "indigo": $indigo,
+ "blue": $blue,
+ "light-blue": $light-blue,
+ "cyan": $cyan,
+ "teal": $teal,
+ "green": $green,
+ "light-green": $light-green,
+ "lime": $lime,
+ "yellow": $yellow,
+ "amber": $amber,
+ "orange": $orange,
+ "deep-orange": $deep-orange,
+ "brown": $brown,
+ "blue-grey": $blue-grey,
+ "grey": $grey,
+ "shades": $shades
+);
+
+
+// Color Classes
+
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type == "base" {
+ .#{$color_name} {
+ background-color: $color_value !important;
+ }
+ .#{$color_name}-text {
+ color: $color_value !important;
+ }
+ }
+ @else {
+ .#{$color_name}.#{$color_type} {
+ background-color: $color_value !important;
+ }
+ .#{$color_name}-text.text-#{$color_type} {
+ color: $color_value !important;
+ }
+ }
+ }
+}
+
+// Shade classes
+@each $color, $color_value in $shades {
+ .#{$color} {
+ background-color: $color_value !important;
+ }
+ .#{$color}-text {
+ color: $color_value !important;
+ }
+}
+
+
+// usage: color("name_of_color", "type_of_color")
+// to avoid to repeating map-get($colors, ...)
+
+@function color($color, $type) {
+ @if map-has-key($colors, $color) {
+ $curr_color: map-get($colors, $color);
+ @if map-has-key($curr_color, $type) {
+ @return map-get($curr_color, $type);
+ }
+ }
+ @warn "Unknown `#{name}` in $colors.";
+ @return null;
+}
+
diff --git a/system/admin/static/editor/sass/components/_dropdown.scss b/system/admin/static/editor/sass/components/_dropdown.scss
new file mode 100644
index 0000000..585fbd6
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_dropdown.scss
@@ -0,0 +1,40 @@
+.dropdown-content {
+ @extend .z-depth-1;
+ background-color: $dropdown-bg-color;
+ margin: 0;
+ display: none;
+ min-width: 100px;
+ max-height: 650px;
+ overflow-y: auto;
+ opacity: 0;
+ position: absolute;
+ z-index: 999;
+ will-change: width, height;
+
+ li {
+ clear: both;
+ color: $off-black;
+ cursor: pointer;
+ line-height: 1.5rem;
+ width: 100%;
+ text-align: left;
+ text-transform: none;
+
+ &:hover, &.active {
+ background-color: $dropdown-hover-bg-color;
+ }
+
+ & > a, & > span {
+ font-size: 1.2rem;
+ color: $dropdown-color;
+ display: block;
+ padding: 1rem 1rem;
+ }
+
+ // Icon alignment override
+ & > a > i {
+ height: inherit;
+ line-height: inherit;
+ }
+ }
+}
diff --git a/system/admin/static/editor/sass/components/_form.scss b/system/admin/static/editor/sass/components/_form.scss
new file mode 100644
index 0000000..ed35233
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_form.scss
@@ -0,0 +1,886 @@
+/* Remove Focus Boxes */
+select:focus {
+ outline: 1px solid lighten($secondary-color, 47%);
+}
+button:focus {
+ outline: none;
+ background-color: lighten($button-color, 4%);
+}
+
+label {
+ font-size: $label-font-size;
+ color: $input-border-color;
+}
+
+/***************************
+ Text Inputs + Textarea
+****************************/
+
+// Style Placeholders
+::-webkit-input-placeholder {
+ color: lighten($input-border-color, 20%);
+}
+
+:-moz-placeholder { /* Firefox 18- */
+ color: lighten($input-border-color, 20%);
+}
+
+::-moz-placeholder { /* Firefox 19+ */
+ color: lighten($input-border-color, 20%);
+}
+
+:-ms-input-placeholder {
+ color: lighten($input-border-color, 20%);
+}
+
+// Text inputs
+input[type=text],
+input[type=password],
+input[type=email],
+input[type=url],
+input[type=time],
+input[type=date],
+input[type=datetime-local],
+input[type=tel],
+input[type=number],
+input[type=search],
+textarea.materialize-textarea {
+
+ // General Styles
+ background-color: transparent;
+ border: none;
+ border-bottom: 1px solid $input-border-color;
+ border-radius: 0;
+ outline: none;
+ height: 3rem;
+ width: 100%;
+
+ font-size: 1rem;
+ margin: 0 0 15px 0;
+ padding: 0;
+ box-shadow: none;
+ @include box-sizing(content-box);
+ transition: all .3s;
+
+
+ // Disabled input style
+ &:disabled, &[readonly="readonly"] {
+ color: $input-disabled-color;
+ border-bottom: 1px dotted $input-disabled-color;
+ }
+ // Disabled label style
+ &:disabled+label, &[readonly="readonly"]+label {
+ color: $input-disabled-color;
+ }
+ // Focused input style
+ &:focus:not([readonly]) {
+ border-bottom: 1px solid $input-focus-color;
+ box-shadow: 0 1px 0 0 $input-focus-color;
+ }
+ // Focused label style
+ &:focus:not([readonly])+label {
+ color: $input-focus-color;
+ }
+ // Valid Input Style
+ &.valid,
+ &:focus.valid {
+ border-bottom: 1px solid $input-success-color;
+ box-shadow: 0 1px 0 0 $input-success-color;
+ }
+ // Custom Success Message
+ &.valid + label:after,
+ &:focus.valid + label:after {
+ content: attr(data-success);
+ color: $input-success-color;
+ opacity: 1;
+ }
+ // Invalid Input Style
+ &.invalid,
+ &:focus.invalid {
+ border-bottom: 1px solid $input-error-color;
+ box-shadow: 0 1px 0 0 $input-error-color;
+ }
+ // Custom Error message
+ &.invalid + label:after,
+ &:focus.invalid + label:after {
+ content: attr(data-error);
+ color: $input-error-color;
+ opacity: 1;
+ }
+
+ // Form Message Shared Styles
+ & + label:after {
+ display: block;
+ content: "";
+ position: absolute;
+ top: 65px;
+ opacity: 0;
+ transition: .2s opacity ease-out, .2s color ease-out;
+ }
+}
+
+// Styling for input field wrapper
+.input-field {
+ position: relative;
+ margin-top: 1rem;
+
+ label {
+ color: $input-border-color;
+ position: absolute;
+ top: 0.8rem;
+ left: $gutter-width / 2;
+ font-size: 1rem;
+ cursor: text;
+ @include transition(.2s ease-out);
+ }
+ label.active {
+ font-size: $label-font-size;
+ @include transform(translateY(-140%));
+ }
+
+ // Prefix Icons
+ .prefix {
+ position: absolute;
+ width: 3rem;
+ font-size: 2rem;
+ @include transition(color .2s);
+
+ &.active { color: $input-focus-color; }
+ }
+ .prefix ~ input,
+ .prefix ~ textarea {
+ margin-left: 3rem;
+ width: 92%;
+ width: calc(100% - 3rem);
+ }
+ .prefix ~ textarea { padding-top: .8rem; }
+ .prefix ~ label { margin-left: 3rem; }
+
+ @media #{$medium-and-down} {
+ .prefix ~ input {
+ width: 86%;
+ width: calc(100% - 3rem);
+ }
+ }
+ @media #{$small-and-down} {
+ .prefix ~ input {
+ width: 80%;
+ width: calc(100% - 3rem);
+ }
+ }
+}
+
+
+// Search Field
+
+
+.input-field input[type=search] {
+ display: block;
+ line-height: inherit;
+ padding-left: 4rem;
+ width: calc(100% - 4rem);
+
+ &:focus {
+ background-color: $input-bg-color;
+ border: 0;
+ box-shadow: none;
+ color: #444;
+
+ & + label i,
+ & ~ .mdi-navigation-close {
+ color: #444;
+ }
+ }
+
+ & + label {
+ left: 1rem;
+ }
+
+ & ~ .mdi-navigation-close {
+ position: absolute;
+ top: 0;
+ right: 1rem;
+ color: transparent;
+ cursor: pointer;
+ font-size: 2rem;
+ transition: .3s color;
+ }
+}
+
+
+// Default textarea
+textarea {
+ width: 100%;
+ height: 3rem;
+ background-color: transparent;
+
+ &.materialize-textarea {
+ overflow-y: hidden; /* prevents scroll bar flash */
+ padding: 1.6rem 0; /* prevents text jump on Enter keypress */
+ resize: none;
+ min-height: 3rem;
+ }
+}
+
+
+// For textarea autoresize
+.hiddendiv {
+ display: none;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+ overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */
+ padding-top: 1.2rem; /* prevents text jump on Enter keypress */
+}
+
+
+/***************
+ Radio Buttons
+***************/
+
+/* Remove default Radio Buttons */
+[type="radio"]:not(:checked),
+[type="radio"]:checked {
+ position: absolute;
+ left: -9999px;
+ visibility: hidden;
+}
+
+[type="radio"]:not(:checked) + label,
+[type="radio"]:checked + label {
+ position: relative;
+ padding-left: 35px;
+ cursor: pointer;
+ display: inline-block;
+ height: 25px;
+ line-height: 25px;
+ font-size: 1rem;
+ @include transition(.28s ease);
+
+ -webkit-user-select: none; /* webkit (safari, chrome) browsers */
+ -moz-user-select: none; /* mozilla browsers */
+ -khtml-user-select: none; /* webkit (konqueror) browsers */
+ -ms-user-select: none; /* IE10+ */
+}
+
+[type="radio"] + label:before,
+[type="radio"] + label:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ margin: 4px;
+ width: 16px;
+ height: 16px;
+ z-index: 0;
+ @include transition(.28s ease);
+}
+
+
+/* Unchecked styles */
+[type="radio"]:not(:checked) + label:before {
+ border-radius: 50%;
+ border: 2px solid $radio-empty-color;
+}
+[type="radio"]:not(:checked) + label:after {
+ border-radius: 50%;
+ border: 2px solid $radio-empty-color;
+ z-index: -1;
+
+ @include transform(scale(0));
+}
+
+/* Checked styles */
+[type="radio"]:checked + label:before {
+ border-radius: 50%;
+ border: 2px solid transparent;
+}
+[type="radio"]:checked + label:after {
+ border-radius: 50%;
+ border: 2px solid $radio-fill-color;
+ background-color: $radio-fill-color;
+ z-index: 0;
+ @include transform(scale(1.02));
+}
+
+/* Radio With gap */
+[type="radio"].with-gap:checked + label:before {
+ border-radius: 50%;
+ border: 2px solid $radio-fill-color;
+}
+[type="radio"].with-gap:checked + label:after {
+ border-radius: 50%;
+ border: 2px solid $radio-fill-color;
+ background-color: $radio-fill-color;
+ z-index: 0;
+ @include transform(scale(.5));
+}
+
+/* Disabled Radio With gap */
+[type="radio"].with-gap:disabled:checked + label:before {
+ border: 2px solid $input-disabled-color;
+}
+[type="radio"].with-gap:disabled:checked + label:after {
+ border: none;
+ background-color: $input-disabled-color;
+}
+
+/* Disabled style */
+[type="radio"]:disabled:not(:checked) + label:before,
+[type="radio"]:disabled:checked + label:before {
+ background-color: transparent;
+ border-color: $input-disabled-color;
+}
+[type="radio"]:disabled + label {
+ color: $input-disabled-color;
+}
+[type="radio"]:disabled:not(:checked) + label:before {
+ border-color: $input-disabled-color;
+}
+[type="radio"]:disabled:checked + label:after {
+ background-color: $input-disabled-color;
+ border-color: $input-disabled-solid-color;
+}
+
+
+/***************
+ Checkboxes
+***************/
+
+/* CUSTOM CSS CHECKBOXES */
+form p {
+ margin-bottom: 10px;
+ text-align: left;
+}
+form p:last-child {
+ margin-bottom: 0;
+}
+
+/* Remove default checkbox */
+[type="checkbox"]:not(:checked),
+[type="checkbox"]:checked {
+ position: absolute;
+ left: -9999px;
+ visibility: hidden;
+}
+
+
+// Checkbox Styles
+[type="checkbox"] {
+
+ // Text Label Style
+ + label {
+ position: relative;
+ padding-left: 35px;
+ cursor: pointer;
+ display: inline-block;
+ height: 25px;
+ line-height: 25px;
+ font-size: 1rem;
+
+ -webkit-user-select: none; /* webkit (safari, chrome) browsers */
+ -moz-user-select: none; /* mozilla browsers */
+ -khtml-user-select: none; /* webkit (konqueror) browsers */
+ -ms-user-select: none; /* IE10+ */
+ }
+
+ /* checkbox aspect */
+ + label:before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 18px;
+ height: 18px;
+ z-index: 0;
+ border: 2px solid $radio-empty-color;
+ border-radius: 1px;
+ margin-top: 2px;
+ @include transition(.2s);
+ }
+
+ &:not(:checked):disabled + label:before {
+ border: none;
+ background-color: $input-disabled-color;
+ }
+
+}
+
+[type="checkbox"]:checked {
+ + label:before {
+ top: -4px;
+ left: -3px;
+ width: 12px; height: 22px;
+ border-top: 2px solid transparent;
+ border-left: 2px solid transparent;
+ border-right: 2px solid $radio-fill-color;
+ border-bottom: 2px solid $radio-fill-color;
+ @include transform(rotate(40deg));
+ -webkit-backface-visibility: hidden;
+ @include transform-origin(100% 100%);
+ }
+
+ &:disabled + label:before {
+ border-right: 2px solid $input-disabled-color;
+ border-bottom: 2px solid $input-disabled-color;
+ }
+
+}
+
+/* Indeterminate checkbox */
+[type="checkbox"]:indeterminate {
+ +label:before {
+ left: -10px;
+ top: -11px;
+ width: 10px; height: 22px;
+ border-top: none;
+ border-left: none;
+ border-right: 2px solid $radio-fill-color;
+ border-bottom: none;
+ @include transform(rotate(90deg));
+ -webkit-backface-visibility: hidden;
+ @include transform-origin(100% 100%);
+ }
+
+ // Disabled indeterminate
+ &:disabled + label:before {
+ border-right: 2px solid $input-disabled-color;
+ background-color: transparent;
+ }
+}
+
+
+// Filled in Style
+[type="checkbox"].filled-in {
+ // General
+ + label:after {
+ border-radius: 2px;
+ }
+ + label:before,
+ + label:after {
+ content: '';
+ left: 0;
+ position: absolute;
+ /* .1s delay is for check animation */
+ transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;
+ z-index: 1;
+ }
+ // Unchecked style
+ &:not(:checked) + label:before {
+ width: 0;
+ height: 0;
+ border: 3px solid transparent;
+ left: 6px;
+ top: 10px;
+
+ -webkit-transform: rotateZ(37deg);
+ transform: rotateZ(37deg);
+ -webkit-transform-origin: 20% 40%;
+ transform-origin: 100% 100%;
+ }
+ &:not(:checked) + label:after {
+ height: 20px;
+ width: 20px;
+ background-color: transparent;
+ border: 2px solid $radio-empty-color;
+ top: 0px;
+ z-index: 0;
+ }
+ // Checked style
+ &:checked {
+ + label:before {
+ top: 0;
+ left: 1px;
+ width: 8px;
+ height: 13px;
+ border-top: 2px solid transparent;
+ border-left: 2px solid transparent;
+ border-right: 2px solid $input-bg-color;
+ border-bottom: 2px solid $input-bg-color;
+ -webkit-transform: rotateZ(37deg);
+ transform: rotateZ(37deg);
+
+ -webkit-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+ }
+ + label:after {
+ top: 0px;
+ width: 20px;
+ height: 20px;
+ border: 2px solid $secondary-color;
+ background-color: $secondary-color;
+ z-index: 0;
+ }
+ }
+ // Disabled style
+ &:disabled:not(:checked) + label:before {
+
+ background-color: transparent;
+ border: 2px solid transparent;
+ }
+ &:disabled:not(:checked) + label:after {
+ border-color: transparent;
+ background-color: $input-disabled-solid-color;
+ }
+ &:disabled:checked + label:before {
+ background-color: transparent;
+
+ }
+ &:disabled:checked + label:after {
+ background-color: $input-disabled-solid-color;
+ border-color: $input-disabled-solid-color;
+ }
+
+}
+
+/***************
+ Switch
+***************/
+.switch,
+.switch * {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -ms-user-select: none;
+}
+.switch label {
+ cursor: pointer;
+}
+.switch label input[type=checkbox]{
+ opacity: 0;
+ width: 0;
+ height: 0;
+}
+.switch label input[type=checkbox]:checked + .lever {
+ background-color: $switch-checked-lever-bg;
+}
+.switch label input[type=checkbox]:checked + .lever:after {
+ background-color: $switch-bg-color;
+}
+.switch label .lever {
+ content: "";
+ display: inline-block;
+ position: relative;
+ width: 40px;
+ height: 15px;
+ background-color: $switch-unchecked-lever-bg;
+ border-radius: 15px;
+ margin-right: 10px;
+ transition: background 0.3s ease;
+ vertical-align: middle;
+ margin: 0 16px;
+}
+.switch label .lever:after {
+ content: "";
+ position: absolute;
+ display: inline-block;
+ width: 21px;
+ height: 21px;
+ background-color: $switch-unchecked-bg;
+ border-radius: 21px;
+ box-shadow: 0 1px 3px 1px rgba(0,0,0,.4);
+ left: -5px;
+ top: -3px;
+ transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease;
+}
+// Switch active style
+input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after {
+ box-shadow: 0 1px 3px 1px rgba(0,0,0,.4), 0 0 0 15px transparentize($switch-bg-color, .9);
+}
+input[type=checkbox]:not(:disabled) ~ .lever:active:after {
+ box-shadow: 0 1px 3px 1px rgba(0,0,0,.4), 0 0 0 15px rgba(0, 0, 0, .08);
+}
+.switch label input[type=checkbox]:checked + .lever:after {
+ left: 24px;
+}
+
+// Disabled Styles
+
+.switch input[type=checkbox][disabled] + .lever{
+ cursor: default;
+}
+.switch label input[type=checkbox][disabled] + .lever:after,
+.switch label input[type=checkbox][disabled]:checked + .lever:after {
+ background-color: $input-disabled-solid-color;
+}
+
+
+
+
+/***************
+ Select Field
+***************/
+
+.select-label {
+ position: absolute;
+}
+
+.select-wrapper {
+ position: relative;
+
+ input.select-dropdown {
+ position: relative;
+ cursor: pointer;
+ // color: #444;
+ background-color: transparent;
+ border: none;
+ border-bottom: 1px solid $input-border-color;
+ outline: none;
+ height: 3rem;
+ line-height: 3rem;
+ width: 100%;
+ font-size: 1rem;
+ margin: 0 0 15px 0;
+ padding: 0;
+ display: block;
+ }
+ span.caret {
+ color: initial;
+ position: absolute;
+ right: 0;
+ top: 16px;
+ font-size: 10px;
+ &.disabled {
+ color: $input-disabled-color;
+ }
+ }
+ & + label {
+ position: absolute;
+ top: -14px;
+ font-size: $label-font-size;
+ }
+}
+
+select { display: none; }
+select.browser-default { display: block; }
+
+
+// Disabled styles
+select:disabled {
+ color: rgba(0,0,0,.3);
+}
+.select-wrapper input.select-dropdown:disabled {
+ color: rgba(0,0,0,.3);
+ cursor: default;
+ -webkit-user-select: none; /* webkit (safari, chrome) browsers */
+ -moz-user-select: none; /* mozilla browsers */
+ -ms-user-select: none; /* IE10+ */
+ border-bottom: 1px solid rgba(0,0,0,.3);
+}
+.select-wrapper i {
+ color: rgba(0,0,0,.3);
+}
+.select-dropdown li.disabled {
+ color: rgba(0,0,0,.3);
+ background-color: transparent;
+}
+
+
+/*********************
+ File Input
+**********************/
+.file-field {
+ position: relative;
+
+ .file-path-wrapper {
+ overflow: hidden;
+ padding-left: 10px;
+ }
+ input.file-path { width: 100%; }
+
+ .btn {
+ float: left;
+ height: 3rem;
+ line-height: 3rem;
+ }
+
+ span {
+ cursor: pointer;
+ }
+
+ input[type=file] {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ font-size: 20px;
+ cursor: pointer;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ }
+}
+
+
+
+/***************
+ Range
+***************/
+
+.range-field {
+ position: relative;
+}
+
+input[type=range], input[type=range] + .thumb {
+ @extend .no-select;
+ cursor: pointer;
+}
+
+input[type=range] {
+ position: relative;
+ background-color: transparent;
+ border: none;
+ outline: none;
+ width: 100%;
+ margin: 15px 0px;
+ padding: 0;
+}
+input[type=range] + .thumb {
+ position: absolute;
+ border: none;
+ height: 0;
+ width: 0;
+ border-radius: 50%;
+ background-color: $radio-fill-color;
+ top: 10px;
+ margin-left: -6px;
+
+ @include transform-origin(50% 50%);
+ @include transform(rotate(-45deg));
+
+ .value {
+ display: block;
+ width: 30px;
+ text-align: center;
+ color: $radio-fill-color;
+ font-size: 0;
+ @include transform(rotate(45deg));
+ }
+
+ &.active {
+ border-radius: 50% 50% 50% 0;
+
+ .value {
+ color: $input-bg-color;
+ margin-left: -1px;
+ margin-top: 8px;
+ font-size: 10px;
+ }
+ }
+}
+
+
+input[type=range]:focus {
+ outline: none;
+}
+
+
+
+// WebKit
+input[type=range]{
+ -webkit-appearance: none;
+}
+
+input[type=range]::-webkit-slider-runnable-track {
+ height: 3px;
+ background: #c2c0c2;
+ border: none;
+}
+
+input[type=range]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ border: none;
+ height: 14px;
+ width: 14px;
+ border-radius: 50%;
+ background-color: $radio-fill-color;
+ transform-origin: 50% 50%;
+ margin: -5px 0 0 0;
+ @include transition(.3s);
+}
+
+input[type=range]:focus::-webkit-slider-runnable-track {
+ background: #ccc;
+}
+
+// FireFox
+input[type=range]{
+ /* fix for FF unable to apply focus style bug */
+ border: 1px solid white;
+
+ /*required for proper track sizing in FF*/
+}
+
+input[type=range]::-moz-range-track {
+ height: 3px;
+ background: #ddd;
+ border: none;
+}
+
+input[type=range]::-moz-range-thumb {
+ border: none;
+ height: 14px;
+ width: 14px;
+ border-radius: 50%;
+ background: $radio-fill-color;
+ margin-top: -5px;
+}
+
+/*hide the outline behind the border*/
+input[type=range]:-moz-focusring{
+ outline: 1px solid white;
+ outline-offset: -1px;
+}
+
+input[type=range]:focus::-moz-range-track {
+ background: #ccc;
+}
+
+// IE 10+
+input[type=range]::-ms-track {
+ height: 3px;
+
+ /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
+ background: transparent;
+
+ /*leave room for the larger thumb to overflow with a transparent border */
+ border-color: transparent;
+ border-width: 6px 0;
+
+ /*remove default tick marks*/
+ color: transparent;
+}
+input[type=range]::-ms-fill-lower {
+ background: #777;
+}
+input[type=range]::-ms-fill-upper {
+ background: #ddd;
+}
+input[type=range]::-ms-thumb {
+ border: none;
+ height: 14px;
+ width: 14px;
+ border-radius: 50%;
+ background: $radio-fill-color;
+}
+input[type=range]:focus::-ms-fill-lower {
+ background: #888;
+}
+input[type=range]:focus::-ms-fill-upper {
+ background: #ccc;
+}
+
+/***************************
+ Text Inputs + Textarea
+****************************/
+
+select {
+ background-color: rgba(255, 255, 255, 0.90);
+ width: 100%;
+ padding: 5px;
+ border: 1px solid #f2f2f2;
+ border-radius: 2px;
+ height: 3rem;
+ }
diff --git a/system/admin/static/editor/sass/components/_global.scss b/system/admin/static/editor/sass/components/_global.scss
new file mode 100644
index 0000000..c246270
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_global.scss
@@ -0,0 +1,718 @@
+@charset "UTF-8";
+
+
+//Default styles
+
+html {
+ box-sizing: border-box;
+}
+*, *:before, *:after {
+ box-sizing: inherit;
+}
+
+body {
+ // display: flex;
+ // min-height: 100vh;
+ // flex-direction: column;
+}
+
+main {
+ // flex: 1 0 auto;
+}
+
+ul {
+ list-style-type: none;
+}
+
+a {
+ color: $link-color;
+ text-decoration: none;
+
+ // Gets rid of tap active state
+ -webkit-tap-highlight-color: transparent;
+}
+
+
+// Positioning
+.valign-wrapper {
+ @include flexbox();
+ @include align(center);
+
+ .valign {
+ display: block;
+ }
+}
+
+
+ul {
+ padding: 0;
+ li {
+ list-style-type: none;
+ }
+}
+
+// classic clearfix
+.clearfix {
+ clear: both;
+}
+
+
+// Z-levels
+.z-depth-0 {
+ box-shadow: none !important;
+}
+.z-depth-1{
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
+}
+.z-depth-1-half{
+ box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
+}
+.z-depth-2{
+ box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
+}
+.z-depth-3{
+ box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
+}
+.z-depth-4{
+ box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
+}
+.z-depth-5{
+ box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);
+}
+
+.hoverable:hover {
+ transition: box-shadow .25s;
+ box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
+}
+
+// Dividers
+
+.divider {
+ height: 1px;
+ overflow: hidden;
+ background-color: color("grey", "lighten-2");
+}
+
+
+// Blockquote
+
+blockquote {
+ margin: 20px 0;
+ padding-left: 1.5rem;
+ border-left: 5px solid $primary-color;
+}
+
+// Icon Styles
+
+i {
+ line-height: inherit;
+
+ &.left {
+ float: left;
+ margin-right: 15px;
+ }
+ &.right {
+ float: right;
+ margin-left: 15px;
+ }
+ &.tiny {
+ font-size: 1rem;
+ }
+ &.small {
+ font-size: 2rem;
+ }
+ &.medium {
+ font-size: 4rem;
+ }
+ &.large {
+ font-size: 6rem;
+ }
+}
+
+// Images
+img.responsive-img,
+video.responsive-video {
+ max-width: 100%;
+ height: auto;
+}
+
+
+// Pagination
+
+.pagination {
+
+ li {
+ float: left;
+ font-size: 1.2rem;
+ padding: 0 10px;
+ line-height: 30px;
+ border-radius: 2px;
+ text-align: center;
+
+ a { color: #444; }
+
+ &.active a { color: #fff; }
+
+ &.active { background-color: $primary-color; }
+
+ &.disabled a {
+ cursor: default;
+ color: #999;
+ }
+
+ i {
+ font-size: 2rem;
+ }
+ }
+
+
+ li.pages ul li {
+ display: inline-block;
+ float: none;
+ }
+}
+@media #{$medium-and-down} {
+ .pagination {
+ width: 100%;
+
+ li.prev,
+ li.next {
+ width: 10%;
+ }
+
+ li.pages {
+ width: 80%;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+ }
+}
+
+
+// Parallax
+.parallax-container {
+ position: relative;
+ overflow: hidden;
+ height: 500px;
+}
+
+.parallax {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: -1;
+
+ img {
+ display: none;
+ position: absolute;
+ left: 50%;
+ bottom: 0;
+ min-width: 100%;
+ min-height: 100%;
+ -webkit-transform: translate3d(0,0,0);
+ transform: translate3d(0,0,0);
+ transform: translateX(-50%);
+ }
+}
+
+// Pushpin
+.pin-top, .pin-bottom {
+ position: relative;
+}
+.pinned {
+ position: fixed !important;
+}
+
+/*********************
+ Transition Classes
+**********************/
+
+ul.staggered-list li {
+ opacity: 0;
+}
+
+.fade-in {
+ opacity: 0;
+ transform-origin: 0 50%;
+}
+
+
+/*********************
+ Media Query Classes
+**********************/
+.hide-on-small-only, .hide-on-small-and-down {
+ @media #{$small-and-down} {
+ display: none !important;
+ }
+}
+.hide-on-med-and-down {
+ @media #{$medium-and-down} {
+ display: none !important;
+ }
+}
+.hide-on-med-and-up {
+ @media #{$medium-and-up} {
+ display: none !important;
+ }
+}
+.hide-on-med-only {
+ @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) {
+ display: none !important;
+ }
+}
+.hide-on-large-only {
+ @media #{$large-and-up} {
+ display: none !important;
+ }
+}
+.show-on-large {
+ @media #{$large-and-up} {
+ display: initial !important;
+ }
+}
+.show-on-medium {
+ @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) {
+ display: initial !important;
+ }
+}
+.show-on-small {
+ @media #{$small-and-down} {
+ display: initial !important;
+ }
+}
+.show-on-medium-and-up {
+ @media #{$medium-and-up} {
+ display: initial !important;
+ }
+}
+.show-on-medium-and-down {
+ @media #{$medium-and-down} {
+ display: initial !important;
+ }
+}
+
+
+// Center text on mobile
+.center-on-small-only {
+ @media #{$small-and-down} {
+ text-align: center;
+ }
+}
+
+// Footer
+footer.page-footer {
+ margin-top: 20px;
+ padding-top: 20px;
+ background-color: $footer-bg-color;
+
+ .footer-copyright {
+ overflow: hidden;
+ height: 50px;
+ line-height: 50px;
+ color: rgba(255,255,255,.8);
+ background-color: rgba(51,51,51,.08);;
+ @extend .light;
+ }
+}
+
+// Tables
+table, th, td {
+ border: none;
+}
+
+table {
+ width:100%;
+ display: table;
+
+ &.bordered > thead > tr,
+ &.bordered > tbody > tr {
+ border-bottom: 1px solid $table-border-color;
+ }
+
+ &.striped > tbody {
+ > tr:nth-child(odd) {
+ background-color: $table-striped-color;
+ }
+
+ > tr > td {
+ border-radius: 0px;
+ }
+ }
+
+ &.hoverable > tbody > tr {
+ @include transition(background-color .25s ease);
+ &:hover {
+ background-color: $table-striped-color;
+ }
+ }
+
+ &.centered {
+ thead tr th, tbody tr td {
+ text-align: center;
+
+ }
+ }
+
+}
+
+thead {
+ border-bottom: 1px solid $table-border-color;
+}
+
+td, th{
+ padding: 15px 5px;
+ display: table-cell;
+ text-align: left;
+ vertical-align: middle;
+ border-radius: 2px;
+}
+
+// Responsive Table
+@media #{$medium-and-down} {
+
+ table.responsive-table {
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ display: block;
+ position: relative;
+
+ th,
+ td {
+ margin: 0;
+ vertical-align: top;
+ }
+
+ th { text-align: left; }
+ thead {
+ display: block;
+ float: left;
+
+ tr {
+ display: block;
+ padding: 0 10px 0 0;
+
+ th::before {
+ content: "\00a0";
+ }
+ }
+ }
+ tbody {
+ display: block;
+ width: auto;
+ position: relative;
+ overflow-x: auto;
+ white-space: nowrap;
+
+ tr {
+ display: inline-block;
+ vertical-align: top;
+ }
+ }
+ th {
+ display: block;
+ text-align: right;
+ }
+ td {
+ display: block;
+ min-height: 1.25em;
+ text-align: left;
+ }
+ tr { padding: 0 10px; }
+
+ /* sort out borders */
+ thead {
+ border: 0;
+ border-right: 1px solid $table-border-color;
+ }
+
+ &.bordered {
+ th { border-bottom: 0; border-left: 0; }
+ td { border-left: 0; border-right: 0; border-bottom: 0; }
+ tr { border: 0; }
+ tbody tr { border-right: 1px solid $table-border-color; }
+ }
+
+ }
+
+}
+
+
+// Collections
+.collection {
+ margin: $element-top-margin 0 $element-bottom-margin 0;
+ border: 1px solid $collection-border-color;
+ border-radius: 2px;
+ overflow: hidden;
+ position: relative;
+
+ .collection-item {
+ background-color: $collection-bg-color;
+ line-height: 1.5rem;
+ padding: 10px 20px;
+ margin: 0;
+ border-bottom: 1px solid $collection-border-color;
+
+ // Avatar Collection
+ &.avatar {
+ min-height: 84px;
+ padding-left: 72px;
+ position: relative;
+
+ .circle {
+ position: absolute;
+ width: 42px;
+ height: 42px;
+ overflow: hidden;
+ left: 15px;
+ display: inline-block;
+ vertical-align: middle;
+ }
+ i.circle {
+ font-size: 18px;
+ line-height: 42px;
+ color: #fff;
+ background-color: #999;
+ text-align: center;
+ }
+
+
+ .title {
+ font-size: 16px;
+ }
+
+ p {
+ margin: 0;
+ }
+
+ .secondary-content {
+ position: absolute;
+ top: 16px;
+ right: 16px;
+ }
+
+ }
+
+
+ &:last-child {
+ border-bottom: none;
+ }
+
+ &.active {
+ background-color: $collection-active-bg-color;
+ color: $collection-active-color;
+ }
+ }
+ a.collection-item{
+ display: block;
+ @include transition(.25s);
+ color: $secondary-color;
+ &:not(.active) {
+ &:hover {
+ background-color: $collection-hover-bg-color;
+ }
+ }
+ }
+
+ &.with-header {
+ .collection-header {
+ background-color: $collection-bg-color;
+ border-bottom: 1px solid $collection-border-color;
+ padding: 10px 20px;
+ }
+ .collection-item {
+ padding-left: 30px;
+ }
+ .collection-item.avatar {
+ padding-left: 72px;
+ }
+ }
+
+}
+// Made less specific to allow easier overriding
+.secondary-content {
+ float: right;
+ color: $secondary-color;
+}
+
+
+// Badges
+span.badge {
+ min-width: 3rem;
+ padding: 0 6px;
+ text-align: center;
+ font-size: 1rem;
+ line-height: inherit;
+ color: color('grey', 'darken-1');
+ position: absolute;
+ right: 15px;
+ @include box-sizing(border-box);
+
+ &.new {
+ font-weight: 300;
+ font-size: 0.8rem;
+ color: #fff;
+ background-color: $badge-bg-color;
+ border-radius: 2px;
+ }
+ &.new:after {
+ content: " new";
+ }
+}
+
+// Responsive Videos
+.video-container {
+ position: relative;
+ padding-bottom: 56.25%;
+ padding-top: 30px;
+ height: 0;
+ overflow: hidden;
+ &.no-controls {
+ padding-top: 0;
+ }
+
+ iframe, object, embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+}
+
+// Progress Bar
+.progress {
+ position: relative;
+ height: 4px;
+ display: block;
+ width: 100%;
+ background-color: lighten($progress-bar-color, 40%);
+ border-radius: 2px;
+ margin: $element-top-margin 0 $element-bottom-margin 0;
+ overflow: hidden;
+ .determinate {
+ position: absolute;
+ background-color: inherit;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ background-color: $progress-bar-color;
+ @include transition(width .3s linear);
+ }
+ .indeterminate {
+ background-color: $progress-bar-color;
+ &:before {
+ content: '';
+ position: absolute;
+ background-color: inherit;
+ top: 0;
+ left:0;
+ bottom: 0;
+ will-change: left, right;
+ // Custom bezier
+ @include animation(indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite);
+
+ }
+ &:after {
+ content: '';
+ position: absolute;
+ background-color: inherit;
+ top: 0;
+ left:0;
+ bottom: 0;
+ will-change: left, right;
+ // Custom bezier
+ @include animation(indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite);
+ @include animation-delay(1.15s);
+ }
+ }
+}
+@include keyframes(indeterminate) {
+ 0% {
+ left: -35%;
+ right:100%;
+ }
+ 60% {
+ left: 100%;
+ right: -90%;
+ }
+ 100% {
+ left: 100%;
+ right: -90%;
+ }
+}
+
+@include keyframes(indeterminate-short) {
+ 0% {
+ left: -200%;
+ right: 100%;
+ }
+ 60% {
+ left: 107%;
+ right: -8%;
+ }
+ 100% {
+ left: 107%;
+ right: -8%;
+ }
+}
+
+
+/*******************
+ Utility Classes
+*******************/
+
+.hide {
+ display: none !important;
+}
+
+// Text Align
+.left-align {
+ text-align: left;
+}
+.right-align {
+ text-align: right
+}
+.center, .center-align {
+ text-align: center;
+}
+
+.left {
+ float: left !important;
+}
+.right {
+ float: right !important;
+}
+
+// No Text Select
+.no-select {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.circle {
+ border-radius: 50%;
+}
+
+.center-block {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.truncate {
+ display: block;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.no-padding {
+ padding: 0 !important;
+}
diff --git a/system/admin/static/editor/sass/components/_grid.scss b/system/admin/static/editor/sass/components/_grid.scss
new file mode 100644
index 0000000..68d727d
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_grid.scss
@@ -0,0 +1,117 @@
+.container {
+ margin: 0 auto;
+ max-width: 1280px;
+ width: 90%;
+}
+@media #{$medium-and-up} {
+ .container {
+ width: 85%;
+ }
+}
+@media #{$large-and-up} {
+ .container {
+ width: 70%;
+ }
+}
+.container .row {
+ margin-left: (-1 * $gutter-width / 2);
+ margin-right: (-1 * $gutter-width / 2);
+}
+
+.section {
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+
+ &.no-pad {
+ padding: 0;
+ }
+ &.no-pad-bot {
+ padding-bottom: 0;
+ }
+ &.no-pad-top {
+ padding-top: 0;
+ }
+}
+
+
+.row {
+ margin-left: auto;
+ margin-right: auto;
+ margin-bottom: 20px;
+
+ // Clear floating children
+ &:after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+
+ .col {
+ float: left;
+ @include box-sizing(border-box);
+ padding: 0 $gutter-width / 2;
+
+ $i: 1;
+ @while $i <= $num-cols {
+ $perc: unquote((100 / ($num-cols / $i)) + "%");
+ &.s#{$i} {
+ width: $perc;
+ margin-left: 0;
+ }
+ $i: $i + 1;
+ }
+ $i: 1;
+ @while $i <= $num-cols {
+ $perc: unquote((100 / ($num-cols / $i)) + "%");
+ &.offset-s#{$i} {
+ margin-left: $perc;
+ }
+ $i: $i + 1;
+ }
+
+ @media #{$medium-and-up} {
+
+ $i: 1;
+ @while $i <= $num-cols {
+ $perc: unquote((100 / ($num-cols / $i)) + "%");
+ &.m#{$i} {
+ width: $perc;
+ margin-left: 0;
+ }
+ $i: $i + 1;
+ }
+ $i: 1;
+ @while $i <= $num-cols {
+ $perc: unquote((100 / ($num-cols / $i)) + "%");
+ &.offset-m#{$i} {
+ margin-left: $perc;
+ }
+ $i: $i + 1;
+ }
+
+ }
+
+ @media #{$large-and-up} {
+
+ $i: 1;
+ @while $i <= $num-cols {
+ $perc: unquote((100 / ($num-cols / $i)) + "%");
+ &.l#{$i} {
+ width: $perc;
+ margin-left: 0;
+ }
+ $i: $i + 1;
+ }
+ $i: 1;
+ @while $i <= $num-cols {
+ $perc: unquote((100 / ($num-cols / $i)) + "%");
+ &.offset-l#{$i} {
+ margin-left: $perc;
+ }
+ $i: $i + 1;
+ }
+
+ }
+
+ }
+}
diff --git a/system/admin/static/editor/sass/components/_icons-material-design.scss b/system/admin/static/editor/sass/components/_icons-material-design.scss
new file mode 100644
index 0000000..3c78470
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_icons-material-design.scss
@@ -0,0 +1,3257 @@
+$font-mdi : 'Material-Design-Icons';
+$mdi-prefix : 'mdi-';
+
+@font-face {
+ font-family: "#{$font-mdi}";
+ src:url("#{$icons-font-path}#{$font-mdi}.eot?#iefix") format("embedded-opentype"),
+ url("#{$icons-font-path}#{$font-mdi}.woff2") format("woff2"),
+ url("#{$icons-font-path}#{$font-mdi}.woff") format("woff"),
+ url("#{$icons-font-path}#{$font-mdi}.ttf") format("truetype"),
+ url("#{$icons-font-path}#{$font-mdi}.svg##{$font-mdi}") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+
+[class^="mdi-"], [class*="mdi-"] {
+ speak: none;
+ display: inline-block;
+ font-family: "Material-Design-Icons";
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-rendering: auto;
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ transform: translate(0, 0);
+ &:before {
+ display: inline-block;
+ speak: none;
+ text-decoration: inherit;
+ }
+ &.pull-left {
+ margin-right: .3em;
+ }
+ &.pull-right{
+ margin-left: .3em;
+ }
+ &.mdi-lg:before, &.mdi-lg:after {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+ }
+ &.mdi-2x:before, &.mdi-2x:after {
+ font-size: 2em;
+ }
+ &.mdi-3x:before, &.mdi-3x:after {
+ font-size: 3em;
+ }
+ &.mdi-4x:before, &.mdi-4x:after {
+ font-size: 4em;
+ }
+ &.mdi-5x:before, &.mdi-5x:after {
+ font-size: 5em;
+ }
+}
+
+[class^="mdi-device-signal-cellular-"],
+[class^="mdi-device-battery-"],
+[class^="mdi-device-battery-charging-"],
+[class^="mdi-device-signal-cellular-connected-no-internet-"],
+[class^="mdi-device-signal-wifi-"],
+[class^="mdi-device-signal-wifi-statusbar-not-connected"],
+.mdi-device-network-wifi{
+ &:after {
+ opacity: .3;
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 1;
+ display: inline-block;
+ speak: none;
+ text-decoration: inherit;
+ }
+}
+
+[class^="mdi-device-signal-cellular-"]:after {content:"\e758";}
+[class^="mdi-device-battery-"]:after {content:"\e735";}
+[class^="mdi-device-battery-charging-"]:after {content:"\e733";}
+[class^="mdi-device-signal-cellular-connected-no-internet-"]:after {content:"\e75d";}
+[class^="mdi-device-signal-wifi-"]:after, .mdi-device-network-wifi:after {content:"\e765";}
+[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after {content:"\e8f7";}
+
+.mdi-device-signal-cellular-off, .mdi-device-signal-cellular-null, .mdi-device-signal-cellular-no-sim, .mdi-device-signal-wifi-off, .mdi-device-signal-wifi-4-bar, .mdi-device-signal-cellular-4-bar, .mdi-device-battery-alert, .mdi-device-signal-cellular-connected-no-internet-4-bar, .mdi-device-battery-std, .mdi-device-battery-full .mdi-device-battery-unknown {
+ &:after {
+ content: "";
+ }
+}
+
+.mdi-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+.mdi-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+.mdi-ul > li {
+ position: relative;
+}
+.mdi-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+.mdi-li.mdi-lg {
+ left: -1.85714286em;
+}
+.mdi-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: .1em;
+}
+
+.mdi-spin {
+ -webkit-animation: mdi-spin 2s infinite linear;
+ animation: mdi-spin 2s infinite linear;
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+}
+.mdi-pulse {
+ -webkit-animation: mdi-spin 1s steps(8) infinite;
+ animation: mdi-spin 1s steps(8) infinite ;
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+}
+@-webkit-keyframes mdi-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes mdi-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+.mdi-rotate-90 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+.mdi-rotate-180 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+.mdi-rotate-270 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+.mdi-flip-horizontal {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+.mdi-flip-vertical {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+:root .mdi-rotate-90,
+:root .mdi-rotate-180,
+:root .mdi-rotate-270,
+:root .mdi-flip-horizontal,
+:root .mdi-flip-vertical {
+ filter: none;
+}
+.mdi-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+.mdi-stack-1x,
+.mdi-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+.mdi-stack-1x {
+ line-height: inherit;
+}
+.mdi-stack-2x {
+ font-size: 2em;
+}
+.mdi-inverse {
+ color: #ffffff;
+}
+
+
+/* Start Icons */
+
+
+.mdi-action-3d-rotation:before {
+ content: "\e600";
+}
+
+.mdi-action-accessibility:before {
+ content: "\e601";
+}
+
+.mdi-action-account-balance-wallet:before {
+ content: "\e602";
+}
+
+.mdi-action-account-balance:before {
+ content: "\e603";
+}
+
+.mdi-action-account-box:before {
+ content: "\e604";
+}
+
+.mdi-action-account-child:before {
+ content: "\e605";
+}
+
+.mdi-action-account-circle:before {
+ content: "\e606";
+}
+
+.mdi-action-add-shopping-cart:before {
+ content: "\e607";
+}
+
+.mdi-action-alarm-add:before {
+ content: "\e608";
+}
+
+.mdi-action-alarm-off:before {
+ content: "\e609";
+}
+
+.mdi-action-alarm-on:before {
+ content: "\e60a";
+}
+
+.mdi-action-alarm:before {
+ content: "\e60b";
+}
+
+.mdi-action-android:before {
+ content: "\e60c";
+}
+
+.mdi-action-announcement:before {
+ content: "\e60d";
+}
+
+.mdi-action-aspect-ratio:before {
+ content: "\e60e";
+}
+
+.mdi-action-assessment:before {
+ content: "\e60f";
+}
+
+.mdi-action-assignment-ind:before {
+ content: "\e610";
+}
+
+.mdi-action-assignment-late:before {
+ content: "\e611";
+}
+
+.mdi-action-assignment-return:before {
+ content: "\e612";
+}
+
+.mdi-action-assignment-returned:before {
+ content: "\e613";
+}
+
+.mdi-action-assignment-turned-in:before {
+ content: "\e614";
+}
+
+.mdi-action-assignment:before {
+ content: "\e615";
+}
+
+.mdi-action-autorenew:before {
+ content: "\e616";
+}
+
+.mdi-action-backup:before {
+ content: "\e617";
+}
+
+.mdi-action-book:before {
+ content: "\e618";
+}
+
+.mdi-action-bookmark-outline:before {
+ content: "\e619";
+}
+
+.mdi-action-bookmark:before {
+ content: "\e61a";
+}
+
+.mdi-action-bug-report:before {
+ content: "\e61b";
+}
+
+.mdi-action-cached:before {
+ content: "\e61c";
+}
+
+.mdi-action-check-circle:before {
+ content: "\e61d";
+}
+
+.mdi-action-class:before {
+ content: "\e61e";
+}
+
+.mdi-action-credit-card:before {
+ content: "\e61f";
+}
+
+.mdi-action-dashboard:before {
+ content: "\e620";
+}
+
+.mdi-action-delete:before {
+ content: "\e621";
+}
+
+.mdi-action-description:before {
+ content: "\e622";
+}
+
+.mdi-action-dns:before {
+ content: "\e623";
+}
+
+.mdi-action-done-all:before {
+ content: "\e624";
+}
+
+.mdi-action-done:before {
+ content: "\e625";
+}
+
+.mdi-action-event:before {
+ content: "\e626";
+}
+
+.mdi-action-exit-to-app:before {
+ content: "\e627";
+}
+
+.mdi-action-explore:before {
+ content: "\e628";
+}
+
+.mdi-action-extension:before {
+ content: "\e629";
+}
+
+.mdi-action-face-unlock:before {
+ content: "\e62a";
+}
+
+.mdi-action-favorite-outline:before {
+ content: "\e62b";
+}
+
+.mdi-action-favorite:before {
+ content: "\e62c";
+}
+
+.mdi-action-find-in-page:before {
+ content: "\e62d";
+}
+
+.mdi-action-find-replace:before {
+ content: "\e62e";
+}
+
+.mdi-action-flip-to-back:before {
+ content: "\e62f";
+}
+
+.mdi-action-flip-to-front:before {
+ content: "\e630";
+}
+
+.mdi-action-get-app:before {
+ content: "\e631";
+}
+
+.mdi-action-grade:before {
+ content: "\e632";
+}
+
+.mdi-action-group-work:before {
+ content: "\e633";
+}
+
+.mdi-action-help:before {
+ content: "\e634";
+}
+
+.mdi-action-highlight-remove:before {
+ content: "\e635";
+}
+
+.mdi-action-history:before {
+ content: "\e636";
+}
+
+.mdi-action-home:before {
+ content: "\e637";
+}
+
+.mdi-action-https:before {
+ content: "\e638";
+}
+
+.mdi-action-info-outline:before {
+ content: "\e639";
+}
+
+.mdi-action-info:before {
+ content: "\e63a";
+}
+
+.mdi-action-input:before {
+ content: "\e63b";
+}
+
+.mdi-action-invert-colors:before {
+ content: "\e63c";
+}
+
+.mdi-action-label-outline:before {
+ content: "\e63d";
+}
+
+.mdi-action-label:before {
+ content: "\e63e";
+}
+
+.mdi-action-language:before {
+ content: "\e63f";
+}
+
+.mdi-action-launch:before {
+ content: "\e640";
+}
+
+.mdi-action-list:before {
+ content: "\e641";
+}
+
+.mdi-action-lock-open:before {
+ content: "\e642";
+}
+
+.mdi-action-lock-outline:before {
+ content: "\e643";
+}
+
+.mdi-action-lock:before {
+ content: "\e644";
+}
+
+.mdi-action-loyalty:before {
+ content: "\e645";
+}
+
+.mdi-action-markunread-mailbox:before {
+ content: "\e646";
+}
+
+.mdi-action-note-add:before {
+ content: "\e647";
+}
+
+.mdi-action-open-in-browser:before {
+ content: "\e648";
+}
+
+.mdi-action-open-in-new:before {
+ content: "\e649";
+}
+
+.mdi-action-open-with:before {
+ content: "\e64a";
+}
+
+.mdi-action-pageview:before {
+ content: "\e64b";
+}
+
+.mdi-action-payment:before {
+ content: "\e64c";
+}
+
+.mdi-action-perm-camera-mic:before {
+ content: "\e64d";
+}
+
+.mdi-action-perm-contact-cal:before {
+ content: "\e64e";
+}
+
+.mdi-action-perm-data-setting:before {
+ content: "\e64f";
+}
+
+.mdi-action-perm-device-info:before {
+ content: "\e650";
+}
+
+.mdi-action-perm-identity:before {
+ content: "\e651";
+}
+
+.mdi-action-perm-media:before {
+ content: "\e652";
+}
+
+.mdi-action-perm-phone-msg:before {
+ content: "\e653";
+}
+
+.mdi-action-perm-scan-wifi:before {
+ content: "\e654";
+}
+
+.mdi-action-picture-in-picture:before {
+ content: "\e655";
+}
+
+.mdi-action-polymer:before {
+ content: "\e656";
+}
+
+.mdi-action-print:before {
+ content: "\e657";
+}
+
+.mdi-action-query-builder:before {
+ content: "\e658";
+}
+
+.mdi-action-question-answer:before {
+ content: "\e659";
+}
+
+.mdi-action-receipt:before {
+ content: "\e65a";
+}
+
+.mdi-action-redeem:before {
+ content: "\e65b";
+}
+
+.mdi-action-reorder:before {
+ content: "\e65c";
+}
+
+.mdi-action-report-problem:before {
+ content: "\e65d";
+}
+
+.mdi-action-restore:before {
+ content: "\e65e";
+}
+
+.mdi-action-room:before {
+ content: "\e65f";
+}
+
+.mdi-action-schedule:before {
+ content: "\e660";
+}
+
+.mdi-action-search:before {
+ content: "\e661";
+}
+
+.mdi-action-settings-applications:before {
+ content: "\e662";
+}
+
+.mdi-action-settings-backup-restore:before {
+ content: "\e663";
+}
+
+.mdi-action-settings-bluetooth:before {
+ content: "\e664";
+}
+
+.mdi-action-settings-cell:before {
+ content: "\e665";
+}
+
+.mdi-action-settings-display:before {
+ content: "\e666";
+}
+
+.mdi-action-settings-ethernet:before {
+ content: "\e667";
+}
+
+.mdi-action-settings-input-antenna:before {
+ content: "\e668";
+}
+
+.mdi-action-settings-input-component:before {
+ content: "\e669";
+}
+
+.mdi-action-settings-input-composite:before {
+ content: "\e66a";
+}
+
+.mdi-action-settings-input-hdmi:before {
+ content: "\e66b";
+}
+
+.mdi-action-settings-input-svideo:before {
+ content: "\e66c";
+}
+
+.mdi-action-settings-overscan:before {
+ content: "\e66d";
+}
+
+.mdi-action-settings-phone:before {
+ content: "\e66e";
+}
+
+.mdi-action-settings-power:before {
+ content: "\e66f";
+}
+
+.mdi-action-settings-remote:before {
+ content: "\e670";
+}
+
+.mdi-action-settings-voice:before {
+ content: "\e671";
+}
+
+.mdi-action-settings:before {
+ content: "\e672";
+}
+
+.mdi-action-shop-two:before {
+ content: "\e673";
+}
+
+.mdi-action-shop:before {
+ content: "\e674";
+}
+
+.mdi-action-shopping-basket:before {
+ content: "\e675";
+}
+
+.mdi-action-shopping-cart:before {
+ content: "\e676";
+}
+
+.mdi-action-speaker-notes:before {
+ content: "\e677";
+}
+
+.mdi-action-spellcheck:before {
+ content: "\e678";
+}
+
+.mdi-action-star-rate:before {
+ content: "\e679";
+}
+
+.mdi-action-stars:before {
+ content: "\e67a";
+}
+
+.mdi-action-store:before {
+ content: "\e67b";
+}
+
+.mdi-action-subject:before {
+ content: "\e67c";
+}
+
+.mdi-action-supervisor-account:before {
+ content: "\e67d";
+}
+
+.mdi-action-swap-horiz:before {
+ content: "\e67e";
+}
+
+.mdi-action-swap-vert-circle:before {
+ content: "\e67f";
+}
+
+.mdi-action-swap-vert:before {
+ content: "\e680";
+}
+
+.mdi-action-system-update-tv:before {
+ content: "\e681";
+}
+
+.mdi-action-tab-unselected:before {
+ content: "\e682";
+}
+
+.mdi-action-tab:before {
+ content: "\e683";
+}
+
+.mdi-action-theaters:before {
+ content: "\e684";
+}
+
+.mdi-action-thumb-down:before {
+ content: "\e685";
+}
+
+.mdi-action-thumb-up:before {
+ content: "\e686";
+}
+
+.mdi-action-thumbs-up-down:before {
+ content: "\e687";
+}
+
+.mdi-action-toc:before {
+ content: "\e688";
+}
+
+.mdi-action-today:before {
+ content: "\e689";
+}
+
+.mdi-action-track-changes:before {
+ content: "\e68a";
+}
+
+.mdi-action-translate:before {
+ content: "\e68b";
+}
+
+.mdi-action-trending-down:before {
+ content: "\e68c";
+}
+
+.mdi-action-trending-neutral:before {
+ content: "\e68d";
+}
+
+.mdi-action-trending-up:before {
+ content: "\e68e";
+}
+
+.mdi-action-turned-in-not:before {
+ content: "\e68f";
+}
+
+.mdi-action-turned-in:before {
+ content: "\e690";
+}
+
+.mdi-action-verified-user:before {
+ content: "\e691";
+}
+
+.mdi-action-view-agenda:before {
+ content: "\e692";
+}
+
+.mdi-action-view-array:before {
+ content: "\e693";
+}
+
+.mdi-action-view-carousel:before {
+ content: "\e694";
+}
+
+.mdi-action-view-column:before {
+ content: "\e695";
+}
+
+.mdi-action-view-day:before {
+ content: "\e696";
+}
+
+.mdi-action-view-headline:before {
+ content: "\e697";
+}
+
+.mdi-action-view-list:before {
+ content: "\e698";
+}
+
+.mdi-action-view-module:before {
+ content: "\e699";
+}
+
+.mdi-action-view-quilt:before {
+ content: "\e69a";
+}
+
+.mdi-action-view-stream:before {
+ content: "\e69b";
+}
+
+.mdi-action-view-week:before {
+ content: "\e69c";
+}
+
+.mdi-action-visibility-off:before {
+ content: "\e69d";
+}
+
+.mdi-action-visibility:before {
+ content: "\e69e";
+}
+
+.mdi-action-wallet-giftcard:before {
+ content: "\e69f";
+}
+
+.mdi-action-wallet-membership:before {
+ content: "\e6a0";
+}
+
+.mdi-action-wallet-travel:before {
+ content: "\e6a1";
+}
+
+.mdi-action-work:before {
+ content: "\e6a2";
+}
+
+.mdi-alert-error:before {
+ content: "\e6a3";
+}
+
+.mdi-alert-warning:before {
+ content: "\e6a4";
+}
+
+.mdi-av-album:before {
+ content: "\e6a5";
+}
+
+.mdi-av-closed-caption:before {
+ content: "\e6a6";
+}
+
+.mdi-av-equalizer:before {
+ content: "\e6a7";
+}
+
+.mdi-av-explicit:before {
+ content: "\e6a8";
+}
+
+.mdi-av-fast-forward:before {
+ content: "\e6a9";
+}
+
+.mdi-av-fast-rewind:before {
+ content: "\e6aa";
+}
+
+.mdi-av-games:before {
+ content: "\e6ab";
+}
+
+.mdi-av-hearing:before {
+ content: "\e6ac";
+}
+
+.mdi-av-high-quality:before {
+ content: "\e6ad";
+}
+
+.mdi-av-loop:before {
+ content: "\e6ae";
+}
+
+.mdi-av-mic-none:before {
+ content: "\e6af";
+}
+
+.mdi-av-mic-off:before {
+ content: "\e6b0";
+}
+
+.mdi-av-mic:before {
+ content: "\e6b1";
+}
+
+.mdi-av-movie:before {
+ content: "\e6b2";
+}
+
+.mdi-av-my-library-add:before {
+ content: "\e6b3";
+}
+
+.mdi-av-my-library-books:before {
+ content: "\e6b4";
+}
+
+.mdi-av-my-library-music:before {
+ content: "\e6b5";
+}
+
+.mdi-av-new-releases:before {
+ content: "\e6b6";
+}
+
+.mdi-av-not-interested:before {
+ content: "\e6b7";
+}
+
+.mdi-av-pause-circle-fill:before {
+ content: "\e6b8";
+}
+
+.mdi-av-pause-circle-outline:before {
+ content: "\e6b9";
+}
+
+.mdi-av-pause:before {
+ content: "\e6ba";
+}
+
+.mdi-av-play-arrow:before {
+ content: "\e6bb";
+}
+
+.mdi-av-play-circle-fill:before {
+ content: "\e6bc";
+}
+
+.mdi-av-play-circle-outline:before {
+ content: "\e6bd";
+}
+
+.mdi-av-play-shopping-bag:before {
+ content: "\e6be";
+}
+
+.mdi-av-playlist-add:before {
+ content: "\e6bf";
+}
+
+.mdi-av-queue-music:before {
+ content: "\e6c0";
+}
+
+.mdi-av-queue:before {
+ content: "\e6c1";
+}
+
+.mdi-av-radio:before {
+ content: "\e6c2";
+}
+
+.mdi-av-recent-actors:before {
+ content: "\e6c3";
+}
+
+.mdi-av-repeat-one:before {
+ content: "\e6c4";
+}
+
+.mdi-av-repeat:before {
+ content: "\e6c5";
+}
+
+.mdi-av-replay:before {
+ content: "\e6c6";
+}
+
+.mdi-av-shuffle:before {
+ content: "\e6c7";
+}
+
+.mdi-av-skip-next:before {
+ content: "\e6c8";
+}
+
+.mdi-av-skip-previous:before {
+ content: "\e6c9";
+}
+
+.mdi-av-snooze:before {
+ content: "\e6ca";
+}
+
+.mdi-av-stop:before {
+ content: "\e6cb";
+}
+
+.mdi-av-subtitles:before {
+ content: "\e6cc";
+}
+
+.mdi-av-surround-sound:before {
+ content: "\e6cd";
+}
+
+.mdi-av-timer:before {
+ content: "\e6ce";
+}
+
+.mdi-av-video-collection:before {
+ content: "\e6cf";
+}
+
+.mdi-av-videocam-off:before {
+ content: "\e6d0";
+}
+
+.mdi-av-videocam:before {
+ content: "\e6d1";
+}
+
+.mdi-av-volume-down:before {
+ content: "\e6d2";
+}
+
+.mdi-av-volume-mute:before {
+ content: "\e6d3";
+}
+
+.mdi-av-volume-off:before {
+ content: "\e6d4";
+}
+
+.mdi-av-volume-up:before {
+ content: "\e6d5";
+}
+
+.mdi-av-web:before {
+ content: "\e6d6";
+}
+
+.mdi-communication-business:before {
+ content: "\e6d7";
+}
+
+.mdi-communication-call-end:before {
+ content: "\e6d8";
+}
+
+.mdi-communication-call-made:before {
+ content: "\e6d9";
+}
+
+.mdi-communication-call-merge:before {
+ content: "\e6da";
+}
+
+.mdi-communication-call-missed:before {
+ content: "\e6db";
+}
+
+.mdi-communication-call-received:before {
+ content: "\e6dc";
+}
+
+.mdi-communication-call-split:before {
+ content: "\e6dd";
+}
+
+.mdi-communication-call:before {
+ content: "\e6de";
+}
+
+.mdi-communication-chat:before {
+ content: "\e6df";
+}
+
+.mdi-communication-clear-all:before {
+ content: "\e6e0";
+}
+
+.mdi-communication-comment:before {
+ content: "\e6e1";
+}
+
+.mdi-communication-contacts:before {
+ content: "\e6e2";
+}
+
+.mdi-communication-dialer-sip:before {
+ content: "\e6e3";
+}
+
+.mdi-communication-dialpad:before {
+ content: "\e6e4";
+}
+
+.mdi-communication-dnd-on:before {
+ content: "\e6e5";
+}
+
+.mdi-communication-email:before {
+ content: "\e6e6";
+}
+
+.mdi-communication-forum:before {
+ content: "\e6e7";
+}
+
+.mdi-communication-import-export:before {
+ content: "\e6e8";
+}
+
+.mdi-communication-invert-colors-off:before {
+ content: "\e6e9";
+}
+
+.mdi-communication-invert-colors-on:before {
+ content: "\e6ea";
+}
+
+.mdi-communication-live-help:before {
+ content: "\e6eb";
+}
+
+.mdi-communication-location-off:before {
+ content: "\e6ec";
+}
+
+.mdi-communication-location-on:before {
+ content: "\e6ed";
+}
+
+.mdi-communication-message:before {
+ content: "\e6ee";
+}
+
+.mdi-communication-messenger:before {
+ content: "\e6ef";
+}
+
+.mdi-communication-no-sim:before {
+ content: "\e6f0";
+}
+
+.mdi-communication-phone:before {
+ content: "\e6f1";
+}
+
+.mdi-communication-portable-wifi-off:before {
+ content: "\e6f2";
+}
+
+.mdi-communication-quick-contacts-dialer:before {
+ content: "\e6f3";
+}
+
+.mdi-communication-quick-contacts-mail:before {
+ content: "\e6f4";
+}
+
+.mdi-communication-ring-volume:before {
+ content: "\e6f5";
+}
+
+.mdi-communication-stay-current-landscape:before {
+ content: "\e6f6";
+}
+
+.mdi-communication-stay-current-portrait:before {
+ content: "\e6f7";
+}
+
+.mdi-communication-stay-primary-landscape:before {
+ content: "\e6f8";
+}
+
+.mdi-communication-stay-primary-portrait:before {
+ content: "\e6f9";
+}
+
+.mdi-communication-swap-calls:before {
+ content: "\e6fa";
+}
+
+.mdi-communication-textsms:before {
+ content: "\e6fb";
+}
+
+.mdi-communication-voicemail:before {
+ content: "\e6fc";
+}
+
+.mdi-communication-vpn-key:before {
+ content: "\e6fd";
+}
+
+.mdi-content-add-box:before {
+ content: "\e6fe";
+}
+
+.mdi-content-add-circle-outline:before {
+ content: "\e6ff";
+}
+
+.mdi-content-add-circle:before {
+ content: "\e700";
+}
+
+.mdi-content-add:before {
+ content: "\e701";
+}
+
+.mdi-content-archive:before {
+ content: "\e702";
+}
+
+.mdi-content-backspace:before {
+ content: "\e703";
+}
+
+.mdi-content-block:before {
+ content: "\e704";
+}
+
+.mdi-content-clear:before {
+ content: "\e705";
+}
+
+.mdi-content-content-copy:before {
+ content: "\e706";
+}
+
+.mdi-content-content-cut:before {
+ content: "\e707";
+}
+
+.mdi-content-content-paste:before {
+ content: "\e708";
+}
+
+.mdi-content-create:before {
+ content: "\e709";
+}
+
+.mdi-content-drafts:before {
+ content: "\e70a";
+}
+
+.mdi-content-filter-list:before {
+ content: "\e70b";
+}
+
+.mdi-content-flag:before {
+ content: "\e70c";
+}
+
+.mdi-content-forward:before {
+ content: "\e70d";
+}
+
+.mdi-content-gesture:before {
+ content: "\e70e";
+}
+
+.mdi-content-inbox:before {
+ content: "\e70f";
+}
+
+.mdi-content-link:before {
+ content: "\e710";
+}
+
+.mdi-content-mail:before {
+ content: "\e711";
+}
+
+.mdi-content-markunread:before {
+ content: "\e712";
+}
+
+.mdi-content-redo:before {
+ content: "\e713";
+}
+
+.mdi-content-remove-circle-outline:before {
+ content: "\e714";
+}
+
+.mdi-content-remove-circle:before {
+ content: "\e715";
+}
+
+.mdi-content-remove:before {
+ content: "\e716";
+}
+
+.mdi-content-reply-all:before {
+ content: "\e717";
+}
+
+.mdi-content-reply:before {
+ content: "\e718";
+}
+
+.mdi-content-report:before {
+ content: "\e719";
+}
+
+.mdi-content-save:before {
+ content: "\e71a";
+}
+
+.mdi-content-select-all:before {
+ content: "\e71b";
+}
+
+.mdi-content-send:before {
+ content: "\e71c";
+}
+
+.mdi-content-sort:before {
+ content: "\e71d";
+}
+
+.mdi-content-text-format:before {
+ content: "\e71e";
+}
+
+.mdi-content-undo:before {
+ content: "\e71f";
+}
+
+.mdi-editor-attach-file:before {
+ content: "\e776";
+}
+
+.mdi-editor-attach-money:before {
+ content: "\e777";
+}
+
+.mdi-editor-border-all:before {
+ content: "\e778";
+}
+
+.mdi-editor-border-bottom:before {
+ content: "\e779";
+}
+
+.mdi-editor-border-clear:before {
+ content: "\e77a";
+}
+
+.mdi-editor-border-color:before {
+ content: "\e77b";
+}
+
+.mdi-editor-border-horizontal:before {
+ content: "\e77c";
+}
+
+.mdi-editor-border-inner:before {
+ content: "\e77d";
+}
+
+.mdi-editor-border-left:before {
+ content: "\e77e";
+}
+
+.mdi-editor-border-outer:before {
+ content: "\e77f";
+}
+
+.mdi-editor-border-right:before {
+ content: "\e780";
+}
+
+.mdi-editor-border-style:before {
+ content: "\e781";
+}
+
+.mdi-editor-border-top:before {
+ content: "\e782";
+}
+
+.mdi-editor-border-vertical:before {
+ content: "\e783";
+}
+
+.mdi-editor-format-align-center:before {
+ content: "\e784";
+}
+
+.mdi-editor-format-align-justify:before {
+ content: "\e785";
+}
+
+.mdi-editor-format-align-left:before {
+ content: "\e786";
+}
+
+.mdi-editor-format-align-right:before {
+ content: "\e787";
+}
+
+.mdi-editor-format-bold:before {
+ content: "\e788";
+}
+
+.mdi-editor-format-clear:before {
+ content: "\e789";
+}
+
+.mdi-editor-format-color-fill:before {
+ content: "\e78a";
+}
+
+.mdi-editor-format-color-reset:before {
+ content: "\e78b";
+}
+
+.mdi-editor-format-color-text:before {
+ content: "\e78c";
+}
+
+.mdi-editor-format-indent-decrease:before {
+ content: "\e78d";
+}
+
+.mdi-editor-format-indent-increase:before {
+ content: "\e78e";
+}
+
+.mdi-editor-format-italic:before {
+ content: "\e78f";
+}
+
+.mdi-editor-format-line-spacing:before {
+ content: "\e790";
+}
+
+.mdi-editor-format-list-bulleted:before {
+ content: "\e791";
+}
+
+.mdi-editor-format-list-numbered:before {
+ content: "\e792";
+}
+
+.mdi-editor-format-paint:before {
+ content: "\e793";
+}
+
+.mdi-editor-format-quote:before {
+ content: "\e794";
+}
+
+.mdi-editor-format-size:before {
+ content: "\e795";
+}
+
+.mdi-editor-format-strikethrough:before {
+ content: "\e796";
+}
+
+.mdi-editor-format-textdirection-l-to-r:before {
+ content: "\e797";
+}
+
+.mdi-editor-format-textdirection-r-to-l:before {
+ content: "\e798";
+}
+
+.mdi-editor-format-underline:before {
+ content: "\e799";
+}
+
+.mdi-editor-functions:before {
+ content: "\e79a";
+}
+
+.mdi-editor-insert-chart:before {
+ content: "\e79b";
+}
+
+.mdi-editor-insert-comment:before {
+ content: "\e79c";
+}
+
+.mdi-editor-insert-drive-file:before {
+ content: "\e79d";
+}
+
+.mdi-editor-insert-emoticon:before {
+ content: "\e79e";
+}
+
+.mdi-editor-insert-invitation:before {
+ content: "\e79f";
+}
+
+.mdi-editor-insert-link:before {
+ content: "\e7a0";
+}
+
+.mdi-editor-insert-photo:before {
+ content: "\e7a1";
+}
+
+.mdi-editor-merge-type:before {
+ content: "\e7a2";
+}
+
+.mdi-editor-mode-comment:before {
+ content: "\e7a3";
+}
+
+.mdi-editor-mode-edit:before {
+ content: "\e7a4";
+}
+
+.mdi-editor-publish:before {
+ content: "\e7a5";
+}
+
+.mdi-editor-vertical-align-bottom:before {
+ content: "\e7a6";
+}
+
+.mdi-editor-vertical-align-center:before {
+ content: "\e7a7";
+}
+
+.mdi-editor-vertical-align-top:before {
+ content: "\e7a8";
+}
+
+.mdi-editor-wrap-text:before {
+ content: "\e7a9";
+}
+
+.mdi-file-attachment:before {
+ content: "\e7aa";
+}
+
+.mdi-file-cloud-circle:before {
+ content: "\e7ab";
+}
+
+.mdi-file-cloud-done:before {
+ content: "\e7ac";
+}
+
+.mdi-file-cloud-download:before {
+ content: "\e7ad";
+}
+
+.mdi-file-cloud-off:before {
+ content: "\e7ae";
+}
+
+.mdi-file-cloud-queue:before {
+ content: "\e7af";
+}
+
+.mdi-file-cloud-upload:before {
+ content: "\e7b0";
+}
+
+.mdi-file-cloud:before {
+ content: "\e7b1";
+}
+
+.mdi-file-file-download:before {
+ content: "\e7b2";
+}
+
+.mdi-file-file-upload:before {
+ content: "\e7b3";
+}
+
+.mdi-file-folder-open:before {
+ content: "\e7b4";
+}
+
+.mdi-file-folder-shared:before {
+ content: "\e7b5";
+}
+
+.mdi-file-folder:before {
+ content: "\e7b6";
+}
+
+.mdi-device-access-alarm:before {
+ content: "\e720";
+}
+
+.mdi-device-access-alarms:before {
+ content: "\e721";
+}
+
+.mdi-device-access-time:before {
+ content: "\e722";
+}
+
+.mdi-device-add-alarm:before {
+ content: "\e723";
+}
+
+.mdi-device-airplanemode-off:before {
+ content: "\e724";
+}
+
+.mdi-device-airplanemode-on:before {
+ content: "\e725";
+}
+
+.mdi-device-battery-20:before {
+ content: "\e726";
+}
+
+.mdi-device-battery-30:before {
+ content: "\e727";
+}
+
+.mdi-device-battery-50:before {
+ content: "\e728";
+}
+
+.mdi-device-battery-60:before {
+ content: "\e729";
+}
+
+.mdi-device-battery-80:before {
+ content: "\e72a";
+}
+
+.mdi-device-battery-90:before {
+ content: "\e72b";
+}
+
+.mdi-device-battery-alert:before {
+ content: "\e72c";
+}
+
+.mdi-device-battery-charging-20:before {
+ content: "\e72d";
+}
+
+.mdi-device-battery-charging-30:before {
+ content: "\e72e";
+}
+
+.mdi-device-battery-charging-50:before {
+ content: "\e72f";
+}
+
+.mdi-device-battery-charging-60:before {
+ content: "\e730";
+}
+
+.mdi-device-battery-charging-80:before {
+ content: "\e731";
+}
+
+.mdi-device-battery-charging-90:before {
+ content: "\e732";
+}
+
+.mdi-device-battery-charging-full:before {
+ content: "\e733";
+}
+
+.mdi-device-battery-full:before {
+ content: "\e734";
+}
+
+.mdi-device-battery-std:before {
+ content: "\e735";
+}
+
+.mdi-device-battery-unknown:before {
+ content: "\e736";
+}
+
+.mdi-device-bluetooth-connected:before {
+ content: "\e737";
+}
+
+.mdi-device-bluetooth-disabled:before {
+ content: "\e738";
+}
+
+.mdi-device-bluetooth-searching:before {
+ content: "\e739";
+}
+
+.mdi-device-bluetooth:before {
+ content: "\e73a";
+}
+
+.mdi-device-brightness-auto:before {
+ content: "\e73b";
+}
+
+.mdi-device-brightness-high:before {
+ content: "\e73c";
+}
+
+.mdi-device-brightness-low:before {
+ content: "\e73d";
+}
+
+.mdi-device-brightness-medium:before {
+ content: "\e73e";
+}
+
+.mdi-device-data-usage:before {
+ content: "\e73f";
+}
+
+.mdi-device-developer-mode:before {
+ content: "\e740";
+}
+
+.mdi-device-devices:before {
+ content: "\e741";
+}
+
+.mdi-device-dvr:before {
+ content: "\e742";
+}
+
+.mdi-device-gps-fixed:before {
+ content: "\e743";
+}
+
+.mdi-device-gps-not-fixed:before {
+ content: "\e744";
+}
+
+.mdi-device-gps-off:before {
+ content: "\e745";
+}
+
+.mdi-device-location-disabled:before {
+ content: "\e746";
+}
+
+.mdi-device-location-searching:before {
+ content: "\e747";
+}
+
+.mdi-device-multitrack-audio:before {
+ content: "\e748";
+}
+
+.mdi-device-network-cell:before {
+ content: "\e749";
+}
+
+.mdi-device-network-wifi:before {
+ content: "\e74a";
+}
+
+.mdi-device-nfc:before {
+ content: "\e74b";
+}
+
+.mdi-device-now-wallpaper:before {
+ content: "\e74c";
+}
+
+.mdi-device-now-widgets:before {
+ content: "\e74d";
+}
+
+.mdi-device-screen-lock-landscape:before {
+ content: "\e74e";
+}
+
+.mdi-device-screen-lock-portrait:before {
+ content: "\e74f";
+}
+
+.mdi-device-screen-lock-rotation:before {
+ content: "\e750";
+}
+
+.mdi-device-screen-rotation:before {
+ content: "\e751";
+}
+
+.mdi-device-sd-storage:before {
+ content: "\e752";
+}
+
+.mdi-device-settings-system-daydream:before {
+ content: "\e753";
+}
+
+.mdi-device-signal-cellular-0-bar:before {
+ content: "\e754";
+}
+
+.mdi-device-signal-cellular-1-bar:before {
+ content: "\e755";
+}
+
+.mdi-device-signal-cellular-2-bar:before {
+ content: "\e756";
+}
+
+.mdi-device-signal-cellular-3-bar:before {
+ content: "\e757";
+}
+
+.mdi-device-signal-cellular-4-bar:before {
+ content: "\e758";
+}
+
+.mdi-signal-wifi-statusbar-connected-no-internet-after:before {
+ content: "\e8f6";
+}
+
+.mdi-device-signal-cellular-connected-no-internet-0-bar:before {
+ content: "\e759";
+}
+
+.mdi-device-signal-cellular-connected-no-internet-1-bar:before {
+ content: "\e75a";
+}
+
+.mdi-device-signal-cellular-connected-no-internet-2-bar:before {
+ content: "\e75b";
+}
+
+.mdi-device-signal-cellular-connected-no-internet-3-bar:before {
+ content: "\e75c";
+}
+
+.mdi-device-signal-cellular-connected-no-internet-4-bar:before {
+ content: "\e75d";
+}
+
+.mdi-device-signal-cellular-no-sim:before {
+ content: "\e75e";
+}
+
+.mdi-device-signal-cellular-null:before {
+ content: "\e75f";
+}
+
+.mdi-device-signal-cellular-off:before {
+ content: "\e760";
+}
+
+.mdi-device-signal-wifi-0-bar:before {
+ content: "\e761";
+}
+
+.mdi-device-signal-wifi-1-bar:before {
+ content: "\e762";
+}
+
+.mdi-device-signal-wifi-2-bar:before {
+ content: "\e763";
+}
+
+.mdi-device-signal-wifi-3-bar:before {
+ content: "\e764";
+}
+
+.mdi-device-signal-wifi-4-bar:before {
+ content: "\e765";
+}
+
+.mdi-device-signal-wifi-off:before {
+ content: "\e766";
+}
+
+.mdi-device-signal-wifi-statusbar-1-bar:before {
+ content: "\e767";
+}
+
+.mdi-device-signal-wifi-statusbar-2-bar:before {
+ content: "\e768";
+}
+
+.mdi-device-signal-wifi-statusbar-3-bar:before {
+ content: "\e769";
+}
+
+.mdi-device-signal-wifi-statusbar-4-bar:before {
+ content: "\e76a";
+}
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet-:before {
+ content: "\e76b";
+}
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet:before {
+ content: "\e76f";
+}
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before {
+ content: "\e76c";
+}
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before {
+ content: "\e76d";
+}
+
+.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before {
+ content: "\e76e";
+}
+
+.mdi-signal-wifi-statusbar-not-connected-after:before {
+ content: "\e8f7";
+}
+
+.mdi-device-signal-wifi-statusbar-not-connected:before {
+ content: "\e770";
+}
+
+.mdi-device-signal-wifi-statusbar-null:before {
+ content: "\e771";
+}
+
+.mdi-device-storage:before {
+ content: "\e772";
+}
+
+.mdi-device-usb:before {
+ content: "\e773";
+}
+
+.mdi-device-wifi-lock:before {
+ content: "\e774";
+}
+
+.mdi-device-wifi-tethering:before {
+ content: "\e775";
+}
+
+.mdi-hardware-cast-connected:before {
+ content: "\e7b7";
+}
+
+.mdi-hardware-cast:before {
+ content: "\e7b8";
+}
+
+.mdi-hardware-computer:before {
+ content: "\e7b9";
+}
+
+.mdi-hardware-desktop-mac:before {
+ content: "\e7ba";
+}
+
+.mdi-hardware-desktop-windows:before {
+ content: "\e7bb";
+}
+
+.mdi-hardware-dock:before {
+ content: "\e7bc";
+}
+
+.mdi-hardware-gamepad:before {
+ content: "\e7bd";
+}
+
+.mdi-hardware-headset-mic:before {
+ content: "\e7be";
+}
+
+.mdi-hardware-headset:before {
+ content: "\e7bf";
+}
+
+.mdi-hardware-keyboard-alt:before {
+ content: "\e7c0";
+}
+
+.mdi-hardware-keyboard-arrow-down:before {
+ content: "\e7c1";
+}
+
+.mdi-hardware-keyboard-arrow-left:before {
+ content: "\e7c2";
+}
+
+.mdi-hardware-keyboard-arrow-right:before {
+ content: "\e7c3";
+}
+
+.mdi-hardware-keyboard-arrow-up:before {
+ content: "\e7c4";
+}
+
+.mdi-hardware-keyboard-backspace:before {
+ content: "\e7c5";
+}
+
+.mdi-hardware-keyboard-capslock:before {
+ content: "\e7c6";
+}
+
+.mdi-hardware-keyboard-control:before {
+ content: "\e7c7";
+}
+
+.mdi-hardware-keyboard-hide:before {
+ content: "\e7c8";
+}
+
+.mdi-hardware-keyboard-return:before {
+ content: "\e7c9";
+}
+
+.mdi-hardware-keyboard-tab:before {
+ content: "\e7ca";
+}
+
+.mdi-hardware-keyboard-voice:before {
+ content: "\e7cb";
+}
+
+.mdi-hardware-keyboard:before {
+ content: "\e7cc";
+}
+
+.mdi-hardware-laptop-chromebook:before {
+ content: "\e7cd";
+}
+
+.mdi-hardware-laptop-mac:before {
+ content: "\e7ce";
+}
+
+.mdi-hardware-laptop-windows:before {
+ content: "\e7cf";
+}
+
+.mdi-hardware-laptop:before {
+ content: "\e7d0";
+}
+
+.mdi-hardware-memory:before {
+ content: "\e7d1";
+}
+
+.mdi-hardware-mouse:before {
+ content: "\e7d2";
+}
+
+.mdi-hardware-phone-android:before {
+ content: "\e7d3";
+}
+
+.mdi-hardware-phone-iphone:before {
+ content: "\e7d4";
+}
+
+.mdi-hardware-phonelink-off:before {
+ content: "\e7d5";
+}
+
+.mdi-hardware-phonelink:before {
+ content: "\e7d6";
+}
+
+.mdi-hardware-security:before {
+ content: "\e7d7";
+}
+
+.mdi-hardware-sim-card:before {
+ content: "\e7d8";
+}
+
+.mdi-hardware-smartphone:before {
+ content: "\e7d9";
+}
+
+.mdi-hardware-speaker:before {
+ content: "\e7da";
+}
+
+.mdi-hardware-tablet-android:before {
+ content: "\e7db";
+}
+
+.mdi-hardware-tablet-mac:before {
+ content: "\e7dc";
+}
+
+.mdi-hardware-tablet:before {
+ content: "\e7dd";
+}
+
+.mdi-hardware-tv:before {
+ content: "\e7de";
+}
+
+.mdi-hardware-watch:before {
+ content: "\e7df";
+}
+
+.mdi-image-add-to-photos:before {
+ content: "\e7e0";
+}
+
+.mdi-image-adjust:before {
+ content: "\e7e1";
+}
+
+.mdi-image-assistant-photo:before {
+ content: "\e7e2";
+}
+
+.mdi-image-audiotrack:before {
+ content: "\e7e3";
+}
+
+.mdi-image-blur-circular:before {
+ content: "\e7e4";
+}
+
+.mdi-image-blur-linear:before {
+ content: "\e7e5";
+}
+
+.mdi-image-blur-off:before {
+ content: "\e7e6";
+}
+
+.mdi-image-blur-on:before {
+ content: "\e7e7";
+}
+
+.mdi-image-brightness-1:before {
+ content: "\e7e8";
+}
+
+.mdi-image-brightness-2:before {
+ content: "\e7e9";
+}
+
+.mdi-image-brightness-3:before {
+ content: "\e7ea";
+}
+
+.mdi-image-brightness-4:before {
+ content: "\e7eb";
+}
+
+.mdi-image-brightness-5:before {
+ content: "\e7ec";
+}
+
+.mdi-image-brightness-6:before {
+ content: "\e7ed";
+}
+
+.mdi-image-brightness-7:before {
+ content: "\e7ee";
+}
+
+.mdi-image-brush:before {
+ content: "\e7ef";
+}
+
+.mdi-image-camera-alt:before {
+ content: "\e7f0";
+}
+
+.mdi-image-camera-front:before {
+ content: "\e7f1";
+}
+
+.mdi-image-camera-rear:before {
+ content: "\e7f2";
+}
+
+.mdi-image-camera-roll:before {
+ content: "\e7f3";
+}
+
+.mdi-image-camera:before {
+ content: "\e7f4";
+}
+
+.mdi-image-center-focus-strong:before {
+ content: "\e7f5";
+}
+
+.mdi-image-center-focus-weak:before {
+ content: "\e7f6";
+}
+
+.mdi-image-collections:before {
+ content: "\e7f7";
+}
+
+.mdi-image-color-lens:before {
+ content: "\e7f8";
+}
+
+.mdi-image-colorize:before {
+ content: "\e7f9";
+}
+
+.mdi-image-compare:before {
+ content: "\e7fa";
+}
+
+.mdi-image-control-point-duplicate:before {
+ content: "\e7fb";
+}
+
+.mdi-image-control-point:before {
+ content: "\e7fc";
+}
+
+.mdi-image-crop-3-2:before {
+ content: "\e7fd";
+}
+
+.mdi-image-crop-5-4:before {
+ content: "\e7fe";
+}
+
+.mdi-image-crop-7-5:before {
+ content: "\e7ff";
+}
+
+.mdi-image-crop-16-9:before {
+ content: "\e800";
+}
+
+.mdi-image-crop-din:before {
+ content: "\e801";
+}
+
+.mdi-image-crop-free:before {
+ content: "\e802";
+}
+
+.mdi-image-crop-landscape:before {
+ content: "\e803";
+}
+
+.mdi-image-crop-original:before {
+ content: "\e804";
+}
+
+.mdi-image-crop-portrait:before {
+ content: "\e805";
+}
+
+.mdi-image-crop-square:before {
+ content: "\e806";
+}
+
+.mdi-image-crop:before {
+ content: "\e807";
+}
+
+.mdi-image-dehaze:before {
+ content: "\e808";
+}
+
+.mdi-image-details:before {
+ content: "\e809";
+}
+
+.mdi-image-edit:before {
+ content: "\e80a";
+}
+
+.mdi-image-exposure-minus-1:before {
+ content: "\e80b";
+}
+
+.mdi-image-exposure-minus-2:before {
+ content: "\e80c";
+}
+
+.mdi-image-exposure-plus-1:before {
+ content: "\e80d";
+}
+
+.mdi-image-exposure-plus-2:before {
+ content: "\e80e";
+}
+
+.mdi-image-exposure-zero:before {
+ content: "\e80f";
+}
+
+.mdi-image-exposure:before {
+ content: "\e810";
+}
+
+.mdi-image-filter-1:before {
+ content: "\e811";
+}
+
+.mdi-image-filter-2:before {
+ content: "\e812";
+}
+
+.mdi-image-filter-3:before {
+ content: "\e813";
+}
+
+.mdi-image-filter-4:before {
+ content: "\e814";
+}
+
+.mdi-image-filter-5:before {
+ content: "\e815";
+}
+
+.mdi-image-filter-6:before {
+ content: "\e816";
+}
+
+.mdi-image-filter-7:before {
+ content: "\e817";
+}
+
+.mdi-image-filter-8:before {
+ content: "\e818";
+}
+
+.mdi-image-filter-9-plus:before {
+ content: "\e819";
+}
+
+.mdi-image-filter-9:before {
+ content: "\e81a";
+}
+
+.mdi-image-filter-b-and-w:before {
+ content: "\e81b";
+}
+
+.mdi-image-filter-center-focus:before {
+ content: "\e81c";
+}
+
+.mdi-image-filter-drama:before {
+ content: "\e81d";
+}
+
+.mdi-image-filter-frames:before {
+ content: "\e81e";
+}
+
+.mdi-image-filter-hdr:before {
+ content: "\e81f";
+}
+
+.mdi-image-filter-none:before {
+ content: "\e820";
+}
+
+.mdi-image-filter-tilt-shift:before {
+ content: "\e821";
+}
+
+.mdi-image-filter-vintage:before {
+ content: "\e822";
+}
+
+.mdi-image-filter:before {
+ content: "\e823";
+}
+
+.mdi-image-flare:before {
+ content: "\e824";
+}
+
+.mdi-image-flash-auto:before {
+ content: "\e825";
+}
+
+.mdi-image-flash-off:before {
+ content: "\e826";
+}
+
+.mdi-image-flash-on:before {
+ content: "\e827";
+}
+
+.mdi-image-flip:before {
+ content: "\e828";
+}
+
+.mdi-image-gradient:before {
+ content: "\e829";
+}
+
+.mdi-image-grain:before {
+ content: "\e82a";
+}
+
+.mdi-image-grid-off:before {
+ content: "\e82b";
+}
+
+.mdi-image-grid-on:before {
+ content: "\e82c";
+}
+
+.mdi-image-hdr-off:before {
+ content: "\e82d";
+}
+
+.mdi-image-hdr-on:before {
+ content: "\e82e";
+}
+
+.mdi-image-hdr-strong:before {
+ content: "\e82f";
+}
+
+.mdi-image-hdr-weak:before {
+ content: "\e830";
+}
+
+.mdi-image-healing:before {
+ content: "\e831";
+}
+
+.mdi-image-image-aspect-ratio:before {
+ content: "\e832";
+}
+
+.mdi-image-image:before {
+ content: "\e833";
+}
+
+.mdi-image-iso:before {
+ content: "\e834";
+}
+
+.mdi-image-landscape:before {
+ content: "\e835";
+}
+
+.mdi-image-leak-add:before {
+ content: "\e836";
+}
+
+.mdi-image-leak-remove:before {
+ content: "\e837";
+}
+
+.mdi-image-lens:before {
+ content: "\e838";
+}
+
+.mdi-image-looks-3:before {
+ content: "\e839";
+}
+
+.mdi-image-looks-4:before {
+ content: "\e83a";
+}
+
+.mdi-image-looks-5:before {
+ content: "\e83b";
+}
+
+.mdi-image-looks-6:before {
+ content: "\e83c";
+}
+
+.mdi-image-looks-one:before {
+ content: "\e83d";
+}
+
+.mdi-image-looks-two:before {
+ content: "\e83e";
+}
+
+.mdi-image-looks:before {
+ content: "\e83f";
+}
+
+.mdi-image-loupe:before {
+ content: "\e840";
+}
+
+.mdi-image-movie-creation:before {
+ content: "\e841";
+}
+
+.mdi-image-nature-people:before {
+ content: "\e842";
+}
+
+.mdi-image-nature:before {
+ content: "\e843";
+}
+
+.mdi-image-navigate-before:before {
+ content: "\e844";
+}
+
+.mdi-image-navigate-next:before {
+ content: "\e845";
+}
+
+.mdi-image-palette:before {
+ content: "\e846";
+}
+
+.mdi-image-panorama-fisheye:before {
+ content: "\e847";
+}
+
+.mdi-image-panorama-horizontal:before {
+ content: "\e848";
+}
+
+.mdi-image-panorama-vertical:before {
+ content: "\e849";
+}
+
+.mdi-image-panorama-wide-angle:before {
+ content: "\e84a";
+}
+
+.mdi-image-panorama:before {
+ content: "\e84b";
+}
+
+.mdi-image-photo-album:before {
+ content: "\e84c";
+}
+
+.mdi-image-photo-camera:before {
+ content: "\e84d";
+}
+
+.mdi-image-photo-library:before {
+ content: "\e84e";
+}
+
+.mdi-image-photo:before {
+ content: "\e84f";
+}
+
+.mdi-image-portrait:before {
+ content: "\e850";
+}
+
+.mdi-image-remove-red-eye:before {
+ content: "\e851";
+}
+
+.mdi-image-rotate-left:before {
+ content: "\e852";
+}
+
+.mdi-image-rotate-right:before {
+ content: "\e853";
+}
+
+.mdi-image-slideshow:before {
+ content: "\e854";
+}
+
+.mdi-image-straighten:before {
+ content: "\e855";
+}
+
+.mdi-image-style:before {
+ content: "\e856";
+}
+
+.mdi-image-switch-camera:before {
+ content: "\e857";
+}
+
+.mdi-image-switch-video:before {
+ content: "\e858";
+}
+
+.mdi-image-tag-faces:before {
+ content: "\e859";
+}
+
+.mdi-image-texture:before {
+ content: "\e85a";
+}
+
+.mdi-image-timelapse:before {
+ content: "\e85b";
+}
+
+.mdi-image-timer-3:before {
+ content: "\e85c";
+}
+
+.mdi-image-timer-10:before {
+ content: "\e85d";
+}
+
+.mdi-image-timer-auto:before {
+ content: "\e85e";
+}
+
+.mdi-image-timer-off:before {
+ content: "\e85f";
+}
+
+.mdi-image-timer:before {
+ content: "\e860";
+}
+
+.mdi-image-tonality:before {
+ content: "\e861";
+}
+
+.mdi-image-transform:before {
+ content: "\e862";
+}
+
+.mdi-image-tune:before {
+ content: "\e863";
+}
+
+.mdi-image-wb-auto:before {
+ content: "\e864";
+}
+
+.mdi-image-wb-cloudy:before {
+ content: "\e865";
+}
+
+.mdi-image-wb-incandescent:before {
+ content: "\e866";
+}
+
+.mdi-image-wb-irradescent:before {
+ content: "\e867";
+}
+
+.mdi-image-wb-sunny:before {
+ content: "\e868";
+}
+
+.mdi-maps-beenhere:before {
+ content: "\e869";
+}
+
+.mdi-maps-directions-bike:before {
+ content: "\e86a";
+}
+
+.mdi-maps-directions-bus:before {
+ content: "\e86b";
+}
+
+.mdi-maps-directions-car:before {
+ content: "\e86c";
+}
+
+.mdi-maps-directions-ferry:before {
+ content: "\e86d";
+}
+
+.mdi-maps-directions-subway:before {
+ content: "\e86e";
+}
+
+.mdi-maps-directions-train:before {
+ content: "\e86f";
+}
+
+.mdi-maps-directions-transit:before {
+ content: "\e870";
+}
+
+.mdi-maps-directions-walk:before {
+ content: "\e871";
+}
+
+.mdi-maps-directions:before {
+ content: "\e872";
+}
+
+.mdi-maps-flight:before {
+ content: "\e873";
+}
+
+.mdi-maps-hotel:before {
+ content: "\e874";
+}
+
+.mdi-maps-layers-clear:before {
+ content: "\e875";
+}
+
+.mdi-maps-layers:before {
+ content: "\e876";
+}
+
+.mdi-maps-local-airport:before {
+ content: "\e877";
+}
+
+.mdi-maps-local-atm:before {
+ content: "\e878";
+}
+
+.mdi-maps-local-attraction:before {
+ content: "\e879";
+}
+
+.mdi-maps-local-bar:before {
+ content: "\e87a";
+}
+
+.mdi-maps-local-cafe:before {
+ content: "\e87b";
+}
+
+.mdi-maps-local-car-wash:before {
+ content: "\e87c";
+}
+
+.mdi-maps-local-convenience-store:before {
+ content: "\e87d";
+}
+
+.mdi-maps-local-drink:before {
+ content: "\e87e";
+}
+
+.mdi-maps-local-florist:before {
+ content: "\e87f";
+}
+
+.mdi-maps-local-gas-station:before {
+ content: "\e880";
+}
+
+.mdi-maps-local-grocery-store:before {
+ content: "\e881";
+}
+
+.mdi-maps-local-hospital:before {
+ content: "\e882";
+}
+
+.mdi-maps-local-hotel:before {
+ content: "\e883";
+}
+
+.mdi-maps-local-laundry-service:before {
+ content: "\e884";
+}
+
+.mdi-maps-local-library:before {
+ content: "\e885";
+}
+
+.mdi-maps-local-mall:before {
+ content: "\e886";
+}
+
+.mdi-maps-local-movies:before {
+ content: "\e887";
+}
+
+.mdi-maps-local-offer:before {
+ content: "\e888";
+}
+
+.mdi-maps-local-parking:before {
+ content: "\e889";
+}
+
+.mdi-maps-local-pharmacy:before {
+ content: "\e88a";
+}
+
+.mdi-maps-local-phone:before {
+ content: "\e88b";
+}
+
+.mdi-maps-local-pizza:before {
+ content: "\e88c";
+}
+
+.mdi-maps-local-play:before {
+ content: "\e88d";
+}
+
+.mdi-maps-local-post-office:before {
+ content: "\e88e";
+}
+
+.mdi-maps-local-print-shop:before {
+ content: "\e88f";
+}
+
+.mdi-maps-local-restaurant:before {
+ content: "\e890";
+}
+
+.mdi-maps-local-see:before {
+ content: "\e891";
+}
+
+.mdi-maps-local-shipping:before {
+ content: "\e892";
+}
+
+.mdi-maps-local-taxi:before {
+ content: "\e893";
+}
+
+.mdi-maps-location-history:before {
+ content: "\e894";
+}
+
+.mdi-maps-map:before {
+ content: "\e895";
+}
+
+.mdi-maps-my-location:before {
+ content: "\e896";
+}
+
+.mdi-maps-navigation:before {
+ content: "\e897";
+}
+
+.mdi-maps-pin-drop:before {
+ content: "\e898";
+}
+
+.mdi-maps-place:before {
+ content: "\e899";
+}
+
+.mdi-maps-rate-review:before {
+ content: "\e89a";
+}
+
+.mdi-maps-restaurant-menu:before {
+ content: "\e89b";
+}
+
+.mdi-maps-satellite:before {
+ content: "\e89c";
+}
+
+.mdi-maps-store-mall-directory:before {
+ content: "\e89d";
+}
+
+.mdi-maps-terrain:before {
+ content: "\e89e";
+}
+
+.mdi-maps-traffic:before {
+ content: "\e89f";
+}
+
+.mdi-navigation-apps:before {
+ content: "\e8a0";
+}
+
+.mdi-navigation-arrow-back:before {
+ content: "\e8a1";
+}
+
+.mdi-navigation-arrow-drop-down-circle:before {
+ content: "\e8a2";
+}
+
+.mdi-navigation-arrow-drop-down:before {
+ content: "\e8a3";
+}
+
+.mdi-navigation-arrow-drop-up:before {
+ content: "\e8a4";
+}
+
+.mdi-navigation-arrow-forward:before {
+ content: "\e8a5";
+}
+
+.mdi-navigation-cancel:before {
+ content: "\e8a6";
+}
+
+.mdi-navigation-check:before {
+ content: "\e8a7";
+}
+
+.mdi-navigation-chevron-left:before {
+ content: "\e8a8";
+}
+
+.mdi-navigation-chevron-right:before {
+ content: "\e8a9";
+}
+
+.mdi-navigation-close:before {
+ content: "\e8aa";
+}
+
+.mdi-navigation-expand-less:before {
+ content: "\e8ab";
+}
+
+.mdi-navigation-expand-more:before {
+ content: "\e8ac";
+}
+
+.mdi-navigation-fullscreen-exit:before {
+ content: "\e8ad";
+}
+
+.mdi-navigation-fullscreen:before {
+ content: "\e8ae";
+}
+
+.mdi-navigation-menu:before {
+ content: "\e8af";
+}
+
+.mdi-navigation-more-horiz:before {
+ content: "\e8b0";
+}
+
+.mdi-navigation-more-vert:before {
+ content: "\e8b1";
+}
+
+.mdi-navigation-refresh:before {
+ content: "\e8b2";
+}
+
+.mdi-navigation-unfold-less:before {
+ content: "\e8b3";
+}
+
+.mdi-navigation-unfold-more:before {
+ content: "\e8b4";
+}
+
+.mdi-notification-adb:before {
+ content: "\e8b5";
+}
+
+.mdi-notification-bluetooth-audio:before {
+ content: "\e8b6";
+}
+
+.mdi-notification-disc-full:before {
+ content: "\e8b7";
+}
+
+.mdi-notification-dnd-forwardslash:before {
+ content: "\e8b8";
+}
+
+.mdi-notification-do-not-disturb:before {
+ content: "\e8b9";
+}
+
+.mdi-notification-drive-eta:before {
+ content: "\e8ba";
+}
+
+.mdi-notification-event-available:before {
+ content: "\e8bb";
+}
+
+.mdi-notification-event-busy:before {
+ content: "\e8bc";
+}
+
+.mdi-notification-event-note:before {
+ content: "\e8bd";
+}
+
+.mdi-notification-folder-special:before {
+ content: "\e8be";
+}
+
+.mdi-notification-mms:before {
+ content: "\e8bf";
+}
+
+.mdi-notification-more:before {
+ content: "\e8c0";
+}
+
+.mdi-notification-network-locked:before {
+ content: "\e8c1";
+}
+
+.mdi-notification-phone-bluetooth-speaker:before {
+ content: "\e8c2";
+}
+
+.mdi-notification-phone-forwarded:before {
+ content: "\e8c3";
+}
+
+.mdi-notification-phone-in-talk:before {
+ content: "\e8c4";
+}
+
+.mdi-notification-phone-locked:before {
+ content: "\e8c5";
+}
+
+.mdi-notification-phone-missed:before {
+ content: "\e8c6";
+}
+
+.mdi-notification-phone-paused:before {
+ content: "\e8c7";
+}
+
+.mdi-notification-play-download:before {
+ content: "\e8c8";
+}
+
+.mdi-notification-play-install:before {
+ content: "\e8c9";
+}
+
+.mdi-notification-sd-card:before {
+ content: "\e8ca";
+}
+
+.mdi-notification-sim-card-alert:before {
+ content: "\e8cb";
+}
+
+.mdi-notification-sms-failed:before {
+ content: "\e8cc";
+}
+
+.mdi-notification-sms:before {
+ content: "\e8cd";
+}
+
+.mdi-notification-sync-disabled:before {
+ content: "\e8ce";
+}
+
+.mdi-notification-sync-problem:before {
+ content: "\e8cf";
+}
+
+.mdi-notification-sync:before {
+ content: "\e8d0";
+}
+
+.mdi-notification-system-update:before {
+ content: "\e8d1";
+}
+
+.mdi-notification-tap-and-play:before {
+ content: "\e8d2";
+}
+
+.mdi-notification-time-to-leave:before {
+ content: "\e8d3";
+}
+
+.mdi-notification-vibration:before {
+ content: "\e8d4";
+}
+
+.mdi-notification-voice-chat:before {
+ content: "\e8d5";
+}
+
+.mdi-notification-vpn-lock:before {
+ content: "\e8d6";
+}
+
+.mdi-social-cake:before {
+ content: "\e8d7";
+}
+
+.mdi-social-domain:before {
+ content: "\e8d8";
+}
+
+.mdi-social-group-add:before {
+ content: "\e8d9";
+}
+
+.mdi-social-group:before {
+ content: "\e8da";
+}
+
+.mdi-social-location-city:before {
+ content: "\e8db";
+}
+
+.mdi-social-mood:before {
+ content: "\e8dc";
+}
+
+.mdi-social-notifications-none:before {
+ content: "\e8dd";
+}
+
+.mdi-social-notifications-off:before {
+ content: "\e8de";
+}
+
+.mdi-social-notifications-on:before {
+ content: "\e8df";
+}
+
+.mdi-social-notifications-paused:before {
+ content: "\e8e0";
+}
+
+.mdi-social-notifications:before {
+ content: "\e8e1";
+}
+
+.mdi-social-pages:before {
+ content: "\e8e2";
+}
+
+.mdi-social-party-mode:before {
+ content: "\e8e3";
+}
+
+.mdi-social-people-outline:before {
+ content: "\e8e4";
+}
+
+.mdi-social-people:before {
+ content: "\e8e5";
+}
+
+.mdi-social-person-add:before {
+ content: "\e8e6";
+}
+
+.mdi-social-person-outline:before {
+ content: "\e8e7";
+}
+
+.mdi-social-person:before {
+ content: "\e8e8";
+}
+
+.mdi-social-plus-one:before {
+ content: "\e8e9";
+}
+
+.mdi-social-poll:before {
+ content: "\e8ea";
+}
+
+.mdi-social-public:before {
+ content: "\e8eb";
+}
+
+.mdi-social-school:before {
+ content: "\e8ec";
+}
+
+.mdi-social-share:before {
+ content: "\e8ed";
+}
+
+.mdi-social-whatshot:before {
+ content: "\e8ee";
+}
+
+.mdi-toggle-check-box-outline-blank:before {
+ content: "\e8ef";
+}
+
+.mdi-toggle-check-box:before {
+ content: "\e8f0";
+}
+
+.mdi-toggle-radio-button-off:before {
+ content: "\e8f1";
+}
+
+.mdi-toggle-radio-button-on:before {
+ content: "\e8f2";
+}
+
+.mdi-toggle-star-half:before {
+ content: "\e8f3";
+}
+
+.mdi-toggle-star-outline:before {
+ content: "\e8f4";
+}
+
+.mdi-toggle-star:before {
+ content: "\e8f5";
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/_materialbox.scss b/system/admin/static/editor/sass/components/_materialbox.scss
new file mode 100644
index 0000000..9c20176
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_materialbox.scss
@@ -0,0 +1,41 @@
+.materialboxed {
+ cursor: zoom-in;
+ position: relative;
+ @include transition(opacity .4s);
+
+ &:hover {
+ &:not(.active) {
+ opacity: .8;
+ }
+ will-change: left, top, width, height;
+ }
+}
+
+.materialboxed.active {
+ cursor: zoom-out;
+}
+
+#materialbox-overlay {
+ position:fixed;
+ top:0;
+ left:0;
+ right: 0;
+ bottom: 0;
+ background-color: #292929;
+ z-index: 999;
+
+ will-change: opacity;
+}
+.materialbox-caption {
+ position: fixed;
+ display: none;
+ color: #fff;
+ line-height: 50px;
+ bottom: 0;
+ width: 100%;
+ text-align: center;
+ padding: 0% 15%;
+ height: 50px;
+ z-index: 1000;
+ -webkit-font-smoothing: antialiased;
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/_mixins.scss b/system/admin/static/editor/sass/components/_mixins.scss
new file mode 100644
index 0000000..4c3d373
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_mixins.scss
@@ -0,0 +1,5 @@
+@mixin box-shadow-2($args1, $args2) {
+ -webkit-box-shadow: $args1, $args2;
+ -moz-box-shadow: $args1, $args2;
+ box-shadow: $args1, $args2;
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/_modal.scss b/system/admin/static/editor/sass/components/_modal.scss
new file mode 100644
index 0000000..0a6dcfb
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_modal.scss
@@ -0,0 +1,90 @@
+.modal {
+ @extend .z-depth-4;
+
+ display: none;
+ position: fixed;
+ left: 0;
+ right: 0;
+ background-color: #fafafa;
+ padding: 0;
+ max-height: 70%;
+ width: 55%;
+ margin: auto;
+ overflow-y: auto;
+
+ border-radius: 2px;
+ will-change: top, opacity;
+
+ @media #{$medium-and-down} {
+ width: 80%;
+ }
+
+ h1,h2,h3,h4 {
+ margin-top: 0;
+ }
+
+ .modal-content {
+ padding: 24px;
+ }
+ .modal-close {
+ cursor: pointer;
+ }
+
+ .modal-footer {
+ border-radius: 0 0 2px 2px;
+ background-color: #fafafa;
+ padding: 4px 6px;
+ height: 56px;
+ width: 100%;
+
+ .btn, .btn-flat {
+ float: right;
+ margin: 6px 0;
+ }
+ }
+}
+.lean-overlay {
+ position: fixed;
+ z-index:999;
+ top: -100px;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ height: 125%;
+ width: 100%;
+ background: #000;
+ display: none;
+
+ will-change: opacity;
+}
+
+// Modal with fixed action footer
+.modal.modal-fixed-footer {
+ padding: 0;
+ height: 70%;
+
+ .modal-content {
+ position: absolute;
+ height: calc(100% - 56px);
+ max-height: 100%;
+ width: 100%;
+ overflow-y: auto;
+ }
+
+ .modal-footer {
+ border-top: 1px solid rgba(0,0,0,.1);
+ position: absolute;
+ bottom: 0;
+ }
+}
+
+// Modal Bottom Sheet Style
+.modal.bottom-sheet {
+ top: auto;
+ bottom: -100%;
+ margin: 0;
+ width: 100%;
+ max-height: 45%;
+ border-radius: 0;
+ will-change: bottom, opacity;
+}
diff --git a/system/admin/static/editor/sass/components/_navbar.scss b/system/admin/static/editor/sass/components/_navbar.scss
new file mode 100644
index 0000000..65cd277
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_navbar.scss
@@ -0,0 +1,144 @@
+nav {
+ color: $navbar-font-color;
+ @extend .z-depth-1;
+ background-color: $primary-color;
+ width: 100%;
+ height: $navbar-height-mobile;
+ line-height: $navbar-height-mobile;
+
+ a { color: $navbar-font-color; }
+
+ .nav-wrapper {
+ position: relative;
+ height: 100%;
+
+ i {
+ display: block;
+ font-size: 2rem;
+ }
+ }
+
+ @media #{$large-and-up} {
+ a.button-collapse { display: none; }
+ }
+
+
+ // Collapse button
+ .button-collapse {
+ float: left;
+ position: relative;
+ z-index: 1;
+ height: $navbar-height-mobile;
+
+ i {
+ font-size: 2.7rem;
+ height: $navbar-height-mobile;
+ line-height: $navbar-height-mobile;
+ }
+ }
+
+
+ // Logo
+ .brand-logo {
+ position: absolute;
+ color: $navbar-font-color;
+ display: inline-block;
+ font-size: $navbar-brand-font-size;
+ padding: 0;
+ white-space: nowrap;
+
+ &.center {
+ left: 50%;
+ @include transform(translateX(-50%));
+ }
+
+ @media #{$medium-and-down} {
+ left: 50%;
+ @include transform(translateX(-50%));
+ }
+
+ &.right {
+ right: 0.5rem;
+ padding: 0;
+ }
+ }
+
+
+ // Navbar Links
+ ul {
+ margin: 0;
+
+ li {
+ @include transition(background-color .3s);
+ float: left;
+ padding: 0;
+
+ &:hover, &.active {
+ background-color: rgba(0,0,0,.1);
+ }
+ }
+ a {
+ font-size: 1rem;
+ color: $navbar-font-color;
+ display: block;
+ padding: 0 15px;
+ }
+
+ &.left {
+ float: left;
+ }
+ }
+
+ // Navbar Search Form
+ .input-field {
+ margin: 0;
+
+ input {
+ height: 100%;
+ font-size: 1.2rem;
+ border: none;
+ padding-left: 2rem;
+
+ &:focus, &[type=text]:valid, &[type=password]:valid,
+ &[type=email]:valid, &[type=url]:valid, &[type=date]:valid {
+ border: none;
+ box-shadow: none;
+ }
+ }
+ label {
+ top: 0;
+ left: 0;
+
+ i {
+ color: rgba(255,255,255,.7);
+ @include transition(color .3s);
+ }
+ &.active i { color: $navbar-font-color; }
+ &.active {
+ @include transform(translateY(0));
+ }
+ }
+
+ }
+
+}
+
+// Fixed Navbar
+.navbar-fixed {
+ position: relative;
+ height: $navbar-height-mobile;
+ z-index: 998;
+
+ nav {
+ position: fixed;
+ }
+}
+@media #{$medium-and-up} {
+ nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i {
+ height: $navbar-height;
+ line-height: $navbar-height;
+ }
+ .navbar-fixed {
+ height: $navbar-height;
+ }
+}
diff --git a/system/admin/static/editor/sass/components/_normalize.scss b/system/admin/static/editor/sass/components/_normalize.scss
new file mode 100644
index 0000000..ab626c4
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_normalize.scss
@@ -0,0 +1,427 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+/* 1 */ html input[type="button"],
+button,
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/system/admin/static/editor/sass/components/_prefixer.scss b/system/admin/static/editor/sass/components/_prefixer.scss
new file mode 100644
index 0000000..f483eaf
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_prefixer.scss
@@ -0,0 +1,376 @@
+//---------------------------------------------------
+// Sass Prefixer
+// -------------------------------------------------
+// TABLE OF CONTENTS
+// (*) denotes a syntax-sugar helper
+// -------------------------------------------------
+//
+// animation($args)
+// animation-delay($delay)
+// animation-direction($direction)
+// animation-duration($duration)
+// animation-fill-mode($mode)
+// animation-iteration-count($count)
+// animation-name($name)
+// animation-play-state($state)
+// animation-timing-function($function)
+// background-size($args)
+// inner-shadow($args) *
+// box-sizing($args)
+// border-box() *
+// content-box() *
+// columns($args)
+// column-count($count)
+// column-gap($gap)
+// column-rule($args)
+// column-width($width)
+// flexbox()
+// flex($args)
+// order($args)
+// align($args)
+// justify-content($args)
+// gradient($default,$start,$stop) *
+// linear-gradient-top($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])*
+// linear-gradient-left($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])*
+// transform($args)
+// transform-origin($args)
+// transform-style($style)
+// rotate($deg)
+// scale($factor)
+// translate($x,$y)
+// translate3d($x,$y,$z)
+// translateHardware($x,$y) *
+// text-shadow($args)
+// transition($args)
+// transition-delay($delay)
+// transition-duration($duration)
+// transition-property($property)
+// transition-timing-function($function)
+
+
+// Animation
+
+@mixin animation($args) {
+ -webkit-animation: $args;
+ -moz-animation: $args;
+ -ms-animation: $args;
+ -o-animation: $args;
+ animation: $args;
+}
+@mixin animation-delay($delay) {
+ -webkit-animation-delay: $delay;
+ -moz-animation-delay: $delay;
+ -ms-animation-delay: $delay;
+ -o-animation-delay: $delay;
+ animation-delay: $delay;
+}
+@mixin animation-direction($direction) {
+ -webkit-animation-direction: $direction;
+ -moz-animation-direction: $direction;
+ -ms-animation-direction: $direction;
+ -o-animation-direction: $direction;
+}
+@mixin animation-duration($duration) {
+ -webkit-animation-duration: $duration;
+ -moz-animation-duration: $duration;
+ -ms-animation-duration: $duration;
+ -o-animation-duration: $duration;
+}
+@mixin animation-fill-mode($mode) {
+ -webkit-animation-fill-mode: $mode;
+ -moz-animation-fill-mode: $mode;
+ -ms-animation-fill-mode: $mode;
+ -o-animation-fill-mode: $mode;
+ animation-fill-mode: $mode;
+}
+@mixin animation-iteration-count($count) {
+ -webkit-animation-iteration-count: $count;
+ -moz-animation-iteration-count: $count;
+ -ms-animation-iteration-count: $count;
+ -o-animation-iteration-count: $count;
+ animation-iteration-count: $count;
+}
+@mixin animation-name($name) {
+ -webkit-animation-name: $name;
+ -moz-animation-name: $name;
+ -ms-animation-name: $name;
+ -o-animation-name: $name;
+ animation-name: $name;
+}
+@mixin animation-play-state($state) {
+ -webkit-animation-play-state: $state;
+ -moz-animation-play-state: $state;
+ -ms-animation-play-state: $state;
+ -o-animation-play-state: $state;
+ animation-play-state: $state;
+}
+@mixin animation-timing-function($function) {
+ -webkit-animation-timing-function: $function;
+ -moz-animation-timing-function: $function;
+ -ms-animation-timing-function: $function;
+ -o-animation-timing-function: $function;
+ animation-timing-function: $function;
+}
+
+// Keyframes
+@mixin keyframes($animation-name) {
+ @-webkit-keyframes #{$animation-name} {
+ @content;
+ }
+ @-moz-keyframes #{$animation-name} {
+ @content;
+ }
+ @keyframes #{$animation-name} {
+ @content;
+ }
+}
+
+// Backface-visibility
+
+@mixin backface-visibility($args) {
+ -webkit-backface-visibility: $args;
+ -moz-backface-visibility: $args;
+ -ms-backface-visibility: $args;
+ backface-visibility: $args;
+}
+
+
+// Background Size
+
+@mixin background-size($args) {
+ -webkit-background-size: $args;
+ background-size: $args;
+}
+
+// Box Sizing
+
+@mixin box-sizing($args) {
+ -webkit-box-sizing: $args;
+ -moz-box-sizing: $args;
+ box-sizing: $args;
+}
+@mixin border-box(){
+ @include box-sizing(border-box);
+}
+@mixin content-box(){
+ @include box-sizing(content-box);
+}
+
+
+// Columns
+
+@mixin columns($args) {
+ -webkit-columns: $args;
+ -moz-columns: $args;
+ columns: $args;
+}
+@mixin column-count($count) {
+ -webkit-column-count: $count;
+ -moz-column-count: $count;
+ column-count: $count;
+}
+@mixin column-gap($gap) {
+ -webkit-column-gap: $gap;
+ -moz-column-gap: $gap;
+ column-gap: $gap;
+}
+@mixin column-width($width) {
+ -webkit-column-width: $width;
+ -moz-column-width: $width;
+ column-width: $width;
+}
+@mixin column-rule($args) {
+ -webkit-column-rule: $args;
+ -moz-column-rule: $args;
+ column-rule: $args;
+}
+
+// Filter
+@mixin filter($args) {
+ -webkit-filter: $args;
+ -moz-filter: $args;
+ -o-filter: $args;
+ -ms-filter: $args;
+}
+
+// Flexbox
+@mixin flexbox() {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+}
+ @mixin flex($values) {
+ -webkit-box-flex: $values;
+ -moz-box-flex: $values;
+ -webkit-flex: $values;
+ -ms-flex: $values;
+ flex: $values;
+ }
+ @mixin order($val) {
+ -webkit-box-ordinal-group: $val;
+ -moz-box-ordinal-group: $val;
+ -ms-flex-order: $val;
+ -webkit-order: $val;
+ order: $val;
+ }
+ @mixin align($align) {
+ -webkit-flex-align: $align;
+ -ms-flex-align: $align;
+ -webkit-align-items: $align;
+ align-items: $align;
+ }
+ @mixin justify-content($val) {
+ -webkit-justify-content: $val;
+ justify-content: $val;
+ }
+// Gradients
+
+@mixin gradient($default: #F5F5F5, $start: #EEE, $stop: #FFF) {
+ @include linear-gradient-top($default,$start,0%,$stop,100%);
+}
+@mixin linear-gradient-top($default,$color1,$stop1,$color2,$stop2) {
+ background-color: $default;
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2));
+ background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2);
+ background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2);
+ background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2);
+ background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2);
+ background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2);
+}
+@mixin linear-gradient-top2($default,$color1,$stop1,$color2,$stop2,$color3,$stop3) {
+ background-color: $default;
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3));
+ background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+ background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+ background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+ background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+ background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+}
+@mixin linear-gradient-top3($default,$color1,$stop1,$color2,$stop2,$color3,$stop3,$color4,$stop4) {
+ background-color: $default;
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3), color-stop($stop4 $color4));
+ background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+ background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+ background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+ background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+ background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+}
+@mixin linear-gradient-left($default,$color1,$stop1,$color2,$stop2) {
+ background-color: $default;
+ background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2));
+ background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2);
+ background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2);
+ background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2);
+ background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2);
+ background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2);
+}
+@mixin linear-gradient-left2($default,$color1,$stop1,$color2,$stop2,$color3,$stop3) {
+ background-color: $default;
+ background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3));
+ background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+ background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+ background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+ background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+ background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3);
+}
+@mixin linear-gradient-left3($default,$color1,$stop1,$color2,$stop2,$color3,$stop3,$color4,$stop4) {
+ background-color: $default;
+ background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3), color-stop($stop4 $color4));
+ background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+ background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+ background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+ background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+ background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4);
+}
+
+// Text Shadow
+
+@mixin text-shadow($args) {
+ text-shadow: $args;
+}
+
+
+// Transforms
+
+@mixin transform($args) {
+ -webkit-transform: $args;
+ -moz-transform: $args;
+ -ms-transform: $args;
+ -o-transform: $args;
+ transform: $args;
+}
+@mixin transform-origin($args) {
+ -webkit-transform-origin: $args;
+ -moz-transform-origin: $args;
+ -ms-transform-origin: $args;
+ -o-transform-origin: $args;
+ transform-origin: $args;
+}
+@mixin transform-style($style) {
+ -webkit-transform-style: $style;
+ -moz-transform-style: $style;
+ -ms-transform-style: $style;
+ -o-transform-style: $style;
+ transform-style: $style;
+}
+@mixin rotate($deg:45deg){
+ @include transform(rotate($deg));
+}
+@mixin scale($factor:.5){
+ @include transform(scale($factor));
+}
+@mixin translate($x,$y){
+ @include transform(translate($x,$y));
+}
+@mixin translate3d($x,$y,$z) {
+ @include transform(translate3d($x,$y,$z));
+}
+@mixin translateHardware($x,$y) {
+ @include translate($x,$y);
+ -webkit-transform: translate3d($x,$y,0);
+ -moz-transform: translate3d($x,$y,0);
+ -o-transform: translate3d($x,$y,0);
+ -ms-transform: translate3d($x,$y,0);
+ transform: translate3d($x,$y,0);
+}
+
+
+// Transitions
+
+@mixin transition($args:200ms) {
+ -webkit-transition: $args;
+ -moz-transition: $args;
+ -o-transition: $args;
+ -ms-transition: $args;
+ transition: $args;
+}
+@mixin transition-delay($delay:0) {
+ -webkit-transition-delay: $delay;
+ -moz-transition-delay: $delay;
+ -o-transition-delay: $delay;
+ -ms-transition-delay: $delay;
+ transition-delay: $delay;
+}
+@mixin transition-duration($duration:200ms) {
+ -webkit-transition-duration: $duration;
+ -moz-transition-duration: $duration;
+ -o-transition-duration: $duration;
+ -ms-transition-duration: $duration;
+ transition-duration: $duration;
+}
+@mixin transition-property($property:all) {
+ -webkit-transition-property: $property;
+ -moz-transition-property: $property;
+ -o-transition-property: $property;
+ -ms-transition-property: $property;
+ transition-property: $property;
+}
+@mixin transition-timing-function($function:ease) {
+ -webkit-transition-timing-function: $function;
+ -moz-transition-timing-function: $function;
+ -o-transition-timing-function: $function;
+ -ms-transition-timing-function: $function;
+ transition-timing-function: $function;
+}
diff --git a/system/admin/static/editor/sass/components/_preloader.scss b/system/admin/static/editor/sass/components/_preloader.scss
new file mode 100644
index 0000000..ab5c783
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_preloader.scss
@@ -0,0 +1,332 @@
+/*
+ @license
+ Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+/**************************/
+/* STYLES FOR THE SPINNER */
+/**************************/
+
+/*
+ * Constants:
+ * STROKEWIDTH = 3px
+ * ARCSIZE = 270 degrees (amount of circle the arc takes up)
+ * ARCTIME = 1333ms (time it takes to expand and contract arc)
+ * ARCSTARTROT = 216 degrees (how much the start location of the arc
+ * should rotate each time, 216 gives us a
+ * 5 pointed star shape (it's 360/5 * 3).
+ * For a 7 pointed star, we might do
+ * 360/7 * 3 = 154.286)
+ * CONTAINERWIDTH = 28px
+ * SHRINK_TIME = 400ms
+ */
+
+
+.preloader-wrapper {
+ display: inline-block;
+ position: relative;
+ width: 48px;
+ height: 48px;
+
+ &.small {
+ width: 36px;
+ height: 36px;
+ }
+
+ &.big {
+ width: 64px;
+ height: 64px;
+ }
+
+ &.active {
+ /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */
+ -webkit-animation: container-rotate 1568ms linear infinite;
+ animation: container-rotate 1568ms linear infinite;
+ }
+}
+
+@-webkit-keyframes container-rotate {
+ to { -webkit-transform: rotate(360deg) }
+}
+
+@keyframes container-rotate {
+ to { transform: rotate(360deg) }
+}
+
+.spinner-layer {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+}
+
+.spinner-blue,
+.spinner-blue-only {
+ border-color: #4285f4;
+}
+
+.spinner-red,
+.spinner-red-only {
+ border-color: #db4437;
+}
+
+.spinner-yellow,
+.spinner-yellow-only {
+ border-color: #f4b400;
+}
+
+.spinner-green,
+.spinner-green-only {
+ border-color: #0f9d58;
+}
+
+/**
+ * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):
+ *
+ * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't
+ * guarantee that the animation will start _exactly_ after that value. So we avoid using
+ * animation-delay and instead set custom keyframes for each color (as redundant as it
+ * seems).
+ *
+ * We write out each animation in full (instead of separating animation-name,
+ * animation-duration, etc.) because under the polyfill, Safari does not recognize those
+ * specific properties properly, treats them as -webkit-animation, and overrides the
+ * other animation rules. See https://github.com/Polymer/platform/issues/53.
+ */
+.active .spinner-layer.spinner-blue {
+ /* durations: 4 * ARCTIME */
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+}
+
+.active .spinner-layer.spinner-red {
+ /* durations: 4 * ARCTIME */
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+}
+
+.active .spinner-layer.spinner-yellow {
+ /* durations: 4 * ARCTIME */
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+}
+
+.active .spinner-layer.spinner-green {
+ /* durations: 4 * ARCTIME */
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+}
+
+.active .spinner-layer.spinner-blue-only,
+.active .spinner-layer.spinner-red-only,
+.active .spinner-layer.spinner-yellow-only,
+.active .spinner-layer.spinner-green-only {
+ /* durations: 4 * ARCTIME */
+ opacity: 1;
+ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+}
+
+@-webkit-keyframes fill-unfill-rotate {
+ 12.5% { -webkit-transform: rotate(135deg); } /* 0.5 * ARCSIZE */
+ 25% { -webkit-transform: rotate(270deg); } /* 1 * ARCSIZE */
+ 37.5% { -webkit-transform: rotate(405deg); } /* 1.5 * ARCSIZE */
+ 50% { -webkit-transform: rotate(540deg); } /* 2 * ARCSIZE */
+ 62.5% { -webkit-transform: rotate(675deg); } /* 2.5 * ARCSIZE */
+ 75% { -webkit-transform: rotate(810deg); } /* 3 * ARCSIZE */
+ 87.5% { -webkit-transform: rotate(945deg); } /* 3.5 * ARCSIZE */
+ to { -webkit-transform: rotate(1080deg); } /* 4 * ARCSIZE */
+}
+
+@keyframes fill-unfill-rotate {
+ 12.5% { transform: rotate(135deg); } /* 0.5 * ARCSIZE */
+ 25% { transform: rotate(270deg); } /* 1 * ARCSIZE */
+ 37.5% { transform: rotate(405deg); } /* 1.5 * ARCSIZE */
+ 50% { transform: rotate(540deg); } /* 2 * ARCSIZE */
+ 62.5% { transform: rotate(675deg); } /* 2.5 * ARCSIZE */
+ 75% { transform: rotate(810deg); } /* 3 * ARCSIZE */
+ 87.5% { transform: rotate(945deg); } /* 3.5 * ARCSIZE */
+ to { transform: rotate(1080deg); } /* 4 * ARCSIZE */
+}
+
+@-webkit-keyframes blue-fade-in-out {
+ from { opacity: 1; }
+ 25% { opacity: 1; }
+ 26% { opacity: 0; }
+ 89% { opacity: 0; }
+ 90% { opacity: 1; }
+ 100% { opacity: 1; }
+}
+
+@keyframes blue-fade-in-out {
+ from { opacity: 1; }
+ 25% { opacity: 1; }
+ 26% { opacity: 0; }
+ 89% { opacity: 0; }
+ 90% { opacity: 1; }
+ 100% { opacity: 1; }
+}
+
+@-webkit-keyframes red-fade-in-out {
+ from { opacity: 0; }
+ 15% { opacity: 0; }
+ 25% { opacity: 1; }
+ 50% { opacity: 1; }
+ 51% { opacity: 0; }
+}
+
+@keyframes red-fade-in-out {
+ from { opacity: 0; }
+ 15% { opacity: 0; }
+ 25% { opacity: 1; }
+ 50% { opacity: 1; }
+ 51% { opacity: 0; }
+}
+
+@-webkit-keyframes yellow-fade-in-out {
+ from { opacity: 0; }
+ 40% { opacity: 0; }
+ 50% { opacity: 1; }
+ 75% { opacity: 1; }
+ 76% { opacity: 0; }
+}
+
+@keyframes yellow-fade-in-out {
+ from { opacity: 0; }
+ 40% { opacity: 0; }
+ 50% { opacity: 1; }
+ 75% { opacity: 1; }
+ 76% { opacity: 0; }
+}
+
+@-webkit-keyframes green-fade-in-out {
+ from { opacity: 0; }
+ 65% { opacity: 0; }
+ 75% { opacity: 1; }
+ 90% { opacity: 1; }
+ 100% { opacity: 0; }
+}
+
+@keyframes green-fade-in-out {
+ from { opacity: 0; }
+ 65% { opacity: 0; }
+ 75% { opacity: 1; }
+ 90% { opacity: 1; }
+ 100% { opacity: 0; }
+}
+
+/**
+ * Patch the gap that appear between the two adjacent div.circle-clipper while the
+ * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).
+ */
+.gap-patch {
+ position: absolute;
+ top: 0;
+ left: 45%;
+ width: 10%;
+ height: 100%;
+ overflow: hidden;
+ border-color: inherit;
+}
+
+.gap-patch .circle {
+ width: 1000%;
+ left: -450%;
+}
+
+.circle-clipper {
+ display: inline-block;
+ position: relative;
+ width: 50%;
+ height: 100%;
+ overflow: hidden;
+ border-color: inherit;
+
+ .circle {
+ width: 200%;
+ height: 100%;
+ border-width: 3px; /* STROKEWIDTH */
+ border-style: solid;
+ border-color: inherit;
+ border-bottom-color: transparent !important;
+ border-radius: 50%;
+ -webkit-animation: none;
+ animation: none;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ }
+
+ &.left .circle {
+ left: 0;
+ border-right-color: transparent !important;
+ -webkit-transform: rotate(129deg);
+ transform: rotate(129deg);
+ }
+ &.right .circle {
+ left: -100%;
+ border-left-color: transparent !important;
+ -webkit-transform: rotate(-129deg);
+ transform: rotate(-129deg);
+ }
+}
+
+
+
+.active .circle-clipper.left .circle {
+ /* duration: ARCTIME */
+ -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+ animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+}
+
+.active .circle-clipper.right .circle {
+ /* duration: ARCTIME */
+ -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+ animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;
+}
+
+@-webkit-keyframes left-spin {
+ from { -webkit-transform: rotate(130deg); }
+ 50% { -webkit-transform: rotate(-5deg); }
+ to { -webkit-transform: rotate(130deg); }
+}
+
+@keyframes left-spin {
+ from { transform: rotate(130deg); }
+ 50% { transform: rotate(-5deg); }
+ to { transform: rotate(130deg); }
+}
+
+@-webkit-keyframes right-spin {
+ from { -webkit-transform: rotate(-130deg); }
+ 50% { -webkit-transform: rotate(5deg); }
+ to { -webkit-transform: rotate(-130deg); }
+}
+
+@keyframes right-spin {
+ from { transform: rotate(-130deg); }
+ 50% { transform: rotate(5deg); }
+ to { transform: rotate(-130deg); }
+}
+
+#spinnerContainer.cooldown {
+ /* duration: SHRINK_TIME */
+ -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1);
+ animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1);
+}
+
+@-webkit-keyframes fade-out {
+ from { opacity: 1; }
+ to { opacity: 0; }
+}
+
+@keyframes fade-out {
+ from { opacity: 1; }
+ to { opacity: 0; }
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/_roboto.scss b/system/admin/static/editor/sass/components/_roboto.scss
new file mode 100644
index 0000000..8bfdbd3
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_roboto.scss
@@ -0,0 +1,38 @@
+@font-face {
+ font-family: "Roboto";
+ src: url("#{$roboto-font-path}Roboto-Thin.woff2") format("woff2"),
+ url("#{$roboto-font-path}Roboto-Thin.woff") format("woff"),
+ url("#{$roboto-font-path}Roboto-Thin.ttf") format("truetype");
+ font-weight: 200;
+}
+@font-face {
+ font-family: "Roboto";
+ src: url("#{$roboto-font-path}Roboto-Light.woff2") format("woff2"),
+ url("#{$roboto-font-path}Roboto-Light.woff") format("woff"),
+ url("#{$roboto-font-path}Roboto-Light.ttf") format("truetype");
+ font-weight: 300;
+}
+
+@font-face {
+ font-family: "Roboto";
+ src: url("#{$roboto-font-path}Roboto-Regular.woff2") format("woff2"),
+ url("#{$roboto-font-path}Roboto-Regular.woff") format("woff"),
+ url("#{$roboto-font-path}Roboto-Regular.ttf") format("truetype");
+ font-weight: 400;
+}
+
+@font-face {
+ font-family: "Roboto";
+ src: url("#{$roboto-font-path}Roboto-Medium.woff2") format("woff2"),
+ url("#{$roboto-font-path}Roboto-Medium.woff") format("woff"),
+ url("#{$roboto-font-path}Roboto-Medium.ttf") format("truetype");
+ font-weight: 500;
+}
+
+@font-face {
+ font-family: "Roboto";
+ src: url("#{$roboto-font-path}Roboto-Bold.woff2") format("woff2"),
+ url("#{$roboto-font-path}Roboto-Bold.woff") format("woff"),
+ url("#{$roboto-font-path}Roboto-Bold.ttf") format("truetype");
+ font-weight: 700;
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/_sideNav.scss b/system/admin/static/editor/sass/components/_sideNav.scss
new file mode 100644
index 0000000..98794a1
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_sideNav.scss
@@ -0,0 +1,111 @@
+.side-nav {
+ position: fixed;
+ width: 240px;
+ left: -105%;
+ top: 0;
+ margin: 0;
+ height: 100%;
+ height: calc(100% + 60px);
+ height: -moz-calc(100%); //Temporary Firefox Fix
+ padding-bottom: 60px;
+ background-color: $sidenav-bg-color;
+ z-index: 999;
+ overflow-y: auto;
+
+ @extend .z-depth-1;
+ will-change: left;
+
+ // Right Align
+ &.right-aligned {
+ will-change: right;
+ right: -105%;
+ left: auto;
+ }
+
+ .collapsible{
+ margin: 0;
+ }
+
+
+ li {
+ float: none;
+ padding: 0 $sidenav-padding-right;
+ &:hover, &.active { background-color: #ddd; }
+ }
+ a {
+ color: #444;
+ display: block;
+ font-size: 1rem;
+ height: 64px;
+ line-height: 64px;
+ padding: 0 $sidenav-padding-right;
+ }
+}
+
+
+// Touch interaction
+.drag-target {
+ height: 100%;
+ width: 10px;
+ position: fixed;
+ top: 0;
+ z-index: 998;
+}
+
+
+// Hidden side-nav for all sizes
+.side-nav.fixed {
+ a {
+ display: block;
+ padding: 0 $sidenav-padding-right;
+ color: #444;
+ }
+}
+
+
+// Fixed side-nav shown
+.side-nav.fixed {
+ left: 0;
+ position: fixed;
+
+ // Right Align
+ &.right-aligned {
+ right: 0;
+ left: auto;
+ }
+}
+
+// Fixed sideNav hide on smaller
+@media #{$medium-and-down} {
+ .side-nav.fixed {
+ left: -105%;
+
+ &.right-aligned {
+ right: -105%;
+ left: auto;
+ }
+ }
+}
+
+
+.side-nav .collapsible-body li.active,
+.side-nav.fixed .collapsible-body li.active {
+ background-color: $primary-color;
+ a {
+ color: $sidenav-bg-color;
+ }
+}
+
+
+#sidenav-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+
+ height: 120vh;
+ background-color: rgba(0,0,0,.5);
+ z-index: 997;
+
+ will-change: opacity;
+}
diff --git a/system/admin/static/editor/sass/components/_slider.scss b/system/admin/static/editor/sass/components/_slider.scss
new file mode 100644
index 0000000..3d2071a
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_slider.scss
@@ -0,0 +1,92 @@
+.slider {
+ position: relative;
+ height: 400px;
+ width: 100%;
+
+ // Fullscreen slider
+ &.fullscreen {
+ height: 100%;
+ width: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+
+ ul.slides {
+ height: 100%;
+ }
+
+ ul.indicators {
+ z-index: 2;
+ bottom: 30px;
+ }
+ }
+
+ .slides {
+ background-color: $slider-bg-color;
+ margin: 0;
+ height: 400px;
+
+ li {
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ width: 100%;
+ height: inherit;
+ overflow: hidden;
+
+ img {
+ height: 100%;
+ width: 100%;
+ background-size: cover;
+ background-position: center;
+ }
+
+ .caption {
+ color: #fff;
+ position: absolute;
+ top: 15%;
+ left: 15%;
+ width: 70%;
+ opacity: 0;
+
+ p { color: $slider-bg-color-light; }
+ }
+
+ &.active {
+ z-index: 2;
+ }
+ }
+ }
+
+
+ .indicators {
+ position: absolute;
+ text-align: center;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: 0;
+
+ .indicator-item {
+ display: inline-block;
+ position: relative;
+ cursor: pointer;
+ height: 16px;
+ width: 16px;
+ margin: 0 12px;
+ background-color: $slider-bg-color-light;
+
+ @include transition(background-color .3s);
+ border-radius: 50%;
+
+ &.active {
+ background-color: $slider-indicator-color;
+ }
+ }
+ }
+
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/_table_of_contents.scss b/system/admin/static/editor/sass/components/_table_of_contents.scss
new file mode 100644
index 0000000..2872bdb
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_table_of_contents.scss
@@ -0,0 +1,33 @@
+/***************
+ Nav List
+***************/
+.table-of-contents {
+ &.fixed {
+ position: fixed;
+ }
+
+ li {
+ padding: 2px 0;
+ }
+ a {
+ display: inline-block;
+ font-weight: 300;
+ color: #757575;
+ padding-left: 20px;
+ height: 1.5rem;
+ line-height: 1.5rem;
+ letter-spacing: .4;
+ display: inline-block;
+
+ &:hover {
+ color: lighten(#757575, 20%);
+ padding-left: 19px;
+ border-left: 1px solid lighten(color("materialize-red", "base"),10%);
+ }
+ &.active {
+ font-weight: 500;
+ padding-left: 18px;
+ border-left: 2px solid lighten(color("materialize-red", "base"),10%);
+ }
+ }
+}
diff --git a/system/admin/static/editor/sass/components/_tabs.scss b/system/admin/static/editor/sass/components/_tabs.scss
new file mode 100644
index 0000000..dcf29e1
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_tabs.scss
@@ -0,0 +1,47 @@
+.tabs {
+ position: relative;
+ height: 48px;
+ background-color: $tabs-bg-color;
+ margin: 0 auto;
+ width: 100%;
+ white-space: nowrap;
+
+ .tab {
+ display: block;
+ float: left;
+ text-align: center;
+ line-height: 48px;
+ height: 48px;
+ padding: 0 20px;
+ margin: 0;
+ text-transform: uppercase;
+ letter-spacing: .8px;
+ width: 15%;
+
+ a {
+ color: $tabs-text-color;
+ display: block;
+ width: 100%;
+ height: 100%;
+ @include transition( color .28s ease);
+ &:hover {
+ color: lighten($tabs-text-color, 20%);
+ }
+ }
+
+ &.disabled a {
+ color: lighten($tabs-text-color, 20%);
+ cursor: default;
+ }
+ }
+ .indicator {
+ position: absolute;
+ bottom: 0;
+ height: 2px;
+ background-color: $tabs-underline-color;
+ will-change: left, right;
+ }
+}
+
+.tabs .tab { padding: 0; }
+
diff --git a/system/admin/static/editor/sass/components/_toast.scss b/system/admin/static/editor/sass/components/_toast.scss
new file mode 100644
index 0000000..87bd7dd
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_toast.scss
@@ -0,0 +1,63 @@
+#toast-container {
+ display:block;
+ position: fixed;
+ z-index: 1001;
+
+ @media #{$small-and-down} {
+ min-width: 100%;
+ bottom: 0%;
+ }
+ @media #{$medium-only} {
+ min-width: 30%;
+ left: 5%;
+ bottom: 7%;
+ }
+ @media #{$large-and-up} {
+ min-width: 8%;
+ top: 10%;
+ right: 7%;
+ }
+}
+
+.toast {
+ @extend .z-depth-1;
+ border-radius: 2px;
+ top: 0;
+ width: auto;
+ clear: both;
+ margin-top: 10px;
+ position: relative;
+ max-width:100%;
+ height: $toast-height;
+ line-height: $toast-height;
+ background-color: $toast-color;
+ padding: 0 25px;
+ font-size: 1.1rem;
+ font-weight: 300;
+ color: $toast-text-color;
+
+ @include flexbox();
+ @include align(center);
+ @include justify-content(space-between);
+
+ .btn, .btn-flat {
+ margin: 0;
+ margin-left: 3rem;
+ }
+
+ &.rounded{
+ border-radius: 24px;
+ }
+
+ @media #{$small-and-down} {
+ width:100%;
+ border-radius: 0;
+ }
+ @media #{$medium-only} {
+ float: left;
+ }
+ @media #{$large-and-up} {
+ float: right;
+ }
+
+}
diff --git a/system/admin/static/editor/sass/components/_tooltip.scss b/system/admin/static/editor/sass/components/_tooltip.scss
new file mode 100644
index 0000000..374ace9
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_tooltip.scss
@@ -0,0 +1,34 @@
+.material-tooltip {
+ padding: 10px 8px;
+ font-size: 1rem;
+ z-index: 2000;
+ background-color: transparent;
+ border-radius: 2px;
+ color: #fff;
+ min-height: 36px;
+ line-height: 1rem;
+ // max-width: 350px;
+ opacity: 0;
+ display: none;
+ position: absolute;
+ text-align: center;
+ overflow: hidden;
+ left:0;
+ top:0;
+
+ will-change: top, left;
+}
+
+.backdrop {
+ position: absolute;
+ opacity: 0;
+ display: none;
+ height: 7px;
+ width: 14px;
+ border-radius: 0 0 14px 14px;
+ background-color: #323232;
+ z-index: -1;
+ @include transform-origin( 50% 10%);
+
+ will-change: transform, opacity;
+}
diff --git a/system/admin/static/editor/sass/components/_typography.scss b/system/admin/static/editor/sass/components/_typography.scss
new file mode 100644
index 0000000..3aec273
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_typography.scss
@@ -0,0 +1,58 @@
+a {
+ text-decoration: none;
+}
+
+html{
+ line-height: 1.5;
+
+ @media only screen and (min-width: 0) {
+ font-size: 14px;
+ }
+
+ @media only screen and (min-width: $medium-screen) {
+ font-size: 14.5px;
+ }
+
+ @media only screen and (min-width: $large-screen) {
+ font-size: 15px;
+ }
+
+ font-family: "Roboto", sans-serif;
+ font-weight: normal;
+ color: $off-black;
+}
+h1, h2, h3, h4, h5, h6 {
+ font-weight: 400;
+ line-height: 1.1;
+}
+
+// Header Styles
+h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; }
+h1 { font-size: $h1-fontsize; line-height: 110%; margin: ($h1-fontsize / 2) 0 ($h1-fontsize / 2.5) 0;}
+h2 { font-size: $h2-fontsize; line-height: 110%; margin: ($h2-fontsize / 2) 0 ($h2-fontsize / 2.5) 0;}
+h3 { font-size: $h3-fontsize; line-height: 110%; margin: ($h3-fontsize / 2) 0 ($h3-fontsize / 2.5) 0;}
+h4 { font-size: $h4-fontsize; line-height: 110%; margin: ($h4-fontsize / 2) 0 ($h4-fontsize / 2.5) 0;}
+h5 { font-size: $h5-fontsize; line-height: 110%; margin: ($h5-fontsize / 2) 0 ($h5-fontsize / 2.5) 0;}
+h6 { font-size: $h6-fontsize; line-height: 110%; margin: ($h6-fontsize / 2) 0 ($h6-fontsize / 2.5) 0;}
+
+// Text Styles
+em { font-style: italic; }
+strong { font-weight: 500; }
+small { font-size: 75%; }
+.light { font-weight: 300; }
+.thin { font-weight: 200; }
+
+.flow-text{
+ font-weight: 300;
+ $i: 0;
+ @while $i <= $intervals {
+ @media only screen and (min-width : 360 + ($i * $interval-size)) {
+ font-size: 1.2rem * (1 + (.02 * $i));
+ }
+ $i: $i + 1;
+ }
+ // Handle below 360px screen
+ @media only screen and (max-width: 360px) {
+ font-size: 1.2rem;
+ }
+}
diff --git a/system/admin/static/editor/sass/components/_variables.scss b/system/admin/static/editor/sass/components/_variables.scss
new file mode 100644
index 0000000..833d49f
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_variables.scss
@@ -0,0 +1,152 @@
+/*** Colors ***/
+$primary-color: color("materialize-red", "lighten-2") !default;
+$primary-color-light: lighten($primary-color, 15%) !default;
+$primary-color-dark: darken($primary-color, 15%) !default;
+
+$secondary-color: color("teal", "lighten-1") !default;
+$success-color: color("green", "base") !default;
+$error-color: color("red", "base") !default;
+$link-color: color("light-blue", "darken-1") !default;
+
+/*** Badges ***/
+$badge-bg-color: $secondary-color !default;
+
+/*** Buttons ***/
+$button-bg-color-disabled: #DFDFDF !default;
+$button-color: $secondary-color !default;
+$button-color-disabled: #9F9F9F !default;
+$button-color-flat: #343434 !default;
+$button-color-raised: #fff !default;
+$button-floating-size: 37px !default;
+$button-height: 36px !default;
+$button-font-size-shared: 1.3rem !default;
+$button-large-icon-font-size: 1.6rem !default;
+$button-line-height: 36px !default;
+
+/*** Cards ***/
+$card-padding: 20px !default;
+$card-bg-color: #fff !default;
+$card-link-color: color("orange", "accent-2") !default;
+$card-link-color-light: lighten($card-link-color, 20%) !default;
+
+/*** Collapsible ***/
+$collapsible-height: 3rem !default;
+$collapsible-header-color: #fff !default;
+$collapsible-border-color: #ddd !default;
+
+/*** Dropdown ***/
+$dropdown-bg-color: #fff !default;
+$dropdown-hover-bg-color: #eee !default;
+$dropdown-color: $secondary-color !default;
+
+/*** Fonts ***/
+$roboto-font-path: "../font/roboto/" !default;
+$icons-font-path: "../font/material-design-icons/" !default;
+
+/*** Forms ***/
+// Text Inputs + Textarea
+$input-border-color: color("grey", "base") !default;
+$input-bg-color: #fff !default;
+$input-error-color: $error-color !default;
+$input-success-color: $success-color !default;
+$input-focus-color: $secondary-color !default;
+$label-font-size: .8rem !default;
+$input-disabled-color: rgba(0,0,0, .26) !default;
+$input-disabled-solid-color: #BDBDBD !default;
+
+// Radio Buttons
+$radio-fill-color: $secondary-color !default;
+$radio-empty-color: #5a5a5a !default;
+
+// Switches
+$switch-bg-color: $secondary-color !default;
+$switch-checked-lever-bg: desaturate(lighten($secondary-color, 25%), 25%) !default;
+$switch-unchecked-bg: #F1F1F1 !default;
+$switch-unchecked-lever-bg: #818181 !default;
+
+// Date Picker
+$datepicker-weekday-bg: darken($secondary_color, 7%) !default;
+$datepicker-date-bg: $secondary_color !default;
+$datepicker-year: rgba(255, 255, 255, .4) !default;
+$datepicker-focus: rgba(0,0,0, .05) !default;
+$datepicker-selected: $secondary-color !default;
+$datepicker-selected-outfocus: desaturate(lighten($secondary-color, 35%), 15%) !default;
+
+
+/*** Global ***/
+// Media Query Ranges
+$small-screen-up: 601px !default;
+$medium-screen-up: 993px !default;
+$large-screen-up: 1201px !default;
+$small-screen: 600px !default;
+$medium-screen: 992px !default;
+$large-screen: 1200px !default;
+
+$medium-and-up: "only screen and (min-width : #{$small-screen-up})" !default;
+$large-and-up: "only screen and (min-width : #{$medium-screen-up})" !default;
+$small-and-down: "only screen and (max-width : #{$small-screen})" !default;
+$medium-and-down: "only screen and (max-width : #{$medium-screen})" !default;
+$medium-only: "only screen and (min-width : #{$small-screen-up}) and (max-width : #{$medium-screen})" !default;
+
+// Grid Variables
+$num-cols: 12 !default;
+$gutter-width: 1.5rem !default;
+$element-top-margin: $gutter-width/3 !default;
+$element-bottom-margin: ($gutter-width*2)/3 !default;
+
+/*** Navbar ***/
+$navbar-height: 64px !default;
+$navbar-height-mobile: 56px !default;
+$navbar-font-color: #fff !default;
+$navbar-brand-font-size: 2.1rem !default;
+
+/*** SideNav ***/
+$sidenav-bg-color: #fff !default;
+$sidenav-padding-right: 15px !default;
+
+/*** Photo Slider ***/
+$slider-bg-color: color('grey', 'base') !default;
+$slider-bg-color-light: color('grey', 'lighten-2') !default;
+$slider-indicator-color: color('green', 'base') !default;
+
+/*** Tabs ***/
+$tabs-underline-color: $primary-color-light !default;
+$tabs-text-color: $primary-color !default;
+$tabs-bg-color: #fff !default;
+
+/*** Tables ***/
+$table-border-color: #d0d0d0 !default;
+$table-striped-color: #f2f2f2 !default;
+
+/*** Toasts ***/
+$toast-height: 48px !default;
+$toast-color: #323232 !default;
+$toast-text-color: #fff !default;
+
+/*** Typography ***/
+$off-black: rgba(0, 0, 0, 0.87) !default;
+// Header Styles
+$h1-fontsize: 4.2rem !default;
+$h2-fontsize: 3.56rem !default;
+$h3-fontsize: 2.92rem !default;
+$h4-fontsize: 2.28rem !default;
+$h5-fontsize: 1.64rem !default;
+$h6-fontsize: 1rem !default;
+
+// Footer
+$footer-bg-color: $primary-color !default;
+
+// Flowtext
+$range : $large-screen - $small-screen !default;
+$intervals: 20 !default;
+$interval-size: $range / $intervals !default;
+
+/*** Collections ***/
+$collection-border-color: #e0e0e0 !default;
+$collection-bg-color: #fff !default;
+$collection-active-bg-color: $secondary-color !default;
+$collection-active-color: lighten($secondary-color, 55%) !default;
+$collection-hover-bg-color: #ddd !default;
+
+/* Progress Bar */
+$progress-bar-color: $secondary-color !default;
diff --git a/system/admin/static/editor/sass/components/_waves.scss b/system/admin/static/editor/sass/components/_waves.scss
new file mode 100644
index 0000000..7a8e8c0
--- /dev/null
+++ b/system/admin/static/editor/sass/components/_waves.scss
@@ -0,0 +1,167 @@
+
+/*!
+ * Waves v0.6.0
+ * http://fian.my.id/Waves
+ *
+ * Copyright 2014 Alfiana E. Sibuea and other contributors
+ * Released under the MIT license
+ * https://github.com/fians/Waves/blob/master/LICENSE
+ */
+
+
+.waves-effect {
+ position: relative;
+ cursor: pointer;
+ display: inline-block;
+ overflow: hidden;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-tap-highlight-color: transparent;
+ // white-space: nowrap;
+ // outline: 0;
+
+ vertical-align: middle;
+ // cursor: pointer;
+ // border: none;
+ // outline: none;
+ // color: inherit;
+ // background-color: rgba(0, 0, 0, 0);
+ // font-size: 1em;
+ // line-height:1em;
+ // text-align: center;
+ // text-decoration: none;
+ z-index: 1;
+ will-change: opacity, transform;
+ @include transition(all .3s ease-out);
+
+ .waves-ripple {
+ position: absolute;
+ border-radius: 50%;
+ width: 20px;
+ height: 20px;
+ margin-top:-10px;
+ margin-left:-10px;
+ opacity: 0;
+
+ background: rgba(0,0,0,0.2);
+ // $gradient: rgba(0,0,0,0.2) 0,rgba(0,0,0,.3) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.5) 60%,rgba(255,255,255,0) 70%;
+ // background: -webkit-radial-gradient($gradient);
+ // background: -o-radial-gradient($gradient);
+ // background: -moz-radial-gradient($gradient);
+ // background: radial-gradient($gradient);
+ @include transition(all 0.7s ease-out);
+ -webkit-transition-property: -webkit-transform, opacity;
+ -moz-transition-property: -moz-transform, opacity;
+ -o-transition-property: -o-transform, opacity;
+ transition-property: transform, opacity;
+ @include transform(scale(0));
+ pointer-events: none;
+ }
+
+ // Waves Colors
+ &.waves-light .waves-ripple {
+ background-color: rgba(255, 255, 255, 0.45);
+ }
+
+ &.waves-red .waves-ripple {
+ background-color: rgba(244, 67, 54, .70);
+ }
+ &.waves-yellow .waves-ripple {
+ background-color: rgba(255, 235, 59, .70);
+ }
+ &.waves-orange .waves-ripple {
+ background-color: rgba(255, 152, 0, .70);
+ }
+ &.waves-purple .waves-ripple {
+ background-color: rgba(156, 39, 176, 0.70);
+ }
+ &.waves-green .waves-ripple {
+ background-color: rgba(76, 175, 80, 0.70);
+ }
+ &.waves-teal .waves-ripple {
+ background-color: rgba(0, 150, 136, 0.70);
+ }
+
+}
+
+.waves-notransition {
+ @include transition(none #{"!important"});
+}
+
+.waves-circle {
+ @include transform(translateZ(0));
+ -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);
+}
+
+// .waves-button,
+// .waves-button:hover,
+// .waves-button:visited,
+// .waves-button-input {
+// white-space: nowrap;
+// vertical-align: middle;
+// cursor: pointer;
+// border: none;
+// outline: none;
+// color: inherit;
+// background-color: rgba(0, 0, 0, 0);
+// font-size: 1em;
+// line-height:1em;
+// text-align: center;
+// text-decoration: none;
+// z-index: 1;
+// }
+
+// .waves-button {
+// padding: 0.85em 1.1em;
+// border-radius: 0.2em;
+// }
+
+// .waves-button-input {
+// margin: 0;
+// padding: 0.85em 1.1em;
+// }
+
+.waves-input-wrapper {
+ border-radius: 0.2em;
+ vertical-align: bottom;
+
+ // &.waves-button {
+ // padding: 0;
+ // }
+
+ .waves-button-input {
+ position: relative;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ }
+}
+
+.waves-circle {
+ text-align: center;
+ width: 2.5em;
+ height: 2.5em;
+ line-height: 2.5em;
+ border-radius: 50%;
+ -webkit-mask-image: none;
+}
+
+// .waves-float {
+ // -webkit-mask-image: none;
+ // @include box-shadow(0px 1px 1.5px 1px rgba(0, 0, 0, 0.12));
+
+ // &:active {
+ // @include box-shadow(0px 8px 20px 1px rgba(0, 0, 0, 0.30));
+// }
+// }
+
+.waves-block {
+ display: block;
+}
+
+/* Firefox Bug: link not triggered */
+a.waves-effect .waves-ripple {
+ z-index: -1;
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/date_picker/_default.date.scss b/system/admin/static/editor/sass/components/date_picker/_default.date.scss
new file mode 100644
index 0000000..1cd0f93
--- /dev/null
+++ b/system/admin/static/editor/sass/components/date_picker/_default.date.scss
@@ -0,0 +1,435 @@
+/* ==========================================================================
+ $BASE-DATE-PICKER
+ ========================================================================== */
+/**
+ * The picker box.
+ */
+.picker__box {
+ padding: 0 1em;
+}
+/**
+ * The header containing the month and year stuff.
+ */
+.picker__header {
+ text-align: center;
+ position: relative;
+ margin-top: .75em;
+}
+/**
+ * The month and year labels.
+ */
+.picker__month,
+.picker__year {
+// font-weight: 500;
+ display: inline-block;
+ margin-left: .25em;
+ margin-right: .25em;
+}
+/**
+ * The month and year selectors.
+ */
+.picker__select--month,
+.picker__select--year {
+
+ height: 2em;
+ padding: 0;
+ margin-left: .25em;
+ margin-right: .25em;
+}
+
+// Modified
+.picker__select--month.browser-default {
+ display: inline;
+ background-color: #FFFFFF;
+ width: 40%;
+}
+.picker__select--year.browser-default {
+ display: inline;
+ background-color: #FFFFFF;
+ width: 25%;
+}
+.picker__select--month:focus,
+.picker__select--year:focus {
+ border-color: $datepicker-focus;
+}
+/**
+ * The month navigation buttons.
+ */
+.picker__nav--prev,
+.picker__nav--next {
+ position: absolute;
+ padding: .5em 1.25em;
+ width: 1em;
+ height: 1em;
+ box-sizing: content-box;
+ top: -0.25em;
+}
+//@media (min-width: 24.5em) {
+// .picker__nav--prev,
+// .picker__nav--next {
+// top: -0.33em;
+// }
+//}
+.picker__nav--prev {
+ left: -1em;
+ padding-right: 1.25em;
+}
+//@media (min-width: 24.5em) {
+// .picker__nav--prev {
+// padding-right: 1.5em;
+// }
+//}
+.picker__nav--next {
+ right: -1em;
+ padding-left: 1.25em;
+}
+//@media (min-width: 24.5em) {
+// .picker__nav--next {
+// padding-left: 1.5em;
+// }
+//}
+
+.picker__nav--disabled,
+.picker__nav--disabled:hover,
+.picker__nav--disabled:before,
+.picker__nav--disabled:before:hover {
+ cursor: default;
+ background: none;
+ border-right-color: #f5f5f5;
+ border-left-color: #f5f5f5;
+}
+/**
+ * The calendar table of dates
+ */
+.picker__table {
+ text-align: center;
+ border-collapse: collapse;
+ border-spacing: 0;
+ table-layout: fixed;
+ font-size: 1rem;
+ width: 100%;
+ margin-top: .75em;
+ margin-bottom: .5em;
+}
+
+
+
+.picker__table th, .picker__table td {
+ text-align: center;
+}
+
+
+
+
+
+
+.picker__table td {
+ margin: 0;
+ padding: 0;
+}
+/**
+ * The weekday labels
+ */
+.picker__weekday {
+ width: 14.285714286%;
+ font-size: .75em;
+ padding-bottom: .25em;
+ color: #999999;
+ font-weight: 500;
+ /* Increase the spacing a tad */
+}
+@media (min-height: 33.875em) {
+ .picker__weekday {
+ padding-bottom: .5em;
+ }
+}
+/**
+ * The days on the calendar
+ */
+
+.picker__day--today {
+ position: relative;
+ color: #595959;
+ letter-spacing: -.3;
+ padding: .75rem 0;
+ font-weight: 400;
+ border: 1px solid transparent;
+
+}
+
+//.picker__day--today:before {
+// content: " ";
+// position: absolute;
+// top: 2px;
+// right: 2px;
+// width: 0;
+// height: 0;
+// border-top: 0.5em solid #0059bc;
+// border-left: .5em solid transparent;
+//}
+.picker__day--disabled:before {
+ border-top-color: #aaaaaa;
+}
+
+
+.picker__day--infocus:hover{
+ cursor: pointer;
+ color: #000;
+ font-weight: 500;
+}
+
+.picker__day--outfocus {
+ display: none;
+ padding: .75rem 0;
+ color: #fff;
+
+}
+.picker__day--outfocus:hover {
+ cursor: pointer;
+ color: #dddddd;
+// background: #b1dcfb;
+ font-weight: 500;
+}
+
+
+.picker__day--highlighted {
+// border-color: #0089ec;
+}
+.picker__day--highlighted:hover,
+.picker--focused .picker__day--highlighted {
+ cursor: pointer;
+// color: #000000;
+// background: #b1dcfb;
+// font-weight: 500;
+}
+.picker__day--selected,
+.picker__day--selected:hover,
+.picker--focused .picker__day--selected {
+
+
+// Circle background
+ border-radius: 50%;
+ @include transform(scale(.75));
+ background: #0089ec;
+ color: #ffffff;
+}
+.picker__day--disabled,
+.picker__day--disabled:hover,
+.picker--focused .picker__day--disabled {
+ background: #f5f5f5;
+ border-color: #f5f5f5;
+ color: #dddddd;
+ cursor: default;
+}
+.picker__day--highlighted.picker__day--disabled,
+.picker__day--highlighted.picker__day--disabled:hover {
+ background: #bbbbbb;
+}
+/**
+ * The footer containing the "today", "clear", and "close" buttons.
+ */
+.picker__footer {
+ text-align: center;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+.picker__button--today,
+.picker__button--clear,
+.picker__button--close {
+ border: 1px solid #ffffff;
+ background: #ffffff;
+ font-size: .8em;
+ padding: .66em 0;
+ font-weight: bold;
+ width: 33%;
+ display: inline-block;
+ vertical-align: bottom;
+}
+.picker__button--today:hover,
+.picker__button--clear:hover,
+.picker__button--close:hover {
+ cursor: pointer;
+ color: #000000;
+ background: #b1dcfb;
+ border-bottom-color: #b1dcfb;
+}
+.picker__button--today:focus,
+.picker__button--clear:focus,
+.picker__button--close:focus {
+ background: #b1dcfb;
+ border-color: $datepicker-focus;
+ outline: none;
+}
+.picker__button--today:before,
+.picker__button--clear:before,
+.picker__button--close:before {
+ position: relative;
+ display: inline-block;
+ height: 0;
+}
+.picker__button--today:before,
+.picker__button--clear:before {
+ content: " ";
+ margin-right: .45em;
+}
+.picker__button--today:before {
+ top: -0.05em;
+ width: 0;
+ border-top: 0.66em solid #0059bc;
+ border-left: .66em solid transparent;
+}
+.picker__button--clear:before {
+ top: -0.25em;
+ width: .66em;
+ border-top: 3px solid #ee2200;
+}
+.picker__button--close:before {
+ content: "\D7";
+ top: -0.1em;
+ vertical-align: top;
+ font-size: 1.1em;
+ margin-right: .35em;
+ color: #777777;
+}
+.picker__button--today[disabled],
+.picker__button--today[disabled]:hover {
+ background: #f5f5f5;
+ border-color: #f5f5f5;
+ color: #dddddd;
+ cursor: default;
+}
+.picker__button--today[disabled]:before {
+ border-top-color: #aaaaaa;
+}
+
+/* ==========================================================================
+ CUSTOM MATERIALIZE STYLES
+ ========================================================================== */
+.picker__box {
+ border-radius: 2px;
+ overflow: hidden;
+}
+
+.picker__date-display {
+ text-align: center;
+ background-color: $datepicker-date-bg;
+ color: #fff;
+ padding-bottom: 15px;
+ font-weight: 300;
+}
+
+.picker__nav--prev:hover,
+.picker__nav--next:hover {
+ cursor: pointer;
+ color: #000000;
+ background: $datepicker-selected-outfocus;
+}
+
+.picker__weekday-display {
+ background-color: $datepicker-weekday-bg;
+ padding: 10px;
+ font-weight: 200;
+ letter-spacing: .5;
+ font-size: 1rem;
+ margin-bottom: 15px;
+}
+
+.picker__month-display {
+ text-transform: uppercase;
+ font-size: 2rem;
+}
+.picker__day-display {
+
+ font-size: 4.5rem;
+ font-weight: 400;
+}
+.picker__year-display {
+ font-size: 1.8rem;
+ color: $datepicker-year;
+}
+
+.picker__box {
+ padding: 0;
+}
+.picker__calendar-container {
+ padding: 0 1rem;
+
+ thead {
+ border: none;
+ }
+}
+
+// Calendar
+.picker__table {
+ margin-top: 0;
+ margin-bottom: .5em;
+}
+
+.picker__day--infocus {
+ color: #595959;
+ letter-spacing: -.3;
+ padding: .75rem 0;
+ font-weight: 400;
+ border: 1px solid transparent;
+}
+
+//Today style
+.picker__day.picker__day--today {
+ color: $datepicker-selected;
+}
+
+.picker__day.picker__day--today.picker__day--selected {
+ color: #fff;
+}
+
+// Table Header
+.picker__weekday {
+ font-size: .9rem;
+}
+
+
+.picker__day--selected,
+.picker__day--selected:hover,
+.picker--focused .picker__day--selected {
+ // Circle background
+ border-radius: 50%;
+ @include transform(scale(.9));
+ background-color: $datepicker-selected;
+ &.picker__day--outfocus {
+ background-color: $datepicker-selected-outfocus;
+ }
+ color: #ffffff;
+}
+
+.picker__footer {
+ text-align: right;
+ padding: 5px 10px;
+}
+
+// Materialize modified
+.picker__close, .picker__today {
+ font-size: 1.1rem;
+ padding: 0 1rem;
+ color: $datepicker-selected;
+}
+
+//month nav buttons
+.picker__nav--prev:before,
+.picker__nav--next:before {
+ content: " ";
+ border-top: .5em solid transparent;
+ border-bottom: .5em solid transparent;
+ border-right: 0.75em solid #676767;
+ width: 0;
+ height: 0;
+ display: block;
+ margin: 0 auto;
+}
+.picker__nav--next:before {
+ border-right: 0;
+ border-left: 0.75em solid #676767;
+}
+button.picker__today:focus, button.picker__clear:focus, button.picker__close:focus {
+ background-color: $datepicker-selected-outfocus;
+}
diff --git a/system/admin/static/editor/sass/components/date_picker/_default.scss b/system/admin/static/editor/sass/components/date_picker/_default.scss
new file mode 100644
index 0000000..d96395f
--- /dev/null
+++ b/system/admin/static/editor/sass/components/date_picker/_default.scss
@@ -0,0 +1,201 @@
+/* ==========================================================================
+ $BASE-PICKER
+ ========================================================================== */
+/**
+ * Note: the root picker element should *NOT* be styled more than what's here.
+ */
+.picker {
+ font-size: 16px;
+ text-align: left;
+ line-height: 1.2;
+ color: #000000;
+ position: absolute;
+ z-index: 10000;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+/**
+ * The picker input element.
+ */
+.picker__input {
+ cursor: default;
+}
+/**
+ * When the picker is opened, the input element is "activated".
+ */
+.picker__input.picker__input--active {
+ border-color: #0089ec;
+}
+/**
+ * The holder is the only "scrollable" top-level container element.
+ */
+.picker__holder {
+ width: 100%;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+/*!
+ * Default mobile-first, responsive styling for pickadate.js
+ * Demo: http://amsul.github.io/pickadate.js
+ */
+/**
+ * Note: the root picker element should *NOT* be styled more than what's here.
+ */
+/**
+ * Make the holder and frame fullscreen.
+ */
+.picker__holder,
+.picker__frame {
+ bottom: 0;
+ left: 0;
+ right: 0;
+ top: 100%;
+}
+/**
+ * The holder should overlay the entire screen.
+ */
+.picker__holder {
+ position: fixed;
+ -webkit-transition: background 0.15s ease-out, top 0s 0.15s;
+ -moz-transition: background 0.15s ease-out, top 0s 0.15s;
+ transition: background 0.15s ease-out, top 0s 0.15s;
+ -webkit-backface-visibility: hidden;
+}
+/**
+ * The frame that bounds the box contents of the picker.
+ */
+.picker__frame {
+ position: absolute;
+ margin: 0 auto;
+ min-width: 256px;
+
+// picker width
+ width: 300px;
+ max-height: 350px;
+
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ -moz-opacity: 0;
+ opacity: 0;
+ -webkit-transition: all 0.15s ease-out;
+ -moz-transition: all 0.15s ease-out;
+ transition: all 0.15s ease-out;
+}
+@media (min-height: 28.875em) {
+ .picker__frame {
+ overflow: visible;
+ top: auto;
+ bottom: -100%;
+ max-height: 80%;
+ }
+}
+@media (min-height: 40.125em) {
+ .picker__frame {
+ margin-bottom: 7.5%;
+ }
+}
+/**
+ * The wrapper sets the stage to vertically align the box contents.
+ */
+.picker__wrap {
+ display: table;
+ width: 100%;
+ height: 100%;
+}
+@media (min-height: 28.875em) {
+ .picker__wrap {
+ display: block;
+ }
+}
+/**
+ * The box contains all the picker contents.
+ */
+.picker__box {
+ background: #ffffff;
+ display: table-cell;
+ vertical-align: middle;
+}
+//@media (min-height: 26.5em) {
+// .picker__box {
+//// font-size: 1.25em;
+// }
+//}
+@media (min-height: 28.875em) {
+ .picker__box {
+ display: block;
+
+// picker header font-size
+// font-size: 1rem;
+
+ border: 1px solid #777777;
+ border-top-color: #898989;
+ border-bottom-width: 0;
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+ -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);
+ -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);
+ box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);
+ }
+}
+//@media (min-height: 40.125em) {
+// .picker__box {
+// font-size: 1.1rem;
+// border-bottom-width: 1px;
+// -webkit-border-radius: 5px;
+// -moz-border-radius: 5px;
+// border-radius: 5px;
+// }
+//}
+/**
+ * When the picker opens...
+ */
+.picker--opened .picker__holder {
+ top: 0;
+ background: transparent;
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)";
+ zoom: 1;
+ background: rgba(0, 0, 0, 0.32);
+ -webkit-transition: background 0.15s ease-out;
+ -moz-transition: background 0.15s ease-out;
+ transition: background 0.15s ease-out;
+}
+.picker--opened .picker__frame {
+ top: 0;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ filter: alpha(opacity=100);
+ -moz-opacity: 1;
+ opacity: 1;
+}
+@media (min-height: 35.875em) {
+ .picker--opened .picker__frame {
+ top: 10%;
+ bottom: 20%auto;
+ }
+}
+/**
+ * For `large` screens, transform into an inline picker.
+ */
+
+/* ==========================================================================
+ CUSTOM MATERIALIZE STYLES
+ ========================================================================== */
+
+.picker__input.picker__input--active {
+ border-color: color("blue", "lighten-5");
+}
+
+.picker__frame {
+ margin: 0 auto;
+ max-width: 325px;
+}
+
+@media (min-height: 38.875em) {
+ .picker--opened .picker__frame {
+ top: 10%;
+ bottom: auto;
+ }
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/components/date_picker/_default.time.scss b/system/admin/static/editor/sass/components/date_picker/_default.time.scss
new file mode 100644
index 0000000..0b159c8
--- /dev/null
+++ b/system/admin/static/editor/sass/components/date_picker/_default.time.scss
@@ -0,0 +1,125 @@
+/* ==========================================================================
+ $BASE-TIME-PICKER
+ ========================================================================== */
+/**
+ * The list of times.
+ */
+.picker__list {
+ list-style: none;
+ padding: 0.75em 0 4.2em;
+ margin: 0;
+}
+/**
+ * The times on the clock.
+ */
+.picker__list-item {
+ border-bottom: 1px solid #dddddd;
+ border-top: 1px solid #dddddd;
+ margin-bottom: -1px;
+ position: relative;
+ background: #ffffff;
+ padding: .75em 1.25em;
+}
+@media (min-height: 46.75em) {
+ .picker__list-item {
+ padding: .5em 1em;
+ }
+}
+/* Hovered time */
+.picker__list-item:hover {
+ cursor: pointer;
+ color: #000000;
+ background: #b1dcfb;
+ border-color: #0089ec;
+ z-index: 10;
+}
+/* Highlighted and hovered/focused time */
+.picker__list-item--highlighted {
+ border-color: #0089ec;
+ z-index: 10;
+}
+.picker__list-item--highlighted:hover,
+.picker--focused .picker__list-item--highlighted {
+ cursor: pointer;
+ color: #000000;
+ background: #b1dcfb;
+}
+/* Selected and hovered/focused time */
+.picker__list-item--selected,
+.picker__list-item--selected:hover,
+.picker--focused .picker__list-item--selected {
+ background: #0089ec;
+ color: #ffffff;
+ z-index: 10;
+}
+/* Disabled time */
+.picker__list-item--disabled,
+.picker__list-item--disabled:hover,
+.picker--focused .picker__list-item--disabled {
+ background: #f5f5f5;
+ border-color: #f5f5f5;
+ color: #dddddd;
+ cursor: default;
+ border-color: #dddddd;
+ z-index: auto;
+}
+/**
+ * The clear button
+ */
+.picker--time .picker__button--clear {
+ display: block;
+ width: 80%;
+ margin: 1em auto 0;
+ padding: 1em 1.25em;
+ background: none;
+ border: 0;
+ font-weight: 500;
+ font-size: .67em;
+ text-align: center;
+ text-transform: uppercase;
+ color: #666;
+}
+.picker--time .picker__button--clear:hover,
+.picker--time .picker__button--clear:focus {
+ color: #000000;
+ background: #b1dcfb;
+ background: #ee2200;
+ border-color: #ee2200;
+ cursor: pointer;
+ color: #ffffff;
+ outline: none;
+}
+.picker--time .picker__button--clear:before {
+ top: -0.25em;
+ color: #666;
+ font-size: 1.25em;
+ font-weight: bold;
+}
+.picker--time .picker__button--clear:hover:before,
+.picker--time .picker__button--clear:focus:before {
+ color: #ffffff;
+}
+
+/* ==========================================================================
+ $DEFAULT-TIME-PICKER
+ ========================================================================== */
+/**
+ * The frame the bounds the time picker.
+ */
+.picker--time .picker__frame {
+ min-width: 256px;
+ max-width: 320px;
+}
+/**
+ * The picker box.
+ */
+.picker--time .picker__box {
+ font-size: 1em;
+ background: #f2f2f2;
+ padding: 0;
+}
+@media (min-height: 40.125em) {
+ .picker--time .picker__box {
+ margin-bottom: 5em;
+ }
+}
diff --git a/system/admin/static/editor/sass/materialNote.scss b/system/admin/static/editor/sass/materialNote.scss
new file mode 100644
index 0000000..5faca9e
--- /dev/null
+++ b/system/admin/static/editor/sass/materialNote.scss
@@ -0,0 +1,734 @@
+@import "components/color";
+@import "components/variables";
+
+/* variables
+=================================================================================*/
+$toolbarColor: color("grey", "lighten-2") !default;
+$toolbarTextColor: color("grey", "darken-3") !default;
+
+$borderColor: color("grey", "base") !default;
+
+$firstButtonColor: color("grey", "lighten-2") !default;
+$firstButtonHoverColor: color("grey", "base") !default;
+$secondButtonColor: color("blue", "darken-4") !default;
+$secondButtonHoverColor: color("blue", "base") !default;
+$thirdButtonColor: color("red", "darken-4") !default;
+$thirdButtonHoverColor: color("blue", "base") !default;
+
+$firstFocusColor: color("blue", "base") !default;
+$secondFocusColor: color("grey", "base") !default;
+
+$selectionColor: color("grey", "darken-1") !default;
+
+$helpBackgroundColor: color("grey", "lighten-2") !default;
+
+// base unit for table dimension picker
+$gridUnit: 26px;
+
+
+.editorDialogs .modal, .note-editor .modal {
+ background-color: lighten($toolbarColor, 100%);
+ color: $toolbarTextColor;
+ z-index: 1057 !important;
+ backface-visibility: hidden;
+
+ .input-field input:not([readonly]), .input-field input.datepicker {
+ border-color: $toolbarTextColor !important;
+ }
+ .input-field input:focus:not([readonly]), .input-field input.datepicker:focus, textarea.materialize-textarea:focus:not([readonly]) {
+ box-shadow: 0 1px 0 0 $firstFocusColor !important;
+ border-color: $firstFocusColor !important;
+ }
+ label, .input-field input:not([readonly]) + label, .input-field input.datepicker + label, .input-field .prefix, .note-editor + label {
+ color: $toolbarTextColor !important;
+ }
+ .input-field input:focus:not([readonly]) + label, .input-field input.datepicker:focus + label, .input-field .prefix.active, textarea.materialize-textarea:focus:not([readonly]) + label {
+ color: $firstFocusColor !important;
+ }
+
+ .btn {
+ background-color: $secondButtonColor;
+ color: lighten($toolbarTextColor, 100%) !important;
+ }
+ .btn:hover {
+ background-color: lighten($secondButtonColor, 10%) !important;
+ }
+
+ .btn.disabled {
+ background-color: darken($secondButtonColor, 15%) !important;
+ }
+
+ .modal-footer {
+ background-color: darken($toolbarColor, 10%);
+
+ .btnClose {
+ margin-right: 15px;
+ background-color: $thirdButtonColor;
+ }
+
+ .btnClose:hover {
+ background-color: lighten($thirdButtonColor, 10%) !important;
+ }
+ }
+
+ .canvasContainerEmpty {
+ border: solid 5px $firstFocusColor;
+ }
+}
+
+//scrollbars
+.note-editor .note-editable, .editorDialogs .modal-content, .note-editor .note-color-palette, .note-editor .note-codable, .modal.modal-fixed-footer .modal-content {
+ &::-webkit-scrollbar {
+ width: 17px !important;
+ }
+ &::-webkit-scrollbar-track {
+ background-color: $toolbarColor !important;
+ }
+ &::-webkit-scrollbar-thumb {
+ background-color: lighten($toolbarColor, 20%) !important;
+ }
+ &::-webkit-scrollbar-thumb:hover {
+ background-color: lighten($toolbarColor, 30%) !important;
+ }
+}
+
+.note-editor {
+ position: relative;
+ border: {
+ left: 1px solid $toolbarColor;
+ bottom: 1px solid $toolbarColor;
+ right: 1px solid $toolbarColor;
+ }
+
+ .img-circle {
+ border-radius: 50%;
+ }
+
+ .img-rounded {
+ border-radius: 5%;
+ }
+
+ .img-thumbnail {
+ border: solid 2px $toolbarColor;
+ height: 200px;
+ }
+
+ .img-bordered {
+ border: solid 5px $toolbarColor;
+ }
+
+ .btn:hover {
+ background-color: lighten($firstButtonColor, 10%) !important;
+ }
+
+ .btn.active {
+ background-color: $firstFocusColor;
+ }
+
+ .note-editable {
+ ul li {
+ list-style-type: square !important;
+ display: list-item;
+ list-style-position: inside;
+ }
+ }
+
+ .note-dialog {
+ & > div {
+ display: none
+ }
+ .form-group {
+ margin-right: 0;
+ margin-left: 0
+ }
+ .note-modal-form {
+ margin: 0
+ }
+ .note-image-dialog .note-dropzone {
+ min-height: 100px;
+ margin-bottom: 10px;
+ font-size: 30px;
+ line-height: 4;
+ color: lightgray;
+ text-align: center;
+ border: 4px dashed lightgray
+ }
+ }
+
+ .transparent {
+ opacity: 0;
+ }
+
+ .note-resizebar {
+ background-color: $toolbarColor;
+ width: 100%;
+ height: 13px;
+ cursor: ns-resize;
+ padding-top: 1px;
+
+ .note-icon-bar {
+ width: 20px;
+ margin: 2px auto;
+ border-top: 2px solid lighten($toolbarColor, 20%);
+ }
+ }
+
+ .note-toolbar {
+ position: relative;
+ color: $toolbarTextColor;
+ background-color: $toolbarColor;
+ margin: 0;
+ z-index: 1052;
+
+ ul {
+ padding: 0;
+ }
+
+ .btn.disabled, button.disabled {
+ display: none;
+ }
+
+ .dropdown {
+ cursor: pointer;
+ }
+
+ .note-current-fontname {
+ min-width: 134px;
+ display: inline-block;
+ text-align: left;
+ }
+ }
+
+ .note-handle {
+ .note-control-selection {
+ position: absolute;
+ display: none;
+ border: 2px solid $firstButtonColor;
+
+ .note-control-selection-bg {
+ width: 100%;
+ height: 100%;
+ z-index: 3;
+ background-color: transparentize($selectionColor, 0.7);
+ }
+
+ & > div {
+ position: absolute
+ }
+ .note-control-handle {
+ width: 7px;
+ height: 7px;
+ border: 1px solid black;
+ }
+ .note-control-holder {
+ width: 7px;
+ height: 7px;
+ border: 1px solid black;
+ }
+ .note-control-sizing {
+ width: 15px;
+ height: 15px;
+ background-color: $firstButtonColor;
+ z-index: 5;
+ cursor: se-resize;
+ }
+ .note-control-nw {
+ top: -5px;
+ left: -5px;
+ border-right: 0;
+ border-bottom: 0;
+ }
+ .note-control-ne {
+ top: -5px;
+ right: -5px;
+ border-bottom: 0;
+ border-left: none;
+ }
+ .note-control-sw {
+ bottom: -5px;
+ left: -5px;
+ border-top: 0;
+ border-right: 0;
+ }
+ .note-control-se {
+ right: -5px;
+ bottom: -5px;
+ }
+ .note-control-selection-info {
+ right: 0;
+ bottom: 0;
+ padding: 5px;
+ margin: 17px;
+ font-size: 15px;
+ color: $toolbarTextColor;
+ background-color: $firstButtonColor;
+ z-index: 5;
+ }
+ }
+ }
+}
+
+.note-dialog .note-help-dialog {
+ color: $toolbarColor;
+
+ h4 {
+ color: $toolbarTextColor;
+ }
+
+ thead {
+ background-color: $firstFocusColor;
+ }
+
+ tbody {
+ background-color: $helpBackgroundColor;
+ }
+}
+
+.note-editor, .popover {
+ .btn-group {
+ display: inline-block;
+ margin-right: 10px;
+ position: relative;
+
+ ul {
+ padding: 0;
+ }
+
+ .closeLeft {
+ padding-right: 0 !important;
+ margin-right: 0 !important;
+
+ i {
+ margin-right: 0 !important;
+ }
+ }
+
+ i.left {
+ margin-right: 5px;
+ }
+ }
+
+ .note-toolbar .btn {
+ border-radius: 0 !important;
+ box-shadow: none !important;
+ padding: 0 9px !important;
+ background-color: $firstButtonColor;
+ }
+
+ .btnSecond {
+ background-color: $secondButtonColor !important;
+ }
+
+ .btnThird {
+ background-color: $thirdButtonColor !important;
+ }
+
+ note-toolbar button, button, .note-toolbar .btn {
+ background-color: $firstButtonColor;
+ border: none;
+ height: 36px;
+ text-transform: uppercase;
+ color: $toolbarTextColor !important;
+ }
+
+ [type="checkbox"]:checked + label:before, [type="checkbox"]:checked + label:before {
+ border-right-color: $secondButtonColor !important;
+ border-bottom-color: $secondButtonColor !important;
+ }
+
+ .note-palette-title {
+ padding: 0 !important;
+ }
+
+ .colorName {
+ display: inline-block;
+ color: $toolbarTextColor;
+
+ @media #{$small-and-down} {
+ display: none;
+ }
+ }
+
+ .note-color-palette {
+ line-height: 10px;
+ border: solid 3px $toolbarColor;
+ padding: 0 !important;
+ overflow-x: scroll;
+ overflow-y: hidden;
+
+ .note-color-row {
+ padding: 0 !important;
+ min-width: 300px;
+ }
+
+ button.note-color-btn {
+ width: 20px;
+ height: 20px;
+ padding: 0;
+ margin: 0;
+ }
+
+ .note-color-btn:hover {
+ &:after {
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ content: "";
+ background-color: inherit;
+ margin-top: -15px;
+ margin-left: -15px;
+ }
+ }
+ }
+
+ .note-dimension-picker {
+ overflow: hidden;
+ }
+
+ .largeDropdown {
+ width: 290px;
+ }
+
+ .dropdown-menu {
+ z-index: 1033;
+
+ &.note-check {
+ min-width: 80px;
+ }
+
+ label {
+ color: $toolbarTextColor !important;
+ }
+ }
+
+ ul.dropdown-menu {
+ position: absolute;
+ top: 20px;
+ background-color: lighten($toolbarColor, 10%);
+ border: {
+ left: 3px solid $toolbarColor;
+ bottom: 3px solid $toolbarColor;
+ right: 3px solid $toolbarColor;
+ }
+
+ &#colors {
+ width: 342px;
+
+ .indicator {
+ width: 50%;
+ left: 0;
+ }
+ }
+
+ .colorTable {
+ padding: 3px 0;
+ }
+
+ .tabs {
+ background-color: $toolbarColor;
+
+ &:hover {
+ background-color: $toolbarColor;
+ }
+
+ .tab a, .tab a:hover {
+ color: $secondFocusColor;
+ }
+
+ .indicator {
+ background-color: $secondFocusColor;
+ }
+ }
+
+ li {
+ list-style-type: none;
+ padding: 0 !important;
+
+ div {
+ padding: 3px 15px;
+ cursor: pointer;
+ }
+ }
+ }
+}
+
+.note-popover .popover {
+ position: absolute;
+ max-width: none;
+ color: $toolbarTextColor;
+
+ .arrow {
+ width: 0;
+ height: 0;
+ border-style: solid;
+ border-width: 0 10px 10px 10px;
+ border-color: transparent transparent $firstButtonColor transparent;
+ }
+
+ .popover-content {
+ background-color: $firstButtonColor;
+
+ & > a {
+ margin-left: 12px;
+ }
+
+ a {
+ display: inline-block;
+ max-width: 200px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ vertical-align: middle
+ }
+
+ .arrow {
+ left: 20px
+ }
+
+ .btn-group {
+ display: inline-block;
+
+ .btn {
+ border-radius: 0 !important;
+ box-shadow: none !important;
+ padding: 0 9px !important;
+ background-color: $firstButtonColor;
+ color: $toolbarTextColor !important;
+ }
+ }
+ }
+}
+
+.note-popover .popover .popover-content .note-para .dropdown-menu, .note-toolbar .note-para .dropdown-menu {
+ min-width: 172px;
+ padding: 5px
+}
+.note-popover .popover .popover-content .note-para .dropdown-menu > div:first-child, .note-toolbar .note-para .dropdown-menu > div:first-child {
+ margin-right: 5px
+}
+
+
+
+
+
+
+
+// the following is unchanged from original summernote css
+.note-editor .note-dropzone {
+ position: absolute;
+ z-index: 100;
+ display: none;
+ color: #87cefa;
+ background-color: white;
+ border: 2px dashed #87cefa;
+ opacity: .95;
+ pointer-event: none
+}
+.note-editor .note-dropzone .note-dropzone-message {
+ display: table-cell;
+ font-size: 28px;
+ font-weight: bold;
+ text-align: center;
+ vertical-align: middle
+}
+.note-editor .note-dropzone.hover {
+ color: #098ddf;
+ border: 2px dashed #098ddf
+}
+.note-editor.dragover .note-dropzone {
+ display: table
+}
+
+.note-editor.fullscreen {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 2021;
+ width: 100%
+}
+.note-editor.fullscreen .note-editable {
+ background-color: white
+}
+.note-editor.fullscreen .note-resizebar {
+ display: none
+}
+.note-editor.codeview .note-editable {
+ display: none
+}
+.note-editor.codeview .note-codable {
+ display: block
+}
+.note-editor .note-statusbar {
+ background-color: #f5f5f5
+}
+.note-editor .note-editable[contenteditable=true]:empty:not(:focus):before {
+ color: #a9a9a9;
+ content: attr(data-placeholder)
+}
+.note-editor .note-editable {
+ padding: 10px;
+ overflow: auto;
+ outline: 0
+}
+.note-editor .note-editable[contenteditable="false"] {
+ background-color: #e5e5e5
+}
+.note-editor .note-codable {
+ display: none;
+ width: 100%;
+ padding: 10px;
+ margin-bottom: 0;
+ font-family: Menlo, Monaco, monospace, sans-serif;
+ font-size: 14px;
+ color: #ccc;
+ background-color: #222;
+ border: 0;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ box-shadow: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ box-sizing: border-box;
+ resize: none
+}
+.note-air-editor {
+ outline: 0
+}
+
+.note-popover .popover .popover-content,
+.note-toolbar {
+ padding: 0;
+ margin: 0
+}
+.note-popover .popover .popover-content > .btn-group,
+.note-toolbar > .btn-group {
+ margin-top: 0;
+ margin-right: 5px;
+ margin-left: 0
+}
+.note-popover .popover .popover-content .btn-group .note-table,
+.note-toolbar .btn-group .note-table {
+ min-width: 0;
+ padding: 5px
+}
+.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker,
+.note-toolbar .btn-group .note-table .note-dimension-picker {
+ font-size: 18px
+}
+.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,
+.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher {
+ position: absolute!important;
+ z-index: 3;
+ width: $gridUnit * 10;
+ height:$gridUnit * 10;
+ cursor: pointer
+}
+.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,
+.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted {
+ position: relative !important;
+ z-index: 1;
+ width: $gridUnit * 12;
+ height: $gridUnit * 5;
+ background-size: 26px 26px;
+ background-image:repeating-linear-gradient(0deg, #3b3b3b, #3b3b3b 4px, transparent 4px, transparent 26px),
+ repeating-linear-gradient(-90deg, transparent, transparent 4px, #fff 4px, #fff 26px);
+}
+.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,
+.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted {
+ position: absolute !important;
+ z-index: 2;
+ width: $gridUnit;
+ height: $gridUnit;
+ background-size: 26px 26px;
+ background-image:repeating-linear-gradient(0deg, #3b3b3b, #3b3b3b 4px, transparent 4px, transparent 26px),
+ repeating-linear-gradient(-90deg, transparent, transparent 4px, $firstFocusColor 4px, $firstFocusColor 26px);
+}
+
+.note-popover .popover .popover-content .note-style h1,
+.note-toolbar .note-style h1,
+.note-popover .popover .popover-content .note-style h2,
+.note-toolbar .note-style h2,
+.note-popover .popover .popover-content .note-style h3,
+.note-toolbar .note-style h3,
+.note-popover .popover .popover-content .note-style h4,
+.note-toolbar .note-style h4,
+.note-popover .popover .popover-content .note-style h5,
+.note-toolbar .note-style h5,
+.note-popover .popover .popover-content .note-style h6,
+.note-toolbar .note-style h6,
+.note-popover .popover .popover-content .note-style blockquote,
+.note-toolbar .note-style blockquote {
+ margin: 0
+}
+.note-popover .popover .popover-content .note-color .dropdown-toggle,
+.note-toolbar .note-color .dropdown-toggle {
+ width: 20px;
+ padding-left: 5px
+}
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group,
+.note-toolbar .note-color .dropdown-menu .btn-group {
+ margin: 0
+}
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group:first-child,
+.note-toolbar .note-color .dropdown-menu .btn-group:first-child {
+ margin: 0 5px
+}
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-palette-title,
+.note-toolbar .note-color .dropdown-menu .btn-group .note-palette-title {
+ margin: 2px 7px;
+ font-size: 12px;
+ text-align: center;
+ border-bottom: 1px solid #eee
+}
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset,
+.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset {
+ padding: 0 3px;
+ margin: 3px;
+ font-size: 11px;
+ cursor: pointer;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px
+}
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-row,
+.note-toolbar .note-color .dropdown-menu .btn-group .note-color-row {
+ height: 20px
+}
+.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset:hover,
+.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset:hover {
+ background: #eee
+}
+/*.note-popover .popover .popover-content .dropdown-menu,
+.note-toolbar .dropdown-menu {
+ min-width: 90px
+}*/
+.note-popover .popover .popover-content .dropdown-menu.right,
+.note-toolbar .dropdown-menu.right {
+ right: 0;
+ left: auto
+}
+.note-popover .popover .popover-content .dropdown-menu.right::before,
+.note-toolbar .dropdown-menu.right::before {
+ right: 9px;
+ left: auto!important
+}
+.note-popover .popover .popover-content .dropdown-menu.right::after,
+.note-toolbar .dropdown-menu.right::after {
+ right: 10px;
+ left: auto!important
+}
+.note-popover .popover .popover-content .dropdown-menu.note-check li a i,
+.note-toolbar .dropdown-menu.note-check li a i {
+ color: deepskyblue;
+ visibility: hidden
+}
+.note-popover .popover .popover-content .dropdown-menu.note-check li a.checked i,
+.note-toolbar .dropdown-menu.note-check li a.checked i {
+ visibility: visible
+}
+.note-popover .popover .popover-content .note-fontsize-10,
+.note-toolbar .note-fontsize-10 {
+ font-size: 10px
+} \ No newline at end of file
diff --git a/system/admin/static/editor/sass/materialize.scss b/system/admin/static/editor/sass/materialize.scss
new file mode 100644
index 0000000..4421631
--- /dev/null
+++ b/system/admin/static/editor/sass/materialize.scss
@@ -0,0 +1,38 @@
+@charset "UTF-8";
+
+// Mixins
+@import "components/prefixer";
+@import "components/mixins";
+@import "components/color";
+
+// Variables;
+@import "components/variables";
+
+// Reset
+@import "components/normalize";
+
+// components
+@import "components/global";
+@import "components/icons-material-design";
+@import "components/grid";
+@import "components/navbar";
+@import "components/roboto";
+@import "components/typography";
+@import "components/cards";
+@import "components/toast";
+@import "components/tabs";
+@import "components/tooltip";
+@import "components/buttons";
+@import "components/dropdown";
+@import "components/waves";
+@import "components/modal";
+@import "components/collapsible";
+@import "components/materialbox";
+@import "components/form";
+@import "components/table_of_contents";
+@import "components/sideNav";
+@import "components/preloader";
+@import "components/slider";
+@import "components/date_picker/default.scss";
+@import "components/date_picker/default.date.scss";
+@import "components/date_picker/default.time.scss"; \ No newline at end of file